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

在全局级别,我需要一个更加“不精确”的描述:因此,我正在使用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似乎是我的问题的答案。我将尝试使用它,如果解决了,请发布解决方案:)

    最佳答案

    如您所见,这里有一种访问节点的方法,但是它不是R-tree官方接口(interface)的一部分。您必须实现一个遍历R树的访问者,并使用boost::geometry::index::detail::rtree::utilities::view将其应用于R树。

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

    10-08 17:56