本篇的算法来源于http://cnodejs.org/topic/564c0a27e4766d487f6fe38d。然后我将它改成了Java版本。具体各个坐标系的介绍参考http://blog.csdn.net/bit_kaki/article/details/52733788,可以看出两者的算法基本相似 。
计算可以计算出结果,但是根据http://www.gpsspg.com/maps.htm进行测试,在84和火星坐标系进行转换时候,精度相差了好几百米。
附上代码:
/** * Created by hasee on 2017/7/31. */ public class Transform { double x_PI = 3.14159265358979324 * 3000.0 / 180.0; double PI = 3.1415926535897932384626; double a = 6378245.0; double ee = 0.00669342162296594323; /** * 百度坐标系 (BD-09) 与 火星坐标系 (GCJ-02)的转换 * 即 百度 转 谷歌、高德 * @param bd_lon * @param bd_lat * @returns {*[]} */ public Point bd09togcj02(double bd_lon, double bd_lat){ double x = bd_lon - 0.0065; double y = bd_lat - 0.006; double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_PI); double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_PI);