在2维中搜索给定查询点的边界矩形(轴对齐)

时间:2014-12-15 06:50:20

标签: algorithm data-structures geospatial spatial-index

我有一组很多轴对齐的矩形,可能是嵌套和交叉的。我希望能够找到包含/绑定查询点的所有矩形。对此有什么好处? 编辑:附加信息 -
很多我的意思是1亿或更多 矩形分布在一个巨大的跨度(一个国家的跨度)。尺寸没有限制 是的,矩形可以预先处理并存储在树形结构中 4.不需要实时插入和删除 5.我只需要找到包围/绑定给定查询点的所有矩形。我不需要最近的邻居。

正如您可能已经猜到的那样,这适用于移动设备上的实时地理围栏应用程序,因此 - 6.对于距离该点足够远的矩形,不需要重复搜索。

我通过将每个矩形近似到一个点来尝试KD树和四叉树。他们根据矩形的大小给了我不同的性能。 有更直接的方式吗? r树怎么样?

2 个答案:

答案 0 :(得分:1)

我会考虑使用四叉树。 (从移动设备发布,因此链接过于费力,但维基百科有一个不错的解释。)您可以在任何矩形的左,右,顶部和底部分割,并将每个矩形存储在代表的节点中包含矩形的最小区域。要搜索一个点,您可以沿着四叉树朝向该点,并检查沿着该路径遇到的每个矩形。

这适用于小矩形,但如果许多矩形覆盖几乎整个区域,您仍然需要检查所有这些。

答案 1 :(得分:0)

您需要查看R * -tree数据结构。

与许多其他结构相比, R * -tree能够存储(重叠)矩形仅限于点数据。在将多边形放入索引之前,您将能够找到许多关于如何最佳近似多边形的出版物。此外,它可以扩展到相当大的数据,因为它也可以在磁盘上运行。

批量加载时R * -trees更快;因为这可以用于减少索引页面的重叠并确保几乎完美平衡的树,而动态插入仅保证每个页面至少半满左右。即批量加载的树通常只使用一半的内存/存储空间。

对于2d数据和您的查询类型,四叉树或网格可能效果不错。这取决于本地数据密度的变化程度。