package com.ruoyi.zhushi.util;

/**
 * 经纬度距离计算工具类
 */
public class GeoDistanceUtil {
    private static final double EARTH_RADIUS = 6371000; // 地球半径（米）

    /**
     * 计算两点间的距离（米）
     */
    public static double getDistance(double lat1, double lng1, double lat2, double lng2) {
        double dLat = Math.toRadians(lat2 - lat1);
        double dLng = Math.toRadians(lng2 - lng1);

        double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
                   Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
                   Math.sin(dLng / 2) * Math.sin(dLng / 2);

        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
        return EARTH_RADIUS * c;
    }

    /**
     * 计算两点间的距离（公里）
     */
    public static double getDistanceKm(double lat1, double lng1, double lat2, double lng2) {
        return getDistance(lat1, lng1, lat2, lng2) / 1000;
    }

    /**
     * 判断两点是否在指定范围内
     * @param lat1 点1纬度
     * @param lng1 点1经度
     * @param lat2 点2纬度
     * @param lng2 点2经度
     * @param maxDistance 最大距离（米）
     * @return 是否在范围内
     */
    public static boolean isInRange(double lat1, double lng1, double lat2, double lng2, double maxDistance) {
        double distance = getDistance(lat1, lng1, lat2, lng2);
        return distance <= maxDistance;
    }
}
