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

C++ 序列化/反序列化Boost.Geometry rtree,c++,boost,boost-serialization,r-tree,boost-geometry,C++,Boost,Boost Serialization,R Tree,Boost Geometry,简短版本:有没有稳定/可靠的方法来序列化/反序列化Boost.Geometry rtree 较长版本:Boost.Geometry中的rtree实现对序列化/反序列化提供了实验性支持,但支持不稳定,有时在反序列化过程中会引发异常。我甚至不知道它是否会悄悄地破坏树数据 我实现了一个简单但非常缓慢的hack:序列化所有树节点(而不是整个树),并在反序列化期间重建树。我想要更快的东西。您可以使用提供批量装载的打包构造函数 此外,还有一些算法创建包含一些对象的R树。这种技术称为散装装载,通过使用装箱

简短版本:有没有稳定/可靠的方法来序列化/反序列化Boost.Geometry rtree

较长版本:Boost.Geometry中的rtree实现对序列化/反序列化提供了实验性支持,但支持不稳定,有时在反序列化过程中会引发异常。我甚至不知道它是否会悄悄地破坏树数据


我实现了一个简单但非常缓慢的hack:序列化所有树节点(而不是整个树),并在反序列化期间重建树。我想要更快的东西。

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

  • 此外,还有一些算法创建包含一些对象的R树。这种技术称为散装装载,通过使用装箱算法[5][6]完成。该方法速度更快,生成的R-树具有更好的内部结构。这意味着提高了查询性能

    如您所见,您可以期望通过打包算法获得最佳查询性能:

看 *

namespace bgi=boost::geometry::index;
typedef std::对值;
typedef bgi::rtreertree;
std::向量值;
/*填充值容器*/
RTree-rt;
rt.insert(values.begin(),values.end());

如果您的迭代器是输入迭代器,那么您可以完全避免使用临时副本(
values
container不需要是容器)。

我不太了解boost简介页面。因为packing是一个创建算法,而linear/quadratic/rstar是平衡算法,所以我应该得到6个不同的r-树,但图中只显示了4个树。这是否意味着只能在线性平衡树上实现打包?目前只有一种打包算法。因此,如果使用打包算法创建R树,则无论选择哪种平衡算法,都会创建相同的结构。但当你在这个R-树中添加或删除一个值时,就会使用choosen平衡算法。你的问题解决了吗?它仍然不能为
1.7.2
中的序列化提供稳定的支持。
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());