通过经纬度计算半径

7

我正在尝试确定两个位置(每个位置都有自己的纬度和经度值)是否相互距离一定范围内,比如一个3英里半径。我有双精度浮点数来表示每个位置的纬度和经度。

//Location 1
Double lattitude1 = 40.7143528;
Double longitude1 = -74.0059731;

//Location 2
Double lattitude2 = 33.325;
Double longitude2 = 44.422000000000025;

我想知道如何确定这两个位置是否在彼此的半径范围内,因为我不确定如何使用这种类型的值来做到这一点。

1
我建议使用Haversine公式。这里已经有一个很好的答案,其中包括它的Java实现。 - seedhead
2个回答

7

查看大圆距离

double CoordDistance(double latitude1, double longitude1, double latitude2, double longitude2)
{
    return 6371 * Math.acos(
        Math.sin(latitude1) * Math.sin(latitude2)
        + Math.cos(latitude1) * Math.cos(latitude2) * Math.cos(longitude2 - longitude1));
}

如果您的纬度和经度是以度数表示的,请将它们转换为弧度。

0
要获取两点之间的距离,您只需要使用以下代码片段即可。
Point2D p1 = new Point2D(lattitude1, longitude2);
Point2D p2 = new Point2D(lattitude2, longitude2);

double distanceBetweenTwoPoints = (double)Math.sqrt((double)Math.pow((p1.x - p2.x), 2.0) + (double)Math.pow((p1.y - p2.y), 2.0));

--- 编辑 ---

请查看评论以获取一个两个坐标(非2D)解决方案。


2
这段代码计算了二维空间中两点之间的直线距离。但他需要计算球面上两点之间的最短距离,也就是大圆距离。 - Geoffrey
3
公平起见,距离限制为3英里,在3英里范围内,地球的曲率与当地地形中奇怪的小山的影响相比并不会非常显著。 :) - Chris Cooper
为了获取两个坐标之间的距离,他必须阅读这篇文章(https://dev59.com/enRC5IYBdhLWcg3wP-dh)。这里有一个更完整的解释(http://www.movable-type.co.uk/scripts/latlong.html)。对于我的其他回复感到抱歉。 - Daniel García Baena

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接