我有一个位置列表,遵循这种模式:

[1] = {lat = -40.2452, longitude = -76.2489},
[2] = {lat = -40.2452, longitude = -76.2489},
[3] = {lat = -40.2452, longitude = -76.2489},
[4] = {lat = -40.2452, longitude = -76.2489}


和一个地区

location = {lat = -40.2452, longitude = -76.2489}


我想计算该距离内的哪个位置。

我发现了一个计算两点之间距离的公式。

但是如果这个名单很大!

有没有更快的方法?

或者您可以循环浏览列表?

FOR LOCATION IN LISTLOCATION DO
    IF GETDISTANCE(LOCATION, LOCATION2) <= DISTANCE
        SAVE THIS LOCATION
    END
END


这些值是一个例子

最佳答案

基本上,您必须检查每个点,没有其他选择。距离公式(Haversine)确实很慢,因为它使用的三角函数很少。您真正想要的是在您的点周围绘制一个圆,其半径R为距离,并检查每个点是否在该圆内:
java - 计算位置与位置列表之间的距离-LMLPHP

问题在于,您的点是(纬,长)对,而不是(x,y)对,因此您不能使用“正则”三角法,例如圆的方程。
相反,您必须找到一个以该圆为界的正方形。向南和北90度旋转,找到该正方形的上下经度。对东西方向进行相同操作,找到上下纬度:
java - 计算位置与位置列表之间的距离-LMLPHP

现在,您可以检查每个点是否在盒子内,并且可以通过简单的比较轻松地做到:

if lon > lon1 and lon < lon2
   and lat > lat2 and lat < lat1


这真的很便宜。
唯一的问题是蓝色区域内的点:
java - 计算位置与位置列表之间的距离-LMLPHP

它们在正方形内,但不在圆内,因此您必须使用Haversine公式。
如果您的大多数点不在正方形中,则此方法将节省您的时间,因为消除它们非常容易。

关于java - 计算位置与位置列表之间的距离,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37664500/

10-09 06:54
查看更多