地圖相關-百度-高德相互轉換

  1. 國際座標系 WGS-84:地心座標系,國際通用。應用:Googole Map
  2. 火星座標系 GCJ-02:由中國×××(G表示Guojia國家,C表示Cehui測繪,J表示Ju局)制訂的地理信息系統的座標系統。應用:高德地圖
  3. 百度座標系 BD-09:在GCJ-02的基礎上二次偏移。應用:百度地圖

GCJ-02和BD-09互相轉換 (js)

// 高德地圖座標系(火星座標GCJ-02) -> 百度地圖座標系(百度座標BD-09)
// 參數形式爲"lng,lat"
// 返回字符串"lng,lat"
function gcj2bdString(value, mapType) {
    if (mapType == BAIDU) {
        var x_pi = 3.14159265358979324 * 3000.0 / 180.0;
        var ll = value.split(",");
        var x = ll[0], y = ll[1];
        var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
        var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
        return (z * Math.cos(theta) + 0.0065) + ',' + (z * Math.sin(theta) + 0.006);
    } else if (mapType == GAODE) {
        return value;
    }
}

// 百度地圖座標系(百度座標BD-09) -> 高德地圖座標系(火星座標GCJ-02)
// 參數形式爲"lng,lat"
// 返回字符串"lng,lat"
function bd2gcjString(value, mapType) {
    if (mapType == BAIDU) {
        var x_pi = 3.14159265358979324 * 3000.0 / 180.0;
        var ll = value.split(",");
        var x = ll[0] - 0.0065, y = ll[1] - 0.006;
        var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
        var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
        return (z * Math.cos(theta)) + ',' + (z * Math.sin(theta));
    } else if (mapType == GAODE) {
        return value;
    }
}

百度轉高德


public static void bd_decrypt(double bd_lat, double bd_lon)
{
    double x = bd_lon - 0.0065, y = bd_lat - 0.006;
    double z = sqrt(x * x + y * y) - 0.00002 * sin(y * x_pi);
    double theta = atan2(y, x) - 0.000003 * cos(x * x_pi);
    double gg_lon = z * cos(theta);
    double gg_lat = z * sin(theta);

    BigDecimal lat = new BigDecimal(gg_lat);
    BigDecimal lon = new BigDecimal(gg_lon);
    System.out.println(bd_lat+","+bd_lon);
    System.out.println(gg_lat+","+gg_lon);
    System.out.println(lat.setScale(6,   BigDecimal.ROUND_HALF_DOWN)+","+lon.setScale(6,   
                       BigDecimal.ROUND_HALF_DOWN));
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章