我有一个位置列表,遵循这种模式:
[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
为距离,并检查每个点是否在该圆内:
问题在于,您的点是(纬,长)对,而不是(x,y)对,因此您不能使用“正则”三角法,例如圆的方程。
相反,您必须找到一个以该圆为界的正方形。向南和北90度旋转,找到该正方形的上下经度。对东西方向进行相同操作,找到上下纬度:
现在,您可以检查每个点是否在盒子内,并且可以通过简单的比较轻松地做到:
if lon > lon1 and lon < lon2
and lat > lat2 and lat < lat1
这真的很便宜。
唯一的问题是蓝色区域内的点:
它们在正方形内,但不在圆内,因此您必须使用Haversine公式。
如果您的大多数点不在正方形中,则此方法将节省您的时间,因为消除它们非常容易。
关于java - 计算位置与位置列表之间的距离,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37664500/