2016-10-26 17 views
1

短いバージョン:Boost.Geometryのrtreeをシリアル化/非シリアル化するための安定した/信頼できる方法がありますか?Serialize/de-serialize Boost.Geometry rtree

より長いバージョン:Boost.Geometryのrtreeの実装では、シリアル化/逆シリアル化が実験的にサポートされていますが、サポートが不安定で、デシリアライゼーション中に例外がスローされることがあります。私はそれが木のデータを黙って壊すかどうかも知らない。

シンプルだが非常に遅いハックを実装しました。ツリー全体ではなくすべてのツリーノードをシリアル化し、デシリアライゼーション中にツリーを再構築します。私はもっ​​と速くしたい。

答えて

0

バルクロードが可能なパッキングコンストラクタを使用できます。

  • http://www.boost.org/doc/libs/1_62_0/libs/geometry/doc/html/geometry/spatial_indexes/introduction.html

      は、さらにまた、いくつかの、オブジェクトの数を含むR-ツリーを作成するアルゴリズムがあります。この手法は、バルクロードと呼ばれ、パッキングアルゴリズム[5] [6]を使用して行われます。この方法は高速であり、より良い内部構造を有するRツリーをもたらす。つまり、クエリのパフォーマンスが向上します。あなたが見ることができるように、あなたはとにかく梱包アルゴリズムから最適なクエリのパフォーマンスを得ることを期待することができ

    :あなたのイテレータは入力イテレータであればenter image description here

  • 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

    私はブースト紹介ページをよく理解していません。パッキングは作成アルゴリズムであり、線形/二次/ rstarはアルゴリズムのバランスを調整するため、6つの異なるr-treeを取得する必要がありますが、図には4つのツリーしか表示されません。これは、線形にバランスの取れた木にのみ実装できることを意味しますか? – user416983

    +1

    現時点で実装されているパッキングアルゴリズムは1つだけです。したがって、パッキングアルゴリズムを使用してRツリーを作成すると、どのバランシングアルゴリズムを選択しても同じ構造が常に作成されます。しかし、このRツリーに値を追加または削除するときには、バランシングアルゴリズムが選択されます。 –

    関連する問題