最近在写地图项目 ,要计算两个点经纬度的用的很多,就在百度地图开放平台里面找了个工具方法,觉得大家可能很多人都需要,那我就把他放上来有注释版本,方便大家知道他是做了什么事情,如何计算出来的(百度地图提供的没有注释)
/**
* 计算两个经纬度间距离 返回值为这两个坐标之间的距离(单位:米)
* @param lat_a 第一个点的纬度
* @param lng_a 第一个点的经度
* @param lat_b 第二个点的纬度
* @param lng_b 第二个点的经度
* @return
*/
public static double getDistance(double lat_a, double lng_a, double lat_b, double lng_b){
double pk = 180 / 3.14169; // 地球周长与直径的比例
// a1、a2、b1、b2:将纬度和经度转换为弧度后的值
double a1 = lat_a / pk;
double a2 = lng_a / pk;
double b1 = lat_b / pk;
double b2 = lng_b / pk;
// t1、t2、t3:三个余弦值,用于后续计算
double t1 = Math.cos(a1) * Math.cos(a2) * Math.cos(b1) * Math.cos(b2);
double t2 = Math.cos(a1) * Math.sin(a2) * Math.cos(b1) * Math.sin(b2);
double t3 = Math.sin(a1) * Math.sin(b1);
// 两个坐标之间的距离(弧度)
double tt = Math.acos(t1 + t2 + t3);
// 6371000:地球半径,单位为米
return 6371000 * tt;
}
更外 3.14169为圆周率的近似值,如果需要追求高精准度 可使用jdk提供的Math.PI