派生自 wuyushui/SewerAndRainNetwork

YANGDL
2021-01-05 77f7281ff7cee541aaa51339512e6443b7d89e42
src/utils/GISUtil.js
@@ -18,27 +18,27 @@
        var sqrtMagic = Math.sqrt(magic)
        dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * this.PI)
        dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * this.PI)
        return { 'lat': dLat, 'lon': dLon }
    return { lat: dLat, lon: dLon }
    },
    // WGS-84 to GCJ-02
    gcj_encrypt: function(wgsLat, wgsLon) {
        if (this.outOfChina(wgsLat, wgsLon)) { return { 'lat': wgsLat, 'lon': wgsLon } }
    if (this.outOfChina(wgsLat, wgsLon)) { return { lat: wgsLat, lon: wgsLon } }
        var d = this.delta(wgsLat, wgsLon)
        return { 'lat': wgsLat + d.lat, 'lon': wgsLon + d.lon }
    return { lat: wgsLat + d.lat, lon: wgsLon + d.lon }
    },
    // GCJ-02 to WGS-84
    gcj_decrypt: function(gcjLat, gcjLon) {
        if (this.outOfChina(gcjLat, gcjLon)) { return { 'lat': gcjLat, 'lon': gcjLon } }
    if (this.outOfChina(gcjLat, gcjLon)) { return { lat: gcjLat, lon: gcjLon } }
        var d = this.delta(gcjLat, gcjLon)
        return { 'lat': gcjLat - d.lat, 'lon': gcjLon - d.lon }
    return { lat: gcjLat - d.lat, lon: gcjLon - d.lon }
    },
    // GCJ-02 to WGS-84 exactly
    gcj_decrypt_exact: function(gcjLat, gcjLon) {
        let initDelta = 0.01
        let threshold = 0.000000001
    const initDelta = 0.01
    const threshold = 0.000000001
        let dLat = initDelta
        let dLon = initDelta
        let mLat = gcjLat - dLat
@@ -62,35 +62,35 @@
            if (++i > 10000) break
        }
        // console.log(i);
        return { 'lat': wgsLat, 'lon': wgsLon }
    return { lat: wgsLat, lon: wgsLon }
    },
    // GCJ-02 to BD-09
    bd_encrypt: function(gcjLat, gcjLon) {
        let x = gcjLon
        let y = gcjLat
        let z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * this.x_pi)
        let theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * this.x_pi)
        let bdLon = z * Math.cos(theta) + 0.0065
        let bdLat = z * Math.sin(theta) + 0.006
        return { 'lat': bdLat, 'lon': bdLon }
    const x = gcjLon
    const y = gcjLat
    const z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * this.x_pi)
    const theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * this.x_pi)
    const bdLon = z * Math.cos(theta) + 0.0065
    const bdLat = z * Math.sin(theta) + 0.006
    return { lat: bdLat, lon: bdLon }
    },
    // BD-09 to GCJ-02
    bd_decrypt: function(bdLat, bdLon) {
        let x = bdLon - 0.0065
        let y = bdLat - 0.006
        let z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * this.x_pi)
        let theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * this.x_pi)
        let gcjLon = z * Math.cos(theta)
        let gcjLat = z * Math.sin(theta)
        return { 'lat': gcjLat, 'lon': gcjLon }
    const x = bdLon - 0.0065
    const y = bdLat - 0.006
    const z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * this.x_pi)
    const theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * this.x_pi)
    const gcjLon = z * Math.cos(theta)
    const gcjLat = z * Math.sin(theta)
    return { lat: gcjLat, lon: gcjLon }
    },
    // WGS-84 to Web mercator
    // mercatorLat -> y mercatorLon -> x
    mercator_encrypt: function(wgsLat, wgsLon) {
        let x = wgsLon * 20037508.34 / 180.0
    const x = wgsLon * 20037508.34 / 180.0
        let y = Math.log(Math.tan((90.0 + wgsLat) * this.PI / 360.0)) / (this.PI / 180.0)
        y = y * 20037508.34 / 180.0
        return { 'lat': y, 'lon': x }
    return { lat: y, lon: x }
        /*
        if ((Math.abs(wgsLon) > 180 || Math.abs(wgsLat) > 90))
            return null;
@@ -106,7 +106,7 @@
        var x = mercatorLon / 20037508.34 * 180.0
        var y = mercatorLat / 20037508.34 * 180.0
        y = 180 / this.PI * (2 * Math.atan(Math.exp(y * this.PI / 180.0)) - this.PI / 2)
        return { 'lat': y, 'lon': x }
    return { lat: y, lon: x }
        /*
        if (Math.abs(mercatorLon) < 180 && Math.abs(mercatorLat) < 90)
            return null;