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

posted @ 2012-08-15 09:10  MicroLeo  阅读(4843)  评论(1编辑  收藏  举报