private static double getRad(double d) {
return d * Math.PI / 180.0;
}
/**
* 两坐标(经纬度)之间距离计算
* GD/BD地图采用此算法
* @param startLng 起点坐标经度
* @param startLat 起点坐标纬度
* @param endLng 终点坐标经度
* @param endLat 终点坐标纬度
* @return 起点坐标与终点坐标的距离 单位:m
*/
public static double getGreatCircleDistance(double startLng, double startLat, double endLng, double endLat) {
double radLat1 = getRad(startLat);
double radLat2 = getRad(endLat);
double dy = radLat1 - radLat2; // a
double dx = getRad(startLng) - getRad(endLng); // b
double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(dy / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(dx / 2), 2)));
s = s * EARTH_RADIUS;
s = Math.round(s * 10000) / 10000.0;
return s;
}