简短版本:是否有任何稳定/可靠的方法来序列化/反序列化Boost.Geometry rtree?
更长的版本:Boost.Geometry中的rtree实现具有对序列化/反序列化的实验性支持,但是支持是不稳定的,它有时会在反序列化期间抛出异常。我甚至不知道它是否会以静默方式破坏树数据。
我已经实现了一个简单但非常慢的hack:序列化所有树节点(而不是整个树),并在反序列化期间重建树。我想要更快的东西。
答案 0 :(得分:0)
您可以使用提供批量装载的包装构造函数。
此外,还有一些算法可以创建包含一些对象数量的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
容器不需要是容器)。