支持的空间索引类型

随着GIS的发展,GIS的数据量逐渐增大,使得空间数据的访问速度降低,而空间索引就是用来提高数据的空间查询效率的数据结构。

地理信息系统中的空间索引是相对于字段索引而言的。字段索引是数据库系统或者其他计算机系统中提供键值快速定位的数据结构。字段索引提供了对特定键值的数据快速访问的能力。字段索引一般采用B树或者B树的衍生数据结构。由于空间数据特有的位置相关性,传统的字段索引不能满足空间数据快速定位的需求,因此需要空间索引提供位置相关的数据的快速访问能力。

提供了四叉树索引、R 树索引、图幅索引、动态索引以及支持部分数据库的原生索引,并且这几种索引仅适用于矢量数据集。

四叉树采用改良的希尔伯特编码,对空间数据进行编码,采用数据和索引的一体存储方式。R 树索引的数据结构是 B 树在多维空间的扩展,索引查询效率较高,索引数据和空间数据分开存储。图幅索引针对分幅数据效果很好,比如国家标准比例尺地形图中按标准图幅分幅的数据,适合于按照图幅编号建立图幅索引。动态索引是针对数据库引擎新开发的索引,极大地发挥了数据库的查询能力。

原生索引,创建的是空间索引。

  • 在 PostGIS 中是 GIST 索引,意思是通用的搜索树,是一种平衡的、树状结构的索引方法。 优点:加快空间数据的检索。缺点:创建耗时较长,占用空间比较大。
  • 在 MongoDB 中是 2dsphere 是用来支持球体几何计算查询的索引。 2dsphere索引支持所有MongoDB地理空间查询。

一个数据集在一种时刻只能使用一种索引,但是索引可以切换,即当对数据集创建完一种索引之后,必须删除旧的索引才能创建新的。数据集处于编辑状态时,系统自动维护当前的索引。特别地,当数据被经过多次编辑后,索引的效率将会受到不同程度的影响,需要重新建立空间索引。

表一:各引擎对空间索引的支持情况
引擎类型 R 树索引 四叉树索引 动态索引 图幅索引 原生索引
UDB Y(支持所有数据集类型) N N N N
SQLPlus Y(不包括二三维点和属性表数据集) Y(不包括二三维点和属性表数据集) Y(不包括CAD数据集) Y(不包括路由数据集) N
PostgreSQL Y(不包括二三维点和属性表数据集) N N Y(不包括路由数据集) N
OraclePlus Y(不包括二三维点和属性表数据集) Y(不包括二三维点和属性表数据集) Y(不包括CAD数据集) Y(不包括路由数据集) N
OracleSpatial Y(支持所有数据集类型) N N N N
KingBase Y(不包括二三维点和属性表数据集) Y(不包括二三维点和属性表数据集) Y(不包括CAD数据集) Y(不包括路由数据集) N
MySQL Y(不包括二三维点和属性表数据集) Y(不包括二三维点和属性表数据集) Y(不包括CAD数据集) Y(不包括路由数据集) N
DB2 N Y(不包括二三维点和属性表数据集) Y(不包括CAD数据集) N N
BeyonDB Y(不包括二三维点和属性表数据集) N N N N
Altibase Y(不包括二三维点和属性表数据集) N N N N
PostGIS N N N N Y(GIST索引)
MongoDB N N N Y(不包括路由数据集) Y(2dsphere索引)