zoukankan      html  css  js  c++  java
  • 高德地图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

  • 相关阅读:
    cxGrid 锁定列
    精选网站
    Delphi XE10 dxLayoutControl 控件应用指南
    合并当前工作簿下的所有工作表
    【集中工作薄】 当前文件夹中所有Excel文件中 多个工作簿的第一个工作表 复制到工作簿中
    CxGrid如何实现导出Excel 功能
    Google Material Design的图标字体使用教程
    Mui沉浸模式以及状态栏颜色改变
    移动端弹性效果
    JS中的“!!”
  • 原文地址:https://www.cnblogs.com/fxiaoquan/p/2639462.html
Copyright © 2011-2022 走看看