资源预览内容
第1页 / 共46页
第2页 / 共46页
第3页 / 共46页
第4页 / 共46页
第5页 / 共46页
第6页 / 共46页
第7页 / 共46页
第8页 / 共46页
第9页 / 共46页
第10页 / 共46页
亲,该文档总共46页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第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_idint栅格影像idnamechar栅格影像名称datedatatime入库时间ownerchar所有者pyramidint金字塔最高级别blockheightdouble影像数据块的高度blockwidthdouble影像数据块的宽度descriptionvarchar备注表4-2 管理表raster_admin字段名类型描述admin_idint标示IDraster_idint栅格影像idnamechar栅格影像名称descriptionvarchar备注表4-3 栅格影像数据块表raster_block字段名类型描述block_idint影像数据块号xlcornerdouble影像数据块左下角坐标xylcornerdouble影像数据块左下角坐标yblockrowint影像数据块所在行号blockcolint影像数据块所在列号blockdataimage影像数据块存储数据raster_idint栅格影像id表4-4 栅格影像图层表raster_band字段名类型描述level_idint影像图层idraster_idint栅格影像idcellsizedouble栅格影像分辨率level_widthdouble图层宽度level_heightdouble图层高度descriptionvarchar分辨率备注表4-5 金字塔表raster_pyramid字段名类型描述pyramid_idint金字塔数据块块号pxlcornerdouble左下角坐标xpylcornerdouble左下角坐标ypbrowint金字塔数据块所在行号pbcolint金字塔数据块所在列号plevelint图层金字塔等级pblockdataimage金字塔数据块存储数据raster_idint栅格影像id表4-6 压缩表raster_encode字段名类型描述pyramid_idint数据块块号pxlcornerdouble左下角坐标xpylcornerdouble左下角坐标ypbrowint数据块所在行号pbcolint数据块所在列号cellsizedouble分辨率pblockdataimage数据块存储数据raster_idint栅格影像id表4-7 栅格元数据表raster_metadata字段名类型描述meta_idint标示IDraster_idint栅格影像idimagewidthdouble栅格影像宽度imageheightdouble栅格影像高度imagetypeint栅格影像数据格式(如0代表遥感影像等)cellsizedouble栅格影像分辨率fillsizedouble文件大小descriptionvarchar备注下面描述的是各存储表之间的关系,如图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_idint矢量数据的标示号vector_namechar矢量数据名称vector_timedouble矢量数据入库时间vector_ownerdouble矢量数据所有者descriptionvarchar其它备注信息表4-9 管理表vector_admin字段名类型描述admin_idint字段标示vector_namechar矢量数据名称vector_idint矢量数据的标示号descriptionvarchar其它备注信息表4-10 要素表vector_part字段名类型描述part_idint字段标示号part_typeint要素类型(0为点状,1为现状,2为面状)Xmindouble要素X坐标最小值Xmaxdouble要素X坐标最大值Ymindouble要素Y坐标最小值Ymaxdouble要素Y坐标最大值part_dataimage要素的几何信息vector_idint矢量数据的标示号descriptionvarchar其它备注信息表4-7 属性表vector_attribute字段名类型描述attribute_idint字段标示vector_sizeint矢量数据大小vector_idint矢量数据的标示号descriptionvarchar其它备注信息矢量数据存储结构中各存储表之间的关系如图4-2所示:图4-2 矢量数据存储表结构体系4.1.2 SD_SDE存取接口当用户对不同的数据库进行访问时,都可以通过SD_SDE接口。本文以SQL Server 2000和Oracle为例,用户可以通过统一的接口直接进入进行数据访问。SD_SDE常用的管理数据库的工具为ADO(ActiveX Data Object)、SQL(Structured Query Language)等,实现数据库的创建、连接等操作。例子中提供的接口是DLL中的ADO,在工程的stdafx.h文件中添加下面的编程语句:#pragma warning(disable:4146)#import C:Program FilesCommon FilesSystemADOmsado15.d11 named_guids rename(EOF,adoEOF), rename(BOF,adoBOF)#pragma warning(default:4146)SD_SDE还设定了一个处理用户请求的统一接口ADOconn,常用的执行语言是SQL语句。各种函数具有不同的作用:(1) AfxOleInit()常用与以ADO作为对象的函数中,位置不同作用也就不同。用在前面可以用于函数初始化,用在最后作为结束,即中断与数据库的连接。(2)ExitConnect()表示释放m_pConnection,(3)函数的环境是CoUninitialize()(4)CoInitialize(NULL)用于前端表示函数的初始化。,在本文中我们采用CoInitialize(NULL)进行初始化。图4-3 ADOconn类关系描述正如图4-3中数据库操作类的关系所示,在实现SD_SDE系统中主要的存取接口函数说明如下:(1)接口函数OnInitADOconn用来连接数据库,并初始化ADO环境的。函数参数为用户定义的数据库用户名,用户密码及数据库类型(0为SQLServer数据库,1为Oracle数据库)。此函数提供了统一的数据库连接接口,函数首先判断用户所要连接的数据库类型,再调用ADO类的Open对数据库进行透明连接
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号