package com.ruoyi.staff.utils;
|
|
// 工具类:计算两个经纬度之间的距离(球面距离)
|
public class LocationUtils {
|
private static final double EARTH_RADIUS = 6371000; // 地球半径,单位米
|
|
/**
|
* 计算两个经纬度之间的距离(米)
|
* @param lat1 第一个点纬度
|
* @param lon1 第一个点经度
|
* @param lat2 第二个点纬度
|
* @param lon2 第二个点经度
|
* @return 距离(米)
|
*/
|
public static double calculateDistance(double lat1, double lon1, double lat2, double lon2) {
|
// 转弧度
|
double radLat1 = Math.toRadians(lat1);
|
double radLon1 = Math.toRadians(lon1);
|
double radLat2 = Math.toRadians(lat2);
|
double radLon2 = Math.toRadians(lon2);
|
|
// 差值
|
double deltaLat = radLat1 - radLat2;
|
double deltaLon = radLon1 - radLon2;
|
|
// 球面距离公式
|
double distance = 2 * Math.asin(Math.sqrt(
|
Math.pow(Math.sin(deltaLat / 2), 2) +
|
Math.cos(radLat1) * Math.cos(radLat2) *
|
Math.pow(Math.sin(deltaLon / 2), 2)
|
));
|
distance = distance * EARTH_RADIUS;
|
// 保留两位小数
|
distance = Math.round(distance * 100) / 100.0;
|
return distance;
|
}
|
}
|