public static final double PI = 3.1415926535897932384626433832795;
public static final double x_pi = PI * 3000.0 / 180.0;
/**
* GCJ-02坐标转百度BD-09坐标
* @param gcjLat
* @param gcjLon
* @return
*/
public static Map<String, Double> bd_encrypt(Double gcjLat, Double gcjLon) {
Map<String, Double> model = new HashMap<String, Double>();
Double x = gcjLon, y = gcjLat;
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);
Double bdLon = z * Math.cos(theta) + 0.0065;
Double bdLat = z * Math.sin(theta) + 0.006;
model.put("lat", bdLat);
model.put("lon", bdLon);
return model;
}
/**
* 百度BD-09坐标转GCJ-02坐标
* @param bdLat
* @param bdLon
* @return
*/
public static Map<String, Double> bd_decrypt(Double bdLat, Double bdLon) {
Map<String, Double> model = new HashMap<String, Double>();
Double x = bdLon - 0.0065, y = bdLat - 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);
Double gcjLon = z * Math.cos(theta);
Double gcjLat = z * Math.sin(theta);
model.put("lat", gcjLat);
model.put("lon", gcjLon);
return model;
}
// 百度转高德/腾讯
Map<String, Double> stringDoubleMap = LocationController.bd_decrypt(37.917206,112.588393);
System.out.println("百度地图转高德/腾讯地图" + stringDoubleMap);
// 高德/腾讯转百度
Map<String, Double> stringDoubleMap1 = LocationController.bd_encrypt(37.910937,112.58667);
System.out.println("高德/腾讯转百度地图" + stringDoubleMap1);
结果: