如何在Java中基于两个纬度+经度点测量距离并创建边界框?

时间:2020-03-06 14:35:30  来源:igfitidea点击:

我想找到两个不同点之间的距离。我知道这可以通过较大的圆距实现。
http://www.meridianworlddata.com/Distance-calculation.asp

完成后,我要找到一个点和一个距离,以北为点,以东为该点,以便在该点周围创建一个框。

解决方案

使用OpenMap绘制大量位置数据已经取得了一些成功。有一个LatLonPoint类,它具有一些基本功能,包括距离。

这是Haversine公式的Java实现。我在项目中使用它来计算纬度/经度之间的距离(以英里为单位)。

public static double distFrom(double lat1, double lng1, double lat2, double lng2) {
    double earthRadius = 3958.75; // miles (or 6371.0 kilometers)
    double dLat = Math.toRadians(lat2-lat1);
    double dLng = Math.toRadians(lng2-lng1);
    double sindLat = Math.sin(dLat / 2);
    double sindLng = Math.sin(dLng / 2);
    double a = Math.pow(sindLat, 2) + Math.pow(sindLng, 2)
            * Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2));
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
    double dist = earthRadius * c;

    return dist;
    }

或者,我们可以使用SimpleLatLng。我认可的Apache 2.0已在一个生产系统中使用并许可使用:我的。

短篇故事:

我正在寻找一个简单的地理图书馆,但找不到适合我的需求的图书馆。谁愿意在每个应用程序中一遍又一遍地编写,测试和调试这些小的地理工具?一定有更好的方法!

因此,SimpleLatLng诞生了一种存储纬度-经度数据,进行距离计算和创建形状边界的方法。

我知道我要为原始海报提供帮助已经为时两年,但我的目标是帮助像我这样的人在搜索中找到这个问题。我希望有人可以使用它,并为这个小型轻量级实用程序的测试和愿景做出贡献。