编辑代码

//JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。 
const PI = Math.PI;
const PIX = Math.PI * 3000 / 180;
const EE = 0.00669342162296594323; // 地球偏扁率
const A = 6378245.0; // 长半轴

function wgs84_to_gcj02(lng, lat) {
    /* WGS84 -> GCJ02 天地图 到 高德 */
    if (out_of_china(lng, lat)) {
        return [lng, lat];
    }
    var dlat = transform_lat(lng - 105.0, lat - 35.0);
    var dlng = transform_lng(lng - 105.0, lat - 35.0);
    var radlat = lat * Math.PI / 180.0;
    var magic = Math.sin(radlat);
    magic = 1 - EE * magic * magic;
    var sqrtmagic = Math.sqrt(magic);
    dlat = (dlat * 180.0) / (((A * (1 - EE)) / (magic * sqrtmagic)) * Math.PI);
    dlng = (dlng * 180.0) / (A / sqrtmagic * Math.cos(radlat) * Math.PI);
    lng += dlng;
    lat += dlat;
    return [lng, lat];
}

function gcj02_to_wgs84(lng, lat) {
    /* GCJ02 -> WGS84 高德 到 天地图 */
    if (out_of_china(lng, lat)) {
        return [lng, lat];
    }
    var dlat = transform_lat(lng - 105.0, lat - 35.0);
    var dlng = transform_lng(lng - 105.0, lat - 35.0);
    var radlat = lat * Math.PI / 180.0;
    var magic = Math.sin(radlat);
    magic = 1 - EE * magic * magic;
    var sqrtmagic = Math.sqrt(magic);
    dlat = (dlat * 180.0) / (((A * (1 - EE)) / (magic * sqrtmagic)) * Math.PI);
    dlng = (dlng * 180.0) / (A / sqrtmagic * Math.cos(radlat) * Math.PI);
    lng -= dlng;
    lat -= dlat;
    return [lng, lat];
}

function transform_lat(lng, lat) {
    /* GCJ02 latitude transformation */
    let ret = -100 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.abs(lng) ** 0.5;
    ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
    ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0;
    ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320.0 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0;
    return ret;
}

function transform_lng(lng, lat) {
    /* GCJ02 longtitude transformation */
    let ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.abs(lng) ** 0.5;
    ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
    ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0;
    ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0;
    return ret;
}

function out_of_china(lng, lat) {
    /* No offset when coordinate out of China. */
    if (lng < 72.004 || lng > 137.8437) {
        return true;
    }
    if (lat < 0.8293 || lat > 55.8271) {
        return true;
    }
    return false;
}


let orgData = [{
    'lng': 114.446480, 'lat': 38.055711
}, {
    'lng': 114.446523, 'lat': 38.056065
}, {
    'lng': 114.446523, 'lat': 38.056403
}]


function transMain() {
    let transData = [];
    orgData.forEach(i => {
        let t = gcj02_to_wgs84(i.lng, i.lat);
        transData.push(t[0]+","+t[1])
    })
    let data = {};
    data.boundArray = transData
    console.log(JSON.stringify(data));
}
transMain();