轉(zhuǎn):https://codeload.github.com/wandergis/coordtransform/legacy.zip/master
coordtransform 坐標(biāo)轉(zhuǎn)換
一個(gè)提供了百度坐標(biāo)(BD09)、國(guó)測(cè)局坐標(biāo)(火星坐標(biāo),GCJ02)藕甩、和WGS84坐標(biāo)系之間的轉(zhuǎn)換的工具模塊另外還提供了python版本的代碼https://github.com/wandergis/coordTransform_py
GitHub地址:https://github.com/wandergis/coordtransform
npm地址:https://www.npmjs.com/package/coordtransform
項(xiàng)目主頁:http://wandergis.github.io/coordtransform/
隨著移動(dòng)互聯(lián)網(wǎng)的興起,幾乎每一個(gè)app都會(huì)去收集用戶位置狐肢,如果恰好你在處理與地理定位相關(guān)的代碼弃秆,并且不了解地理坐標(biāo)系的話,肯定要被我大天朝各種坐標(biāo)系搞暈入桂。寫這個(gè)模塊的目的也是因?yàn)轫?xiàng)目中app獲取的坐標(biāo)是百度sdk獲取的奄薇,在做webgis可視化的時(shí)候各種偏,各種坐標(biāo)不對(duì)抗愁,當(dāng)時(shí)的心情就是下面這個(gè)圖片馁蒂。
?當(dāng)前互聯(lián)網(wǎng)地圖的坐標(biāo)系現(xiàn)狀
國(guó)際標(biāo)準(zhǔn),從 GPS 設(shè)備中取出的數(shù)據(jù)的坐標(biāo)系
國(guó)際地圖提供商使用的坐標(biāo)系
?火星坐標(biāo) (GCJ-02)也叫國(guó)測(cè)局坐標(biāo)系
中國(guó)標(biāo)準(zhǔn)蜘腌,從國(guó)行移動(dòng)設(shè)備中定位獲取的坐標(biāo)數(shù)據(jù)使用這個(gè)坐標(biāo)系
國(guó)家規(guī)定: 國(guó)內(nèi)出版的各種地圖系統(tǒng)(包括電子形式)沫屡,必須至少采用GCJ-02對(duì)地理位置進(jìn)行首次加密。
百度標(biāo)準(zhǔn)撮珠,百度 SDK沮脖,百度地圖,Geocoding 使用
(本來就亂了劫瞳,百度又在火星坐標(biāo)上來個(gè)二次加密)
從設(shè)備獲取經(jīng)緯度(GPS)坐標(biāo)
? ? 如果使用的是百度sdk那么可以獲得百度坐標(biāo)(bd09)或者火星坐標(biāo)(GCJ02),默認(rèn)是bd09
? ? 如果使用的是ios的原生定位庫倘潜,那么獲得的坐標(biāo)是WGS84
? ? 如果使用的是高德sdk,那么獲取的坐標(biāo)是GCJ02
互聯(lián)網(wǎng)在線地圖使用的坐標(biāo)系
火星坐標(biāo)系:
? ? ? ? iOS 地圖(其實(shí)是高德)
? ? ? ? Gogole地圖
? ? ? ? 搜搜、阿里云志于、高德地圖
百度坐標(biāo)系:
? ? ? ? 當(dāng)然只有百度地圖
WGS84坐標(biāo)系:
? ? ? ? 國(guó)際標(biāo)準(zhǔn)涮因,谷歌國(guó)外地圖、osm地圖等國(guó)外的地圖一般都是這個(gè)
筆者所在的公司app使用的是百度的sdk,需要對(duì)定位坐標(biāo)做web可視化效果伺绽,百度地圖提供的js api滿足不了需求养泡,選用leaflet來做可視化,這里要說到百度地圖了奈应,它使用的坐標(biāo)系和切圖的原點(diǎn)都不一致澜掩,并且其加偏還是非線性的,因此無法利用常用的加載方法去加載杖挣,放棄使用它的底圖肩榕,選用了符合標(biāo)準(zhǔn)的高德底圖,高德底圖使用的是國(guó)測(cè)局坐標(biāo)也就是GCJ02坐標(biāo)系惩妇,如果簡(jiǎn)單的將app獲取的經(jīng)緯度疊加上去株汉,就有可能你本來在百度大廈的位置就顯示在西二旗地鐵站了甚至更遠(yuǎn),因此需要將bd09轉(zhuǎn)成gcj02坐標(biāo)系歌殃,這個(gè)時(shí)候這個(gè)庫就有了用武之地乔妈,對(duì)點(diǎn)批量轉(zhuǎn)換再加載到底圖上,就可以讓點(diǎn)顯示在本應(yīng)該出現(xiàn)的位置氓皱。
另外如果你拿到了一些WGS84的坐標(biāo)路召,想加載到各種底圖上就可以根據(jù)這個(gè)庫在底圖坐標(biāo)系和你的數(shù)據(jù)坐標(biāo)系之間進(jìn)行轉(zhuǎn)換勃刨。希望對(duì)大家有用吧。
npm install coordtransform
1 NodeJs用法
//國(guó)測(cè)局坐標(biāo)(火星坐標(biāo),比如高德地圖在用),百度坐標(biāo),wgs84坐標(biāo)(谷歌國(guó)外以及絕大部分國(guó)外在線地圖使用的坐標(biāo))
var coordtransform=require('coordtransform');
//百度經(jīng)緯度坐標(biāo)轉(zhuǎn)國(guó)測(cè)局坐標(biāo)
var bd09togcj02=coordtransform.bd09togcj02(116.404, 39.915);
//國(guó)測(cè)局坐標(biāo)轉(zhuǎn)百度經(jīng)緯度坐標(biāo)
var gcj02tobd09=coordtransform.gcj02tobd09(116.404, 39.915);
//wgs84轉(zhuǎn)國(guó)測(cè)局坐標(biāo)
var wgs84togcj02=coordtransform.wgs84togcj02(116.404, 39.915);
//國(guó)測(cè)局坐標(biāo)轉(zhuǎn)wgs84坐標(biāo)
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 瀏覽器用法 直接引用目錄內(nèi)的index.js股淡,會(huì)有一個(gè)coordtransform的全局對(duì)象暴露出來身隐,也支持用AMD加載器加載
<!DOCTYPE html>
<html lang="en">
<head>
? ? <meta charset="UTF-8">
? ? <title>coordTransform</title>
</head>
<body>
<h1>請(qǐng)按F12打開控制臺(tái)查看結(jié)果</h1>
<script src="index.js"></script>
<script>
? ? //國(guó)測(cè)局坐標(biāo)(火星坐標(biāo),比如高德地圖在用),百度坐標(biāo),wgs84坐標(biāo)(谷歌國(guó)外以及絕大部分國(guó)外在線地圖使用的坐標(biāo))
? ? //百度經(jīng)緯度坐標(biāo)轉(zhuǎn)國(guó)測(cè)局坐標(biāo)
? ? var bd09togcj02 = coordtransform.bd09togcj02(116.404, 39.915);
? ? //國(guó)測(cè)局坐標(biāo)轉(zhuǎn)百度經(jīng)緯度坐標(biāo)
? ? var gcj02tobd09 = coordtransform.gcj02tobd09(116.404, 39.915);
? ? //wgs84轉(zhuǎn)國(guó)測(cè)局坐標(biāo)
? ? var wgs84togcj02 = coordtransform.wgs84togcj02(116.404, 39.915);
? ? //國(guó)測(cè)局坐標(biāo)轉(zhuǎn)wgs84坐標(biāo)
? ? 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>