我有一个内置的boost rtree:
using CBGPoint3d = boost::geometry::model::point<float, 3, boost::geometry::cs::cartesian>;
using CBGBox3D = boost::geometry::model::box<CBGPoint3d>;
using CBGTreeItem = std::pair<CBGBox3D, CEntityLoaderBase*>;
boost::geometry::index::rtree<CBGTreeItem, boost::geometry::index::dynamic_rstar> m_tree;
我可以通过叶节点进行迭代:
for (auto const& v : m_tree)
//do something
我可以得到根边界:
m_tree.bounds();
但是我怎样才能得到其他级别的界限呢?没有边界迭代器。。。。
这不是官方界面的一部分,但可以手动遍历R-树。您必须实现自己的节点访问者,并使用bgi::detail::rtree::utilities::view<Rtree>
将其应用于根节点。看看这个目录中的实用程序:
https://github.com/boostorg/geometry/tree/develop/include/boost/geometry/index/detail/rtree/utilities
特别是检查层次结构中边界框的正确性的一个:
https://github.com/boostorg/geometry/blob/develop/include/boost/geometry/index/detail/rtree/utilities/are_boxes_ok.hpp
以及收集关于R树内部结构的统计信息的一个:
https://github.com/boostorg/geometry/blob/develop/include/boost/geometry/index/detail/rtree/utilities/statistics.hpp