高德地圖Windowphone API學習-地圖定位與地圖模式的切換


 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM