地理位置计算:如果点在半径内,则计算它们

Posted

技术标签:

【中文标题】地理位置计算:如果点在半径内,则计算它们【英文标题】:geolocation calculation: calculate points if they are within a radius 【发布时间】:2012-07-25 15:08:07 【问题描述】:

好的,问题来了: 我想向我的用户展示他附近最近的地理点。

我有大约 55.000 个可以显示的固定地理点。 (我有他们所有的长/纬度) 取决于用户位置(经度/纬度),我想显示最近的 20 个地理点。

所以当然我可以只计算所有 55.000 个地理点,看看在用户 lang/lat 的某个半径内是否有 20 个,然后对它们进行排名,但这在某种程度上是计算总是 55tsd 地理点的开销。

是否有可能将 5 英里/公里范围“添加”到用户的经纬度,并仅计算该半径内的距离?

我希望你明白我的意思。 :) 谢谢

【问题讨论】:

这些存储在什么数据结构中?它们是在数据库中还是仅在数组、平面文件中......? 在任何情况下,您都应该查看bounding coordinates 您可以计算(使用一些有趣的数学)一个长/纬度来查看,因此您只需对您的项目的一个子集进行排名。我没有时间写出完整的答案,尤其是在不知道您打算使用哪些技术的情况下,但这应该可以帮助您入门 【参考方案1】:

如果计算所有点之间的距离需要太多时间,您可以仅通过 lat/lon (source_lat - target_lat) (source_lon - target_lon) 之间的简单差异来缩小可能的点,并只取最近的点进行最终计算的距离。您可以使用公式来计算距离。

D = 60* 1.1515 * acos (sin(pi*y/180) * sin(pi*Y/180) +
                   cos(pi*y/180) * cos(pi*Y/180) * cos((z-Z) *pi / 180) 
                     )  * 180 / pi)

但计算效率也取决于使用的数据库技术。

【讨论】:

您能否更详细地解释一下这个公式中到底发生了什么。究竟是什么60* 1.1515

以上是关于地理位置计算:如果点在半径内,则计算它们的主要内容,如果未能解决你的问题,请参考以下文章

如何检查地理位置是不是在半径范围内?

Objective-c 使用半径搜索位置

“我当前的地理位置”和其他坐标之间的计算

在 PHP 中计算纬度/经度 GPS 点周围的半径

使用经度和纬度选择半径内的对象[重复]

计算几何---点与三角形面片的关系