WGS84坐标转换代码(JS版)
1.地图项目中总会遇到经纬度转化情况,或者是要兼容多个地图情况,所以需要用到坐标转化,下面封装一个gcj02towgs84 方法.
// PI:3.1415926535897932384626,
// a:6378245.0,
// ee:0.00669342162296594323,
let PI = 3.1415926535897932384626
let a = 6378245.0
let ee = 0.00669342162296594323
// 坐标系转化方法const lnglatResult: any = {finalLng: "",finalLat: "",
};function gcj02towgs84(lng, lat) {// 保存原始经纬度的正负标志const originalLngSign = Math.sign(lng);const originalLatSign = Math.sign(lat);// console.log(originalLngSign,originalLatSign,'正负标志');// 将经纬度转换为正数进行计算lat = Math.abs(lat);lng = Math.abs(lng);let dlat = transformlat(lng - 105.0, lat - 35.0)let dlng = transformlng(lng - 105.0, lat - 35.0)let radlat = lat / 180.0 * PIlet magic = Math.sin(radlat)magic = 1 - ee * magic * magiclet sqrtmagic = Math.sqrt(magic)dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI)dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI)let mglat = lat + dlatlet mglng = lng + dlnglet lngs = lng * 2 - mglnglet lats = lat * 2 - mglat// 根据原始经纬度的符号恢复转换结果的正负lnglatResult.finalLng = originalLngSign * lngs;lnglatResult.finalLat = originalLatSign * lats;return lnglatResult;
}
// 是判断在国内还是国外
// function out_of_china(lon, lat) {
// if (lon < 72.004 || lon > 137.8347) {
// return true;
// }
// if (lat < 0.8293 || lat > 55.8271) {
// return true;
// }
// return false;
// }
function transformlat(x, y) {let ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x));ret += (20.0 * Math.sin(6.0 * x * PI) + 20.0 * Math.sin(2.0 * x * PI)) * 2.0 / 3.0;ret += (20.0 * Math.sin(y * PI) + 40.0 * Math.sin(y / 3.0 * PI)) * 2.0 / 3.0;ret += (160.0 * Math.sin(y / 12.0 * PI) + 320.0 * Math.sin(y * PI / 30.0)) * 2.0 / 3.0;return ret;
}
function transformlng(x, y) {let ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x));ret += (20.0 * Math.sin(6.0 * x * PI) + 20.0 * Math.sin(2.0 * x * PI)) * 2.0 / 3.0;ret += (20.0 * Math.sin(x * PI) + 40.0 * Math.sin(x / 3.0 * PI)) * 2.0 / 3.0;ret += (150.0 * Math.sin(x / 12.0 * PI) + 300.0 * Math.sin(x / 30.0 * PI)) * 2.0 / 3.0;return ret;
}export {gcj02towgs84
};
2.可以直接复制使用,在自己项目中添加一个ts文件即可.