首頁>技術>

一個提供了百度座標(BD09)、國測局座標(火星座標,GCJ02)、和WGS84座標系之間的轉換的工具模組(另外還提供了python版本的程式碼https://github.com/wandergis/coordTransform_py)

支援node、瀏覽器(AMD方式和直接引用方式)

GitHub地址:https://github.com/wandergis/coordtransformnpm地址:https://www.npmjs.com/package/coordtransform專案主頁:http://wandergis.github.io/coordtransform/

為什麼寫這個模組

隨著移動網際網路的興起,幾乎每一個app都會去收集使用者位置,如果恰好你在處理與地理定位相關的程式碼,並且不了解地理座標系的話,肯定要被我大天朝各種座標系搞暈。寫這個模組的目的也是因為專案中app獲取的座標是百度sdk獲取的,在做webgis視覺化的時候各種偏,各種座標不對。

當前網際網路地圖的座標系現狀

地球座標 (WGS84)

國際標準,從專業GPS 裝置中取出的資料的座標系國際地圖提供商使用的座標系

火星座標 (GCJ-02)也叫國測局座標系

中國標準,從國行移動裝置中定位獲取的座標資料使用這個座標系國家規定: 國內出版的各種地圖系統(包括電子形式),必須至少採用GCJ-02對地理位置進行首次加密。

百度座標 (BD-09)

百度標準,百度 SDK,百度地圖,Geocoding 使用(本來就亂了,百度又在火星座標上來個二次加密)

開發過程需要注意的事

從裝置獲取經緯度(GPS)座標
\t如果使用的是百度sdk那麼可以獲得百度座標(bd09)或者火星座標(GCJ02),預設是bd09\t如果使用的是ios的原生定位庫,那麼獲得的座標是WGS84\t如果使用的是高德sdk,那麼獲取的座標是GCJ02
網際網路線上地圖使用的座標系
火星座標系:\t\tiOS 地圖(其實是高德)\t\tGogole地圖\t\t搜搜、阿里雲、高德地圖百度座標系:\t\t當然只有百度地圖WGS84座標系:\t\t國際標準,谷歌國外地圖、osm地圖等國外的地圖一般都是這個
舉個栗子

筆者所在的公司app使用的是百度的sdk,需要對定位座標做web視覺化效果,百度地圖提供的js api滿足不了需求,選用leaflet來做視覺化,這裡要說到百度地圖了,它使用的座標系和切圖的原點都不一致,並且其加偏還是非線性的,因此無法利用常用的載入方法去載入,放棄使用它的底圖,選用了符合標準的高德底圖,高德底圖使用的是國測局座標也就是GCJ02座標系,如果簡單的將app獲取的經緯度疊加上去,就有可能你本來在百度大廈的位置就顯示在西二旗地鐵站了甚至更遠,因此需要將bd09轉成gcj02座標系,這個時候這個庫就有了用武之地,對點批量轉換再載入到底圖上,就可以讓點顯示在本應該出現的位置。

另外如果你拿到了一些WGS84的座標,想載入到各種底圖上就可以根據這個庫在底圖座標系和你的資料座標系之間進行轉換。希望對大家有用吧。

安裝(install)

npm install coordtransform

示例用法(Example&Usage)

1 NodeJs用法

//國測局座標(火星座標,比如高德地圖在用),百度座標,wgs84座標(谷歌國外以及絕大部分國外線上地圖使用的座標)var coordtransform=require('coordtransform');//百度經緯度座標轉國測局座標var bd09togcj02=coordtransform.bd09togcj02(116.404, 39.915);//國測局座標轉百度經緯度座標var gcj02tobd09=coordtransform.gcj02tobd09(116.404, 39.915);//wgs84轉國測局座標var wgs84togcj02=coordtransform.wgs84togcj02(116.404, 39.915);//國測局座標轉wgs84座標var gcj02towgs84=coordtransform.gcj02towgs84(116.404, 39.915);console.log(bd09togcj02);console.log(gcj02tobd09);console.log(wgs84togcj02);console.log(gcj02towgs84);//result//bd09togcj02: [ 116.39762729119315, 39.90865673957631 ]//gcj02tobd09: [ 116.41036949371029, 39.92133699351021 ]//wgs84togcj02: [ 116.41024449916938, 39.91640428150164 ]//gcj02towgs84: [ 116.39775550083061, 39.91359571849836 ]

2 瀏覽器用法

直接引用目錄內的index.js,會有一個coordtransform的全域性物件暴露出來,也支援用AMD載入器載入

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>coordTransform</title></head><body><h1>請按F12開啟控制檯檢視結果</h1><script src="index.js"></script><script> //國測局座標(火星座標,比如高德地圖在用),百度座標,wgs84座標(谷歌國外以及絕大部分國外線上地圖使用的座標) //百度經緯度座標轉國測局座標 var bd09togcj02 = coordtransform.bd09togcj02(116.404, 39.915); //國測局座標轉百度經緯度座標 var gcj02tobd09 = coordtransform.gcj02tobd09(116.404, 39.915); //wgs84轉國測局座標 var wgs84togcj02 = coordtransform.wgs84togcj02(116.404, 39.915); //國測局座標轉wgs84座標 var gcj02towgs84 = coordtransform.gcj02towgs84(116.404, 39.915); console.log(bd09togcj02); console.log(gcj02tobd09); console.log(wgs84togcj02); console.log(gcj02towgs84); //result //bd09togcj02: [ 116.39762729119315, 39.90865673957631 ] //gcj02tobd09: [ 116.41036949371029, 39.92133699351021 ] //wgs84togcj02: [ 116.41024449916938, 39.91640428150164 ] //gcj02towgs84: [ 116.39775550083061, 39.91359571849836 ]</script></body></html>

最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 詳解centos7和centos6系統的/tmp目錄自動清理規則及區別