首页 >Java >java教程 >如何使用纬度和经度计算地球上两点之间的距离?

如何使用纬度和经度计算地球上两点之间的距离?

Susan Sarandon
Susan Sarandon原创
2024-10-31 13:39:02358浏览

How to Calculate the Distance Between Two Points on Earth Using Latitude and Longitude?

纬度和经度:计算两点之间的距离

计算地球上两点之间的距离需要了解它们的纬度和经度。虽然存在许多解决方案,但确定两个坐标之间距离的一种准确方法是半正弦公式。

Dommer 提供的半正弦方法的 Java 实现是:

<code class="java">final double RADIUS = 6371.01;
double temp = Math.cos(Math.toRadians(latA))
            * Math.cos(Math.toRadians(latB))
            * Math.cos(Math.toRadians((latB) - (latA)))
            + Math.sin(Math.toRadians(latA))
            * Math.sin(Math.toRadians(latB));
    return temp * RADIUS * Math.PI / 180;</code>

但是,当将此方法用于 GPS 轨迹等大型数据集时,可能会累积小错误。

还考虑点之间高度差异的改进实现是:

<code class="java">public static double distance(double lat1, double lat2, double lon1,
        double lon2, double el1, double el2) {

    final int R = 6371; // Radius of the earth
    
    double latDistance = Math.toRadians(lat2 - lat1);
    double lonDistance = Math.toRadians(lon2 - lon1);
    double a = Math.sin(latDistance / 2) * Math.sin(latDistance / 2)
            + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2))
            * Math.sin(lonDistance / 2) * Math.sin(lonDistance / 2);
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    double distance = R * c * 1000; // convert to meters

    double height = el1 - el2;

    distance = Math.pow(distance, 2) + Math.pow(height, 2);

    return Math.sqrt(distance);
}</code>

以上是如何使用纬度和经度计算地球上两点之间的距离?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn