序列化/反序列化Boost.Geometry rtree
问题描述:
简版:有任何稳定/可靠的方法来序列化/反序列化Boost.Geometry rtree吗?序列化/反序列化Boost.Geometry rtree
更长的版本:Boost.Geometry中的rtree实现为序列化/反序列化提供了实验支持,但支持不稳定,有时会在反序列化时抛出异常。我甚至不知道它是否会无声地破坏树数据。
我已经实现了一个简单但很慢的黑客攻击:序列化所有树节点(而不是整个树),并在反序列化期间重建树。我想要更快的东西。
答
您可以使用提供批量加载的包装构造函数。
-
此外也有产生的算法在含有一些,对象数量R树。这种技术被称为批量加载,并通过使用包装算法[5] [6]完成。这种方法更快,并且导致R树具有更好的内部结构。这意味着查询性能会提高。
namespace bgi = boost::geometry::index;
typedef std::pair<Box, int> Value;
typedef bgi::rtree< Value, bgi::linear<32> > RTree;
std::vector<Value> values;
/*fill the values container*/
RTree rt;
rt.insert(values.begin(), values.end());
如果你的迭代器是输入迭代器您可以避免拥有临时副本(values
容器不需要是容器)。
我不太明白boost的介绍页面。由于打包是一种创建算法,而linear/quadratic/rstar是平衡算法,所以我应该得到6种不同的r-树,但图表只显示4棵树。这是否意味着包装只能在线性平衡的树上实施? – user416983
目前只有一种包装算法被实施。因此,如果使用打包算法创建R树,则始终会创建相同的结构,而不管采用哪种平衡算法。但是,当您向此R树添加或删除值时,请使用选择平衡算法。 –