我需要将给定的点(lat,lon)与几个多边形进行匹配,以确定是否存在匹配。
最简单的方法是迭代每个多边形,并应用多边形中的点检查算法,但这是非常昂贵的。
我做的下一个优化是为每个多边形定义一个边界矩形(上界,下界),并迭代地检查每个边界框中的点(与检查多边形中的所有点相比,比较更少)。
有没有其他可能的优化方法?边界矩形点上的空间索引或geohash会有帮助吗?
发布于 2012-06-22 17:46:08
进一步优化:
边界框的想法很好。检查点是否在边界框中是非常快的。
如果你仍然需要更快的速度,你可以像这样做更多的预计算:
搜索时,请执行以下操作:
如果是,请使用您提到的代价更高的算法检查该点是否位于面中。
我已经使用这个算法好几次了,它非常快。通过更改磁贴大小,您可以在内存占用和性能之间选择适当的平衡:
想想极端的情况:
你会得到一个地图中所有元素的列表,你必须检查所有的边界框。
你会得到大量的瓷砖。所有多边形将被分割到多个瓦片上,并且每个瓦片将只有一个多边形。但是,一旦您确定了点在哪个切片中(最快),几乎可以100%确定只有一个多边形需要检查。
你需要介于两者之间。如果您只需要一次,那么您可能希望选择较低的内存占用,而不是性能。最佳平铺大小也可以取决于多边形大小的均匀性。因此,没有自动计算最优平铺大小的方法,你只需要稍微调整一下,直到得到正确的大小。
https://stackoverflow.com/questions/11153296
复制相似问题