6.4. 基于关系型数据库空间数据管理

在传统的GIS中,一般是将空间数据与属性数据完全分开来存放,并以属性表与空间文件一一对应的方法和根据表的关键字与文件中空间对象的标识,来定位空间对象的属性信息。目前,由于GIS中管理的数据量逐渐增大,这种分离管理已经不能满足当前数据管理的需要。随着大型关系型数据库技术的日益完善,其应用也日渐普及。在数据管理方面,大型关系型数据库管理系统恰恰具备了文件系统所不具备的工具,同时还可以实现空间数据与属性数据的一体化管理。因此,如何充分利用大型关系型数据库管理系统已有的技术和强大的数据管理工具去管理复杂庞大的GIS系统的数据,已成为GIS界人士研究的课题,他们尝试用大型关系型数据库管理GIS数据,从而形成新的GIS系统开发平台;而大型关系型数据库厂商也在积极扩展SQL语句的查询功能,以支持对空间数据的处理,两者正在相互渗入、相互促进。

GIS数据的关系化管理方式能使GIS系统开发设计人员从庞大、烦琐的数据管理工作中解脱出来,能充分应用现有的大型关系型数据库管理系统本身的数据管理功能(检索、完整性检查,安全保密机制、安全恢复机制、数据共享、并发控制、网络通讯、分布式体系结构等),同时也给传统的GIS应用软件开发平台带来了一种崭新的设计思想。从表6-2(朱翊,2001)可以明显地看出文件系统与大型关系型数据库管理系统在数据管理方面的差异。

表6-2 文件系统与大型关系型数据库管理系统数据管理性能对比

性 能 文件系统 大型关系型数据库管理系统
易掌握性 容 易 困 难
成本
检索能力
数据安全管理 困 难 容易实现
数据完整性检查 困 难 容易实现
并发控制 困 难 容易实现
数据共享 困 难 容易实现
对空间数据及属性数据的一体化管理 难以实现 容易实现
与操作系统的集成性 无 关 紧密相关

6.4.1. 全关系型数据库管理空间数据

 随着关系型数据库技术的发展,尤其是非结构化大型对象的引入,人们考虑将非结构空间图形数据作为二进制对象,存储在目前大部分关系型数据库提供的二进制块(Binary Block)中。其相关的属性数据存储在数据表的列中,由RDBMS统一管理,这就是全关系型空间数据管理模式。空间数据引擎(Spatial Engine, SDE)是近几年发展起来的采用大型RDBMS管理空间数据的新技术,它为GIS海量数据的组织与共享提供了极大的方便。从用户的角度看,空间数据引擎是用户和异构空间数据库之间的接口;从软件的角度看,空间数据库引擎是应用程序和RDBMS之间的中间件,用来管理空间数据库。从系统的角度看,空间数据库引擎利用RDBMS和其扩展功能,实现空间数据在数据库中的物理存储(陆守一,2004)。目前,许多GIS软件厂商在纯关系数据库管理系统基础上,开发出空间数据管理的引擎,如ESRI公司出的ArcSDE,北京超图公司开发出的Supermap SDX+,武汉中地数码公司研发的MAPGIS-SDE等。

1.全关系型数据库管理结构

在全关系型数据库管理方式中,使用统一的关系型数据库管理空间数据和属性数据,空间数据以二进制数据块的形式存储在关系型数据库中,形成全关系型的空间数据库。GIS

../_images/image00113.gif

图6-9全关系型数据库管理结构(据邬伦,2001)

应用程序通过空间数据访问接口访问空间数据库中的空间数据,通过标准的数据库访问接

口访问属性数据,全关系型数据管理结构如图6-9所示。

目前,关系型数据库无论是在理论上还是应用方面,都已经成熟,它们提供了一致的访问接口(SQL)以操作分布的海量数据,并且支持多用户的并发访问、安全性控制和一致性检查。这些正好是构造企业级地理信息系统所需要的(邬伦等,2001)。此外,通用的接口也便于实现属性数据的共享。但是,由于现有的SQL不支持空间数据的检索操作,需要软件厂商自行开发空间数据访问接口,通过空间数据访问接口访问存储在关系型数据库中的空间数据。

采用全关系型数据库管理空间数据的优点是一个地物对应于数据库中的一条记录,避免了对“连接关系”的查找,使得属性数据检索速度加快。但是,由于空间数据的不定长,会造成存储效率低下,此外,现有的SQL并不支持空间数据检索,需要软件厂商自行开发空间数据访问接口。如果要支持空间数据共享,则要对SQL进行扩展。

2.空间数据引擎

关系型数据库无法存储、管理复杂的地理空间框架数据以支持空间关系运算和空间分析等GIS功能。因此,GIS软件厂商在纯关系数据库管理系统基础上,开发空间数据管理的引擎。空间数据引擎(Spatial Database Engine,简称SDE)是用来解决如何在关系数据库中存储空间数据,使空间数据实现真正的数据库方式管理,建立空间数据服务器的方法。空间数据引擎是用户和异种空间数据库之间一个开放的接口,它是一种处于应用程序和数据库管理系统之间的中间件技术。用户可通过空间数据引擎将不同形式的空间数据提交给数据库管理系统,由数据库管理系统统一管理,同样,用户也可以通过空间数据引擎从数据库管理系统中获取空间类型的数据满足客户端操作需求。目前GIS软件与大型商用关系型数据库管理系统(RDBMS)的集成大多采用空间数据引擎来实现。使用不同GIS厂商数据的客户可以通过空间数据引擎将自身的数据提交给大型关系型DBMS,由DBMS统一管理。同样,客户也可以通过空间数据引擎提供的用户和异构数据库之间的数据接口,从关系型DBMS中获取其它类型的GIS数据,并转化成客户可以使用的方式。空间数据引擎就成为各种格式的空间数据出入大型关系型DBMS的转换通道。

空间数据引擎的工作原理如图6-10所示,

../_images/image00212.gif

空间数据引擎在用户和异构空间数据库的数据之间提供了一个开放的接口,它是一种处于应用程序和数据库管理系统之间的中间件技术,SDE客户端发出请求,由SDE服务器端处理这个请求,转换成为DBMS能处理的请求事务,由DBMS处理完相应的请求,SDE服务器端再将处理的结果实时反馈给

GIS的客户端。客户可以通过空间数据引擎将自身的数据交给大型关系型DBMS,由DBMS统一管理,同样,客户也可以通过空间数据引擎从关系型DBMS中获取其他类型的GIS数据,并转换成为客户端可以使用的方式。大型关系型数据DBMS已经成为各种格式不同空间数据的容器,而空间数据引擎成为就成为空间数据出入该容器的转换通道。在服务器端,有SDE服务器处理程序,关系数据库管理系统和应用数据。服务器在本地执行所有的空间搜索和数据提取工作,将满足搜索条件的数据在服务器端缓冲存放,然后将整个缓冲区中的数据发往客户端应用,在服务器端处理并缓冲的方法大大提高了效率,降低了网络负载,这在应用操纵数据库中成百上千万的记录时是非常重要的。SDE采用协作处理方式,处理既可以在SDE客户一端,也可在SDE服务器一端,取决于具体的处理在哪一端更快。客户端应用则可运行多种不同的平台和环境,去访问同一个SDE服务器和数据库。

SDE服务器端同时可以为多个SDE客户端提供并发服务,关键在于客户端发出的请求的多样性,可以是读取数据、插入数据、更新数据、删除数据。读取数据本身就包括查询、空间分析功能,而插入数据、更新数据和删除数据不仅包含从普通空间数据文件导入空间数据库的情形,还可能涉及到多用户协同编辑的情形。从功能上看,SDE最常用的功能就是提供空间数据访问和空间查询。

在多用户并发访问(如协同编辑)的情况下,可能会产生冲突,SDE必须处理可能出现的所有并发访问冲突。SDE服务器和空间数据库管理系统一起,为客户端提供完整的、透明的数据访问。

3.基于关系型数据库的空间数据模型

关系数据库是建立在关系模型的基础之上的,它的基本组成是表,每个表有列(表字段)、行(表记录)组成,一个数据库则由许多个表组成,这些表之间采用一定的关系组织连接。按照层次模型及表之间的连接关系,地理关系数据库的数据组织模型(李琦等,2000)见图6-11。

如图6-11所示,各个表具有用于描述本层表格自身的特点的基本信息和可随意添加的多个属性值。

../_images/image0037.gif

图6-11 基于关系数据库的空间数据组织模型

(1)地图表集:整个系统具有这样一个表,它可以作为一个地图集中的最高层次表格,在实现上可以作为多个数据库的总体规划表格。它本身具有各个地图的引用和描述信息。

(2)地图表:每个地图都有这样一个表,它可以作为管理一个工程中地图的最高表格,它是以一个数据库的总体规划表格的方式实现。该表具有各层参照、描述和引用信息。

(3)地图层表:每个地图层都有这样一个表,它作为管理一个图层的表格。该表具有本图层的空间对象及各个空间对象的相应描述信息。

(4)空间索引表:每个地图层对应一个空间索引表,它用于协助进行空间分析,以加快空间分析的速度。

4.基于关系型数据库的空间实体数据结构

不同的空间实体(点、线、面),其表数据结构是不一样的。下面就是一种空间实体

的数据结构。

(1)polygon(面状实体表)

create table polygon

(

GID        int NOT NULL,

iInterId      int,  /* 内部编码 */

iUsid        int,  /* 用户标识码 */

iClassid      int,  /* 分类码 */

iLayerNo     int,  /* 层号 */

iDisplayCode  int,  /* 表达符号码 */

iColorNo      int,  /* 区域颜色号码 */

… …

dXlab         float,  /* 内部标识点坐标 */

dYlab         float

)

(2)line(线状实体表)

create table line

(

GID            int NOT NULL,

iInterId          int,  /* 内部编码 */

iUsid            int,  /* 用户标识码 */

iClassid          int,  /* 分类码 */

iLayerNo         int,  /* 层号 */

iDisplayCode      int,  /* 表达符号码 */

iDisplayPatternNo  int,  /* 线型号 */

… …

iTransp           int,  /* 透明方式 */

)

(3)point(点状实体表)

create table point

(

GID        int NOT NULL,

iInterId      int,  /* 内部编码 */

iUsid        int,  /* 用户标识码 */

iClassid      int,  /* 分类码 */

iLayerNo     int,  /* 层号 */

iDisplayType  int,  /* 点类 */

iDisplayCode  int,  /* 表达符号码 */

… …

Bmpname

)

(4)lin(面状实体组成线段表)

create table lin

(

GIDP    int,  /* 面状实体代号 */

GIDL    int,  /* 线段编码 */

)

(5)island(岛屿表)

create table lsland

(

iPolyId    int,  /* 主多边形编码 */

iPolyId1   int,  /* 岛屿编码 */

)

(6)coor(实体坐标表)

create table coor

(

GID     int,

Dxmax   float,

Dxmin   float,

Dymax   float,

Dymin   float,

Coor     image

)

在上述表中的GID域是为了遵循OpenGis操作规范而设计的,对GIS系统中所有实体的GID值都是唯一的,每个实体的坐标都存储在表coor的一个记录中,其坐标表达结构亦遵循OpenGis规范中所定义的结构。

5.空间数据访问模型

通过空间关系数据库的数据模型,可以将属性数据与空间数据统一存放在关系数据库中,从而实现了数据的统一管理,图6-12(李琦等,2000)。

由图6-12可见,由于将数据统一于关系数据库中进行管理,因而可以直接利用DBMS的管理功能以充分利用关系数据库中的许多查询优化,提高数据的访问速度。

其中的空间数据访问模块是进行空间数据的压缩、解压缩(实现空间对象的正常表示与空间对象的二进制大对象表示之间的转换)、空间分析、空间数据提取等的模块,它向上提供一般地理信息系统的空间分析、数据提取功能,向下则具有调用数据库管理系统(DBMS)的功能,是整个空间关系数据库模型中数据访问的核心。如图6-13所示。

../_images/image0046.gif

图6-13 空间数据访问模块的组成及调用关系

../_images/image0056.gif

图6-12 图形数据和属性数据

统一于关系数据库管理

6.关系化空间数据的安全管理

在大型关系型数据库管理系统中包含着许多数据安全管理方面的工具,例如数据完整性检查、数据安全管理机制、数据备份/恢复功能等,借以实现数据的安全保密管理。关系化的空间数据管理可以充分利用这些工具来实现空间数据的安全管理,而文件系统根本不具备这些工具。

大型关系型数据库管理系统提供的数据完整性检查工具包括:唯一性检查、主键、外键、触发器、视图约束等。数据安全管理机制包括帐户安全性、对象权限、系统级角色和权限等。数据备份/恢复功能包括:输出备份、脱机备份、实例失败的恢复、意外删除或修改对象的恢复等。关系化空间数据的管理可根据应用的具体要求选用上述工具来满足应用系统对数据管理的要求。

../_images/image0063.gif

图6-14 数据库安全管理模式应用流程图

空间数据在大型关系型数据库管理系统中以关系表的方式存储。关系型数据库管理系统可以根据应用的需求,对空间数据所在的关系表赋予完整性检查、可检索、可操作、部分可检索、触发器约束等权限,以实现应用系统对空间数据的安全管理,从根本上解决了文件系统在数据安全管理方面的难题。图6-14(朱翊,2001)示出了数据库安全管理模式应用的流程。

6.4.2. ORACLE SPATIAL空间数据存储解决方案

在20世纪90年代后期,许多DBMS软件商纷纷对关系数据库进行扩充,即在通用RDBMS上增加空间数据管理专用模块,使之能直接存储和管理空间数据,形成了对象-关系型空间数据库管理系统。所增加的空间数据管理专用模块,定义了点、线、面、圆等空间对象的API函数,以解决空间数据变长记录的管理。

Oracle公司是一家国际著名的教据库厂商,从Oracle8.0.4版本开始,Oracle公司在其核心产品Oracle数据库中推出空间数据管理工具――Spatial Cartridge(SC),借此打入GIS数据库市场。随着Oracle8i的推出,SC升级为Oracle Spatial。

1.Oracle Spatial

Oracle Spatial,是针对存储在Oracle8i中的空间元素(Spatial Feature)集合提供了一种SQL的模式来完成空间数据的存储、输出、修改和查询等功能的。Oracle Spatial由以下组件构成:一种用来规定Oracle支持的空间数据类型的存储、语法、语义的模式(Schema),称为MDSYS;一种空间索引机制;一组用来处理空间区域的交叉、合并和联结的操作符和函数集;一组管理工具。Oracle支持两种表现空间元素的机制(或称作模型),一种是关系式模型(Relational),用多行记录和字段类型为NUMBER的一张表来表示一个空间实体;另一种是对象-关系式模型(Object-Relational),这种模型使用一张数据库表,表中有一个类型为MDSYS.SDO-GEOMETRY的字段,是用一行记录来存储一个空间数据实体。

2.对象-关系摸型

Oracle Spatial的对象-关系模型(object-relational model)实现方法由一组对象数据类型、一种类型的索引方法,以及在这些类型上的操作符组成。一个空间实体用一行具有SDO_GEOMETRY字段的记录来存储,存为对象类型。空间索引的创建和维护由基本的SQL的DDL和DML语句完成。由此可以看到,原来需要用多行多列存储的一个空间实体使用Oracle Spatial的对象-关系模型只需要用一行记录就可以完成存储,大大方便了应用系统的数据处理、维护等操作。

3.对象类型

在Oracle Spatial的对象-关系模型中,一个空间实体的空间信息存在于用户定义的数据库表中的一行字段名为GEOLOC的字段中,字段类型为SDO_GEOMETRY。只要拥有该字段的任何一个表,必须要有另外一列或几列用于定义这个表的唯一主键。Oracle Spatial对SDO_GEOMETRY字段的定义如下:

CREATE TYPE SDO_GEOMETRY AS OBJECT

(SDO_GTYPE NUMBER,

SDO_SRID NUMBER,

SDO_POINT SDO_POINT_TYPE,

SDO_ELEM_INFO MDSYS.SDO_ELEM_INFO_ARRAY,

SDO_ORDINATES MDSYS.SDO_ORDINATE_ARRAY)

由该字段定义可以看出,SDO_GEOMETRY是一个对象类型的字段,由5个对象属性组成,即一个空间实体的所有空间信息全部存储在这5个属性中。

SDO_GTYPE说明该空间实体的类型,例如,2001表示一个二维的点,SDO_SRID是一个预留属性,Oracle Spatial计划将它作为空间引用的外键,SDO_POINT由X、Y、Z三个NUMBER型的属性构成。如果SDO_ELEM_INFO和SDO_ORDINATES都是NULL,该对象便是非空的,X、Y两个值用来表示点实体的坐标,否则,SDO_POINT属性将被忽略。SDO_ELEM_INFO定义为一个可变长的数组,用来表明如何解释存储在SDO_ORDINATES属性中的坐标信息,SDO_ORDINATES定义为一个可变长的数组,数组元素类型为NUMBER,用来存储组成空间实体边界的点的坐标值。

4.使用对象-关系模型的优点

(1)Oracle spatial将空间数据采取了分解存储的技术,即一个地理空间分解为若干层,然后每层又分解为若干几何实体,最后将单个几何实体分解为若干元素。Oracle Spatial支持点、线、面三种基本几何对象类型(Geometry),以及它们的集合体(MultiGeometry)。线根据连接方式有简单线(Line String)、圆弧线(ArcLine String)和组合线(CompoundLine String,简单线与圆弧线的任意组合),面有简单面(Polygon)、圆弧面(Arc Polygon)、组合面(Compound Polygon,简单面与圆弧面的任意组合)、圆(Circle)和矩形(Rectangle)。使用这些几何对象进行组合,可以表示非常复杂的几何对象,满足常规几何对象表示的需要。

(2)在空间索引方面,Oracle Spatial提供了高效的索引机制,支持Quad-Tree和R-Tree空间索引。外部数据通过转人到或直接通过SQL生成空间数据表,然后建立空间索引,这样就可以直接通过SQL实现对空间数据的存取、检索、空间分析等操作,同时这些索引完全由Oracle的数据库服务器维护。

(3)目前,Oracle Spatial支持的空间分析功能主要包括检索(SDO_FILTER)、关联(SDO_RELATE)、覆盖范围(SDO_WIDTH_DISTANCE)、缓冲分析(SDO_BUFFER)和最近地物查找(SDO_NN)等,基本能够满足GIS的常规要求。

Oracle Spatial提供了成熟的空间数据的支待,然而技术的彻底更新带来了应用系统开发技术的变化。Oracle Spatial是Oracle数据库中的空间数据管理模块,是标准的对象-关系型数据库,它为数据库管理系统管理空间数据提供了完全开放的体系结构,所提供的各种功能均在服务器中完全集成。用它来管理空间数据可以借助Oracle数据库的安全机制,强健的数据管理和丰富的对象功能,灵活的层体系结构等成熟的数据库实现技术,使它克服了传统空间数据库在现代GIS应用中暴露出来的种种问题。