var x_PI =(3.14159265358979324*3000.0)/180.0varPI=3.1415926535897932384626var a =6378245.0var ee =0.00669342162296594323
百度坐标系 (BD-09) 与 火星坐标系 (GCJ-02) 的转换
即 百度 转 谷歌、高德
/**
* 百度坐标系 (BD-09) 与 火星坐标系 (GCJ-02) 的转换
* 即 百度 转 谷歌、高德
* @param bd_lng
* @param bd_lat
* @returns {*[]}
*/exportconstbd09togcj02=functionbd09togcj02(bd_lng, bd_lat){var bd_lng =+bd_lng
var bd_lat =+bd_lat
var x = bd_lng -0.0065var y = bd_lat -0.006var z = Math.sqrt(x * x + y * y)-0.00002* Math.sin(y * x_PI)var theta = Math.atan2(y, x)-0.000003* Math.cos(x * x_PI)var gg_lng = z * Math.cos(theta)var gg_lat = z * Math.sin(theta)return[gg_lng, gg_lat]}
火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换
即 谷歌、高德 转 百度
/**
* 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换
* 即 谷歌、高德 转 百度
* @param lng
* @param lat
* @returns {*[]}
*/exportconstgcj02tobd09=functiongcj02tobd09(lng, lat){var lat =+lat
var lng =+lng
var z = Math.sqrt(lng * lng + lat * lat)+0.00002* Math.sin(lat * x_PI)var theta = Math.atan2(lat, lng)+0.000003* Math.cos(lng * x_PI)var bd_lng = z * Math.cos(theta)+0.0065var bd_lat = z * Math.sin(theta)+0.006return[bd_lng, bd_lat]}
WGS-84 转 GCJ-02
/**
* WGS-84 转 GCJ-02
* @param lng
* @param lat
* @returns {*[]}
*/exportconstwgs84togcj02=functionwgs84togcj02(lng, lat){var lat =+lat
var lng =+lng
if(out_of_china(lng, lat)){return[lng, lat]}else{var dlat =transformlat(lng -105.0, lat -35.0)var dlng =transformlng(lng -105.0, lat -35.0)var radlat =(lat /180.0)*PIvar 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 mglat = lat + dlat
var mglng = lng + dlng
return[mglng, mglat]}}
GCJ-02 转换为 WGS-84
/**
* GCJ-02 转换为 WGS-84
* @param lng
* @param lat
* @returns {*[]}
*/exportconstgcj02towgs84=functiongcj02towgs84(lng, lat){var lat =+lat
var lng =+lng
if(out_of_china(lng, lat)){return[lng, lat]}else{var dlat =transformlat(lng -105.0, lat -35.0)var dlng =transformlng(lng -105.0, lat -35.0)var radlat =(lat /180.0)*PIvar 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 mglat = lat + dlat
var mglng = lng + dlng
return[lng *2- mglng, lat *2- mglat]}}
坐标转换
exportconsttransformlat=functiontransformlat(lng, lat){var lat =+lat
var lng =+lng
var 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.0return ret
}
exportconsttransformlng=functiontransformlng(lng, lat){var lat =+lat
var lng =+lng
var 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.0return ret
}
判断是否在国内,不在国内则不做偏移
/**
* 判断是否在国内,不在国内则不做偏移
* @param lng
* @param lat
* @returns {boolean}
*/exportconstout_of_china=functionout_of_china(lng, lat){var lat =+lat
var lng =+lng
// 纬度 3.86~53.55, 经度 73.66~135.05return!(lng >73.66&& lng <135.05&& lat >3.86&& lat <53.55)}