跨多个多边形搜索点的最佳方法

时间:2012-06-22 09:11:18

标签: geolocation gis geospatial

我需要将给定点(lat,lon)与多个多边形相匹配,以确定是否存在匹配。

最简单的方法是迭代每个多边形并应用多边形点检查算法,但这非常昂贵。

我做的下一个优化是为每个多边形定义一个边界矩形(上限,下限),并迭代检查每个边界框的点(与检查多边形中的所有点相比,更少的比较)。

还有其他可能的优化吗?绑定矩形点上的空间索引或geohash会有帮助吗?

1 个答案:

答案 0 :(得分:2)

进一步优化:

边界框的想法很好。检查点是否在边界框中是非常快的。

如果您仍需要更高的速度,可以进行更多预先计算:

  1. 为每个polgon创建一个边界框。
  2. 定义覆盖地图的大小相同的“瓷砖”。
  3. 对于每个图块,创建重叠的多边形列表。您可以通过首先检查边界框是否与图块重叠来实现。如果是,则检查多边形是否与图块重叠。
  4. 搜索时,请执行以下操作:

    1. 确定您所在的磁贴。这是一个快速操作。
    2. 现在你有了潜在多边形的列表。
    3. 对于每个多边形,检查该点是否在边界框中 如果是,请使用您提到的更昂贵的算法检查点是否在多边形中。
    4. 我已经多次使用过这个算法而且速度非常快。通过更改磁贴大小,您可以在内存占用和性能之间选择正确的平衡:

      想想极端情况:

      • 覆盖整个地图的一块巨大的瓷砖:
        您将获得地图中所有元素的列表,您必须检查所有边界框。

      • 非常小的瓷砖(对于每个国家只有多边形的地图,1x1米):
        你会得到大量的瓷砖。所有多边形将在许多图块上分割,每个图块只有一个多边形。但是,一旦你弄清楚这个点是哪个(快),几乎100%确定只需要检查一个多边形。

      你需要介于两者之间。如果您只需要一次,那么您可能希望选择较低的内存占用而不是性能。最佳的瓷砖尺寸也取决于多边形尺寸的均匀性。因此,没有自动的方法来计算最佳的图块大小,你只需要稍微调整一下,直到你做对了。