在選擇地圖的地圖唧龄,有影像圖和街道圖,影像圖選擇的是Google
的影像圖吊洼,街道圖也是選擇的Google
的,因?yàn)橄螺d快制肮。當(dāng)然國(guó)內(nèi)的高德也是可以的冒窍。但是高德和Google
的街道圖都有一個(gè)問題,和OpenStreetMap
的街道圖對(duì)比豺鼻,明顯高德综液、Google
的地圖偏移了。
原因:
WGS84
:表示GPS獲取的坐標(biāo)谬莹。
GCJ02
:又稱火星坐標(biāo)系,是由中國(guó)國(guó)家測(cè)繪局制定的地理坐標(biāo)系統(tǒng),是由WGS84
加密后得到的坐標(biāo)系附帽。
BD09
:為百度坐標(biāo)系埠戳,在GCJ02
坐標(biāo)系基礎(chǔ)上再次加密。其中bd09ll
表示百度經(jīng)緯度坐標(biāo)蕉扮,bd09mc
表示百度墨卡托米制坐標(biāo)整胃。
所以我們需要將GPS坐標(biāo)轉(zhuǎn)化為GCJ-02。
參考資料:
GCJ-02火星坐標(biāo)系
使用github
中 eviltransform
代碼:
var srcCoords = geom.getCoordinates();
for (var j = 0; j < srcCoords.length; j++) {
var coods = srcCoords[j];
if($.isArray(coods)) {
if($.isArray(coods[0])) {
//Plogon
for(var k = 0; k < coods.length; k++){
var subPoint = coods[k];
for(var l = 0; l < subPoint.length; l++){
if(l % 2 != 0) continue;
var lat = subPoint[l + 1], lng = subPoint[l];
var wgs = wgs2gcj(lat, lng);
subPoint[l] = wgs.lng;
subPoint[l+1] = wgs.lat;
}
}
} else {
//LineString
for(var k = 0; k < coods.length; k++){
if(k % 2 != 0) continue;
var lat = coods[k + 1], lng = coods[k];
var wgs = wgs2gcj(lat, lng);
coods[k] = wgs.lng;
coods[k+1] = wgs.lat;
}
}
} else {
//Point
if(j % 2 != 0) continue;
var lat = srcCoords[j + 1], lng = srcCoords[j];
var wgs = wgs2gcj(lat, lng);
srcCoords[j] = wgs.lng;
srcCoords[j+1] = wgs.lat;
}
}
geom.setCoordinates(srcCoords, geom.getLayout());