百度高德坐标转换
package com.edcsc.bus.util;
import java.math.BigDecimal;
import net.sf.json.JSONObject;
public class GpsToGaoDeUtil {
private static double x_pi = 3.14159265358979324 * 3000.0 / 180.0;
/**
* 对double类型数据保留小数点后多少位 高德地图转码返回的就是 小数点后6位,为了统一封装一下
*
* @param digit 位数
* @param in 输入
* @return 保留小数位后的数
*/
static double dataDigit(int digit, double in) {
return new BigDecimal(in).setScale(digit, BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* 将火星坐标转变成百度坐标
* @param longitude 经度
* @param lantitude 纬度
* @return 百度坐标
*/
public static JSONObject bd_encrypt(double longitude ,double latitude) {
JSONObject json = new JSONObject();
double x = longitude, y = latitude;
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);
json.put("longitude", dataDigit(6, z * Math.cos(theta) + 0.0065));
json.put("lantitude", dataDigit(6, z * Math.sin(theta) + 0.006));
return json;
}
/**
* 将百度坐标转变成火星坐标
* @param longitude 经度
* @param lantitude 纬度
* @return 火星坐标(高德、腾讯地图等)
*/
public static JSONObject bd_decrypt(double longitude ,double latitude) {
JSONObject json = new JSONObject();
//double x = longitude - 0.0065, y = latitude - 0.006;
double x = longitude - 0.00651, y = latitude - 0.00593;
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);
json.put("longitude", dataDigit(10, z * Math.cos(theta)));
json.put("latitude", dataDigit(10, z * Math.sin(theta)));
return json;
}
// 测试代码
public static void main(String[] args) {
System.out.println(bd_decrypt(114.32995788563,30.510125271539).toString());
}
}