緣起
使用Leaflet
做點緩衝,也就是呼叫“L.circle()
”繪製圓形,傳入半徑100米,繪製出來的圓卻覆蓋了全球,當時就猜想,應該是把半徑按100度來繪製了,但看了Leaflet API
介紹,裡面描述的半徑單位就是用的“米”。
然後想起來這次用的地圖底圖為天地圖,在初始化地圖時,通過修改crs
,將地圖座標系修改為了“EPSG:4490
”(通過Proj4Leaflet定義),而Leaflet
預設採用的是“EPSG:3857
”,看來問題應該是出在了這裡。
於是通過三角函式,將100米換算成度再次繪製,可以成功繪製。
const newRadius = Math.asin(radius / 6371000) * 180 / Math.PI //將米轉為度,6371000為地球赤道半徑
然後就引發了思考,“EPSG:4490
”是地理座標系,也叫球面座標系,預設應該是個球,而二維地圖是個平面,球要在平面展示就需要投影,那麼未經投影的“EPSG:4490
”座標系是如何繪製到平面上的呢?
接下來就研究下地理座標系和平面座標系,以及未經投影的地理座標系到底是如何顯示為平面地圖的。
基礎概念
首先了解幾個基礎概念:
地理座標系:或稱球面座標系,參考平面是橢球面,一般是指由經度、緯度和高度組成的座標系,能夠標示地球上的任何一個位置。常見的地理座標系有WGS84
(EPSG:4326
)、CGCS2000
(EPSG:4490
)、GCS_Xian_1980
(EPSG:4610
)。
投影:地理座標系是三維的,而我們要在地圖或者螢幕上顯示就需要轉化為二維,這個過程被稱為投影。常用的投影有墨卡託投影(Mercator
)、高斯-克呂格投影、偽墨卡託投影(Web Mercator
)。
投影座標系:經過投影后的座標系就是投影座標系,座標單位一般是米、千米等。可以認為投影座標系就是地理座標系+投影。常見的投影座標系有EPSG:3857
(也就是WGS84
+偽墨卡託投影)。
經緯度等間隔直投
瞭解上面這幾個概念後,回到開頭的問題,地理座標系“EPSG:4490
”或者“EPSG:4326
”,是如何顯示到平面上的呢?
其實在我們使用二維方式展示地圖,而座標系為地理座標系時,用到了是一種特殊的投影方式,經緯度等間隔直投。
經緯度等間隔直投:英文叫法是Platte Carre projection
,是等距矩形投影(Equirectangular projection
)基準點緯度取0°(赤道)時的特殊情況。它的特點是相同的經緯度間隔在螢幕上的間距相等,沒有複雜的座標變換。我們可簡單的理解為,在笛卡爾座標系中,將赤道作為X軸,子午線作為Y軸,然後把本來應該在南北兩極相交的經線一根一根屢直了,成為了互相平行的經線,而每條緯線的長度也在這個過程中都變為與赤道等長。
在經緯度等間隔直投中,經度範圍是-180
到180
,緯度範圍是-90
到90
,因此他的地圖是長方形,且長寬比是2:1
。
在地圖API
中,當定義地圖座標系為地理座標系時,一般會預設採用這種投影方式,這也是我們能看到地理座標系的平面地圖的原因。
但是經緯度等間隔直投有個很明顯的缺點,就是在低緯度地區長度、角度、面積、形狀變化比較小,越向高緯度,水平距離變長越大,很小的緯圈都變得和赤道一樣長,但是經線長度始終保持不變。這樣就導致要素經過投影后會角度會發生變化,比如非常標準的十字路口,兩條路“非常垂直”,而經過“經緯度等間隔直投”投影后,兩條路成了斜交。
正是由於經緯度直投的這些缺點,特別是投影后角度的變化,導致它在一些領域是無法應用的,比如說航海中航線的表達(本來的直角轉彎,在地圖上顯示的可能是鈍角或銳角)。
當然,要把球面座標投影到平面展示,不可避免都會產生這樣那樣的變形,而每種地圖投影也都有自己的優點和缺點,這就需要我們根據不同的應用場景來選擇合適的投影了。
接下來我們再瞭解下日常最常見的一種投影,墨卡託投影,然後再將經緯度等間隔直投和墨卡託投影做下對比,這樣可以更直觀的觀察出各自的優缺點。
墨卡託投影
墨卡託投影,又名“等角正軸圓柱投影”,荷蘭地圖學家墨卡託(Mercator)在1569年擬定,假設地球被圍在一箇中空的圓柱裡,其赤道與圓柱相接觸,然後再假想地球中心有一盞燈,把球面上的圖形投影到圓柱體上,再把圓柱體展開,這就是一幅標準緯線為零度(赤道)的“墨卡託投影”繪製出的世界地圖。
墨卡託投影最大優點就是在地圖上保持方向和角度的正確,如果循著墨卡託投影地圖上兩點間的直線航行,方向不變,可以一直到達目的地,因此它對船艦在航行中定位、確定航向都具有有利條件,給航海者帶來很大方便。這也是目前的大部分網際網路地圖選擇墨卡託投影(偽墨卡託投影或者基於墨卡託投影做加密偏移)的原因之一,因為人們希望在地圖上看到的地物與實際地物長得相似,並且導航方向不變。
Web Mercator
投影,也就是“EPSG:3857
”,也被稱為“偽墨卡託投影”,這個投影方法是Google Map
最先發明並使用的,它的地理上的不嚴謹性在於,在投影過程中,將表示地球的橢球面作為正球面處理,傳說中是因為谷歌程式設計師懶得用橢球面來程式設計計算螢幕座標...想具體瞭解,可以參考Web Mercator 公開的小祕密
對於墨卡託投影來說,也有個明顯的缺點,就是越到高緯度,大小扭曲越嚴重,到兩極會被放到無限大,因此墨卡託投影並不能表現出南北兩極。為了方便使用,網際網路地圖使用的Web Mercator
投影,通過對兩極地區的裁剪,把地圖搞成一個正方形,這樣在定義縮放級別、地圖切圖等處理時就會更清晰易懂。具體相關原理計算可參考https://www.jianshu.com/p/434feafd40a7。
通過下圖,可以看到墨卡託投影下每個國家的大小和實際大小的差異。
下面兩張圖片來自天地圖網站截圖,我們可以看出,地圖層級同樣是18級,黑龍江漠河(上圖)與海南三亞(下圖)的地圖比例尺差別還是很大的。
經緯度等間隔直投 VS 墨卡託投影
下圖來自 Mercator vs. well…not Mercator (Platte Carre),生動地說明經緯度等間隔直投(Platte Carre
)和 墨卡託投影(Mercator
)這兩種投影下的失真情況:
左圖表示地球球面上大小相同的圓形,右上為墨卡託投影,投影后仍然是圓形,但是在高緯度時物體被嚴重放大了。右下為經緯度等間隔直投,圓的大小變化相對較小,但是高緯度時的影像明顯被拉長了。
檢視天地圖傳統版網站https://map.tianditu.gov.cn/2020/,可以切換下投影方式,對比看一下不同投影的區別(可以把地圖拖到哈爾濱地區,區別更明顯)。通過下面動態圖可以看出不同投影在哈爾濱地區的差異,其中“球面墨卡託”,採用的是web墨卡託投影(EPSG:3857
);“經緯度”,採用的是EPSG:4326
的經緯度等間隔直投。
總結
- 未經投影的地理座標系之所以可以顯示為平面地圖,是因為它預設採用了經緯度等間隔直投的投影方式。
- 大部分網際網路地圖都是採用
Web Mercator
(EPSG:3785
),或者是基於Web Mercator
做了加密偏移。 - 經緯度等間隔直投在高緯度地區的平面變形嚴重,大小和角度都會發生明顯變化。
Web Mercator
在高緯度地區的平面會明顯被拉大,但是角度不會發生變化。- 對於地圖投影,沒有最好的,只有最合適的,需要根據自己的應用場合來選擇。
參考資料:
- https://blog.csdn.net/kikitamoon/article/details/46124935
- https://idvux.wordpress.com/2007/06/06/mercator-vs-well-not-mercator-platte-carre/
- https://en.wikipedia.org/wiki/Map_projection
- https://en.wikipedia.org/wiki/Equirectangular_projection
- https://en.wikipedia.org/wiki/Mercator_projection
- https://www.jianshu.com/p/434feafd40a7
原文地址:http://gisarmory.xyz/blog/index.html?blog=gis-coordinate-projection
歡迎關注《GIS兵器庫》
本文章採用 知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議 進行許可。歡迎轉載、使用、重新發布,但務必保留文章署名《GIS兵器庫》(包含連結: http://gisarmory.xyz/blog/),不得用於商業目的,基於本文修改後的作品務必以相同的許可釋出。