使用纬度 - 经度在java中获取错误距离来计算两个地方之间的距离

时间:2018-04-06 08:27:51

标签: java

我正在使用半正式公式来计算距离,但我得到的距离实际上谷歌地图距离是8.1km,但是半径公式显示为4.06

private static final int EARTH_RADIUS = 6371; // Approx Earth radius in KM

public static double distance(double startLat, double startLong, double endLat, double endLong) {

    double dLat = Math.toRadians((endLat - startLat));
    double dLong = Math.toRadians((endLong - startLong));

    startLat = Math.toRadians(startLat);
    endLat = Math.toRadians(endLat);

    double a = haversin(dLat) + Math.cos(startLat) * Math.cos(endLat) * haversin(dLong);
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

    return EARTH_RADIUS * c; // <-- d
}

public static double haversin(double val) {
    return Math.pow(Math.sin(val / 2), 2);
}

1 个答案:

答案 0 :(得分:1)

你的公式是正确的,问题来自糟糕的谷歌地图使用

正如蒂姆在评论中所建议的那样,你需要看到点对点距离,而不是道路距离

使用两个距离(17.451955,78.478187,17.442504,78.441323)给出4.06km:

map

8.1km可能是道路距离,而不是点对点