JavaScript 中将经纬度转换为 GPS 坐标系的过程通常涉及到 WGS84 坐标系(World Geodetic System 1984),这是 GPS 使用的标准坐标系。WGS84 坐标系中的经纬度已经是 GPS 坐标系的一部分,因此如果你有一个 WGS84 坐标系的经纬度值,那么它已经是 GPS 坐标系中的坐标了。
然而,如果你需要将其他坐标系(如 GCJ-02,也称为火星坐标系,中国国内使用的加密坐标系)转换为 WGS84 坐标系,那么你需要进行坐标转换。以下是一个简单的 JavaScript 函数,用于将 GCJ-02 坐标系转换为 WGS84 坐标系:
function transformFromGCJToWGS(gcjLat, gcjLng) {
var a = 6378245.0;
var ee = 0.00669342162296594323;
var pi = Math.PI;
function outOfChina(lat, lng) {
return lng < 72.004 || lng > 137.8347 || lat < 0.8293 || lat > 55.8271;
}
function transformLat(x, y) {
var 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 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0;
return ret;
}
function transformLng(x, y) {
var 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;
}
if (outOfChina(gcjLat, gcjLng)) {
return { lat: gcjLat, lng: gcjLng };
}
var dLat = transformLat(gcjLng - 105.0, gcjLat - 35.0);
var dLng = transformLng(gcjLng - 105.0, gcjLat - 35.0);
var radLat = gcjLat / 180.0 * pi;
var magic = Math.sin(radLat);
magic = 1 - ee * magic * magic;
var sqrtMagic = Math.sqrt(magic);
dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);
dLng = (dLng * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi);
var wgsLat = gcjLat - dLat;
var wgsLng = gcjLng - dLng;
return { lat: wgsLat, lng: wgsLng };
}
如果你在转换过程中遇到精度问题,可能是因为转换算法本身的局限性或者输入数据的准确性。解决方法包括:
请注意,坐标转换涉及到复杂的数学计算和地理知识,因此在实际应用中可能需要根据具体情况进行调整。
领取专属 10元无门槛券
手把手带您无忧上云