c++ - (重新)使用空间索引库加载 R 树

标签 c++ r-tree libspatialindex

我正在使用空间索引 (http://libspatialindex.github.com/) 库批量加载 R 树:

string baseName = "streets";
size_t capacity = 10 * 1024 * 1024;
bool bWriteThrough = false;
indexIdentifier = 0;

IStorageManager *disk = StorageManager::createNewDiskStorageManager(baseName, 512);
fileInMem = StorageManager
   ::createNewRandomEvictionsBuffer(*disk, capacity, bWriteThrough);

// bulkLoads my tree
bulkLoadRTree();

cout << "tree info:" << endl;
cout << *tree << endl;

delete disk;

在构建树的信息处输出如下:

    Dimension: 2 
    Fill factor: 0.7 
    Index capacity: 100 
    Leaf capacity: 100 
    Tight MBRs: enabled 
    Near minimum overlap factor: 32 
    Reinsert factor: 0.3 
    Split distribution factor: 0.4 
    Utilization: 69% 
    Reads: 1 
    Writes: 35980 
    Hits: 0 
    Misses: 0 
    Tree height: 4 
    Number of data: 2482376 
    Number of nodes: 35979 
    Level 0 pages: 35463 
    Level 1 pages: 507 
    Level 2 pages: 8 
    Level 3 pages: 1 
    Splits: 0 
    Adjustments: 0 
    Query results: 0 

现在我正在尝试加载我保存在磁盘中的内容:

IStorageManager *ldisk = StorageManager::loadDiskStorageManager(baseName);
SpatialIndex::StorageManager::IBuffer* fileLoadBuffer = StorageManager
    ::createNewRandomEvictionsBuffer(*ldisk, capacity, bWriteThrough);

id_type id = 1;
tree = RTree::loadRTree(*fileLoadBuffer, id);
cout << *tree << endl;

而且这棵树只有一个节点(树的输出是:)

    Dimension: 2
    Fill factor: 0.7
    Index capacity: 100
    Leaf capacity: 100
    Tight MBRs: enabled
    Near minimum overlap factor: 32
    Reinsert factor: 0.3
    Split distribution factor: 0.4
    Utilization: 0%
    Reads: 0
    Writes: 0
    Hits: 0
    Misses: 0
    Tree height: 1
    Number of data: 0
    Number of nodes: 1
    Level 0 pages: 1
    Splits: 0
    Adjustments: 0
    Query results: 0

我做错了什么?为什么我不从磁盘加载整棵树?

最佳答案

您可能没有同步您对光盘的更改吗?

另外,通常人们会在磁盘上实现树,不会在第一次访问时完全读取它。所以在这一点上,它无法报告准确的统计数据。

或者您的 bulkLoadRTree 没有使用 fileInMem

关于c++ - (重新)使用空间索引库加载 R 树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13253270/

相关文章:

pyinstaller EXE OSError : could not find or load spatialindex_c-64. dll

c++ - 使用空间索引库批量加载 R* 树

c++ - Rails - 如何创建桌面应用程序?

c++ - 如何通过套接字将文本文件的内容从服务器发送到客户端?

c++ - 模板更喜欢子类函数而不是更专业的继承函数

c++ - libSpatialIndex:在磁盘上加载/存储索引

c++ - 如何迭代boost R-tree?

c++ - 作为对象传递给 MyDataStream 流(argv [1])的输入数据文件的格式应该是什么

c++ - 有什么方法可以增加一个字符吗?