以上是两个msdn上关于bing map使用的介绍。前一个是手机端的api,后者是silverlight的。手机端的和网页silverlight使用方式基本上一致,只是有几个地方不太一样。使用的时候需要注意下。
下面简单概括一下:
要在界面里插入上图一样的地图元素,只需要在.xaml 中插入一个map控件:
<Grid x:Name="GridMap" Grid.Row="1" Margin="12,0,12,0">
<m:Map Name="UserGeoMap" CredentialsProvider="your credentials" ZoomBarVisibility="Visible" /> </Grid>在此之前,你需要登录 注册一个bing map key , 替换上文中的"your credentials".
xaml的命名空间也要稍加修改:
<phone:PhoneApplicationPage
x:Class="IMove.Transportation_Pages.MyGeoMap" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}" SupportedOrientations="Portrait" Orientation="Portrait" mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480" shell:SystemTray.IsVisible="True"xmlns:m="clr-namespace:Microsoft.Phone.Controls.Maps;assembly=Microsoft.Phone.Controls.Maps" xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit">并且导入两个库就可以了:
其他操作,例如如何放大、缩小,如何切换卫星图层,都在第一个链接中有提到。
如果想在地图上根据gps坐标划一条路径怎么办呢? 那么就在.cs文件中加入一个画路径的函数吧。
MapPolyline 指在map上的折线,只要指定每个点的坐标,就可以把这条折线画到地图上。
private void DrawRoutes() { Color routeColor = Colors.Blue; SolidColorBrush routeBrush = new SolidColorBrush(routeColor); MapPolyline routeLine = new MapPolyline(); routeLine.Locations = new LocationCollection(); routeLine.Stroke = routeBrush; routeLine.Opacity = 0.65; routeLine.StrokeThickness = 5.0; Listcoors = new List (); // LocationInfoUnit 就是包含 Latitude 和 Longitude的简单的类 for(int i=0;i<4;i++) { coors.Add(new LocationInfoUnit(39.9780032923817+i*0.01, 116.303654518087)); } foreach (var p in coors) { routeLine.Locations.Add(new System.Device.Location.GeoCoordinate(p.Latitude, p.Longitude)); } UserGeoMap.Children.Clear(); MapLayer myRouteLayer = new MapLayer(); UserGeoMap.Children.Add(myRouteLayer); myRouteLayer.Children.Add(routeLine); LocationRect rect = new LocationRect(routeLine.Locations[0], 0.05, 0.05); UserGeoMap.SetView(rect); }