package com.ruoyi.common.utils;

public class DistanceCalculatorUtil {

    // 地球半径，单位为千米
    private static final double EARTH_RADIUS = 6371.0;

    /**
     * 计算两个经纬度之间的距离
     *
     * @param lat1 第一个点的纬度
     * @param lon1 第一个点的经度
     * @param lat2 第二个点的纬度
     * @param lon2 第二个点的经度
     * @return 两个点之间的距离，单位为千米
     */
    public static double calculateDistance(double lat1, double lon1, double lat2, double lon2) {
        // 将经纬度转换为弧度
        double lat1Rad = Math.toRadians(lat1);
        double lon1Rad = Math.toRadians(lon1);
        double lat2Rad = Math.toRadians(lat2);
        double lon2Rad = Math.toRadians(lon2);

        // 计算纬度和经度的差值
        double deltaLat = lat2Rad - lat1Rad;
        double deltaLon = lon2Rad - lon1Rad;

        // 使用Haversine公式计算距离
        double a = Math.sin(deltaLat / 2) * Math.sin(deltaLat / 2) +
                Math.cos(lat1Rad) * Math.cos(lat2Rad) *
                        Math.sin(deltaLon / 2) * Math.sin(deltaLon / 2);
        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
        double distance = EARTH_RADIUS * c;

        return distance;
    }

//    public static void main(String[] args) {
//        double lat1 = 40.78915; // 北京的纬度
//        double lon1 = 111.725334; // 北京的经度
//        double lat2 = 40.763424; // 上海的纬度
//        double lon2 = 111.65502; // 上海的经度
//
//        double distance = calculateDistance(lat1, lon1, lat2, lon2);
//        System.out.println("北京和上海之间的距离是: " + distance + " 千米");
//    }
}
