查询与boost :: geometry :: index :: rtree

时间:2015-10-13 11:05:41

标签: boost r-tree boost-geometry

我在三维中拥有了boost :: geometry :: index :: rtree轴对齐框的实例。我已经在1.54版本的增强版中使用了点交叉。像魅力一样工作。好吧,我也想查询与线(光线,截面)的交叉点,这似乎是由boost 1.59支持的(错误,有一些故障,但仍然相当令人印象深刻)。不幸的是,我已经说过我在1.54版本上了。我现在没有机会改变它。所以问题是:如何在boost 1.54中扩展几何。所以它支持rtree中带有边界框的剖面交点?我需要专门化什么模板?还有什么我必须做的吗?想法? THB

1 个答案:

答案 0 :(得分:0)

如果您将bgi::intersects()谓词传递给查询,则rtree会在内部调用调用bg::intersects()的{​​{1}}。这些空间关系检查针对QueryGeometry / Box和QueryGeometry / Indexable进行了测试。例如。如果您要存储Box,则rtree会在内部调用bg::disjoint()

如果QueryGeometry类型适用于其中一个Boost.Geometry概念,例如分段,但该功能根本没有在您正在使用的Boost版本中实现,您可以看到如何在最新版本的Boost中为概念组合实现算法。例如。 bg::intersects(Box, QueryGeometry)在此处实施:https://github.com/boostorg/geometry/blob/master/include/boost/geometry/algorithms/detail/disjoint/segment_box.hpp。然后你可能会在Boost 1.54中找到相应的位置并将此代码放在那里。虽然AFAIR的目录和文件结构自1.54以来被改变了。我猜你也可以尝试将整个1.59 Boost.Geometry代码与Boost 1.54一起使用,当然它并不能保证它能够正常工作。正如@sehe在评论中指出的那样,{1.5}中的Box / Segment组合disjoint(Box, Segment) / disjoint存在错误。

如果QueryGeometry不是库支持的几何类型,那么AFAIU就是你的情况,例如:对于rtree想要调用的类型组合,你可以简单地重载intersectsbg::intersects(),对于你的QueryGeometry和Box,你可以简单地重载bg::disjoint() <div id="VideoDiv" style="margin-top:10px;"> <video id="example_video_1" class="video-js vjs-default-skin" width="750" height="400" preload="none" data-setup='{ "techOrder": ["html5"], "controls":true, "autoplay" : false}'> <source src="http://vjs.zencdn.net/v/oceans.mp4" type="video/mp4"/> </video> </div> 。有关详情,请参阅此处:Boost Geometry/Spatial Query Shapes