2016-10-26 55 views
1

簡版:有任何穩定/可靠的方法來序列化/反序列化Boost.Geometry rtree嗎?序列化/反序列化Boost.Geometry rtree

更長的版本:Boost.Geometry中的rtree實現爲序列化/反序列化提供了實驗支持,但支持不穩定,有時會在反序列化時拋出異常。我甚至不知道它是否會無聲地破壞樹數據。

我已經實現了一個簡單但很慢的黑客攻擊:序列化所有樹節點(而不是整個樹),並在反序列化期間重建樹。我想要更快的東西。

回答

0

您可以使用提供批量加載的包裝構造函數。

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樹添加或刪除值時,請使用選擇平衡算法。 –