1. 程式人生 > >地圖入門_坐標系統

地圖入門_坐標系統

img 導致 size name 一位 family 包含 北京 才幹

在群裏面遇到一個GPS空間查詢計算的問題,查詢過程中發現兩個坐標點的空間距離越近。距離計算的越不準。

技術分享 車子在圓中,可是算出來的不在
技術分享
範圍變大計算結果正確 導致這個問題的解決辦法之中的一個:地圖坐標系統。

坐標系統就是對一個坐標的描寫敘述。

要描寫敘述一個坐標就須要空間參考系統。

如果問你一個坐標(1024,720)在你屏幕的什麽位置。你首先要確定的就是起算點在那裏。左上角還是左下角。

同理(102.13,34.24)這在地球的上的什麽地方。

起算點是本初子午線和赤道的交點麽?

問題沒有那麽簡單。

屏幕坐標是笛卡爾坐標系。

但是地圖上用的坐標但是角度,60進一位的角度。

它是用來描寫敘述球面上某點的。

技術分享
知道了坐標(102.13。34.24)的空間參考系統是個球。假設這個球的名字叫 WGS84 那它的球心就是地球的質心,他的長半軸6378137±2m。在準確點事實上它還有扁率,由於這個球是個橢球體。地球本身也不是個正圓體。 我們在來看一下百度地圖的距離計算函數
 function getDistance(g, i) {
     //無關內容省略
     var a = 6370996.81;
     return a * Math.Acos((Math.Sin(i) * Math.Sin(g) + Math.Cos(i) * Math.Cos(g) * Math.Cos(e - f)));
}
在計算兩點距離時用到了球體的半徑。問題就在這個半徑上。數據庫裏面存的GPS數據的坐標系統。使用的橢球半徑是6378137±2m。從前臺傳入查詢的坐標是百度地圖的坐標參考系統,用的球半徑是6370996.81

兩個坐標不是一個空間參考系統,誤差肯定非常大。想要得到準確的值那就要進行坐標轉換。

從 WGS84->百度坐標,百度裏面提供了這種接口。

可是想把百度坐標->WGS84,這個基本不能夠。至少百度地圖是不同意的。


擴展一下------------- 經常使用的坐標系統主要有兩種。 1.地理坐標系:以橢球體為基礎建立的坐標系。用經緯度度量坐標。

上面說的就是這樣的。

2.投影坐標系
:在特定橢球體基礎之上經過地圖投影建立的平面坐標系。在測繪行業最經常使用的。

盡管我們生活的地球是圓的,可是人力所及的地球環境都是平的。

所以直接在一個平面上繪制地圖更簡單並且更有利於測量還能夠提高繪制精度。只是你也不能隨便來。還要通過一套復雜的方法把地球投影到平面上然後分塊繪制。這樣才幹方便的把各地的地圖整合拼接起來。

技術分享

地圖投影幾何分類主要包含 技術分享
特別註意:假設有人給你說 北京54,西安80,WGS84.這些名字主要指不同的橢球體,與地理坐標系還是投影坐標無關。





地圖入門_坐標系統