如何查询框是否在rtree中

时间:2018-06-30 06:55:23

标签: c++ boost boost-geometry

问题

为什么我的查询查找box内是否有rtree会返回空结果?

说明

采用线串

LINESTRING(1 1, 2 2)

和两个多边形

POLYGON((0 0,0 1,1 1,1 0,0 0))
POLYGON((0 0,0 3,3 3,3 0,0 0))

我可以使用boost::geometry::witin()查询线串是否在任意一个多边形内(并且有效)

但是,如果我创建一个rtree的多边形,并在box周围放置一个linestring,则查询box是否为within { {1}}返回空结果。

示例

以下示例显示了有效的rtree和无效的bg::within(line, polygon)

rtree.query(bgi::within( line_box1 ), ...)

1 个答案:

答案 0 :(得分:1)

调用自由函数within(geom1,geom2)时,如果geom1geom2内部,则返回TRUE。但是,当您阅读有关使用within作为谓词

的参考时
  

生成一个谓词,定义“值”和“几何”关系。如果bg :: within(Indexable,Geometry)返回true,则查询将返回值。

,因此您尝试检查indexable是否在geometry内部,并且结果是否为假[可索引为rect,几何为线]。您应该使用rtree来使用contains谓词,而不是withincontains谓词等于bg::within(Geometry, Indexable),则您的代码可以按预期工作。