相比传统数据,空间数据的数据量更大,结构更加复杂,因此,要实现空间数据的快速查询和检索,就必须构建空间数据索引。
所谓索引,就是对数据库表中一列或多列的值进行排序的一种结构。使用索引可快速访问数据库表中的特定信息。当数据量较大时,构建索引是提高数据查询效率的主要手段。
而空间索引是指依据空间对象的位置和形状或空间对象之间的某种空间关系按一定的顺序排列的一种数据结构,其中包括空间对象的概要信息,如对象的标识、外接矩形及其指向空间对象实体的指针。
由于空间数据是多维的,传统的索引技术并不完全适用于空间数据。这就需要充分考虑空间数据的主要特征,设计空间索引算法。
作为一种辅助性的空间数据结构,空间索引介于空间操作算法和空间对象之间,通过它的筛选,大量与特定空间数据操作无关的空间对象得以被排除,从而提高空间数据操作的速度和效率。
空间索引的性能的优劣直接影响空间数据库和地理信息系统的整体性能,它是空间数据库和地理信息系统的一项关键技术。
常见的空间索引一般是自顶向下、逐级划分空间的各种数据结构,比较有代表性的包括R 树索引、四叉树索引、动态索引(也叫多级格网索引)和图库索引(也叫三级索引),每种空间索引都有自身的优势,只有合理选择空间索引的类型,才能满足高效地检索海量影像和矢量空间数据的需求。
对象范围索引是在记录每个空间实体的坐标时,同时记录包围每个空间实体的外接矩形的最大最小坐标。这样,在检索空间实体时,根据空间实体的最大最小范围,预先排除那些没有落入检索窗口内的空间实体,仅对那些外接矩形落在检索窗口的空间实体作进一步的判断,最后检索出那些真正落入窗口内的空间实体,如图所示。

第二个是格网索引,格网型空间索引思路比较简单,容易理解和实现。其基本思想是将研究区域用横竖线条划分大小相等和不等的格网,记录每一个格网所包含的空间实体。当用户进行空间查询时,首先计算出用户查询对象所在格网,然后再在该网格中快速查询所选空间实体,这样一来就大大地加速了空间索引的查询速度,如图所示。

由于格网索引结构较为简单,因此,它有着广泛的应用。
第三个是四叉树空间索引。四叉树作为一种有效的数据结构,不仅可以用来对栅格数据进行组织,它还可用于建立空间数据的索引。四叉树中的线性四叉树和层次四叉树都可以用于建立空间索引。在建立四叉树索引时,根据所有空间对象覆盖的范围,进行四叉树分割,使每个子块中包含单个实体,然后根据包含每个实体的子块层数或子块大小,建立相应的索引。
在四叉树索引中,大区域空间实体更靠近树的根部,小实体位于叶端,以不同的分辨率来描述不同实体的可检索性。线性四叉树采用十进制Morton 码或Peano 码来表示四叉树的大小和层数如图所示。

使用层次四叉树建立空间数据的索引与线性四叉树基本相同,但是它需要记录不同层次节点间的指针,建立索引和维护都较困难。
第四种是R树和R+树空间索引。与实体范围索引类似,R树和R+树利用空间实体的外接矩形来建立空间索引。就R树而言,认为有N个实体被N个外接矩形所包围。如图给出了R 树空间数据索引的实例。

在该例中,仅有2 层,内层矩形为实体的外接矩形,外层矩形为建立的虚拟矩形。如虚拟矩形B中包含了实体外接矩形H、I、J、K。在构造R 树时,要求虚拟矩形之间尽量不要相互重叠,而且一个空间实体通常仅被一个同级虚拟矩形所包围。但由于空间对象的复杂性,实体的外接矩形通常是相互重叠的,使包含它们的虚拟矩形难免会重叠。
R+树是对R 树索引的一种改进,它允许虚拟矩形可以相互重叠,并分割下层虚拟矩形,允许一个空间实体被多个虚拟矩形所包围。在构造虚拟矩形时,尽量保持每个虚拟矩形包含相同个数的下层虚拟矩形或实体外接矩形,以保证任一实体具有相同的检索时间,如图所示。

空间数据查询
查询的过程大致可分为三类:一是直接复原数据库中的数据及所含信息,来回答人们提出的一些比较“简单”的问题;二是通过一些逻辑运算完成一定约束条件下的查询;三是根据数据库中现有的数据模型,进行有机的组合构造出复合模型,模拟现实世界的一些系统和现象的结构、功能,来回答一些“复杂”的问题,预测一些事务的发生、发展的动态趋势。

而空间数据查询的方式主要有两大类:
一是属性查图形:主要是用SQL语句来进行简单和复杂的条件查询。如在中国经济区划图上查找人均年收入大于5000元人民币的城市,将符合条件的城市的属性与图形关联,然后在经济区划图上高亮度显示给用户。
二是图形查属性,可以通过点、矩形、圆和多边形等图形来查询所选空间对象的属性,也可以查找空间对象的几何参数.如两点间的距离,线状地物的长度,面状地物的面积等。
空间数据查询方式、结果和显示如图所示。

我们重点讨论一下空间查询语言。
查询语言是与数据库交互的主要手段,是数据库管理系统的一个核心要素。SQL 是用于关系数据库管理系统的常见结构化查询语言,它是一种介于关系代数与关系演算之间的结构化查询语言,它的语言功能极强,但由于设计巧妙,语言十分简单,完成核心功能只用9 个动词,如下表所示。

在空间数据库中做属性查询的时候一般使用SQL语句来完成。然而,标准的SQL是关系代数模型中的一些关系操作及组合,适合于表的查询与操作,但不支持空间概念和运算。为支持空间数据库的查询,需要在SQL上扩充谓词集,将属性条件和空间关系的图形条件组合在一起形成扩展的SQL查询语言。常用的空间关系谓词有相邻“Adjacent”,包含“Contain”,穿过“Cross”和在内部“inside”,缓冲区“buffer”等。下表即为OGIS标准定义的一些操作。这些操作在一定程度上解决了将通用SQL 扩展到空间的目标。


