【问题标题】:choice of parameters for R* Tree using SpatialIndex library使用 SpatialIndex 库为 R* 树选择参数
【发布时间】:2012-10-25 15:13:02
【问题描述】:

我正在使用来自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);

然后我插入大量边界框,目前大约 250 万(德国巴伐利亚州的道路网络)。稍后我的目标是插入欧洲的所有道路。

存储管理器和 rtree 的参数有哪些好的选择?大多数情况下,我使用 rtree 来查找到给定查询(bbox 交叉点)最近的道路。

【问题讨论】:

  • +1 因为我以前从未听说过 R* 树,而且它非常有趣。 en.wikipedia.org/wiki/R*_tree
  • 嗯,它是一个非常标准的索引结构,用于回答空间范围查询(给我所有落入给定矩形查询的对象)和最近邻查询(给我k-最近的对象到我的点查询)。如果您有兴趣,请查看一般空间索引:en.wikipedia.org/wiki/Spatial_database

标签: c++ indexing spatial spatial-index r-tree


【解决方案1】:

由于您的数据是静态的,因此大容量加载可能适合您。最流行(也是相当简单)的 bluk 加载是 Sort-Tile-Recursive。但是,它在某种程度上是围绕点数据设计的。当您插入空间对象时,它可能会也可能不会正常工作。

如果您使用批量加载,它将不再是 R*-tree,而是普通 R-tree。

容量 10 听起来方式对我来说太少了。你想要一个更大的扇出。但是您需要进行基准测试,这取决于数据集和查询什么是好的。我肯定会尝试 100 或更多。

【讨论】:

  • 感谢 cmets 和信息。我已经将这两个容量值增加到 100。这构建了一个高度为 3 的树。我将尝试对这些值进行实验,并在几天后将它们发布在这里..
  • 根据马里奥在lists.gispython.org/pipermail/spatialindex/2013-June/… 中的解释,批量加载的树既不是普通的R-tree,也不是R*-tree。
  • 那么邮件不准确。使用 STR 批量加载 R-tree 不会生成与增量加载 R-tree 完全相同的树(原因很明显,例如填充率远高于增量加载树),但它仍然是一个有效的 R- R*-tree,并且可以以相同的方式查询和更新。
猜你喜欢
  • 2013-06-09
  • 1970-01-01
  • 1970-01-01
  • 2014-05-06
  • 1970-01-01
  • 2021-08-01
  • 2018-08-09
  • 2023-02-01
  • 1970-01-01
相关资源
最近更新 更多