【问题标题】:How to quickly determine which longitude & latitude range a point is in如何快速确定一个点在哪个经纬度范围内
【发布时间】:2013-11-12 10:12:56
【问题描述】:

假设我有一些 (lng, lat) 坐标。我也有一个很大的范围列表,

[ {东北:{lng,lat},西南:{lng,lat}} ...]

如何最有效地确定 (lng, lat) 点进入哪个桶?

另外,从设计的角度来看。将“范围列表”放在 mysql、monodb 等数据库或 memcached、redis 等数据库上是否更有意义?

谢谢。

【问题讨论】:

  • 桶可以有共同点吗?
  • 他们不会,保证不会
  • @HighPerformanceMark,这不是我的问题。那家伙只是想知道一个点是否可以匹配一个盒子。我有一个包含 1 点的框的大列表,我想知道该点进入哪个框。
  • 四叉树 (en.wikipedia.org/wiki/Quadtree) 可能有用

标签: algorithm sorting graph-algorithm


【解决方案1】:

SQL 数据库可能是一个不错的答案。如果您想象一个像(bucketId, latNe, longNe, latSw, longSw) 这样的表,在所有纬度/经度列上都有索引,那么您可以通过使用所需的纬度/经度坐标准备和执行类似SELECT bucketId FROM bucketTable WHERE latNe > ? AND longNe < ? AND latSe < ? AND longSe > ? 的查询来非常有效地得到答案。

【讨论】:

    【解决方案2】:

    您需要细分范围列表。您可以查看四键。它类似于四叉树。它使用莫顿曲线。您可以非常快速地计算范围和点的四键。但您也可以尝试使用矩形树。您也可以使用区间树。

    【讨论】:

      【解决方案3】:

      R-Tree 是为这类事情设计的数据结构。 Boost 包含它的实现。 CGAL 也是如此。大多数现代databases 也原生支持这种东西。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-25
        • 2012-07-15
        • 2015-01-08
        • 1970-01-01
        • 2011-04-02
        相关资源
        最近更新 更多