当前位置:甜馍馍地理信息网 >> 地理信息系统GIS >> 空间数据库 >> 正文 >>  [阅读资讯:空间数据库引擎探究及GIS栅格和矢量数据类型的存储]

空间数据库引擎探究及GIS栅格和矢量数据类型的存储

[ 来源:GIS帝国 | 时间:2007年10月10日 | 收藏本文 ] 【

30多年来,GIS及CAD软件一直采用传统文件方式存储和管理地图数据。20世纪90年代,GIS工作者开始研究基于关系型数据库(RDBMS)或对象关系型数据库系统(O-RDBMS)的空间数据存储管理方案,这就是所谓的“空间数据库”技术。当GIS行业跨入21世纪,一切都发生了改变。使用数据库管理包括地图及其属性的空间数据,成为GIS应用发展的潮流。与传统文件方式相比,空间数据库技术有明显的技术优势,包括海量数据管理能力、图形和属性数据一体化存储、多用户并发访问(包括读取和写入)、完善的访问权限控制和数据安全机制等。

早期的空间数据库技术性能低下,往往被GIS行业人士当作中看不中用的绣花枕头,除了学术研究外,在应用系统中很少被真正使用。空间数据库技术正在逐步取代传统文件,成为越来越多的大中型GIS应用系统的空间数据存储解决方案。

把GIS数据放在RDBMS中,但是一般的RDBMS都没有提供GIS的数据类型(如点、线、多边形、以及这些feature之间的拓扑关系和投影坐标等相关信息),RDBMS只提供了少量的数据类型支持:int,float,double,Blog,Long ,char等,一般都是数字,字符串和二进制数据几种。并且RDBMS不仅没有提取对GIS数据类型的存储,也没有提供对这些基础类型的操作(如:判断包含关系,相邻、相交、求差、距离、最短路径等)。
为了实现GIS数据类型的存储和对GIS数据类型的操作支持。我们可以采用曲折的办法来达到这些目的。

1、  存储:把featrue以一个二进制的字段形式存储,同时建立对该二进制数据的描述信息(称为空间元数据)。

2、  操作:为每种feature建立一组函数包。

A、 读取时,先读取空间元数据,根据元数据把featrue的二进制数据填充到featrue对象的data部分中。

B、 写入时,先写入空间元数据,然后把featrue对像的data部分序列化为二进制数据,然后存储到feature字段中。

C、 空间运算:空间运算操作的内容为fatrue对象的data部分,而空间运算做为fatrue类成员函数。或者单独为每种feature建立相关的函数包。

下面我们先探究空间数据类型的存储。存储主要牵涉到的是GIS数据的元数据部分。我们需要管理好各种空间数据。

同种类型的featrue我们归为一类,我们称为featrue类,每个feature类对应着数据库中的一个二进制字段,每个feature对象对应着这个二进制字段的具体数值。为了把GIS的feature的属性数据和空间数据存储到一起,统一管理。我们建立这样几个概念。

数据集:对应着数据库中的一张表,这个表里有featrue的二进制字段和一般的属性字段,同时还包括每个feature对象的元数据字段如:周长、面积以及辅助字段。

数据源:对应着数据库中的一组表,由两部分组成:一部分是数据集,另一部分是对数据集描述的表(称空间元数据表)。通常是每个schma(或者数据库)下一组空间元数据表。

起辅助作用的数据库对象:包括为各个数据集建立的索引、触发器、序列……

空间元数据表包括:

A:描述每个数据集的表:这个表里的字段包括:每个数据集的包围盒。以及对该数据集所建的索引的类型,名称等。

B:描述数据集字段的表:这张表的字段包括:数据集名,字段名称,字段类型,字段别名、数据集别名、数据集类型等……

C:辅助对象的元数据表:包括描述索引与数据集之间关系的表,包括描述触发器与数据集之间关系的表,包括描述序列与数据集之间关系的表。描述数据集之间关系的表(如网路数据集,是由点类型的数据集与线类型的数据集组成,这就需要说明点与线之间的拓扑关系咯)

上面我们只讨论矢量的GIS数据类型的存储,下面我们来探究下栅格类型的GIS数据存储。

同样的也有栅格的数据集,只不过是字段的类型稍微改变了下而已。为了加快数据存取,我们应当使得GIS操作只存取它所需要的数据,以一张遥感影像为例,我们可以把一块大影像按一定规则切割为一系列的小图块,然后把这些小图块以二进制的形式存储到IMAGE字段里,同时把该小图块的偏移位置(有了其实位置,和偏移位置以及每个图块的大小就知道了该图块的地理范围了)作为表的属性字段存储下来。以后在取数据时,需要先查该图块的元数据内容,得出地理范围(或者干脆就把每个图块的地理范围存储下来),这样就知道在显示时需要取哪些记录,然后再把需要显示的记录的IMAGE的数据取出来,根据地理范围把数据拼接起来就可以了(矢量数据的显示与操作也是这么干)。图块大小的划定规则是比较重要的,这非常影响速度的。

一般来讲一个波段,对应着一个栅格数据集。在显示影像时,需要同时读取多个栅格数据集,在显示的时候把它们拼接到一起。

我们还需要描述这些栅格数据集的元数据表,比如,那几个栅格数据集是一组的对应着同一个影像文件,地理坐标的情况怎样,影像金字塔信息。

后面我们讨论下影像金字塔,为了加快数据显示,有些空间数据库引擎是对最原始的数据抽稀,按每一层金子塔抽稀为一个栅格数据集。抽稀一般采用幂级数的方式。这是一种以空间换时间的做法。

【推荐本文】 【打印本页】 【返回顶部

>> 相关文章:

● 上一篇文章:国家基础地理信息系统数据库知识讲解
● 下一篇文章:GIS空间数据库ORACLE参数设置中心
最新文章
推荐文章