根據兩點的經緯度坐標計算兩個坐標點之間的直線距離


貼代碼如下:

import java.awt.*;

/**
 * @author xulin
 * @date create in 9:06 2018/11/1
 * Description 根據提供的兩個國標經緯度,計算兩個點之間的距離
 */
public class DistanceConsider {
    // 地球半徑
    private static double EARTH_RADIUS = 6378.137;

    private static double rad(double d) {
        return d * Math.PI / 180.0;
    }

    /**
     * @author xulin
     * date 9:09 2018/11/1
     * Description 計算距離
     * 參數傳入:所在位置的坐標  目標位置的坐標
     * 一個參數的經緯之前要求使用","英文的逗號進行分隔
     * 返回: 輸入的兩個坐標點之間的距離  精確到小數點后兩位
     */
    public static double getDistance(String location, String target) {
        int locationCount = location.indexOf(",");
        // 源地點的經度
        double lngLocation = Double.parseDouble(location.substring(0, locationCount));
        // 源地點的維度
        double latLocation = Double.parseDouble(location.substring(locationCount + 1, location.length()));
        int targetCount = target.indexOf(",");
        // 目標地點的經度
        double lngTarget = Double.parseDouble(target.substring(0, targetCount));
        // 目標地點的維度
        double latTarget = Double.parseDouble(target.substring(targetCount + 1, target.length()));

        double lat1 = rad(latLocation);
        double lat2 = rad(latTarget);
        double lat = lat1 - lat2;
        double lng = rad(lngLocation) - rad(lngTarget);
        double distance = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(lat / 2), 2)
                + Math.cos(lat1) * Math.cos(lat2)
                * Math.pow(Math.sin(lng / 2), 2)));
        distance = distance * EARTH_RADIUS;
        distance = Math.round(distance * 10000d) / 10000d;
        distance = distance * 1000;
        return distance;
    }

    public static void main(String args[]) {
        String location = "116.368904, 39.923423";
        String target = "116.387271, 39.922501";
        System.out.println(getDistance(location, target));
    }
}

剛開始一直計算錯誤,是自己沒有區分經緯度,地理是硬傷,谷歌的公式是對的,網上的大部分方法也是對的, 如果計算之后發現了較大的誤差,記得查看經緯度是否計算反了,避免低級錯誤~~~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM