APP下载

基于SpatialWare的空间数据库引擎研究

2016-07-06袁咏仪张旭卢涵宇

科技尚品 2016年12期

袁咏仪 张旭 卢涵宇

摘 要:随着空间信息技术的应用越来越广泛,解决用户应用系统与空间数据库间的数据传输成为充分利用空间数据库的关键问题,而空间数据库引擎能解决上述问题。本文以Mapinfo公司的SpatialWare空间数据引擎为例,使用SpatialWare在SQL Server 2000上构建了空间数据库,通过编程实现地理空间数据的透明访问、共享和互操作等功能,从而建立真正意义上的分布式空间地理数据库。

关键词:SpatialWare;空间数据库;空间数据引擎;空间索引;空间查询

空间数据库,是以描述空间位置和点、线、面、体特征拓扑结构的位置数据及描述这些特征的属性数据为对象的数据库,它采用关系数据库来组织管理空间地理数据和属性数据,提供对这些数据的有效存储查询和分析。空间数据库引擎(Spatial Database Engine,SDE)通过空间数据库引擎实现客户/服务器的分布计算模式,实现地理空间数据的透明访问、共享和互操作,从而建立真正意义上的分布式空间地理数据库。

1 空间数据库引擎的概念

空间数据库引擎是指提供存储、查询、检索空间地理数据,以及对空间地理数据进行空间关系运算和空间分析的程序功能集合。

1.1 基于SpatialWare的数据库引擎具备的基本功能

(1)多用户权限和并发访问。空间数据库引擎对不同用户必须提供不同的权限,同时提供对用户的多线程执行,支持多用户对数据库的并发访问。

(2)多空间数据库管理。为了满足人们对分布信息的需求共享,往往需要同时操作若干个空间数据库。这就需要为用户建立多空间数据库管理,实现用户对空间数据库的透明、安全访问。

(3)空间数据索引功能。空间数据库索引技术通过筛选,排除大量与特定空间操作无关的地理对象,从而缩小了空间数据的操作范围,用来提高系统对数据获取的效率。

(4)空间关系运算和空间分析功能。在GIS系统体系结构中,都需要空间数据库引擎对空间数据加以处理,提供对空间地理数据必要的空间关系运算和空间分析功能。

(5)GSQL语句的解释执行。对用户提交的GSQL语句进行语义分析,根据GSQL语句的语义,对数据库中的数据进行必要的操作,构造执行结果。

1.2 基于SpatialWare的空间数据模型、结构和存储方式

SpatialWare空间数据模型可分为几何元素、空间要素、空间实体、图层4层结构;它的基本数据结构有:图层基本结构、空间实体基本结构、空间要素基本结构、几何要素基本结构;它的空间数据存储主要包含3个部分:空间数据类型,空间数据索引,空间运算函数。

2 空间数据索引机制和管理方式

2.1 空间数据的索引机制

空间索引是对存储在介质上的数据位置信息的描述,用来提高系统对数据获取的效率。SpatialWare采用的R树空间索引提供效率。就R树而言,认为有N个实体被N个外接矩形(Rectangles,R)所包围,R树空间索引就是按包含实体的矩形来确定的,树的层次表达了分辨率信息,每个实体与R树的结点相联系。

2.2 基于SpatialWare的空间数据管理方式

SpatialWare可以建立在两层或三层结构上。两层结构指的是系统分为两部分,包括客户端和服务器。在两层的情况下,SpatialWare服务器通过SpatialWare中间驱动与MapInfo客户沟通,它既作为数据服务器也作为空间处理服务器。三层架构包括客户,中间服务器/客户层及服务器。最高一层处理用户接口和数据流的问题,中间服务器/客户层专门处理申请,底层则进行数据管理。在三层的情况下,可以把空间数据处理和数据服务器放在一台计算机上,中间使用SpatialWare接口(ODBC or C-API)和用户互动。

3 构建基于SpatialWare的空间数据库

在使用空间数据表前,必须向表中加入空间字段,同时还应该建立一个R树索引。如果表是通过Mapinfo EasyLoader或者是Mapinfo Professional方法生成的,那么空間化数据库所必需的字段和索引已经被自动创建了,不必要手动创建。

3.1 空间数据库的创建

经过空间化的表中必须包含st_spatial类型的字段,这个字段用于保存空间几何数据,在默认的情况下该字段名是SW_GEOMETRY,也可以是其他合法的名字。创建空间数据库的方法是在一个普通关系数据库中加入空间数据库所需要的空间数据类型,空间数据处理函数和空间索引机制等内容。以SpatialWare为例创建空间数据库必须先建立一个普通数據库,然后利用exec sp_spatialize_db对数据库进行空间化操作。

3.2 空间数据表的创建

创建空间数据表主要有3种方式:采用EasyLoader上传空间数据;采用T-SQL命令创建空间数据表或者空间化数据库中的现有表;使用Mapinfo Professional把打开的地图数据保存到数据库中。一张空间数据表还必须包含一个非空、唯一的integer类型的关键字段。这个字段用来维护空间字段和R树索引(spatialzed columns and R-tree indexing)。

本文采用T-SQL命令创建空间数据表,具体实现方法如下:

create table spatialtable(

sw_member integer not null IDENTITY Primary Key,

sw_geometry st_spatial)

新建表名:spatialtable 关键字段:sw_member,非空、唯一的integer类型

geometry字段:sw_geometry

3.3 空间索引的创建

使用T-SQL 命令为SpatialWare创建空间索引

exec sp_sw_create_rtree '','