基于gmap.net制作离线地图下载器
基于gmap.net制作离线地图下载器
网上已有大量文章介绍gamp.net和离线下载相关的文章了。我就不在介绍gmap相关的文章了,这里着重介绍一下下载相关原理。其实gmap.net本身已自带下载工能,只是离线图片下载到sqlit中,现将其扩展一下,支持多种方式存储。
1、gmap源码下载http://greatmaps.codeplex.com/
2、效果展示
3、实现原理
当我们下载源码后最主要关心是GMap.NET.Core下的GMap.NET.MapProviders和GMap.NET.Projections。mapproviders已经提供了许多地图驱动,但缺少国内的一些地图,网上也有大量介绍对接国内相关地图的文章。Projections是投影实现。
有了MapProviders和Projections之后下面就可以实现下载了。首先你可以在gmap中画一个下载区域,当然你也可以利用行政区域得到更精确的范围。根据区域能得到左上角和右下角的两个点。然后根据这两个点去计算要下载的瓦片。
代码如下:
GPoint topLeft = _provider.Projection.FromPixelToTileXY(_provider.Projection.FromLatLngToPixel(rect.LocationTopLeft, Convert.ToInt32(level))); GPoint rightBottom = _provider.Projection.FromPixelToTileXY(_provider.Projection.FromLatLngToPixel(rect.LocationRightBottom, Convert.ToInt32(level))); //_provider当前选择的mapProvider,rect为当前选择的区域,level为选择等级 //载循环获取瓦片: for (long x = (topLeft.X); x <= (rightBottom.X); x++) { for (long y = (topLeft.Y); y <= (rightBottom.Y); y++) { //这里实现下载: PureImage img = GMaps.Instance.GetImageFrom(_provider, new gpoint(x,y), level, out ex); //接下载就可以自行存储了。(可以存到文件夹啊数据库啊等等)Level/x_y.png } }
4、gmap使用离线地图(将瓦片发布在IIS中):
首先在MapProviders中的XXXProvider.CS代码最后面都能看到UrlFormat字段。替换你自己的路径即可。
例如我发布在IIS路径为 http://192.168.1.92:80/szmap/
那么将urlFormat的路径代替为
http://192.168.1.92:80/szmap/{z}/{x}_{y}.png
即可。
5、当然下载的瓦片也可以对接在openlayer和leaflet等开源的webgis中,
ps写文章真的好累,半天憋不出一个屁来。文章可能写的不够清楚,如有凝问可以与我联系。
还没学会上传附件,等学会了把代码上传上来。
WPF&winform版本地图引擎:
http://www.cnblogs.com/Noproblem/p/8480291.html
4、gmap使用离线地图(将瓦片发布在IIS中):
首先在MapProviders中的XXXProvider.CS代码最后面都能看到UrlFormat字段。替换你自己的路径即可。
例如我们发布在IIS路径为 http://192.168.1.92:80/szmap/,那么将urlFormat的路径代替为
http://192.168.1.92:80/szmap/{z}/{x}_{y}.png即可。
5、当然下载的瓦片也可以对接在openlayer和leaflet等开源的webgis中,
写文章真的好累,半天憋不出一个屁来。文章可能写的不够清楚,如有凝问可以与我联系。
还没学会上传附件,等学会了把代码上传上来。