位置資訊座標轉換(GCJ02座標、WGS84座標、bd09座標之間的轉換)
阿新 • • 發佈:2018-11-14
現在幾乎每一個App都會收集使用者位置資訊,App得到的座標大多是通過高德地圖等SDK獲取的,當使用這些座標進行webGIS視覺化的時候會發現各種偏離狀況,座標不對,疊加錯位。這是由於不同SDK獲取到的座標可能屬於不同座標系,想要針對不同地圖的地圖將手中的座標資料轉換成相吻合的資料,可以採用coordtransform庫來解決這一問題。
首先,瞭解現如今網際網路座標系的現狀。
1. 地球座標 (WGS84)
- 國際標準,從GPS裝置中取出的資料的座標系
- 國際地圖提供商使用的座標系
2. 火星座標 (GCJ-02) 也叫國測局座標系
- 中國標準,從國行移動裝置中定位獲取的座標資料使用這個座標系
- 國家規定: 國內出版的各種地圖系統(包括電子形式),必須至少採用GCJ-02對地理位置進行首次加密。
3. 百度座標 (BD-09)
- 百度標準,百度 SDK,百度地圖,Geocoding 使用
- 百度在火星座標上來了個二次加密
其次,裝置與座標系對應關係
1. 從裝置獲取經緯度(GPS)座標
- 百度SDK,可以獲取百度座標(bd09,預設)或者火星座標(GCJ02)
- IOS原生定位庫,可以獲取WGS84座標
- 高德SDK,可以獲取GCJ02座標
2. 網際網路線上地圖使用的座標系
- 火星座標系:
- ios地圖(其實是高德)
- Google國內地圖(.cn域名下)
- 搜搜、阿里雲、高德地圖、騰訊
- 百度座標系:
- 百度地圖
- WGS84座標系:
- Google國外地圖
- osm地圖等國外地圖
最後,使用coordtransform庫進行座標轉換
該庫有NodeJS、瀏覽器、python以及命令列等用法,我參與的專案是需要從網頁上將座標以WGS84座標匯出,因此採用了瀏覽器方式,其他方法請參考連結文件。關鍵程式碼如下:
function exportWGS84Excel () { ...... $.ajax({ url:'/trace/web_getLocationList', dataType: "json", type: 'POST', data:{"StartDate":startDate,"EndDate":endDate,"GroupID":GroupID,"UserID":UserID}, success:function (json) { if(json!= null) { for (var i = 0; i < json.recs.length; i++) { //國測局座標轉wgs84座標 var gcj02towgs84 = coordtransform.gcj02towgs84(json.recs[i].Longitude, json.recs[i].Latitude); json.recs[i].Longitude = gcj02towgs84[0]; json.recs[i].Latitude = gcj02towgs84[1]; } JSONToExcelConvertor(json, "匯出記錄"); } }, error: function () { alert("error page="+page); } }); }
感謝:https://github.com/wandergis/coordtransform#%E5%9C%B0%E7%90%83%E5%9D%90%E6%A0%87-wgs84