高德地图Windows Phone API 是一套简单的地图应用开发调用接口,可支持地图显示与操作,兴趣点搜索,地理编码与基站定位等功能;开发者可以轻松地将其嵌入自己的应用程序,并提供稳定的位置及地图应用程序。
高德地图API可以帮助我们实现以下功能
定位:包括GPS、WiFi、基站定位
地图:包括矢量和栅格地图显示,地图移动和缩放,地图标注添加和删除
地图工具:包括计算两点间距离,经纬度坐标转为屏幕坐标,屏幕坐标转为经纬度坐标
地图查询:包括关键字查询,坐标点周边关键字查询,关键字类型查询
路径规划:驾车导航、公交换乘
地理编码:包括地理编码和逆地理编码
我发现实例代码中这些功能都以实现,方便我们学习呀。嘻嘻
开发包 +实例代码+API文档下载地址:http://code.autonavi.com/WP/download
我学习了地图定位和地图模式的切换
高德地图地图模式的有:ChangeBaseLayer2SatelliteMap卫星图;ChangeSatelliteMap2RoadMap地图;
实例-----实现定位和地图模式的切换----------------------------
首先在项目添加:AMap.WP7.Search.API.dll和AMap.WP7.Map.API.dll的引用
在高德地图API中提供了纠偏方法 MRGCSearch.GPSToOffset 方法 从而方便我们解决定位不准确的问题
public static void GPSToOffset( double[] poisX, double[] poisY, Action<MRGCSearchResult> action )
参数 poisX 类型:array<System..::..Double>[]()[][] 经度数组 poisY 类型:array<System..::..Double>[]()[][] 纬度数组 action 类型:System..::..Action<(Of <(<'MRGCSearchResult>)>)> 回调函数
在MainPage的Xmal文件中添加
xmlns:AbcMap="clr-namespace:Com.AMap.Maps.Api;assembly=AMap.WP7.Map.API"
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <AbcMap:MMap Zoom="10" MapLoaded="mymap_MapLoaded" Name="mymap" ZoomEnabled="True" ToolBar="Visible" /> </Grid>
<phone:PhoneApplicationPage.ApplicationBar> <shell:ApplicationBar Opacity="0.4" Mode="Minimized" > <shell:ApplicationBar.MenuItems> <shell:ApplicationBarMenuItem Text="cai"> </shell:ApplicationBarMenuItem> </shell:ApplicationBar.MenuItems> <shell:ApplicationBarIconButton x:Name="AppLocationBtn" IconUri="/icons/Location.png" Click="AppLocationBtn_Click" Text="定位"/> <shell:ApplicationBarIconButton x:Name="MapModeBtn" IconUri="/icons/Mode.png" Click="MapModeBtn_Click" Text="视图"/> </shell:ApplicationBar> </phone:PhoneApplicationPage.ApplicationBar>
MainPage.cs代码
int mapmode = 0; /// <summary> /// 默认点击点坐标 /// </summary> double x = 116.324735831984; double y = 39.9081397215191; public MainPage() { InitializeComponent(); StartGeoCoordinateWatcher(); } //中心标记 MMarker centerMarker; MCircle centerCircle; /// <summary> /// 根据经纬定位 /// </summary> private void StartGeoCoordinateWatcher() { GeoCoordinateWatcher gwatcher = new GeoCoordinateWatcher(GeoPositionAccuracy.Default); gwatcher.PositionChanged += (sender, e) => { x = e.Position.Location.Latitude;//纬度 y = e.Position.Location.Longitude;//经度 //将真实坐标转偏移坐标 MRGCSearch.GPSToOffset(new double[] { e.Position.Location.Longitude }, new double[] { e.Position.Location.Latitude }, (mr) => { if (mr.Erro==null) { if (centerMarker == null) { mymap.Children.Add(centerMarker = new MMarker() { LngLat = mr.RGCItemList[0], IconURL = "/Images/location_on.png", Anchor = new Point(0.5, 0.5), }); mymap.Children.Add(centerCircle = new MCircle() { }); //设置圆的中心点和半径 半径单位为米 //RGCItemList坐标偏移查询结果类 centerCircle.SetCenterAndRadius(mr.RGCItemList[0], 200); } else { centerMarker.LngLat = mr.RGCItemList[0]; centerCircle.SetCenterAndRadius(mr.RGCItemList[0], 200); } mymap.Center = mr.RGCItemList[0]; } }); }; gwatcher.Start(); }
private void AppLocationBtn_Click(object sender, EventArgs e) { mymap.Zoom = 13; StartGeoCoordinateWatcher(); ReGeoCodeToAddressWithOption(); } /// <summary> /// 地图 /// </summary> private void ChangeSatelliteMap2RoadMap() { mymap.ChangeSatelliteMap2RoadMap(); } /// <summary> /// 卫星图 /// </summary> private void ChangeBaseLayer2SatelliteMap() { mymap.ChangeBaseLayer2SatelliteMap(); } /// <summary> /// 显示交通道路 /// </summary> private void TrafficMap() { MTileLayer trafficlayer = new MTileLayer(MTileLayerType.Traffic); mymap.AddLayer(trafficlayer); } /// <summary> ///地图模式 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void MapModeBtn_Click(object sender, EventArgs e) { if (mapmode == 0) { ChangeSatelliteMap2RoadMap();////切换成地图 mapmode = 1; return; } else if (mapmode == 1) { ChangeBaseLayer2SatelliteMap();////卫星图 mapmode = 2; return; } else { TrafficMap(); mapmode = 0; return; } } private void mymap_MapLoaded(object sender, Com.AMap.Maps.Api.Events.MapEventArgs e) { mymap.ZoomEnded += new EventHandler<Com.AMap.Maps.Api.Events.MapEventArgs>(mymap_ZoomEnded); } void mymap_ZoomEnded(object sender, Com.AMap.Maps.Api.Events.MapEventArgs e) { if (mymap.Zoom >= 13) { centerCircle.Visibility = System.Windows.Visibility.Visible; } else { centerCircle.Visibility = Visibility.Collapsed; } }
运行成功:
实例代码下载 : http://vdisk.weibo.com/s/ayEqj