package org.jeecg.modules.system.util;

public class PositionUtil {
    /**
     * 使用 Haversine 公式计算两点之间的直线距离
     *
     * @param lat1 第一个点的纬度（单位：度）
     * @param lon1 第一个点的经度（单位：度）
     * @param lat2 第二个点的纬度（单位：度）
     * @param lon2 第二个点的经度（单位：度）
     * @return 两点之间的直线距离（单位：公里）
     */
    public static double calculateDistance(double lat1, double lon1, double lat2, double lon2) {
        if (lat1 == lat2 && lon1 == lon2) {
            return 0; // 两点相同时返回0
        }
        final int EARTH_RADIUS_KM = 6371; // 地球平均半径，单位：公里
        // 将角度转换为弧度
        double lat1Rad = Math.toRadians(lat1);
        double lat2Rad = Math.toRadians(lat2);
        double deltaLat = Math.toRadians(lat2 - lat1);
        double deltaLon = Math.toRadians(lon2 - lon1);
        // Haversine 公式
        double a = Math.pow(Math.sin(deltaLat / 2), 2)
                + Math.cos(lat1Rad) * Math.cos(lat2Rad)
                * Math.pow(Math.sin(deltaLon / 2), 2);
        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
        // 计算距离并保留一位小数
        double distance = EARTH_RADIUS_KM * c;
        return Math.round(distance * 10) / 10.0; // 四舍五入保留一位小数
    }
}
