当我们在开发的过程中,会使用不同地图,而不同的地图使用的坐标系也都不一样。这里汇总了常见的坐标转换方法。
// WGS-84:是国际标准,GPS坐标(Google Earth使用、Cesium或者GPS模块)
// GCJ-02:中国坐标偏移标准,Google Map、高德、腾讯使用
// BD-09:百度坐标偏移标准,Baidu Map使用
// //WGS-84 to GCJ-02
// GPS.gcj_encrypt();
// //GCJ-02 to WGS-84 粗略
// GPS.gcj_decrypt();
// //GCJ-02 to WGS-84 精确(二分极限法)
// // var threshold = 0.000000001; 目前设置的是精确到小数点后9位,这个值越小,越精确,但是javascript中,浮点运算本身就不太精确,九位在GPS里也偏差不大了
// GSP.gcj_decrypt_exact();
// //GCJ-02 to BD-09
// GPS.bd_encrypt();
// //BD-09 to GCJ-02
// GPS.bd_decrypt();
// //求距离
// GPS.distance();
// 示例:
// document.write("GPS: 39.933676862706776,116.35608315379092<br />");
// var arr2 = GPS.gcj_encrypt(39.933676862706776, 116.35608315379092);
// document.write("中国:" + arr2['lat']+","+arr2['lng']+'<br />');
// var arr3 = GPS.gcj_decrypt_exact(arr2['lat'], arr2['lng']);
// document.write('逆算:' + arr3['lat']+","+arr3['lng']+' 需要和第一行相似(目前是小数点后9位相等)');
var GPS_Coordinate_Transformation = {
PI: 3.14159265358979324,
x_pi: 3.14159265358979324 * 3000.0 / 180.0,
delta: function (lat, lng) {
// Krasovsky 1940
//
// a = 6378245.0, 1/f = 298.3
// b = a * (1 - f)
// ee = (a^2 - b^2) / a^2;
var a = 6378245.0; // a: 卫星椭球坐标投影到平面地图坐标系的投影因子。
var ee = 0.00669342162296594323; // ee: 椭球的偏心率。
var dLat = this.transformLat(lng - 105.0, lat - 35.0);
var dLng