GPS坐標(biāo)在高德谷歌街道圖層火星坐標(biāo)系(GCJ-02)中展示

在選擇地圖的地圖,有影像圖和街道圖,影像圖選擇的是Google的影像圖,街道圖也是選擇的Google的,因?yàn)橄螺d快。當(dāng)然國內(nèi)的高德也是可以的。但是高德和Google的街道圖都有一個(gè)問題,和OpenStreetMap的街道圖對(duì)比,明顯高德、Google的地圖偏移了。

轉(zhuǎn)換前,設(shè)備在建筑物中

原因:

WGS84:表示GPS獲取的坐標(biāo)。
GCJ02:又稱火星坐標(biāo)系,是由中國國家測繪局制定的地理坐標(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)系

轉(zhuǎn)換后,設(shè)備在街道上

使用githubeviltransform
代碼:

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());
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容