gcoord: 轉換WGS8四、GCJ0二、BD09座標,解決百度地圖高德地圖座標系不統一的問題

作過地圖相關開發的同窗確定會遇到這樣一個問題:一樣的經緯度座標,在百度地圖和高德地圖上位置不同。
crs.jpgjavascript

關於座標系

咱們一般用經緯度來表示一個地理位置,可是因爲一些緣由,咱們從不一樣渠道獲得的經緯度信息可能並非在同一個座標系下。java

  • 高德地圖、騰訊地圖以及谷歌中國區地圖使用的是GCJ-02座標系
  • 百度地圖使用的是BD-09座標系
  • 底層接口(HTML5 Geolocation或ios、安卓API)經過GPS設備獲取的座標使用的是WGS-84座標系

不一樣的座標系之間可能有幾十到幾百米的偏移,因此在開發基於地圖的產品,或者作地理數據可視化時,咱們須要修正不一樣座標系之間的誤差。ios

WGS-84 - 世界大地測量系統

WGS-84(World Geodetic System, WGS)是使用最普遍的座標系,也是世界通用的座標系,GPS設備獲得的經緯度就是在WGS84座標系下的經緯度。一般經過底層接口獲得的定位信息都是WGS84座標系。git

GCJ-02 - 國測局座標

GCJ-02(G-Guojia國家,C-Cehui測繪,J-Ju局),又被稱爲火星座標系,是一種基於WGS-84制定的大地測量系統,由中國國測局制定。此座標系所採用的混淆算法會在經緯度中加入隨機的偏移。github

國家規定,中國大陸全部公開地理數據都須要至少用GCJ-02進行加密,也就是說咱們從國內公司的產品中獲得的數據,必定是通過了加密的。絕大部分國內互聯網地圖提供商都是使用GCJ-02座標系,包括高德地圖,谷歌地圖中國區等。算法

導航電子地圖在公開出版、銷售、傳播、展現和使用前,必須進行空間位置技術處理。— GB 20263―2006《導航電子地圖安全處理技術基本要求》,4.1

BD-09 - 百度座標系

BD-09(Baidu, BD)是百度地圖使用的地理座標系,其在GCJ-02上多增長了一次變換,用來保護用戶隱私。從百度產品中獲得的座標都是BD-09座標系。安全

解決方案

百度地圖以及高德地圖都提供了一些方法來轉換不一樣座標系下的座標,可是它們都須要進行網絡請求,性能不好。
在春節假期時,我作了一個庫gcoord來作這些事。網絡

gcoord

gcoord主要解決了兩個問題性能

  • 能將座標在不一樣座標系下相互轉換
  • 可以處理GeoJSON

GeoJSON是地理行業一種通用的數據格式,它本質上就是JSON,不過對字段有一些約定。ui

gcoord使用起來很是簡單
例如從手機的GPS獲得一個經緯度座標,須要將其展現在百度地圖上,則能夠經過gcoord將當前座標從WGS-84座標系轉換爲BD-09座標系

var result = gcoord.transform(
    [ 116.403988, 39.914266 ],    // 經緯度座標
    gcoord.WGS84,                 // 當前座標系
    gcoord.BD09                   // 目標座標系
);
console.log( result );  // [ 116.41661560068297, 39.92196580126834 ]
詳細的使用方式請查看 gcoord的文檔

歡迎你們star

相關文章
相關標籤/搜索