转载地址:http://www.cnblogs.com/liongg/archive/2009/04/20/1439905.html
Google Maps、Virtual Earth等网络地理所使用的地图投影,常被称作Web Mercator或Spherical Mercator,它与常规墨卡托投影的主要区别就是把地球模拟为球体而非椭球体。建议先对地图投影知识做一个基本的了解,《地图投影为什么》。
什么是墨卡托投影?
墨卡托(Mercator)投影,又名"等角正轴圆柱投影",荷兰地图学家墨卡托(Mercator)在1569年拟定,假设地球被围在一个中空的圆柱里,其赤道与圆柱相接触,然后再假想地球中心有一盏灯,把球面上的图形投影到圆柱体上,再把圆柱体展开,这就是一幅标准纬线为零度(即赤道)的"墨卡托投影"绘制出的世界地图。从球到平面,肯定有个转换公式,这里就不再罗列。
Google们为什么选择墨卡托投影?
墨卡托投影的"等角"特性,保证了对象的形状的不变行,正方形的物体投影后不会变为长方形。"等角"也保证了方向和相互位置的正确性,因此在航海和航空中常常应用,而Google们在计算人们查询地物的方向时不会出错。
墨卡托投影的"圆柱"特性,保证了南北(纬线)和东西(经线)都是平行直线,并且相互垂直。而且经线间隔是相同的,纬线间隔从标准纬线(此处是赤道,也可能是其他纬线)向两级逐渐增大。
但是,"等角"不可避免的带来的面积的巨大变形,特别是两极地区,明显的如格陵兰岛比实际面积扩大了N倍。不过要是去两极地区探险或可靠的同志们,一般有更详细的资料,不会来查看网络地图的,这个不要紧。
(图片来源:IDVUX博客)
为什么是圆形球体,而非椭球体?
这说来简单,仅仅是由于实现的方便,和计算上的简单,精度理论上差别0.33%之内,特别是比例尺越大,地物更详细的时候,差别基本可以忽略。
Web墨卡托投影坐标系:
以整个世界范围,赤道作为标准纬线,本初子午线作为中央经线,两者交点为坐标原点,向东向北为正,向西向南为负。
X轴:由于赤道半径为6378137米,则赤道周长为2*PI*r = 20037508.3427892,因此X轴的取值范围:[-20037508.3427892,20037508.3427892]。
Y轴:由墨卡托投影的公式可知,同时上图也有示意,当纬度φ接近两极,即90°时,y值趋向于无穷。这是那些"懒惰的工程师"就把Y轴的取值范围也限定在[-20037508.3427892,20037508.3427892]之间,搞个正方形。
懒人的好处,众所周知,事先切好静态图片,提高访问效率云云。俺只是告诉你为什么会是这样子。因此在投影坐标系(米)下的范围是:最小(-20037508.3427892, -20037508.3427892 )到最大 (20037508.3427892, 20037508.3427892)。
对应的地理坐标系:
按道理,先讲地理坐标系才是,比如球体还是椭球体是地理坐标系的事情,和墨卡托投影本关联不大。简单来说,投影坐标系(PROJCS)是平面坐标系,以米为单位;而地理坐标系(GEOGCS)是椭球面坐标系,以经纬度为单位。具体可参考《坐标系、坐标参照系、坐标变换、投影变换》。
经度:这边没问题,可取全球范围:[-180,180]。
纬度:上面已知,纬度不可能到达90°,懒人们为了正方形而取的-20037508.3427892,经过反计算,可得到纬度85.05112877980659。因此纬度取值范围是[-85.05112877980659,85.05112877980659]。其余的地区怎么办?没事,企鹅们不在乎。
因此,地理坐标系(经纬度)对应的范围是:最小(-180,-85.05112877980659),最大(180, 85.05112877980659)。至于其中的Datum、坐标转换等就不再多言。
相关坐标计算:
关于Google Maps等的组织方式——地图瓦片金字塔,估计我在这里重复一遍这玩意,怕也是没人看了。尽管原理都一样,但具体到写不同厂商不同数据源的代码时,你会发现,可缩放级别数不一样,最小级别不一样,编码方式不一样,比如Google的QRST,微软的四叉树,OSGeo的TMS等。
然而,你或许也不必这么麻烦,因为这些算法在网络上早已遍布朝野,你尽可从他人博客中获取,或是从开源软件里学习。这本身都不是秘密,微软自己也是公布的。
《Tiles à la Google Maps》 用交互性地方式可得到任一Tile的边界范围,各种流行编码方式等。该页面的链接都非常有价值,部分也是本文写作的重要参考。作者用python完成了下列坐标之间转换算法:经纬度(出现在KML中的坐标,WMS的BBOX参数等),平面坐标XY(米,Web Mercator投影坐标系),金字塔的XYZ(即X轴的位置,Y轴的位置,和缩放级别ZoomLevel),每个Tile的编码Key值(QRST或0123等)。转换时,还需要注意两个概念,Ground Resolution和Map Scale。
(图片来源:maptiler.org)
Ground Resolution,地面分辨率,类似Spatial Resolution(空间分辨率),我们这里主要关注用象元(pixel size)表示的形式:一个像素(pixel)代表的地面尺寸(米)。以Virtual Earth为例,Level为1时,图片大小为512*512(4个Tile),那么赤道空间分辨率为:赤道周长/512。其他纬度的空间分辨率则为 纬度圈长度/512,极端的北极则为0。Level为2时,赤道的空间分辨率为 赤道周长/1024,其他纬度为 纬度圈长度1024。很明显,Ground Resolution取决于两个参数,缩放级别Level和纬度latitude ,Level决定像素的多少,latitude决定地面距离的长短。地面分辨率的公式为,单位:米/像素:
ground resolution = (cos(latitude * pi/180) * 2 * pi * 6378137 meters) / (256 * 2level pixels)
Map Scale,即地图比例尺,小学知识,图上距离比实地距离,两者单位一般都是米。在Ground Resolution的计算中,由Level可得到图片的像素大小,那么需要把其转换为以米为单位的距离,涉及到DPI(dot per inch),暂时可理解为类似的PPI(pixelper inch),即每英寸代表多少个像素。256 * 2level / DPI 即得到相应的英寸inch,再把英寸inch除以0.0254转换为米。实地距离仍旧是:cos(latitude * pi/180) * 2 * pi * 6378137 meters; 因此比例尺的公式为,一般都化为1:XXX,无单位:
map scale = 256 * 2level / screen dpi / 0.0254 / (cos(latitude * pi/180) * 2 * pi * 6378137)
= 1 : (cos(latitude * pi/180) * 2 * pi * 6378137 * screen dpi) / (256 * 2level * 0.0254)
其实,Map Scale 和 Ground Resolution存在对应关系,毕竟都和实地距离相关联,两者关系:map scale = 1 : ground resolution * screen dpi / 0.0254 meters/inch
《Virtual Earth Tile System》列举了Virtual Earth在赤道上,Level、像素数、地面分辨率、地图比例尺的对应关系,同时本文也简单介绍了Mercator投影和上述两个概念,推荐。
此外,《Addressing Google Maps image tiles》应用程序,输入经纬度和缩放级别,即可缩放到相应的Google Maps位置,而且可以显示出查找过程的QRST。JavaScript实现的算法,也可以抓下来和《Tiles à la Google Maps》对比下,从经纬度到到Tile编码的转换。
WKT形式表示
Google Maps和Virtual Earth等的流行程度不用多讲,然而他们所使用的Web Mercator或Spherical Mercator在很长一段时间内并没有被EPSG的投影数据库所接纳。EPSG认为它不能算作科学意义上的投影,所以只是给了一个EPSG:900913的标号(SRID),这个标号游离在EPSG常规标号范围之外。(EPSG、SRID是什么?参见《EPSG 、SRID》。)
到了2008年5月(据SharpGIS同学), EPSG恍然明白,不管椭球体还是球体,其实都是对地球的模拟,只是精确程度上的差别,没有本质上的不同。或者是不得不接受广泛的事实标准,接纳了这个投影,定义投影坐标系PROJCS的名字为"Popular Visualisation CRS / Mercator",SRID为EPSG:3785;地理坐标系GEOGCS的名字为"Popular Visualisation CRS",SRID为"EPSG:4055"。这些标号已经进入"正常范围"。(PS:这个Visualisation 是英式英语写法?)
PROJCS 的WKT《Well Known Text》写法如下,GEOGCS、Datum等的WKT表示参见《Spherical/Web Mercator: EPSG code 3785》。附带说一句,Web Mercator在ESRI公司的编号(ESRI叫它Well Known ID?)暂时是102113,或许偶尔用得到。
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->PROJCS["Popular Visualisation CRS / Mercator",
GEOGCS["Popular Visualisation CRS",
DATUM["Popular_Visualisation_Datum",
SPHEROID["Popular Visualisation Sphere",6378137,0,
AUTHORITY["EPSG","7059"]],
TOWGS84[0,0,0,0,0,0,0],
AUTHORITY["EPSG","6055"]],
PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],
UNIT["degree",0.01745329251994328,
AUTHORITY["EPSG","9122"]],
AUTHORITY["EPSG","4055"]],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]],
PROJECTION["Mercator_1SP"],
PARAMETER["central_meridian",0],
PARAMETER["scale_factor",1],
PARAMETER["false_easting",0],
PARAMETER["false_northing",0],
AUTHORITY["EPSG","3785"],
AXIS["X",EAST],
AXIS["Y",NORTH]]
附记:这个问题算是老问题,费这么多时间,主要就是分享,毕竟自己还算是相当明白。也是看见有人不懂乱说,写篇文章纠正下。当然谁都会犯错误,包括我这篇是否100%正确,你也可以质疑。起这个题目其实不是本意,因为它不科学,甚至EPSG的INFORMATION_SOURCE字段写的都是Microsoft,只不过国内Google更火些,SEO一下。
这篇文章除了参考文中所列链接外, Microsoft、Google、EPSG、OGC等组织相关的说明外,Charlie Savage、SharpGIS、Nelson John等博客也是非常重要的来源,在此致以谢意。
分享到:
相关推荐
1. **墨卡托投影**:Google Maps 使用墨卡托投影(Mercator Projection),这是一种等角圆柱投影方式,它可以保持角度不变,适用于导航和地图显示。 2. **缩放等级**:Google Maps 提供从0到17共18个不同的缩放等级...
在IT领域,尤其是在地理信息系统(GIS)和在线地图服务中,坐标偏移是一个重要的概念,特别是在处理像谷歌地图Google Maps这样的服务时。谷歌地图作为全球广泛使用的在线地图平台,其背后的数据处理涉及到复杂的算法...
Web墨卡托是一种广泛应用于网络地图服务,如Google Maps和OpenStreetMap的投影方法。它通过将球面坐标转换为二维平面坐标,使得地图可以被无缝拼接成一个大的矩形。这种投影方法在小比例尺下表现良好,适合互联网上...
### Google Maps 地图坐标系解析 #### 一、引言 随着信息技术的发展,地理信息系统(GIS)在各个领域中的应用越来越广泛。其中,Google Maps 作为一种常用的在线地图服务,其背后的技术细节对于开发者和研究人员而...
Web墨卡托,又称Spherical Mercator,是网络地图服务如Google Maps、OpenStreetMap广泛采用的投影方式。它的特点是将整个地球投影到一个无限长且无限宽的矩形平面上,使得在有限的屏幕空间内可以显示整个世界,同时...
本文将基于Google地图API的官方文档,深入解析其核心组件和功能,帮助理解并掌握Google地图API的关键知识点。 #### 一、Google地图API框架集成 Google地图API现在与Google AJAX API载入器进行了集成,这为开发者...
3. **地图坐标系统**:了解经纬度坐标系统以及Web Mercator投影,这是Google Maps使用的一种标准投影方式,用于将地球表面转换为二维平面。 4. **多线程/异步编程**:为了提高下载效率,可能采用了多线程或异步编程...
- 地震数据通常包含经纬度坐标,需要转换为适用于Google Maps的投影坐标系。 - MKMapView类提供了将经纬度坐标映射到地图上的方法。 6. **自定义标注**: - 地震事件可能用自定义的MKAnnotationView表示,显示...
总的来说,理解和处理“google地图偏移量数据表”涉及到地图坐标系统、投影变换、数据解析以及地理信息处理技术,这些都是GIS和Web开发中的重要知识点。对于从事相关工作的专业人士来说,熟练掌握这些技能是必不可少...
本文将详细讨论如何使用特定工具来下载Google地图,并解析这一过程中的关键知识点。 标题"下载google地图的工具"提示我们关注的重点是获取Google地图的离线副本。Google地图是一款强大的在线地图服务,提供卫星图像...
1. 地图投影:Google Maps使用Web Mercator投影,这是一种将球面地图转换为平面的数学方法,确保地图在各方向上的比例保持一致。 2. 瓦片坐标系统:每个瓦片用(x, y, zoom)坐标表示,其中(x, y)是相对于整个地球表面...
对于开发者来说,利用这些地图瓦片构建地图应用需要掌握相关的API和框架,比如Google Maps JavaScript API或其他开源库如OpenLayers、Leaflet等。开发者需要处理瓦片的请求、加载、拼接以及交互事件,以实现地图的平...
2. **地图API**:Google Maps API是一个强大的工具,它允许开发者在网页上嵌入地图,并提供丰富的地图操作功能。然而,我们在这里讨论的是“仿造”,因此可能需要使用开源的地图API,如OpenLayers、Leaflet或Mapbox ...
2. **坐标转换**:原始GPS坐标通常是WGS84坐标系,而Google Maps使用的是Web Mercator投影。因此,需要将WGS84坐标转换为Web Mercator坐标。C#中可以自定义函数实现这一转换,或者使用第三方库如`NetTopologySuite`...
这些功能可能依赖于某种地图库或API,如OpenStreetMap或Google Maps API,它们提供了交互式地图操作的接口。 “可将自己采集的GPS路径在下载的相应的卫星地图上显示出来”意味着用户可以导入自定义的GPS轨迹数据,...
WGS84是全球通用的地理坐标系,而在Web上,Web Mercator投影由于其数学特性在进行缩放时能保持矩形像素网格,因此被广泛应用于在线地图服务,如Google Maps和OpenStreetMap。 对于交互性,JavaScript库如Leaflet和...
地图数据通常需要转换为Web Mercator投影,这是Web上最常用的投影方式,因为它是Google Maps、Bing Maps等在线地图服务所采用的。这种投影方法能确保地图在各个方向上均匀放大,适合大范围的全球地图展示。 4. **...
### 谷歌地图API V3 - 详细知识点解析 #### 概述 谷歌地图API V3(Google Maps API V3)是谷歌提供的一套强大的工具和服务集合,旨在帮助开发者在网页上集成交互式地图。它支持多种功能,如自定义地图样式、添加...
GMap.NET则集成了Google Maps、Bing Maps等在线地图服务,提供了丰富的地图瓦片显示和定位功能。 在程序设计中,地图制图部分涉及到的主要知识点有: 1. 地图投影:理解地理坐标系统和投影坐标系统的转换,如...
在瓦片数据集成方面,通常采用的是Web Mercator投影标准,这种投影方式广泛应用于Web地图服务,如Google Maps API。瓦片通常被划分为多个等级,每个等级代表不同的缩放级别,级别越高,地图细节越丰富。瓦片的文件...