创建的实体类,封装经纬度:
@Data
public class Point {
private Double lon;
private Double lat;
}
计算方法:
@Component
@Slf4j
public class JWDUtil {
/**
* 默认地球半径
*/
private static final double EARTH_RADIUS = 6378200;//赤道半径(单位m)
/**
* 经纬度转化为弧度(rad)
*/
private static double rad(double d) {
return d * Math.PI / 180.0;
}
/**
* 计算 a,b 两个点的距离,返回:单位千米
*/
public static double getPPDistance(Point a, Point b) {
double lon1 = a.getLon(); // lon1 第一点的精度
double lat1 = a.getLat(); // lat1 第一点的纬度
double lon2 = b.getLon(); // lon2 第二点的精度
double lat2 = b.getLat(); // lat2 第二点的纬度
double radLat1 = rad(lat1);
double radLat2 = rad(lat2);
double a1 = radLat1 - radLat2;
double b2 = rad(lon1) - rad(lon2);
double s = 2 * Math.asin(Math.sqrt(Math.pow(sin(a1 / 2), 2) + cos(radLat1) * cos(radLat2) * Math.pow(sin(b2 / 2), 2)));
s = s * EARTH_RADIUS;
s = Math.round(s * 10000) / 10000;
return s;
}
}