高德API坐标转换:http://lbs.amap.com/api/webservice/guide/api/convert/
算法优势
高德API自带坐标转换方法,每次转换都需要一次请求,效率太低。当你需要批量将GPS国际坐标转换成高德的火星坐标时,使用本算法,会有意想不到的性能提升。
使用方法
GPS.gcj_encrypt(
"纬度",
"经度");
代码实现
var GPS = {
PI :
3.14159265358979324,
x_pi :
3.14159265358979324 *
3000.0 /
180.0,
delta :
function (lat, lon) {
var a =
6378245.0;
var ee =
0.00669342162296594323;
var dLat =
this.transformLat(lon -
105.0, lat -
35.0);
var dLon =
this.transformLon(lon -
105.0, lat -
35.0);
var radLat = lat /
180.0 *
this.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) *
this.PI);
dLon = (dLon *
180.0) / (a / sqrtMagic *
Math.cos(radLat) *
this.PI);
return {
'lat': dLat,
'lon': dLon};
},
gcj_encrypt :
function ( wgsLat , 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};
},
outOfChina :
function (lat, lon) {
if (lon <
72.004 || lon >
137.8347)
return true;
if (lat <
0.8293 || lat >
55.8271)
return true;
return false;
},
transformLat :
function (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 *
this.PI) +
20.0 *
Math.sin(
2.0 * x *
this.PI)) *
2.0 /
3.0;
ret += (
20.0 *
Math.sin(y *
this.PI) +
40.0 *
Math.sin(y /
3.0 *
this.PI)) *
2.0 /
3.0;
ret += (
160.0 *
Math.sin(y /
12.0 *
this.PI) +
320 *
Math.sin(y *
this.PI /
30.0)) *
2.0 /
3.0;
return ret;
},
transformLon :
function (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 *
this.PI) +
20.0 *
Math.sin(
2.0 * x *
this.PI)) *
2.0 /
3.0;
ret += (
20.0 *
Math.sin(x *
this.PI) +
40.0 *
Math.sin(x /
3.0 *
this.PI)) *
2.0 /
3.0;
ret += (
150.0 *
Math.sin(x /
12.0 *
this.PI) +
300.0 *
Math.sin(x /
30.0 *
this.PI)) *
2.0 /
3.0;
return ret;
}
};
转载请注明原文地址: https://ju.6miu.com/read-668935.html