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

Geolocation 跨多个多边形搜索点的最佳方法,geolocation,gis,geospatial,Geolocation,Gis,Geospatial,我需要将一个给定点(lat,lon)与几个多边形匹配,以确定是否存在匹配 最简单的方法是对每个多边形进行迭代,并应用多边形中的点检查算法,但这样做的代价太高 我做的下一个优化是为每个多边形定义一个边界矩形(上界、下界),并根据每个边界框迭代检查点(与检查多边形中的所有点相比,比较更少) 是否有其他可能的优化?绑定矩形点上的空间索引或geohash是否有帮助?进一步优化: 边界框的想法很好。检查点是否位于边界框中的速度非常快 如果您仍然需要更高的速度,您可以像这样进行更多的预计算: 为每个多边形创

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

最简单的方法是对每个多边形进行迭代,并应用多边形中的点检查算法,但这样做的代价太高

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

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

进一步优化:

边界框的想法很好。检查点是否位于边界框中的速度非常快

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

  • 为每个多边形创建一个边界框
  • 定义覆盖地图的大小相等的“分幅”
  • 对于每个平铺,创建重叠多边形的列表。可以通过首先检查边界框是否与平铺重叠来完成此操作。如果有,则检查多边形是否与平铺重叠
  • 搜索时,请执行以下操作:

  • 确定您所在的磁贴。那是一个快速的手术
  • 现在您有了潜在多边形的列表
  • 对于每个多边形,检查点是否在边界框中。
    如果是,请使用您提到的更昂贵的算法检查点是否在多边形中
  • 这个算法我用过好几次,速度非常快。通过更改磁贴大小,您可以在内存占用和性能之间选择适当的平衡:

    想想极端情况:

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

    • 非常小的瓷砖(对于每个国家只有一个多边形的地图为1x1米):
      你会得到大量的瓷砖。所有多边形将分割为多个平铺,每个平铺将只有一个多边形。但是,一旦您确定了点在哪个平铺中(快速),几乎可以100%确定只有一个多边形需要检查

    你需要介于两者之间。如果您只需要一次或一段时间,您可能希望选择低内存占用而不是性能。最佳平铺大小还取决于多边形大小的均匀性。所以,没有自动计算最佳瓷砖大小的方法,您只需稍微调整一下,直到正确为止