关于Boost Geometry空间索引查询文档的若干疑问咨询
Boost Geometry空间索引查询问题解答
- 问题1解答:你的认知完全正确。图中的红色、绿色矩形都是R树空间索引的内部节点对应的最小外接矩形(MBR),仅用于索引的空间划分和快速遍历,不会作为实际数据存储。黑色矩形才是用户存入索引、最终会被查询返回的真实业务数据条目。
- 问题2解答:
intersects(Box)谓词的查询目标是所有实际存储的、与查询框相交的数据条目,而非索引的内部节点。你提到的最上层2个橙色矩形是索引的内部节点MBR,查询时会因为和大查询框相交,触发遍历其下所有子节点,最终筛选出6个和查询框相交的叶子节点数据条目返回,这是空间索引的正常遍历逻辑。 - 问题3解答:Boost.Geometry中
overlaps谓词的定义比intersects更严格:它要求两个几何的维度完全相同,相交部分的维度也和几何本身一致,且两个几何都不能完全被对方包含。你看到的框内3个黑色矩形是完全落在查询框内部的,属于被包含的关系,不符合overlaps的判定条件,因此不会被标记为结果。如果要返回这部分数据,应该用intersects或者covered_by谓词。 - 问题4解答:二者的核心差异是对边界重合的判定规则:
within(A, B)要求A的所有点都必须落在B的内部,只要A有任意一个点落在B的边界上,就不满足within条件covered_by(A, B)只要求A的所有点落在B的内部或边界上即可,允许边界重合
示例图看起来一致是因为示例中的待匹配几何都完全在查询框内部,没有出现边界重合的场景,所以视觉上没有差异。
内容的提问来源于stack exchange,提问作者Gabriel Devillers
相关产品推荐
相关产品推荐

