首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >跨多个多边形搜索点的最佳方法

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

Stack Overflow用户
提问于 2012-06-22 17:11:18
回答 1查看 466关注 0票数 2

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

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

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

有没有其他可能的优化方法?边界矩形点上的空间索引或geohash会有帮助吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-22 17:46:08

进一步优化:

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

如果你仍然需要更快的速度,你可以像这样做更多的预计算:

  1. 为每个多边形创建一个边界框。
  2. 定义大小相等的覆盖地图的“瓦片”。
  3. 为每个瓦片创建一个重叠的多边形列表。您可以通过首先检查边界框是否与平铺重叠来执行此操作。如果存在,则检查多边形是否与切片重叠。

搜索时,请执行以下操作:

  1. 确定您所在的磁贴。这是一个快速的operation.
  2. Now,你有一个潜在的列表,每个多边形,检查点是否在边界框中。

如果是,请使用您提到的代价更高的算法检查该点是否位于面中。

我已经使用这个算法好几次了,它非常快。通过更改磁贴大小,您可以在内存占用和性能之间选择适当的平衡:

想想极端的情况:

  • 一个覆盖整个地图的巨大磁贴:

你会得到一个地图中所有元素的列表,你必须检查所有的边界框。

  • 非常小的瓦片(对于每个国家只有一个多边形的地图来说是1x1米):

你会得到大量的瓷砖。所有多边形将被分割到多个瓦片上,并且每个瓦片将只有一个多边形。但是,一旦您确定了点在哪个切片中(最快),几乎可以100%确定只有一个多边形需要检查。

你需要介于两者之间。如果您只需要一次,那么您可能希望选择较低的内存占用,而不是性能。最佳平铺大小也可以取决于多边形大小的均匀性。因此,没有自动计算最优平铺大小的方法,你只需要稍微调整一下,直到得到正确的大小。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11153296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档