序列化/反序列化Boost.Geometry rtree

序列化/反序列化Boost.Geometry rtree

问题描述:

简版:有任何稳定/可靠的方法来序列化/反序列化Boost.Geometry rtree吗?序列化/反序列化Boost.Geometry rtree

更长的版本:Boost.Geometry中的rtree实现为序列化/反序列化提供了实验支持,但支持不稳定,有时会在反序列化时抛出异常。我甚至不知道它是否会无声地破坏树数据。

我已经实现了一个简单但很慢的黑客攻击:序列化所有树节点(而不是整个树),并在反序列化期间重建树。我想要更快的东西。

您可以使用提供批量加载的包装构造函数。

http://www.boost.org/doc/libs/1_62_0/libs/geometry/doc/html/geometry/reference/spatial_indexes/boost__geometry__index__rtree/rtree_iterator__iterator_.html *

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容器不需要是容器)。

+0

我不太明白boost的介绍页面。由于打包是一种创建算法,而linear/quadratic/rstar是平衡算法,所以我应该得到6种不同的r-树,但图表只显示4棵树。这是否意味着包装只能在线性平衡的树上实施? – user416983

+1

目前只有一种包装算法被实施。因此,如果使用打包算法创建R树,则始终会创建相同的结构,而不管采用哪种平衡算法。但是,当您向此R树添加或删除值时,请使用选择平衡算法。 –