2016-01-22 25 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

我認爲你的意思叫做'空間連接'。天真的方法將迭代小樹的所有元素,並在較大的樹上執行矩形查詢。有關於此的一些研究,只需搜索scholar.google.com 'spatial join'

我不認爲任何高級方法都比我上面描述的天真方法好得多,但我沒有及時瞭解該主題。

+0

我已經這樣做,它的工作原理。我把前三個元素都取出來,並檢查它和第二棵樹之間的空間連接。但我這樣做了一個循環。我想知道兩個rtrees之間的空間連接是否可以避免整個循環,並且只在有趣的區域遞歸檢查交集才能減少計算時間。 – Jepessen

+0

我認爲有算法,例如檢查TOUCH算法:http://infoscience.epfl.ch/record/186338/files/sigfp132-nobari_1.pdf。但我認爲他們需要特殊的樹實現,並不一定好得多,這取決於你的數據集。我認爲對於不想修改代碼的R樹,嵌套循環連接是最好的方法。 – TilmannZ