一、Google地图切片的投影方式及瓦片索引机制

1.地图投影

Google地图采用的是Web墨卡托投影(如下图),为了方便忽略了两极变形较大的地区,把世界地图做成了一个边长等于赤道周长的正方形(赤道半径为6378137米),原点在正方形中心,即经纬度为(0,0)处。Web墨卡托投影的X,Y坐标取值范围为:[-20037508.3427892,20037508.3427892],对应的经度取值范围为[-180,180],对应的纬度范围则为[-85.05112877980659,85.05112877980659]。具体投影解释请参考墨卡托投影:

2.瓦片索引机制

Google 地图的索引机制是 TMS(Tile Map Service) 规范的一个变种,其地图瓦片如下图进行索引:

Google 瓦片坐标系:把地球投影后形成的正方形划分为2 的 level(缩放级别) 次幂个地图瓦片,原点在左上角,类似于像素坐标系;详细解释参见Google Maps API 文档。

TMS瓦片坐标系:TMS与Google的地图瓦片切割方法相同,不同的是TMS的原点在左下角。

转换关系:TMS 与Google 坐标系的X 、Z是相等的,Y 的转换关系为:Y(TMS) Y(Google) = Math.pow(2,zoom) – 1

注:关于投影和瓦片索引机制强烈推荐阅读:Tiles à la Google Maps: Coordinates, Tile Bounds and Projection,文中详细分析了地图瓦片涉及各类坐标的转换关系及具体算法,包括瓦片坐标(Google、TMS、Bing QuadTree)、像素坐标、WGS84 经纬度、Mercator 投影平面坐标等。

3.地图缩放级别的分辨率与地图比例尺的关系

地图缩放级别的分辨率(Resolution),是指某缩放级别每个像素代表的实际距离;

地图比例尺(Scale),是指某缩放级别图上一米代表的实际距离;

默认使用屏幕分辨率为96算法:dpi=96,即表示每英寸96像素,1英寸=2.54厘米。比例尺与分辨率的关系:Scale=Resolution×每米的像素个数,即有Scale = Resolution×(96*100)/2.54则Resolution = Scale*2.54/(96*100)

二、Google地图瓦片地址解析

1.使用Google Chrome 打开Google地图界面,按F12打开 开发人员工具,如下图:

由图片左侧的url地址可见,只要正确解析地址中的四个参数(x , y , z , s)就可以获取到地图瓦片了。

下面是本人的分析思路:

1.四个参数的含义(x、y、z、s):

x , y 是瓦片坐标系的坐标值,z代表缩放级别,s则共有八个字符:空字符和Galileo的七个字符。

x , y 的值在 z 增加时会按级数递增,而s 的值很可能是 x , y , z 三个参数组合后的从 0 到 7 的一个索引值。

x , y , z 组合后与 8 求余即可得到 s 的值。

2.四个参数的关系:

  • 当 x = 0 时,y 增 1 时,s会同时增 1,与 z 值无关。
  • 当 y = 0 时,x 增 1 时,s会同时增3 ,与 z 值无关。
  • 从上面两条可以得出,x , y 很可能以 3*x y 的方式组合,然后与 8 求余即得 s。

推测公式为:( 3*x y )%8 = s

3.验证

随即抽取几个地址,取其中的 x , y , s代入第二步中的推测公式验证,果然如此。之后怎么折腾这些瓦片地址就看你了。影像地图只是前缀不一样而已。看来以后不用再为找合适的 Google 地图下载器折腾了,你懂的!

4.其它几个参数的含义

1) Google 地图使用了四个服务地址,即 http://mt ( 0—3).google.cn/……,都是可以用滴。

地图:http://mt2.google.cn/vt/lyrs=m@177000000