我需要将给定点(lat,lon)与多个多边形相匹配,以确定是否存在匹配。
最简单的方法是迭代每个多边形并应用多边形点检查算法,但这非常昂贵。
我做的下一个优化是为每个多边形定义一个边界矩形(上限,下限),并迭代检查每个边界框的点(与检查多边形中的所有点相比,更少的比较)。
还有其他可能的优化吗?绑定矩形点上的空间索引或geohash会有帮助吗?
答案 0 :(得分:2)
进一步优化:
边界框的想法很好。检查点是否在边界框中是非常快的。
如果您仍需要更高的速度,可以进行更多预先计算:
搜索时,请执行以下操作:
我已经多次使用过这个算法而且速度非常快。通过更改磁贴大小,您可以在内存占用和性能之间选择正确的平衡:
想想极端情况:
覆盖整个地图的一块巨大的瓷砖:
您将获得地图中所有元素的列表,您必须检查所有边界框。
非常小的瓷砖(对于每个国家只有多边形的地图,1x1米):
你会得到大量的瓷砖。所有多边形将在许多图块上分割,每个图块只有一个多边形。但是,一旦你弄清楚这个点是哪个(快),几乎100%确定只需要检查一个多边形。
你需要介于两者之间。如果您只需要一次,那么您可能希望选择较低的内存占用而不是性能。最佳的瓷砖尺寸也取决于多边形尺寸的均匀性。因此,没有自动的方法来计算最佳的图块大小,你只需要稍微调整一下,直到你做对了。