使用boost::geometry::index::rtree查询交点

使用boost::geometry::index::rtree查询交点,boost,r-tree,boost-geometry,Boost,R Tree,Boost Geometry,我有一个三维轴对齐框的boost::geometry::index::rtree实例。我已经在boost的1.54版本中使用了点交点。工作起来很有魅力。嗯,我还想查询与line(ray,section)的交点,这似乎得到了boost 1.59的支持(呃,有一些小故障,但仍然非常令人印象深刻)。不幸的是,正如我所说,我使用的是1.54版。我现在没有机会改变它。所以问题是:如何在boost 1.54中扩展几何体。所以它支持与rtree中的边界框相交的截面?我需要专门化哪些模板?我还有别的事要做吗?思

我有一个三维轴对齐框的boost::geometry::index::rtree实例。我已经在boost的1.54版本中使用了点交点。工作起来很有魅力。嗯,我还想查询与line(ray,section)的交点,这似乎得到了boost 1.59的支持(呃,有一些小故障,但仍然非常令人印象深刻)。不幸的是,正如我所说,我使用的是1.54版。我现在没有机会改变它。所以问题是:如何在boost 1.54中扩展几何体。所以它支持与rtree中的边界框相交的截面?我需要专门化哪些模板?我还有别的事要做吗?思想?
thb

如果将
bgi::intersects()
谓词传递到查询中,则rtree内部调用
bg::intersects()
,后者调用
bg::disjoint()
。这些空间关系检查针对QueryGeometry/Box和QueryGeometry/Indexable进行测试。例如,如果您正在存储方框,则rtree会在内部调用
bg::intersects(方框,查询几何)

如果QueryGeometry类型适用于Boost.Geometry概念之一,例如Segment,但该函数并未在您使用的Boost版本中实现,您可以在最新版本的Boost中看到如何为概念组合实现算法。例如,
不相交(框、段)
在此处实现:。然后您可能会在Boost1.54中找到相应的位置,并将此代码放在那里。尽管AFAIR的目录和文件结构自1.54以来发生了改变。我想你也可以尝试将整个1.59 Boost.Geometry代码与Boost1.54一起使用,当然这并不能保证它能正常工作。正如@sehe在评论中指出的那样,1.59中框/段组合的
不相交
/
相交


如果QueryGeometry不是库支持的几何体(这是您的情况),例如平截头体、圆锥体、平面、光线等。对于rtree想要调用的类型组合,您可以简单地重载
bg::intersects()
bg::disjoint()
,在本例中是查询几何体和长方体。有关更多信息,请参见此项:

请参见高度相关:;关于boost邮件列表链接的讨论已经开始。也许你可以称一下?如果你指的是我提到的wrt boost 1.59的“一些小故障”。我可能已经认识到问题的根源,但是我没有找到解决问题的明确方法。要使它适用于所有可思考的维度,需要某种模板魔法,但我无法理解。我所看到的问题存在于算法\section\u intersection.hpp::box\u section\u intersection::apply中。我认为,它不能以这种简单的方式分解成维度。但像往常一样——也许我不对……顺便说一句,我还需要一个“平面”交叉口。好吧,一旦我算出了线段的交点,这只是一个类比。我也忘了在我的问题中提到“请”和“嗨”。我先道歉。对于其余部分,您希望扩展库。进入邮件列表@AdamWulkiewicz有时会在这里,但这并不像名单上那样好。