今天收到產品反饋,有客戶發如今微信小程序中使用百度地圖導航,導航位置並不許確。 這就奇怪了,相同的經緯度座標在不一樣地圖上爲何顯示會有誤差,到底有哪些座標體系呢?php
wgs84: WorldGeodetic System 1984
,全世界最流行的基準標準系統,是由美國國防部製圖局創建。 一般經過底層接口獲得的定位信息都是 wgs84
座標系。android
GCJ-02
是國內最普遍使用的座標體系,是由中國國家測繪局制訂的地理信息系統的座標系統。git
它是一種對經緯度數據的加密算法,即加入隨機的誤差,就是對真實座標系統進行人爲的加偏處理,按照特殊的算法,將真實的座標加密成虛假的座標,而這個加偏並非線性的加偏,因此各地的偏移狀況都會有所不一樣。轉換完成後,地圖上的點會發生幾十到幾百米的偏移。加密後的座標也常被人稱爲火星座標系統(纔不是咱們生活在火星上呢)。github
谷歌中國,騰訊地圖,高德地圖都在用這個座標體系。web
那麼問題來了,地圖是偏移的,爲何使用手機地圖的時候沒感受到呢?算法
由於除了對手機地圖加偏外,用戶的定位也被加偏處理後再顯示在地圖上。相關座標都被同一算法給加偏後,二者徹底匹配, GPS 也就能夠正常工做,所謂的負負得正 😆 。小程序
因此在國內出版的各類地圖系統、導航設備等,都須要加入國家保密插件。後端
通常都是由 GCJ-02
再次通過偏移算法獲得。 好比說百度地圖(BD-09
座標系)、搜狗地圖。微信小程序
既然有好幾種不一樣的座標系,天然一個座標不能同時應用於全部情形,使用前要進行適當轉換。 常見的有下面幾種方式。api
github
上有不少語言提供的轉換庫,這裏列舉了一個 Js
庫。能夠在 NodeJs
或 瀏覽器中使用: coordtransform 座標轉換
優勢:直接使用,方便快捷 缺點:看了相關的 issue
發現,在某些座標系轉換時,仍是會有必定的偏差。
經過各種地圖的 Web API
對座標進行相互轉換。
優勢:由於是官方提供的座標轉換,轉換的準確度應該較高 缺點:得在官方申請相應帳號和權限,請求時要傳入 key, id
等加密信息。並且得須要額外的網絡請求。
經過嵌入相應的 sdk
後進行轉換:
因此綜合考慮後,小程序項目的解決方案就是後端經過相關算法對座標進行了統一轉換。 你們能夠在遇到相似問題時選擇適合本身的解決方案。