Boost rtree.bounds():获取更多盒子和/或访问其结构

Posted

技术标签:

【中文标题】Boost rtree.bounds():获取更多盒子和/或访问其结构【英文标题】:Boost rtree.bounds(): getting more boxes and/or accessing to its structure 【发布时间】:2019-01-10 14:53:19 【问题描述】:

目前我正在使用分布式网格进行数值模拟:我正在使用由边界框组成的 boost rtree 作为搜索工具。我有很多边界框,每个都有一个标签(一个无符号整数:“拥有”单元格的进程)。

在全球范围内,我需要一个更“不精确”的描述:因此我使用 rtree.bounds() 然后将这个框与全球通信一起发送。 不幸的是,这并不总是有效,因为标签是通过以下方式生成的:

    具有相同标签的盒子都聚集在一起:在这种情况下,它就像一个魅力。 具有相同标签的框形成两个“连接”的集群:在这种情况下,额外的空白空间意味着以后的计算将产生大量无用的通信

由于 rtree 是由边界框组成的,我正在尝试访问 rtree 结构,以便我可以获得两个或更多(可能很少)粗略的边界框(rtree 的第一/第二层)。这可能吗?或者有没有快速的算法来拆分 rtree.bounds() 框?

目前我正在“手动”切割边界边界框,但由于我已经将它们放在树中,我认为这是一种计算能力的浪费。

编辑:我找到了这个论坛http://boost-geometry.203548.n3.nabble.com/How-could-I-get-nodes-MBRs-of-the-R-Tree-td4026812.html,这似乎是我问题的答案。我将尝试使用它,如果解决了,请发布解决方案:)

【问题讨论】:

【参考方案1】:

您发现有一种访问节点的方法,但它不是 R-tree 官方接口的一部分。您必须实现一个遍历 R-tree 的访问者并使用 boost::geometry::index::detail::rtree::utilities::view 将其应用到 R-tree。

看看this visitor 遍历 R-tree 深度优先并在每个级别检查节点的边界框是否包含来自较低级别的所有元素。 Here 你可以看到这个访问者是如何应用到 R-tree 上的。

【讨论】:

以上是关于Boost rtree.bounds():获取更多盒子和/或访问其结构的主要内容,如果未能解决你的问题,请参考以下文章

构建 boost.build 引擎

经验分享ubuntu 源码编译 boost

未能为 Visual Studio 2017 构建 boost 1.68

使用 boost::mpl 获取 boost::variant 的类型索引

如何使用 boost :: 适配器链的 boost 范围获取 std::list

Boost 正则表达式:获取命名组