深入理解最強桌面地圖控件GMAP.NET ---高德地圖


前一篇介紹了GMAP.NET的理論基礎,這篇介紹如何集成高德地圖。高德地圖自從為IOS6提供地圖后,目前已經被大眾所熟知了。

在我集成國內地圖的經驗來看,也是最符合墨卡托投影法的。

前面的相關文章鏈接:

深入理解最強桌面地圖控件GMAP.NET --- 原理篇

深入理解最強桌面地圖控件GMAP.NET --- SOSO地圖

深入理解最強桌面地圖控件GMAP.NET --- 百度地圖

深入理解最強桌面地圖控件GMAP.NET --- 初用

深入理解最強桌面地圖控件GMAP.NET --- 初識

 

如何在你的程序中使用GMAP.NET 高德地圖

要使用以下代碼,建議看看初用篇,具體代碼如下所示。

this.MainMap.Position = new PointLatLng(double.Parse(ConfigurationManager.AppSettings["defaultLat"]),double.Parse(ConfigurationManager.AppSettings["defaultLng"]));

this.MainMap.MapProvider.Area = new RectLatLng(30.981178, 105.351914, 2.765142, 4.120995);
this.MainMap.BoundsOfMap = new RectLatLng(30.981178, 105.351914,  2.765142, 4.120995);
this.MainMap.Manager.Mode = AccessMode.CacheOnly;
this.MainMap.MapProvider = GMapProviders.AMapProvider;
this.MainMap.DragButton = MouseButton.Left;
this.MainMap.Zoom = 13;
this.MainMap.MinZoom = 8;
this.MainMap.MaxZoom = 24;

 

GMAP.NET 高德地圖的效果

普通地圖

衛星地圖

高德地圖加載原理

要理解如何加載高德地圖,也要理解下加載原理,我們用Chrome打開 http://www.amap.com/,隨便定位一個地址,打開開發者工具:

可以看到Tile的地址如下:http://webrd03.is.autonavi.com/appmaptile?x=1629&y=849&z=11&lang=zh_cn&size=1&scale=1&style=7

我們分析下Url鏈接參數:

http://webrd03.is.autonavi.com/appmaptile是固定的

&lang=zh_cn&size=1&scale=1&style=7也是固定的

x=1629是網格的橫坐標,y=849是網格的縱坐標,橫縱坐標的生成原理已經在原理篇有描述了,這里就不再贅述了。

z=11是當前的縮放級別。

所以高德地圖是相對簡單和規范的。

 

下面我們看看如何在GMAP.NET中實現高德地圖吧。

AMapProvider

同百度地圖的操作流程一樣,也采用下面的流程添加AMapProvider的支持。

1)添加abstract class AMapProviderBase

由於高德地圖也有普通地圖和衛星地圖,因此提供了一個有公共方法的抽象類,可以復用。

 public abstract class AMapProviderBase : GMapProvider
    {
        public AMapProviderBase()
        {
            MaxZoom = null;
            RefererUrl = "http://www.amap.com/";
            Copyright = string.Format("©{0} 高德 Corporation, ©{0} NAVTEQ, ©{0} Image courtesy of NASA", DateTime.Today.Year);    
        }

        public override PureProjection Projection
        {
            get { return MercatorProjection.Instance; }
        }

        GMapProvider[] overlays;
        public override GMapProvider[] Overlays
        {
            get
            {
                if (overlays == null)
                {
                    overlays = new GMapProvider[] { this };
                }
                return overlays;
            }
        }
    }

 

2).AMapProvider

主要是MakeTileImageUrl方法,就是根據搜索地圖加載原理來的:本質上就是要構造一個獲取圖片的url鏈接(如:http://webrd03.is.autonavi.com/appmaptile?x=1629&y=849&z=11&lang=zh_cn&size=1&scale=1&style=7)。

public class AMapProvider : AMapProviderBase
    {
        public static readonly AMapProvider Instance;
   
        readonly Guid id = new Guid("EF3DD303-3F74-4938-BF40-232D0595EE88");
        public override Guid Id
        {
            get { return id; }
        }

        readonly string name = "AMap";
        public override string Name
        {
            get
            {
                return name;
            }
        }

        static AMapProvider()
        {
            Instance = new AMapProvider();
        }

        public override PureImage GetTileImage(GPoint pos, int zoom)
        {
            string url = MakeTileImageUrl(pos, zoom, LanguageStr);

            return GetTileImageUsingHttp(url);
        }

        string MakeTileImageUrl(GPoint pos, int zoom, string language)
        {

            //http://webrd04.is.autonavi.com/appmaptile?x=5&y=2&z=3&lang=zh_cn&size=1&scale=1&style=7
            string url = string.Format(UrlFormat, pos.X, pos.Y, zoom);
            Console.WriteLine("url:" + url);
            return url;
        }

        static readonly string UrlFormat = "http://webrd04.is.autonavi.com/appmaptile?x={0}&y={1}&z={2}&lang=zh_cn&size=1&scale=1&style=7";
    }

 


免責聲明!

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



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