2016-01-22 3 views
0

Я следил за документацией boost geometry rtree. Я могу выполнить пространственный запрос с полем, чтобы получить список элементов rtree, которые пересекаются с ним.Рассчитать пересечения между rtrees

Я хотел бы знать, есть ли способ выполнить пространственный запрос между rtree и другим rtree (одного типа).

Что-то вроде:

typedef bg::model::point<float, 2, bg::cs::cartesian> point; 
typedef bg::model::box<point> box; 
typedef std::pair<box, unsigned> value; 

bgi::rtree< value, bgi::quadratic<16> > rtree1; 
//... create first rtree 
bgi::rtree< value, bgi::quadratic<16> > rtree2; 
//... create second rtree 
std::vector<value> result_s; 
rtree1.query(bgi::intersects(rtree2), std::back_inserter(result_s)); 
// At this point result_s should contain elements of rtree1 that intersect with rtree2 

ли возможно что-то подобное, или я могу только выполнить запрос с элементами одного и того же типа элементов шаблона rtree?

+0

Я думаю, что я несколько раз обсуждал это в списке рассылки. Я постараюсь найти его позже. – sehe

ответ

2

Я думаю, что вы имеете в виду, называется пространственным соединением. Наивный подход будет проходить через все элементы меньшего дерева и выполнять прямоугольные запросы на большом дереве. Есть несколько исследований об этом, просто выполните поиск на сайте academer.google.com за 'spatial join'.

Я не думаю, что какой-либо из передовых подходов значительно лучше, чем наивный подход, который я описал выше, но я не в курсе этой темы.

+0

Я уже делаю так, и это работает. Я беру каждый элемент первых трех и проверяю пространственное соединение между ним и вторым деревом. Но я выполняю цикл таким образом. Я хотел бы знать, может ли пространственное соединение между двумя rtrees избежать целого цикла и рекурсивно проверять пересечение только в интересных областях, сокращающих время вычисления. – Jepessen

+0

Я думаю, что есть алгоритмы, проверьте, например, алгоритм TOUCH: http://infoscience.epfl.ch/record/186338/files/sigfp132-nobari_1.pdf. Но я думаю, что они требуют специальной реализации дерева и не обязательно намного лучше, в зависимости от вашего набора данных. Я думаю, что для R-Tree, где вы не хотите изменять код, вложенное объединение циклов - лучший подход. – TilmannZ

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