为什么我的查询查找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 ), ...)
答案 0 :(得分:1)
调用自由函数within(geom1,geom2)
时,如果geom1
在geom2
内部,则返回TRUE。但是,当您阅读有关使用within
作为谓词
生成一个谓词,定义“值”和“几何”关系。如果bg :: within(Indexable,Geometry)返回true,则查询将返回值。
,因此您尝试检查indexable
是否在geometry
内部,并且结果是否为假[可索引为rect,几何为线]。您应该使用rtree来使用contains
谓词,而不是within
。 contains
谓词等于bg::within(Geometry, Indexable)
,则您的代码可以按预期工作。