【Silverlight】Bing Maps学习系列(四):使用图钉层(Pushpin layer)及地图图层(MapLayer)

简介:
 如果我们需要在Bing Maps中加入一个小图钉标记,该如何实现了?Bing Maps控件已经为我们提供了这个功能,在Microsoft.Maps.MapControl名称空间下提供了实现图钉应用的图钉层Pushpin类,比如我们可以通过如下的方式来定位一个图订层在地图上的位置:
代码
1  double longitude = double.Parse("47.620574" );
2
  double latitude = double.Parse("-122.34942" );
3
 
4  Pushpin pushpin = new  Pushpin();
5
  pushpin.Location = new Location(latitude, longitude);
 
  从上可以看书,实现定位还是使用的上一篇文章中介绍的Location类。呵呵,多记一遍~~~~那如何加入在地图中了,其实很简单的,Bing Maps地图控件直接提供了图钉层,通过内嵌的方式既可加入图订层,默认使用Bing Maps提供的图形标记。
代码
1  <m:Map CredentialsProvider="AkzZURoD0H2Sle6Nq_DE7pm7F3xOc8S3CjDTGNWkz1EFlJJkcwDKT1KcNcmYVINU" x:Name="map"  
2
         Center="33.845881352,105.165628188471" ZoomLevel="6.0">
3      <m:Pushpin Location="33.845881352,105.165628188471"></m:Pushpin>
4  </m:Map>
 
  不错,要在地图上加上一个图钉层就是这么简单,并直接定位于 33.845881352,105.165628188471这个坐标之上,知道这个坐标是那里吗?他就在俺们“China”上,不行你可以看看下面的截图:
             
 
  通过上述我们成功的添加上了一个小图钉层在地图上,除了添加图钉外,我们还可以自定义添加图形、图片、视频等在地图上,要实现添加图形、图片或视频等数据到地图上,需要使用Bing Maps为我们提供的地图图层(MapLayer)来实现,如下:
代码
1  <m:Map CredentialsProvider="AkzZURoD0H2Sle6Nq_DE7pm7F3xOc8S3CjDTGNWkz1EFlJJkcwDKT1KcNcmYVINU" x:Name="map"  
2
         Center="33.845881352,105.165628188471" ZoomLevel="6.0">
3      <m:Pushpin Location="33.845881352,105.165628188471" x:Name="mayPushpin"></m:Pushpin>
4      <m:MapLayer x:Name="myMapLayer"></m:MapLayer>
5  </m:Map>
  
  如上在地图中加入了一空白地图图层,接下来就可以使用程序动态在地图图层上添加自己想加的东西了,比如上面我们已经定位到了中国地图区域,接下来我们将中国国旗插上地图可以吗?答案是肯定的,如何做?
代码
 1  private void btnAddPushpin_Click(object sender, RoutedEventArgs e)
 2
  {
 3
      double longitude = double.Parse(this.tbLongitude2.Text.Trim());
 4
      double latitude = double.Parse(this.tbLatitude2.Text.Trim());
 5
 
 6      Location location = new Location(latitude, longitude);
 7
 
 8      Image image = new Image();
 9
      image.Source = new BitmapImage(new Uri("http://localhost:2986/Images/China.jpg", UriKind.RelativeOrAbsolute));
10
      image.Stretch = Stretch.None;
11
      image.ImageFailed += delegate(object senders, ExceptionRoutedEventArgs ex)
12
      { };
13
      PositionOrigin position = new PositionOrigin(1.0, 1.0);
14
 
15      this.myMapLayer.AddChild(image, location, position);
16
  }
 
  同样通过Location进行坐标的精度和纬度定位,通过将制定的图片序列为Image对象作为一个可显示的对象添加到地图图层就OK了。效果如下:
           
 
  OK,成功的在地图上插上了中国国旗!~~~~~Silverlight完整代码如下:
代码
 1  <UserControl x:Class="PushpinLayer.MainPage"
 2      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
 3
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4      xmlns:m="clr-namespace:Microsoft.Maps.MapControl;assembly=Microsoft.Maps.MapControl"
 5      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"  
 6
      mc:Ignorable="d" d:DesignWidth="500" d:DesignHeight="500">
 7    <Grid x:Name="LayoutRoot" Width="500" Height="500">
 8          <m:Map CredentialsProvider="AkzZURoD0H2Sle6Nq_DE7pm7F3xOc8S3CjDTGNWkz1EFlJJkcwDKT1KcNcmYVINU" x:Name="map"  
 9
                 Center="33.845881352,105.165628188471" ZoomLevel="6.0">
10              <m:Pushpin Location="33.845881352,105.165628188471" x:Name="mayPushpin"></m:Pushpin>
11              <m:MapLayer x:Name="myMapLayer"></m:MapLayer>
12          </m:Map>
13          <StackPanel HorizontalAlignment="Left" VerticalAlignment="Bottom" Width="180" Height="200" Background="Gray">
14              <TextBlock Text="精度:"></TextBlock>
15              <TextBox x:Name="tbLongitude"></TextBox>
16              <TextBlock Text="纬度:"></TextBlock>
17              <TextBox x:Name="tbLatitude"></TextBox>
18              <TextBlock Text=" "></TextBlock>
19              <TextBlock Text="精度:"></TextBlock>
20              <TextBox x:Name="tbLongitude2"></TextBox>
21              <TextBlock Text="纬度:"></TextBlock>
22              <TextBox x:Name="tbLatitude2"></TextBox>
23              <Button x:Name="btnAddPushpin" Click="btnAddPushpin_Click" Content="添加五星红旗"></Button>
24          </StackPanel>
25    </Grid>
26  </UserControl>
27 
 
 
  本篇暂介绍到这里,希望提到抛砖引玉的效果,更详细的内容大家可参考官方提供的开发Silverlight和Bing Maps的朋友前来讨论~~~




本文转自 beniao 51CTO博客,原文链接:http://blog.51cto.com/beniao/265687,如需转载请自行联系原作者

目录
相关文章
|
API 定位技术
ArcGIS API for Silverlight 地图加载进度条类之MapProgressBar
ESRI之MapProgressBar类的API函数地址如下链接,具体属性和方法,请参考: http://help.
1111 0
|
前端开发 API 定位技术
ArcGIS API for Silverlight 鼠标移入移出地图要素弹出窗口(优化处理)
     在之前博客里的ArcGIS API for Silverlight 弹出框实例中,是通过点击地图要素,弹出框,但是由于没有控制元素个数,只是通过显示隐藏来进行的话,在鼠标移入和移出操作中,会出现鼠标移入的时候,总不能立刻弹出框,而是需要多次才行,用户体验较差,现在通过控制加入一个弹出框,移出时去除刚加入的弹出框,严格控制弹出框个数来实现。
1094 0
|
监控 前端开发 API
ArcGIS API for Silverlight 点击地图弹出自定义窗体
在之前的博客中,关于弹出窗体,样式比较单一,不能满足自定义各种样式,源连接地址:http://blog.
623 0
|
API 定位技术 图形学
ArcGIS API for Silverlight 地图中解决点众多的簇解决方法
1、通用类 #region 多点的簇显示 public class SumClusterer : GraphicsClusterer { public...
818 0
|
前端开发 定位技术 数据库
Silverlight Map 矢量地图构建过程分析
本文主要结合SQLSERVER2008的空间数据库的一些特性,讲解Silverlight在矢量地图绘制方面的一些技术点。服务器端负责提供数据服务,客户端负责图形的绘制,当然这个过程会遇到性能瓶颈,但本文的重点在于地图数据模型的转化过程,以及Silverlight的数据绑定与数据模型间的关系的理解。
894 0