4.空间索引
4.1 简介
The Boost.Geometry.Index 旨在收集称为空间索引的数据结构,可用于加速搜索空间中的对象。
通常,空间索引存储几何对象的表示,并允许搜索占用某些空间或接近空间中某个点的对象。
目前,只实现了一个空间索引-R-tree。
R树详解
R树空间索引
4.1.1 R-tree
R-tree是一种用于空间搜索的树型数据结构。它由Antonin Guttman在1984年[1]提出,作为多维数据B树的扩展。它可用于存储点或体积数据,以便执行空间查询。例如,此查询可能返回位于某个区域内或靠近空间中某个点的对象[2]。可以插入新对象或删除已存储的对象。
下图显示了R树结构。每个R-树的节点存储一个框,描述其子节点占用的空间。在结构的底部,有包含值(几何对象表示)的叶节点。
4.1.2 实现细节
R-树的这种实现的关键特征是:
-
能够存储任意值类型,
-
三种不同的平衡算法-线性、二次或rstar,
-
使用打包算法创建,
-
参数(包括最大和最小元素数)可以作为编译时或运行时参数传递,在编译时版本节点中,元素存储在静态大小容器中,
-
高级查询,例如,搜索距离某个点最近的5个值,并与某些几何图形相交,但不在另一个几何图形内,
-
使用迭代器进行迭代查询,
-
符合C++11的移动语义、有状态分配器、,
-
能够在没有默认构造函数的情况下存储值类型,
-
使用默认std::allocator<>进行内存存储,
-
其他存储选项-使用Boost.Interprocess allocators.共享内存和映射文件。
4.1.3 依赖
R-tree依赖于Boost.Container, Boost.Core, Boost.Move, Boost.MPL, Boost.Range, Boost.Tuple.
[1] Guttman, A. (1984). R-Trees: A Dynamic Index Structure for Spatial Searching
[2] Cheung, K.; Fu, A. (1998). Enhanced Nearest Neighbour Search on the R-tree
[3] Greene, D. (1989). An implementation and performance analysis of spatial data access methods
[4] Beckmann, N.; Kriegel, H. P.; Schneider, R.; Seeger, B. (1990). The R*-tree: an efficient and robust access method for points and rectangles
[5] Leutenegger, Scott T.; Edgington, Jeffrey M.; Lopez, Mario A. (1997). STR: A Simple and Efficient Algorithm for R-Tree Packing
[6] Garcia, Yvan J.; Lopez, Mario A.; Leutenegger, Scott T. (1997). A Greedy Algorithm for Bulk Loading R-trees