2016-10-26 3 views
1

Краткая версия: есть ли стабильный/надежный способ сериализации/де-сериализации Boost.Geometry rtree?Сериализация/де-сериализация Boost.Geometry rtree

Более длинная версия: реализация rtree в Boost.Geometry имеет экспериментальную поддержку сериализации/де-сериализации, но поддержка нестабильна, она иногда выдает исключения во время де-сериализации. Я даже не знаю, развращает ли он данные дерева молча.

Я реализовал простой, но очень медленный взлом: сериализуйте все узлы дерева (вместо дерева в целом) и перестройте дерево во время де-сериализации. Я хочу что-то быстрее.

ответ

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

Я не совсем понимаю страницу введения форсирования. Поскольку упаковка является алгоритмом создания, а linear/quadratic/rstar - это алгоритмы балансировки, я должен получить 6 разных r-деревьев, но диаграммы показывают только 4 дерева. Означает ли это, что упаковка может быть реализована только на линейно сбалансированных деревьях? – user416983

+1

На данный момент реализован только один алгоритм упаковки. Поэтому, если вы создаете R-дерево с использованием алгоритма упаковки, всегда создается одна и та же структура независимо от того, какой алгоритм балансировки был выбран. Но когда вы добавляете или удаляете значение в/из этого R-дерева, тогда выбирается алгоритм балансировки. –

Смежные вопросы