【发布时间】:2012-06-22 09:11:18
【问题描述】:
我需要将给定点(纬度、经度)与多个多边形进行匹配,以确定是否匹配。
最简单的方法是遍历每个多边形并应用多边形中的点检查算法,但这非常昂贵。
我所做的下一个优化是为每个多边形(上限、下限)定义一个边界矩形,并针对每个边界框迭代检查该点(与检查多边形中的所有点相比,比较少)。
还有其他可能的优化吗?绑定矩形点上的空间索引或 geohash 有帮助吗?
【问题讨论】:
标签: geolocation gis geospatial
我需要将给定点(纬度、经度)与多个多边形进行匹配,以确定是否匹配。
最简单的方法是遍历每个多边形并应用多边形中的点检查算法,但这非常昂贵。
我所做的下一个优化是为每个多边形(上限、下限)定义一个边界矩形,并针对每个边界框迭代检查该点(与检查多边形中的所有点相比,比较少)。
还有其他可能的优化吗?绑定矩形点上的空间索引或 geohash 有帮助吗?
【问题讨论】:
标签: geolocation gis geospatial
进一步优化:
边界框的想法很好。检查一个点是否在边界框中非常快。
如果你还需要更快的速度,你可以像这样做更多的预计算:
搜索时,这样做:
我已经多次使用过这个算法,而且速度非常快。通过更改图块大小,您可以在内存占用和性能之间选择适当的平衡点:
想想极端情况:
一个覆盖整个地图的巨大图块:
您将获得地图中所有元素的列表,您必须检查所有边界框。
非常小的图块(1x1 米的地图,每个国家只有一个多边形):
你会得到大量的瓷砖。所有的多边形将被分割成许多块,每个块只有一个多边形。但是,一旦您(快速)确定了该点在哪个图块中,几乎可以 100% 确定只有一个多边形需要检查。
您需要介于两者之间。如果您只是偶尔需要它,您可能希望选择低内存占用而不是性能。最佳切片大小还取决于多边形大小的同质性。因此,没有自动的方法可以计算出最佳的 tile-size,您只需稍作调整,直到正确为止。
【讨论】: