Я использую библиотеку spatialindex из http://libspatialindex.github.com/
Я создаю дерево R * в основной памяти:
size_t capacity = 10;
bool bWriteThrough = false;
fileInMem = StorageManager
::createNewRandomEvictionsBuffer(*memStorage, capacity, bWriteThrough);
double fillFactor = 0.7;
size_t indexCapacity = 10;
size_t leafCapacity = 10;
size_t dimension = 2;
RTree::RTreeVariant rv = RTree::RV_RSTAR;
tree = RTree::createNewRTree(*fileInMem, fillFactor, indexCapacity,
leafCapacity, dimension, rv, indexIdentifier);
Затем я вставляю большое количество ограничивающих рамок, в настоящее время около 2,5 м (дорожная сеть Баварии в Германии). Позже я буду стремиться вставить все дороги Европы.
Каков хороший выбор параметров для менеджера хранилища и rtree? В основном я использую дерево, чтобы найти ближайшие дороги к данному запросу (пересечение bbox).
Поскольку ваши данные статичны, хорошая объемная загрузка может работать на вас. Самая популярная (и довольно простая) двойная загрузка — Sort-Tile-Recursive. Тем не менее, он несколько рассчитан на точечные данные. Когда вы вставляете пространственные объекты, это может работать, а может и не работать.
Если вы используете массовую загрузку, это будет уже не R * -дерево, а обычное R-дерево.
Вместимость 10 звуков путь слишком мало для меня Вы хотите намного больше разветвления. Но вам нужно будет сравнить, это набор данных и запрос зависит от того, что хорошо. Я бы определенно попробовал 100 или больше.
Других решений пока нет …