深入理解最强桌面地图控件GMAP.NET ---高德地图
前一篇介绍了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
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。