在其他用户附近查找用户

时间:2012-03-22 17:07:35

标签: algorithm

我应该探索哪些算法来实现一个功能,让用户找到位于他附近的其他用户,所有用户的纬度和经度都是事先知道的并且是固定的[非动态]。 此外,我相信应该有一个更好的方法来存储这样的数据,然后简单地存储lat,用户长在数据库中的用户ID。处理这个的有效方法是什么?

4 个答案:

答案 0 :(得分:2)

如果你只是找到近点,你需要的只是一个简单的圆形边界半径,你可以调整或偏向中心对数。当然,您希望避免在每个查询的整个数据集上执行此操作。一般来说,除了纬度/经度之外,您还可以将地图分解为您知道可以忽略的象限。 - 只需确定您感兴趣的区域是否边缘,也可以查询邻近象限。这是一个链接表,仅用于获取该象限中的行。

一旦你减少了象限。使用最基本的几何:

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

答案 1 :(得分:1)

MySQL (和其他人)现在支持spatial indexing.

如果您的数据库可以spatial queries,您不需要自己实现算法的任何部分。

答案 2 :(得分:1)

nearest neighbor search使用k-D树。

答案 3 :(得分:1)

空间搜索有两类主要的数据结构:

如果您想要一个绝对完整的问题答案,请查看Hanan Samet的书,多维和度量数据结构的基础