日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Google Maps地图投影全解析

發(fā)布時間:2023/12/1 编程问答 74 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Google Maps地图投影全解析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原文出處:http://www.cnblogs.com/LionGG/archive/2009/04/20/1439905.html

?

Google Maps、Virtual Earth等網(wǎng)絡地理所使用的地圖投影,常被稱作Web Mercator或Spherical Mercator,它與常規(guī)墨卡托投影的主要區(qū)別就是把地球模擬為球體而非橢球體。建議先對地圖投影知識做一個基本的了解,《地圖投影為什么》。

?

什么是墨卡托投影?

墨卡托(Mercator)投影,又名"等角正軸圓柱投影",荷蘭地圖學家墨卡托(Mercator)在1569年擬定,假設地球被圍在一個中空的圓柱里,其赤道與圓柱相接觸,然后再假想地球中心有一盞燈,把球面上的圖形投影到圓柱體上,再把圓柱體展開,這就是一幅標準緯線為零度(即赤道)的"墨卡托投影"繪制出的世界地圖。從球到平面,肯定有個轉換公式,這里就不再羅列。

?

Google們?yōu)槭裁催x擇墨卡托投影?

墨卡托投影的"等角"特性,保證了對象的形狀的不變行,正方形的物體投影后不會變?yōu)殚L方形。"等角"也保證了方向和相互位置的正確性,因此在航海和航空中常常應用,而Google們在計算人們查詢地物的方向時不會出錯。

墨卡托投影的"圓柱"特性,保證了南北(緯線)和東西(經(jīng)線)都是平行直線,并且相互垂直。而且經(jīng)線間隔是相同的,緯線間隔從標準緯線(此處是赤道,也可能是其他緯線)向兩級逐漸增大。

但是,"等角"不可避免的帶來的面積的巨大變形,特別是兩極地區(qū),明顯的如格陵蘭島比實際面積擴大了N倍。不過要是去兩極地區(qū)探險或可靠的同志們,一般有更詳細的資料,不會來查看網(wǎng)絡地圖的,這個不要緊。

?

為什么是圓形球體,而非橢球體?

這說來簡單,僅僅是由于實現(xiàn)的方便,和計算上的簡單,精度理論上差別0.33%之內(nèi),特別是比例尺越大,地物更詳細的時候,差別基本可以忽略。

?

Web墨卡托投影坐標系:

以整個世界范圍,赤道作為標準緯線,本初子午線作為中央經(jīng)線,兩者交點為坐標原點,向東向北為正,向西向南為負。

X軸:由于赤道半徑為6378137米,則赤道周長為2*PI*r = 20037508.3427892,因此X軸的取值范圍:[-20037508.3427892,20037508.3427892]。

Y軸:由墨卡托投影的公式可知,同時上圖也有示意,當緯度φ接近兩極,即90°時,y值趨向于無窮。這是那些"懶惰的工程師"就把Y軸的取值范圍也限定在[-20037508.3427892,20037508.3427892]之間,搞個正方形。

懶人的好處,眾所周知,事先切好靜態(tài)圖片,提高訪問效率云云。俺只是告訴你為什么會是這樣子。因此在投影坐標系(米)下的范圍是:最小(-20037508.3427892, -20037508.3427892 )到最大 (20037508.3427892, 20037508.3427892)。

?

對應的地理坐標系:

按道理,先講地理坐標系才是,比如球體還是橢球體是地理坐標系的事情,和墨卡托投影本關聯(lián)不大。簡單來說,投影坐標系(PROJCS)是平面坐標系,以米為單位;而地理坐標系(GEOGCS)是橢球面坐標系,以經(jīng)緯度為單位。具體可參考《坐標系、坐標參照系、坐標變換、投影變換》。

經(jīng)度:這邊沒問題,可取全球范圍:[-180,180]。

緯度:上面已知,緯度不可能到達90°,懶人們?yōu)榱苏叫味〉?20037508.3427892,經(jīng)過反計算,可得到緯度85.05112877980659。因此緯度取值范圍是[-85.05112877980659,85.05112877980659]。其余的地區(qū)怎么辦?沒事,企鵝們不在乎。

因此,地理坐標系(經(jīng)緯度)對應的范圍是:最小(-180,-85.05112877980659),最大(180, 85.05112877980659)。至于其中的Datum、坐標轉換等就不再多言。

?

相關坐標計算:

關于Google Maps等的組織方式——地圖瓦片金字塔,估計我在這里重復一遍這玩意,怕也是沒人看了。盡管原理都一樣,但具體到寫不同廠商不同數(shù)據(jù)源的代碼時,你會發(fā)現(xiàn),可縮放級別數(shù)不一樣,最小級別不一樣,編碼方式不一樣,比如Google的QRST,微軟的四叉樹,OSGeo的TMS等。

然而,你或許也不必這么麻煩,因為這些算法在網(wǎng)絡上早已遍布朝野,你盡可從他人博客中獲取,或是從開源軟件里學習。這本身都不是秘密,微軟自己也是公布的。

《Tiles à la Google Maps》 用交互性地方式可得到任一Tile的邊界范圍,各種流行編碼方式等。該頁面的鏈接都非常有價值,部分也是本文寫作的重要參考。作者用python完成了下列坐標之間轉換算法:經(jīng)緯度(出現(xiàn)在KML中的坐標,WMS的BBOX參數(shù)等),平面坐標XY(米,Web Mercator投影坐標系),金字塔的XYZ(即X軸的位置,Y軸的位置,和縮放級別ZoomLevel),每個Tile的編碼Key值(QRST或0123等)。轉換時,還需要注意兩個概念,Ground Resolution和Map Scale。

?

?

Ground Resolution,地面分辨率,類似Spatial Resolution(空間分辨率),我們這里主要關注用象元(pixel size)表示的形式:一個像素(pixel)代表的地面尺寸(米)。以Virtual Earth為例,Level為1時,圖片大小為512*512(4個Tile),那么赤道空間分辨率為:赤道周長/512。其他緯度的空間分辨率則為 緯度圈長度/512,極端的北極則為0。Level為2時,赤道的空間分辨率為 赤道周長/1024,其他緯度為 緯度圈長度1024。很明顯,Ground Resolution取決于兩個參數(shù),縮放級別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; 因此比例尺的公式為,一般都化為1XXX,無單位:

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存在對應關系,畢竟都和實地距離相關聯(lián),兩者關系:map scale = 1 : ground resolution * screen dpi / 0.0254 meters/inch

《Virtual Earth Tile System》列舉了Virtual Earth在赤道上,Level、像素數(shù)、地面分辨率、地圖比例尺的對應關系,同時本文也簡單介紹了Mercator投影和上述兩個概念,推薦。

?

此外,《Addressing Google Maps image tiles》應用程序,輸入經(jīng)緯度和縮放級別,即可縮放到相應的Google Maps位置,而且可以顯示出查找過程的QRST。JavaScript實現(xiàn)的算法,也可以抓下來和《Tiles à la Google Maps》對比下,從經(jīng)緯度到到Tile編碼的轉換。

?

WKT形式表示

Google Maps和Virtual Earth等的流行程度不用多講,然而他們所使用的Web Mercator或Spherical Mercator在很長一段時間內(nèi)并沒有被EPSG的投影數(shù)據(jù)庫所接納。EPSG認為它不能算作科學意義上的投影,所以只是給了一個EPSG:900913的標號(SRID),這個標號游離在EPSG常規(guī)標號范圍之外。(EPSG、SRID是什么?參見《EPSG 、SRID》。)

?

到了2008年5月(據(jù)SharpGIS同學), EPSG恍然明白,不管橢球體還是球體,其實都是對地球的模擬,只是精確程度上的差別,沒有本質(zhì)上的不同?;蛘呤遣坏貌唤邮軓V泛的事實標準,接納了這個投影,定義投影坐標系PROJCS的名字為"Popular Visualisation CRS / Mercator",SRID為EPSG:3785;地理坐標系GEOGCS的名字為"Popular Visualisation CRS",SRID為"EPSG:4055"。這些標號已經(jīng)進入"正常范圍"。(PS:這個Visualisation 是英式英語寫法?)

?

PROJCS 的WKT《Well Known Text》寫法如下,GEOGCS、Datum等的WKT表示參見《Spherical/Web Mercator: EPSG code 3785》。附帶說一句,Web Mercator在ESRI公司的編號(ESRI叫它Well Known ID?)暫時是102113,或許偶爾用得到。

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%正確,你也可以質(zhì)疑。起這個題目其實不是本意,因為它不科學,甚至EPSGINFORMATION_SOURCE字段寫的都是Microsoft,只不過國內(nèi)Google更火些,SEO一下。

這篇文章除了參考文中所列鏈接外, MicrosoftGoogleEPSG、OGC等組織相關的說明外,Charlie Savage、SharpGIS、Nelson John等博客也是非常重要的來源,在此致以謝意。

?

?

轉載于:https://www.cnblogs.com/bluespot/archive/2009/05/25/1488845.html

總結

以上是生活随笔為你收集整理的Google Maps地图投影全解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。