2012-10-25 19 views
5

我現在用的是spatialindex庫R *樹參數從http://libspatialindex.github.com/選擇使用SpatialIndex庫

我在主存儲器中創建一個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.5M(德國巴伐利亞州的公路網)。之後我會瞄準插入歐洲的所有道路。

什麼是存儲管理器和rtree參數的好選擇?大多數情況下,我使用rtree來查找與給定查詢(bbox交叉點)最近的道路。

+0

+1因爲我以前從來沒有聽說過R *樹,這很有趣。 http://en.wikipedia.org/wiki/R*_tree –

+0

好吧,它是一個非常標準的索引結構,用於回答空間範圍查詢(給我屬於給定矩形查詢的所有對象)和最近鄰居查詢(給我點最接近我的點查詢的對象)。如果您有興趣,請查看空間索引:http://en.wikipedia.org/wiki/Spatial_database – arthur

回答

3

由於您的數據是靜態的,很好的批量加載可能適用於您。最流行的(並且相當簡單的)bluk負載是Sort-Tile-Recursive。不過,它有點圍繞點數據設計。在插入空間對象時,它可能也可能不工作。

如果您使用的是批量加載,它將不再是R *樹,而是普通的R樹。

容量10聽起來方式對我來說太少了。你想要一個更大的扇出。但是你需要進行基準測試,這是數據集和查詢的依據。我肯定會嘗試100或更多。

+0

感謝您的意見和信息。我已經將兩個容量值都增加到了100.這樣就構建了一個高度爲3的樹。我將嘗試使用這些值進行實驗並在幾天後將它們發佈到這裏。 – arthur

+0

根據Mario在http://列表中的解釋。 gispython.org/pipermail/spatialindex/2013-June/000354.html,批量加載的樹既不是普通的R樹也不是R *樹。 – mloskot

+0

那麼這封郵件是不準確的。使用STR批量加載R樹不會產生與增量加載的R樹相同的*完全相同*樹(出於顯而易見的原因,例如填充率遠高於增量加載樹),但它是有效的R- *和* R * -tree,可以同樣的方式查詢和更新。 –