高德地图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;

            }

        }

运行成功:高德地图Windowphone API学习-地图定位与地图模式的切换 

实例代码下载 : http://vdisk.weibo.com/s/ayEqj

你可能感兴趣的:(window)