【问题标题】:Algorithm to geo-partition地理分区算法
【发布时间】: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


【解决方案1】:

看看为此使用R-treeR*-tree

我不确定您打算使用哪种语言,但Boost.geometry 有一个合理的 c++ 实现。

对于 python,有一个 libspatialindex 的包装器,它在 Rtree 包中做了很多相同的事情。

【讨论】:

  • 感谢西蒙的建议。正在看R树。我想知道如何在我的场景中使用它。
猜你喜欢
  • 2018-12-07
  • 1970-01-01
  • 1970-01-01
  • 2018-09-18
  • 1970-01-01
  • 1970-01-01
  • 2013-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多