我应该探索什么算法来实现让用户找到位于他附近的其他用户的功能,所有用户的纬度和经度都是预先知道的并且是固定的[不是动态的]。 此外,我相信应该有更好的方法来存储此类数据,然后简单地将用户的经纬度与他的用户 ID 存储在数据库中。处理此问题的有效方法是什么?
最佳答案
如果您只是寻找接近的点,您所需要的只是一个简单的圆形边界半径,您可以对其进行调整或以对数方式向中心倾斜。当然,您会希望避免对每个查询的整个数据集执行此操作。通常,除了纬度/经度之外,您还会将 map 分解为您知道可以立即忽略的象限。 -- 只要确保您感兴趣的区域是边缘的,也可以查询相邻的象限。那就是有一个链接表,用于仅获取该象限中的行。
按象限缩小后。使用最基本的几何图形:
1) 使用简单的边界框消除大部分数据。
伪代码:
DistanceLat = abs( P2lat - P1lat);
DistanceLon = abs( P2lon - P1lat)
2) 做勾股定理看点是否落在半径范围内。缩减后的数据集内(a2+b2 =c2)
Distance = Sqrt( DistanceLat * DistanceLat + DisanceLon * DistanceLon)
if ( Distance < radius) keep the data
关于algorithm - 查找其他用户附近的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9827073/