只需传入两点的经纬度,返回距离
public static double distanceByLngLat(String lng1, String lat1, String lng2, String lat2) {
if (StrUtil.hasEmpty(lng1, lng2, lat1, lat2)) {
return -1;
}
double doubleLng1 = Double.parseDouble(lng1);
double doubleLat1 = Double.parseDouble(lat1);
double doubleLng2 = Double.parseDouble(lng2);
double doubleLat2 = Double.parseDouble(lat2);
Assert.checkBetween(doubleLng1, -180, 180);
Assert.checkBetween(doubleLat1, -90, 90);
Assert.checkBetween(doubleLng2, -180, 180);
Assert.checkBetween(doubleLat2, -90, 90);
double a, b, R;
R = 6378137;// 地球半径
doubleLat1 = doubleLat1 * Math.PI / 180.0;
doubleLat2 = doubleLat2 * Math.PI / 180.0;
a = doubleLat1 - doubleLat2;
b = (doubleLng1 - doubleLng2) * Math.PI / 180.0;
double d;
double sa2, sb2;
sa2 = Math.sin(a / 2.0);
sb2 = Math.sin(b / 2.0);
d = 2 * R * Math.asin(Math.sqrt(sa2 * sa2 + Math.cos(doubleLat1) * Math.cos(doubleLat2) * sb2 * sb2));
return d;
}