前一篇介绍了GMAP.NET的理论基础,这篇介绍如何集成高德地图。高德地图自从为IOS6提供地图后,目前已经被大众所熟知了。
在我集成国内地图的经验来看,也是最符合墨卡托投影法的。
前面的相关文章链接:
深入理解最强桌面地图控件GMAP.NET --- SOSO地图
如何在你的程序中使用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"; }
原文链接:http://www.cnblogs.com/enjoyeclipse/archive/2013/01/27/2859029.html