C#版谷歌地图下载器设计与实现

关于如何将地球经纬度坐标系统转换成程序中常用到的平面2D坐标系统,网上的文章很多,参考http://www.cnblogs.com/beniao/archive/2010/04/18/1714544.html(本文图1 图3来自此处).谷歌地图采用的投影方式为“墨卡托投影法”(维基百科网址http://en.wikipedia.org/wiki/Mercator_projection),大概意思就是将地球放在一个圆柱中,让地球赤道和圆柱壁相接触,在地球中心放一盏灯,地球上的图像在圆柱壁上会产生阴影,然后将圆柱壁展开,得到的一张“长方形地图”即为转换之后的平面2D地图,描述很简单,实际展开后的地图还进行了其他处理。

图1

可以想象到,地球上的经度经过灯光的照射之后,在圆柱壁上生成的阴影应该是均匀分步的,而纬度就不一样了,纬度经过灯光照射之后,离赤道越近的分布越密,离赤道越远的分步越稀,到了地球两极(南极和北极),就会趋向无穷稀,因此谷歌地图并没有包含地球两极的区域(北边到北纬85度,南边到南纬85度,大概)。

谷歌地图包含的地球范围为 经度:0度~东经180,0度~西经180(共360度),纬度:0度~北纬85,0度~南纬85(共170度)。注:以上0经度表示通过英国的本初子午线,0纬度指赤道。转换成平面2D图之后,原点(0,0)在左上方(跟程序中一致),用像素作为单位,这样一来,地球上任何一个点(经度,纬度)都能转换成平面2D坐标系统中的一个点(x,y),转换算法已经提供了,直接可以拿来使用。前面说到,经度和纬度在圆柱壁上的阴影分步密度不同,纬度远离赤道分步越稀,因此,虽然经度范围为360度(-180~180,西经为负,东经为正,自西往东,经度越来越大),远远大于纬度170度(-85~85,南纬为负,北纬为正),但是映射到圆柱壁之后生成的图片的长宽却是相等的(这个也有后期经过处理的原因),实质上,谷歌地图的长宽确实是相同的。

由于平面地图是可以放大缩小的,因此地图不可能使用同一张图,这样放大后就会失真,谷歌地图的做法就是给地图预先定义缩放等级(0级~22级,常用的0~17),每一个缩放级别均对应许许多多的小方块图片(称为瓦片),这些小方块都是256*256像素,然后将这些瓦片拼接起来生成一张大的清晰的地图。谷歌地图的缩放级别与瓦片数目有一个对应关系:瓦片数目=2的n次方*2的n次方(n为缩放级别)。也就是说,当缩放级别为0时,整个世界地图只1*1张256*256的图,当缩放级别为1,整个世界地图包含2*2张256*256大小的图,当缩放级别为2,整个世界地图包含4*4张256*256大小的图。下图为缩放级别为0时,坐标对应关系:

图2

当缩放级别改变时,整个世界地图组成变化如下图:

图3

谷歌地图背景显示原理就是将每个缩放级别下的瓦片下载下来,然后拼接在一起,如果我们知道了下载瓦片的方法,那么我们也能模拟一个类似谷歌地图的显示界面。下面提供的一个demo演示了如何根据你提供的两个经纬度点(左上角,右下角),以及缩放级别,下载这两点包含区域的瓦片,最后拼接起来。

demo不做过多说明,代码中注释很详细,注意一下几点:

  • 谷歌地图提供API,通过http请求,给出瓦片的列、行以及缩放级别,就可以下载对应的瓦片,

国内地址:http://mt0.google.cn/vt/[email protected]&hl=zh-CN&gl=CN&src=app&x=0&y=0&z=0

国外地址:http://mts0.googleapis.com/vt?lyrs=m&x=0&y=0&z=0

其中,地址前面的mt0可以是mt1、mt2、mt3,分别为不同服务器,对应的,mts0可以为mts1、mts2、mts3。x、y、z分别表示瓦片的列号、行号以及缩放级别。

lyrs表示地图类型:

m:路线图

t:地形图

p:带标签的地形图

s:卫星图

y:带标签的卫星图

  • demo中填写的左上角和右下角点的经纬度范围分别为(-180~180)和(-85~85),而且左上角点的经度一定要小于右下角的经度,左上角的纬度一定要大于右下角的纬度,至于为什么,原因就是必须能通过这两点确定一个区域。demo程序中未作判断。
  • 不要选择区域过大,或者缩放级别过大,因为包含的要下载瓦片太多,程序没做任何性能优化,可能出现bug。线程不宜太多,太多反而速度慢。如果下载图片有失败的,可以重新下载几次,可以完善一下,比如只下载上次失败的图片。
  • demo针对google map,其他地图类似。本人公司实际项目中用到了从谷歌地图中下载下来的这些瓦片,模仿谷歌地图显示原理做了一个地图显示模块。

效果图:

图4 demo主界面

图5 下载完成的瓦片

图6 拼接瓦片成一张大图

源码下载地址:http://files.cnblogs.com/xiaozhi_5638/GoogleMapDownLoader.rar

VS2010 win7调试通过,希望有帮助!

作者:周见智 
出处:http://www.cnblogs.com/xiaozhi_5638/ 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。C#

原文地址:https://www.cnblogs.com/rainbow70626/p/8654687.html

时间: 2025-01-02 21:27:24

C#版谷歌地图下载器设计与实现的相关文章

谷歌地图下载器

高清卫星影像 矢量等高线/高程 (点线面)标绘 ArcGis无偏移套合 AutoCad套合 道路图层(矢量数据) 1.如何下载卫星图像? 2.如何下载高程数据? 3.什么是无偏移地图? 4.如何生成等高线(Autocad)? 5.如何转换成80坐标系哦? 6.如何转换成54坐标系? 7.如何转成CGCS2000坐标系? 8.无偏移卫星影像如何套合(Argcis)? 9.无偏移卫星影像如何套合(Autocad)? 10.如何选择分度带/中央子午线? 11.3DMAX制作三维地形图 12.Arcgi

那些年,我们用过的地图下载器

作为地信.遥感.地质.测绘等专业的同学,下载电子地图.遥感影像应该都接触过,现在XX地图下载器广告满天飞,虽然各位同学唯唯诺诺,还是被群主踢出了.现在把自己那些年珍藏的地图下载器分享给大家.对各种下载器的功能.精度等不作评价,感谢各位开发者和破解者. 请不要因为版权问题给我发邮件,本来这些截图软件的开发者已经侵犯了地图服务商的权益,单方面地做一个免责声明是无济于事的. 全能电子地图下载器 版本:1.9.5 官网:http://www.cnblogs.com/i-gps/ 简介:全能电子地图下载器

.NET破解之谷歌地图下载助手-睿智版

今天在整理文件是,发现手上还有个谷歌地图下载助手-睿智版,是C#写的.查了它们的官网,好像很久没有更新了,可能是垮了吧. 我把.NET程序破解分为三个阶段:软件分析,从软件使用上来分析功能的限制,即为下一步提供线索:代码分析,分析.net代码或IL代码,寻找关键跳转:测试分析,根据第二步分析,进行破解测试. 软件分析 先来看一下它的表面特点吧. 打开软件,看它的注册,许可之类的.居然有三个地方可以打开注册界面,对这个作者我也是醉了.要注册的用户只需要一个,不想注册的用户再多注册按钮都不行. 一下

谷歌卫星地图下载器破解

谷歌卫星地图下载器破解 高清卫星影像 矢量等高线/高程 (点线面)标绘 ArcGis无偏移套合 AutoCad套合 道路图层(矢量数据) 1.如何下载卫星图像? 2.如何下载高程数据? 3.什么是无偏移地图? 4.如何生成等高线(Autocad)? 5.如何转换成80坐标系哦? 6.如何转换成54坐标系? 7.如何转成CGCS2000坐标系? 8.无偏移卫星影像如何套合(Argcis)? 9.无偏移卫星影像如何套合(Autocad)? 10.如何选择分度带/中央子午线? 11.3DMAX制作三维

谷歌地图高清卫星地图下载器 13.18.150

谷歌地图高清卫星地图下载器是阿凯日软件工作室推出的一款基于谷歌服务器的多线程卫星地图浏览下载软件.该软件可以高速下载您所指定的任意经纬度范围的卫星地图,并可将所下载的卫星地图进行无缝拼接,使您可以充分利用谷歌的免费卫星地图资源,享受遨游世界的乐趣. 谷歌地图高清卫星地图 下载器功能介绍: 自动升级 下载监视 下载结果浏览 可以在线下工单(我们提供下载服务) 技术支持在线反馈 谷歌地图高清卫星地图 下载器 v13.17.149升级日志: 1.图片版本升级到v61 2.修正图片错位问题 3.修正内存

bigemap地图下载器安装

软件下载 本产品支持主流winodws操作系统(xp sp3,vista,windows 7,windows 8及windows 10), 可通过访问大地图官网(http://www.bigemap.com/)获取本产品,用户可根据需求下载相应的版本. 如下图所示为软件下载. 本产品所有版本都具备在线自动升级,以保证用户实时获取到最新的地图数据和增值软件服务. 软件下载 下载完成后,双击安装包按照安装向导即可完成安装.温馨提示:请尽量不要把软件装在系统盘,如:C盘. 安装过程如下所示:     

谷歌地图下载拼接软件

选择多边形框选下载 特别BIGEMAP地图下载器提供了多种选择的下载方式,方便用户得到不同的应用当中: 1.矩形框选择区域下载 2.多边形选择区域下载 3.根据行政区(省市县区)域边界选择下载 4.导入外部边界文件下载(支持kml/kmz/shp格式) 5.标准分幅下载 6.指定矩形框经纬度范围下载 本文主要介绍应用多边形如何下载想要的区域 第一步:选在多边形工具 打开BIGEMAP软件,在软件的最上面工具栏选择[],单机左键选择. 第二步:通过单击[鼠标左键]在地图上任意位置开始绘制多边形,选

谷歌地图下载瓦片拼接地图

选择多边形框选下载 特别BIGEMAP地图下载器提供了多种选择的下载方式,方便用户得到不同的应用当中: 1.矩形框选择区域下载 2.多边形选择区域下载 3.根据行政区(省市县区)域边界选择下载 4.导入外部边界文件下载(支持kml/kmz/shp格式) 5.标准分幅下载 6.指定矩形框经纬度范围下载 本文主要介绍应用多边形如何下载想要的区域 第一步:选在多边形工具 打开BIGEMAP软件,在软件的最上面工具栏选择[],单机左键选择. 第二步:通过单击[鼠标左键]在地图上任意位置开始绘制多边形,选

.NET破解之太乐地图下载器【非暴破】

不知不觉,接触破解逆向已经三个月了,从当初的门外汉到现在的小白,这个过程只有经历过才知道其中的苦与乐: 有无知.困惑.痛苦.惊喜.彻悟.欣慰…… 有无助的软件脱壳,茫然的代码分析,有无趣的反复测试, 有人说破解不应该程序员干的事,我回复我不是程序员: 有人说.NET程序太没难度了,去破安卓,后来我真开始研究起安卓来: 有人说能不能把支付宝破了,我没回答. 虽然很忙,时间少,但每天晚上都要抽些时间来关注52论坛,关注破解:虽然并没有从破解中获取物质利益,但我愿意将自己的心得或作品分享给大家.不管怎