文档库 最新最全的文档下载
当前位置:文档库 › 简单分布式空间数据库引擎的实现

简单分布式空间数据库引擎的实现

第1章简单分布式空间数据库引擎的实现

目前已有的空间数据库引擎复杂的系统结构和高昂的价格,完全无法满足小型数据的处理,因此为了适应中小型软件的研发,我们设计了主要用于栅格数据和矢量数据的简单分布式空间数据库引擎(Simple Distributed Spatial Database Engine, SD_SDE),它不仅缩小了数据处理的空间,还简化了系统的结构,从空间数据分散的特性出发,在保证数据安全性的同时大大提升了数据处理的效率,常用于多层次的GIS。

首先,我们将具体介绍简单分布式空间数据库引擎的主要功能:

(1)数据的存储和提取

(2)通信接口

(3)空间数据信息的查询

(4)分布式管理

4.1数据存取实现

数据的存取作为该系统的最主要的功能,包括模型和结构的存取两个方面。作为支持数据库引擎的重要支柱,我们将以第三章3.2节中所设计的空间数据模型为例,在数据库的选择上使用SQL Server2000和Oracle,对数据的存取操作进行具体的论述。数据在存储时主要是通过表格的形式对信息进行记录。

4.1.1 SD_SDE存储结构

4.1.1.1栅格数据存储结构

如何对SD_SDE的栅格数据进行存储,首先我们需要了解栅格数据的存储结构。由于存储的方式是表格的形式,因此存储结构中一般有七张表格,分别是:

(1)栅格影像集表(raster set)

(2)管理表(raster_admin)

(3)栅格影像数据块表(raster block)

(4)栅格影像图层表(raster band)

(5)金字塔表(raster_pyramid)

(6)压缩表(raster encode)

(7)栅格元数据表(raster metadata)

当需要将图像数据进行存储时,一般流程是先在栅格影像集表中新增一个影响数据的记录,然后在其他六个表中也增加记录。

下面我们对存储结构中的七个表进行具体的解释说明:

(1)栅格影像集表:当有新的影像数据被存储,栅格影像集表会对该数据编号,即ID(raster_id),ID中不仅有数据存储时间、拥有者等数据的各种信息,还能够作为桥梁,将其他表中的记录连接起来。用户拥有对数据信息中的金字塔最高层级值和数据块的大小值自定义的权限。

(2)管理表:数据通过ID与管理表实现信息的连接共享,因此当用户对数据库进行检索是,管理表会提供所有影像数据的各种详细的信息。

(3)栅格影像数据块表:通过影像块来对数据进行存储,每个影像块都记录了影响块的方位、大小等信息。

(4)栅格影像图层表:根据波段对影像数据进行分层,然后将每个图层的具体信息记录在表上。图层往往由图层块组成,每个图层块都记录了影响的数据信息,为了方便记录,规定0表示影像块数据,1表示图层块数据。

(5)金字塔表:可以根据用户查询的条件有针对性的提取数据,不仅减少了工作量还能够提高系统的运行速度。金字塔表中记录的主要是金字塔每块的坐标、层级等信息,数据主要存储在金字塔块中。

(6)压缩表:主要用于记录数据的大小方位等信息,通过对大量的数据进行压缩,节约了空间,大大提高了数据的传输速度,当用户需要提取数据信息时,压缩表会自动解压还原数据。

(7)栅格元数据表:主要用于记录影像的尺寸分辨率等基本信息。

如图是栅格影像集表raster_set

字段名类型描述

raster_id int 栅格影像id

name char 栅格影像名称

date datatime 入库时间

owner char 所有者

pyramid int 金字塔最高级别

blockheight double 影像数据块的高度

blockwidth double 影像数据块的宽度

description varchar 备注

表4-2 管理表raster_admin

字段名类型描述

admin_id int 标示ID

raster_id int 栅格影像id

name char 栅格影像名称description varchar 备注

表4-3 栅格影像数据块表raster_block 字段名类型描述block_id int 影像数据块号

xlcorner double 影像数据块左下角坐标x ylcorner double 影像数据块左下角坐标y blockrow int 影像数据块所在行号blockcol int 影像数据块所在列号blockdata image 影像数据块存储数据raster_id int 栅格影像id

表4-4 栅格影像图层表raster_band 字段名类型描述level_id int 影像图层id

raster_id int 栅格影像id

cellsize double 栅格影像分辨率

level_width double 图层宽度

level_height double 图层高度

description varchar 分辨率备注

表4-5 金字塔表raster_pyramid

字段名类型描述pyramid_id int 金字塔数据块块号pxlcorner double 左下角坐标x

pylcorner double 左下角坐标y

pbrow int 金字塔数据块所在行号pbcol int 金字塔数据块所在列号plevel int 图层金字塔等级

pblockdata image 金字塔数据块存储数据

raster_id int 栅格影像id

表4-6 压缩表raster_encode

字段名类型描述

pyramid_id int 数据块块号

pxlcorner double 左下角坐标x

pylcorner double 左下角坐标y

pbrow int 数据块所在行号

pbcol int 数据块所在列号

cellsize double 分辨率

pblockdata image 数据块存储数据

raster_id int 栅格影像id

表4-7 栅格元数据表raster_metadata

字段名类型描述

meta_id int 标示ID

raster_id int 栅格影像id

imagewidth double 栅格影像宽度

imageheight double 栅格影像高度

imagetype int 栅格影像数据格式(如0代表遥感影像等) cellsize double 栅格影像分辨率

fillsize double 文件大小

description varchar 备注

下面描述的是各存储表之间的关系,如图4-1所示:

图4-1 栅格数据存储表结构体系

4.1.1.2矢量数据存储结构

矢量数据的存储与栅格数据的存储基本相似,不同之处在于,矢量数据主要的储存对象主要有两种:

(1)几何数据:在于数据的模型进行分析研究后,对空间的数据进行划分,最后储存在表中的形式是大字段。

(2)属性数据:不需要转换或压缩,直接存储。

矢量数据结构中存储的表主要有四种:

(1)矢量数据集表(vector_set)

(2)管理表(vector_admin)

(3)要素表(vector_part)

(4)属性表(vector_attribute)

这四种数据表的相互配合,共同管理数据的存储。下面具体介绍四个数据表的主要结构:

表4-8 矢量数据集表vector_set

字段类型描述

vector_id int 矢量数据的标示号

vector_name char 矢量数据名称

vector_time double 矢量数据入库时间

相关文档