簡版:有任何穩定/可靠的方法來序列化/反序列化Boost.Geometry rtree嗎?序列化/反序列化Boost.Geometry rtree
更長的版本:Boost.Geometry中的rtree實現爲序列化/反序列化提供了實驗支持,但支持不穩定,有時會在反序列化時拋出異常。我甚至不知道它是否會無聲地破壞樹數據。
我已經實現了一個簡單但很慢的黑客攻擊:序列化所有樹節點(而不是整個樹),並在反序列化期間重建樹。我想要更快的東西。
簡版:有任何穩定/可靠的方法來序列化/反序列化Boost.Geometry rtree嗎?序列化/反序列化Boost.Geometry rtree
更長的版本:Boost.Geometry中的rtree實現爲序列化/反序列化提供了實驗支持,但支持不穩定,有時會在反序列化時拋出異常。我甚至不知道它是否會無聲地破壞樹數據。
我已經實現了一個簡單但很慢的黑客攻擊:序列化所有樹節點(而不是整個樹),並在反序列化期間重建樹。我想要更快的東西。
您可以使用提供批量加載的包裝構造函數。
此外也有產生的算法在含有一些,對象數量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
容器不需要是容器)。
我不太明白boost的介紹頁面。由於打包是一種創建算法,而linear/quadratic/rstar是平衡算法,所以我應該得到6種不同的r-樹,但圖表只顯示4棵樹。這是否意味着包裝只能在線性平衡的樹上實施? – user416983
目前只有一種包裝算法被實施。因此,如果使用打包算法創建R樹,則始終會創建相同的結構,而不管採用哪種平衡算法。但是,當您向此R樹添加或刪除值時,請使用選擇平衡算法。 –