/* eslint-disable space-before-function-paren */ /* eslint-disable prefer-const */ /* eslint-disable no-unused-vars */ /* eslint-disable semi */ /* eslint-disable camelcase */ // eslint-disable-next-line no-unused-vars const BD_FACTOR = (3.14159265358979324 * 3000.0) / 180.0; const PI = 3.1415926535897932384626; const RADIUS = 6378245.0; const EE = 0.00669342162296594323; function out_of_china(lng, lat) { lat = +lat; lng = +lng; return !(lng > 73.66 && lng < 135.05 && lat > 3.86 && lat < 53.55); } function WGS84ToGCJ02(lng, lat) { lat = +lat; lng = +lng; if (out_of_china(lng, lat)) { return [lng, lat]; } else { let d = delta(lng, lat); return [lng + d[0], lat + d[1]]; } } function delta(lng, lat) { let dLng = transformLng(lng - 105, lat - 35); let dLat = transformLat(lng - 105, lat - 35); const radLat = (lat / 180) * PI; let magic = Math.sin(radLat); magic = 1 - EE * magic * magic; const sqrtMagic = Math.sqrt(magic); dLng = (dLng * 180) / ((RADIUS / sqrtMagic) * Math.cos(radLat) * PI); dLat = (dLat * 180) / (((RADIUS * (1 - EE)) / (magic * sqrtMagic)) * PI); return [dLng, dLat]; } function transformLng(lng, lat) { lat = +lat; lng = +lng; let ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng)); 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 transformLat(lng, lat) { lat = +lat; lng = +lng; let ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng)); 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 * Math.sin((lat * PI) / 30.0)) * 2.0) / 3.0; return ret; } function GCJ02ToWGS84(lng, lat) { lat = +lat; lng = +lng; if (out_of_china(lng, lat)) { return [lng, lat]; } else { let out = [lng, lat]; let gcj02_point = WGS84ToGCJ02(lng, lat); let dlng = gcj02_point[0] - lng; let dlat = gcj02_point[1] - lat; do { gcj02_point = WGS84ToGCJ02((out[0] -= dlng), (out[1] -= dlat)); dlng = gcj02_point[0] - lng; dlat = gcj02_point[1] - lat; } while (Math.abs(dlng) > 1e-7 || Math.abs(dlat) > 1e-7); return out; } } export { GCJ02ToWGS84, WGS84ToGCJ02 };