百度、高德、Googe经纬度转换

来源:互联网 发布:淘宝店铺文案范文 编辑:程序博客网 时间:2024/05/16 07:24
由于google、高德、腾讯、图吧地图、图吧导航使用的经纬度坐标是同一种坐标协议gcj02百度、搜狗使用的是另外一种坐标协议bd09(一个一个测试出来的),故有些时候拿到的数据坐标不一定是需要的,需要做一下转换,否则在地图上会有很大偏差的。
纠偏方法如下:
private static double x_pi = 3.14159265358979324 * 3000.0 / 180.0;/** * 中国正常坐标系GCJ02协议的坐标,转到 百度地图对应的 BD09 协议坐标 *  * @param lat * @param lng */public static void Convert_GCJ02_To_BD09(double lat, double lng) {double x = lng, y = lat;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);lng = z * Math.cos(theta) + 0.0065;lat = z * Math.sin(theta) + 0.006;}public static double Convert_GCJ02_To_BD09_Lat(double lat, double lng) {double x = lng, y = lat;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);lng = z * Math.cos(theta) + 0.0065;lat = z * Math.sin(theta) + 0.006;return lat;}public static double Convert_GCJ02_To_BD09_Lng(double lat, double lng) {double x = lng, y = lat;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);lng = z * Math.cos(theta) + 0.0065;lat = z * Math.sin(theta) + 0.006;return lng;}/** * 百度地图对应的 BD09 协议坐标,转到 中国正常坐标系GCJ02协议的坐标 *  * @param lat * @param lng */public static void Convert_BD09_To_GCJ02(double lat, double lng) {double x = lng - 0.0065, y = 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);lng = z * Math.cos(theta);lat = z * Math.sin(theta);}
如果哪位大神有更好的纠偏方法,可以拿出来让大家共同验证一下

0 0
原创粉丝点击