GeoUtil.java 1.01 KB
package com.diligrp.rider.util;

/**
 * 地理距离计算工具
 *  getDistance() 函数,使用 Haversine 公式
 */
public class GeoUtil {

    private static final double EARTH_RADIUS_KM = 6371.0;

    /**
     * 计算两点之间的距离(千米)
     * @param lat1 起点纬度
     * @param lng1 起点经度
     * @param lat2 终点纬度
     * @param lng2 终点经度
     * @return 距离(km),保留1位小数
     */
    public static double calcDistanceKm(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));
        double distKm = EARTH_RADIUS_KM * c;
        // 保留1位小数
        return Math.round(distKm * 10.0) / 10.0;
    }
}