天天看點

Google 地圖切片URL位址解析

原文位址: http://blog.csdn.net/mygisforum/article/details/7582449

一、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),是指某縮放級别圖上一米代表的實際距離;

[plain] 

view

plain

copy https://code.csdn.net/snippets/307482 https://code.csdn.net/snippets/307482/fork
  1. 預設使用螢幕分辨率為96  
  2. 算法:  
  3. dpi=96,即表示每英寸96像素,1英寸=2.54厘米。  
  4. 比例尺與分辨率的關系:Scale=Resolution×每米的像素個數,  
  5. 即有Scale = Resolution×(96*100)/2.54  
  6. 則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&hl=zh-CN&gl=cn&src=app&

。。。

影像底圖:

http://mt3.google.cn/vt/lyrs=s@110&hl=zh-CN&gl=cn&src=app&

影像的疊加層:

http://mt1.google.cn/vt/imgtp=png32&lyrs=h@177000000&hl=zh-CN&gl=cn&src=app&

2) url位址中的 lyrs 表示的是圖層類型,即瓦片類型,具體含義如下:

地圖瓦片類型驗證,直接修改lyrs參數的值即可:

http://mt2.google.cn/vt/lyrs=y@258000000&hl=zh-CN&gl=CN&src=app&x=214130&y=114212&z=18&s=Ga https://code.csdn.net/snippets/307482 https://code.csdn.net/snippets/307482/fork
  1. m:路線圖  
  2. t:地形圖  
  3. p:帶标簽的地形圖  
  4. s:衛星圖  
  5. y:帶标簽的衛星圖  
  6. h:标簽層(路名、地名等)  

3) 暫時未發現 "&s=..."

的意義,url有無此字尾都不影響瓦片位址的通路。

擴充閱讀:

1.

墨卡托投影經緯度與平面坐标轉換公式

後記:此文隻是提供了一種方法,google 地圖切片位址的算法及字首都可能會不斷調整。

三、GMap.NET 

GMap.NET

 -

Great Maps for Windows Forms & Presentation

一個非常強大的開源地圖項目(winform版),對于解析Google等地圖服務的算法相當不錯。

GMap.NET is great and Powerful, Free, cross platform, open source .NET control. 

Enable use routing, geocoding, directions and maps from Coogle, Yahoo!, Bing, OpenStreetMap, ArcGIS, Pergo, SigPac, Yandex, Mapy.cz, Maps.lt, iKarte.lv, NearMap, OviMap, CloudMade, WikiMapia in Windows Forms & Presentation, supports caching and runs on windows

mobile!

ps:2015.5.15增加了url相關參數的描述;

繼續閱讀