高德地圖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
