【发布时间】:2015-08-22 16:25:24
【问题描述】:
问题陈述:我有一个位置数据库,如果特定位置 X 在指定距离半径内,我想返回。简而言之,将我搜索中 X 点半径内的所有城市返回给我。
此解决方案会导致对数据库中的每个点进行强力搜索。但是,为了优化搜索,如果地图被某些环分区,那么这意味着我在分区0内搜索,首先是最近的分区,然后移出直到我满意。
是否有一种算法可以有效地划分地图并根据邻近度返回位置搜索。
简而言之: {A, B, C...} 是地图中的点。对于空间中的这些点 {x},找到 x 距离 d 内的所有点。
【问题讨论】:
-
比将地图划分为环更容易,比 R-树更容易:将地图划分为正方形。很容易找出哪些正方形部分位于您的
X周围的圆圈内,然后计算X与每个正方形中的任何城市之间的距离。 -
如果我使用这种方法,那就意味着 1. 我会将地图划分为网格。 2. 在我的数据库中,我必须使用该位置所在的相应网格来识别每个位置并存储它们。 3. 找到我的测试点的圆 p 相交的所有网格。 4. 使用这些网格找到 p 范围内的所有位置。这似乎类似于蛮力。有什么改善。
-
所以我决定按照马克的回答将地图划分为正方形。我从每个纬度和经度的增量 0.01 开始。然而,这种方法的困境在于,对于像美国这样的经纬度范围很大的国家,我如何有效地处理边界情况。例如: long range: 60 - 120 给出 6000((120-60)) /0.01) 个盒子,然后乘以 lat: 20-50 得到 3000 = 18,000,000 个盒子 => 似乎需要维护一个非常庞大的数字。我将不得不看一下 R-tree 算法,以了解如何有效地使用它。
-
18,000,000 个盒子 => 看起来是一个非常大的数字 确实如此,我认为大约 1 度的正方形就足够了。您的问题陈述是指城市而不是小村庄。但是,嘿,随便你。
标签: algorithm