根據經緯度計算兩點之間的直線距離(算法)

 

Talk is cheap, show me the code.

 

import lombok.extern.slf4j.Slf4j;

/**
 * 根據經緯度,計算2點之間的直線距離。
 * 距離較近的場景,可以使用,誤差較小。
 * 距離較遠的場景,要考慮具體的業務場景。
 * 因爲這個只是計算直線距離,和實際的路線不同,所以要結合場景,看是否適用
 */
@Slf4j
public class CalCulateDistanceUtils {

    /**
     * 地球半徑(這裏取的是平均半徑)
     */
    private static final double EARTH_RADIUS = 6.371229 * 1e6;

    /**
     * @param lng1 地點A的經度
     * @param lat1 地點A的緯度
     * @param lng2 地點B的經度
     * @param lat2 地點B的緯度
     * @return 返參 double 單位千米(km)
     */
    public static double calculateDistance(double lng1, double lat1, double lng2, double lat2) {

        double x = (lng2 - lng1) * Math.PI * EARTH_RADIUS * Math.cos(((lat1 + lat2) / 2) * Math.PI / 180) / 180;
        double y = (lat1 - lat2) * Math.PI * EARTH_RADIUS / 180;

        // 默認是米,除以1000,返回千米
        return Math.hypot(x, y) / 1000;
    }

    public static void main(String[] args) {

        // 信陽的經度
        Double lng1 = 114.097708;
        // 信陽的緯度
        Double lat1 = 32.167521;

        // 佳木斯的經度
        Double lng2 = 130.324123;
        // 佳木斯的緯度
        Double lat2 = 46.812022;

        // 運行後,控制檯打印:佳木斯到信陽的距離:2142.6376176855483千米
        log.info("佳木斯到信陽的距離:{}千米", calculateDistance(lng1, lat1, lng2, lat2));
    }

}

 

發佈了97 篇原創文章 · 獲贊 225 · 訪問量 96萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章