基于Oracle遥感影像库的构建与实现

2013-06-29 07:26史少维刘云广
城市勘测 2013年2期
关键词:数据类型金字塔语句

史少维,刘云广

(北京建筑工程学院测绘与城市空间信息学院,北京 100044)

1 前言

随着遥感技术的迅速发展,获取的对地观测影像数据越来越多,如何有效管理组织这些遥感影像数据,就显得尤为重要。目前影像数据的管理方式主要可以分成三大类。①基于文件存储的方式:随着系统的应用目的不同,文件结构、组织、格式等都而存在差异,文件与应用程序有着非常密切的关联,这样系统往往需要重新修改调整。这种文件存储管理方式对于实现多用户之间的数据共享和并发控制比较困难,并且数据安全性也很难得到保证。②基于文件与关系数据库结合的方式:影像数据作为外部文件存储,而影像的元数据用关系数据库管理,通过在数据库中存储影像数据的路径名来存取影像。这种管理方式的影像数据本质上仍然是文件管理,在影像数据的共享和统一安全控制上有一定的弊端。如ERDAS公司的IMAGINE中,Image Catalog基于文件与关系数据库图像数据管理系统。其主要用于显示影像文件的相关信息和简单的显示浏览功能,有待进一步的优化。③基于对象关系数据库管理方式:采用商用数据库技术支撑,优势较明显但开发难度大,其具有数据独立性强,数据集中控制,数据冗余度小,并发控制容易实现,数据库易恢复,数据安全性和完整性较好等特点,可以实现多用户访问及元数据与影像数据无缝集成管理。许多系统都在研究和发展阶段。目前比较成熟的海量影像数据管理系统是国内武汉吉奥公司Geo-ImageDB 4.0影像数据库管理系统。它是基于Oracle数据库并且利用组件技术建立的。

本文针对遥感影像数据存储管理方法特点,基于Oracle大型对象关系数据库的管理模式开发,主要从数据存储数据类型、Oracle数据库的引擎接口和利用PL/sql数据库存储过程的角度,结合影像库的研究技术,来阐述遥感影像库的构建以及遥感影像库的基础功能模块的实现,为进一步提高遥感影像库的运行性能提出了可行的方案。

2 Oracle数据库技术

2.1 Oracle数据库

Oracle作为大型对象关系数据库,具有强大的数据库管理功能,具有以下特点:处理的数据容量大,已升级到TB级;数据运算速度快;不受操作系统的限制,具有可移植性和可持续性;为监控数存取提供系统可靠的安全性;支持数据分布式处理。Oracle具备的特点满足了影像数据库开发存储数据量大、效率高、安全性强的要求。

2.2 影像库整体设计

在Windows操作系统环境下,以Oracle 10g数据库为载体,在VS2008平台上以C语言为宿主语言进行数据库的开发,影像数据采用SPOT-5的卫星影像及TM卫星系列的影像,围绕遥感影像处理进行影像库的流程框架设计如图1所示。

影像库结构设计为三层:表示层、中间层、数据层。其中表示层就是用户程序界面端,主要用于用户数据输入、影像数据录入、查询及显示等操作;中间层为OCI接口,实现程序与Oracle之间的数据交互的工作;底层Oracle数据库作为影像库的数据层,主要利用Oracle内部的数据类型组件及设计的影像表来存储管理影像的属性信息和实体数据。其使用VC调用OCI接口的影像数据库结构设计框架如图2所示。

图1 影像库运行流程框架

图2 影像库结构框架

2.3 Oracle影像库数据类型

Oracle可以用于存储影像的数据类型主要有3种:BFile、BLOB、InterMedia,其中 BFile存放在数据库外部,读取的时间效率高,但作为影像存储的安全性很差;BLOB为二进制数据类型,读取的时间效率低;InterMedia为Oracle数据库升级版本新增的数据组件,可以利用这个组件存储、管理与检索多媒体数据,包括影像数据、视频数据、音频数据、文本数据以及Web数据,具体情况如表1所示。

Oracle数据类型的比较 表1

InterMedia组件中的ORDSYS.ORDImage对象用于影像数据管理,其用于存储如BMP、PCX、TIFF、GIF等多种遥感影像数据格式[1]。ORDImage是一种对象数据类型,定义中既包括了影像属性信息的定义,又包括了实体数据的定义,还集成了很多影像操作的方法函数。将影像作为对象来存储,便于组织与管理。当对影像进行一些基本操作时,直接调用ORDImage的成员方法和成员函数即可。本文就采用ORDImage类型存储影像,功能强大,方便灵活,从而达到高效管理的目的。

3 影像数据库关键技术

3.1 构建金字塔影像

金字塔影像,就是以原始影像为基础通过重采样等方法依次生成不同分辨率的各层影像数据,形成分辨率由高到低、数据量由大到小的金字塔结构。

在重采样之前,先对原始影像进行影像分块[2],对影像块按照所在图幅的行列号进行编号,在检索查询时通过网格索引的算法锁定目标影像块。

一般构建金字塔影像时采用的重采样方法为三种:最邻近法、双线性插值法、三次卷积法。其中最邻近法速度最快,但噪点误差多,效果差;三次卷积法生成的影像效果好,但处理时间长;双线性插值法速度适中,且影像效果能够达到用户显示要求。

采用金字塔影像结构,便于遥感影像数据的组织与管理,能够实现跨分辨率的索引与浏览,这样在不降低可视效果的情况下,传输较少的数量,尽量避开对底层原始影像数据的检索,从而减轻处理大数据量的运算负荷,有利于系统的运行效率。

3.2 数据库影像表结构设计

根据遥感影像解析的元数据、实体数据,结合金字塔影像结构设计相应的影像索引表及表里包含的字段,设计主键字段与外键字段来反映影像表之间的索引关系。设计的影像表主要有金字塔等级信息表、影像图幅信息表、影像块信息表、原始影像实体数据表和影像块实体数据表5个表。其中金字塔等级信息表、影像图幅信息表、影像块信息表主要用来存储的是影像元数据,原始影像实体数据表、影像块实体数据表是用来放置实体数据的表,从而实现表示影像属性信息的元数据与表示影像灰度值的实体数据在Oracle数据库中分开存储。元数据与实体数据的分开存储,可以提高数据库的运行效率。当用户只对影像的属性信息感兴趣,就没有必要遍历实体数据,从而提高数据的检索速度。从金字塔影像结构的角度出发,数据的检索从金字塔等级信息表,经过影像图幅信息表,再到影像块信息表,最终锁定目标影像块,其检索范围在逐级缩小,从而避免了盲目在大量数据中遍历,优化了影像的索引。设计的主要影像表结构如表2~表6所示。

影像块数据表结构 表2

影像图幅原始表结构 表3

金字塔等级信息表结构表4

影像图幅信息表结构表5

表6 影像块信息表结构

3.3 Oracle的底层语言接口OCI

OCI(Oracle Call Interface,Oracle调用层接口)是访问Oracle数据库的应用程序底层接口(API),可以直接在C语言中调用,不需要预编译,效率快。它允许开发人员通过SQL语句来操纵Oracle数据库,而且OCI支持大对象数据类型,可以嵌入PL/SQL存储过程,可以封装特定功能的模块,提高大影像数据的存储检索速度。与ODBC、ADO、OO4O等数据库接口相比,OCI接口功能最全,效率最高。OCI作为数据库接口有其特定的程序框架,OCI的程序结构及处理SQL语句的流程如图3所示。

图3 OCI程序结构及SQL语句处理流程

利用OCI接口实现用户程序端与Oracle数据库之间的数据互访,其程序结构中分为三部分:其中初始化OCI环境和线程的OCI函数OCIEnvCreate()、分配必要的句柄与数据结构的OCI函数OCIHandleAlloc()、建立与数据库的连接、创建用户会话 OCI函数OCIServerAttach()和OCIAttrSet()为与数据库连接和建立会话的部分;主体部分为执行SQL语句并处理数据,这部分通过SQL语句来完成Oracle管理影像的功能;最后断开连接、释放句柄为关闭Oracle、结束与Oracle的会话的部分。

主体部分为SQL语句的处理,在OCI框架下实现Oracle影像数据管理的功能。

影像查询功能的处理流程:①SQL语句准备,就是准备具体的Select语句;②绑定占位符,就是绑定程序端用户输入的检索条件如影像的id号、影像名称等;③执行语句,就是在Oracle中执行Select语句;④描述选择列表,就是描述查询的结果符合条件的行数、查询字段的数据类型及长度,为下步定义输出变量做准备;⑤定义输出变量,根据上述的描述来定义输出到程序端的变量类型及大小;⑥获取并处理数据,将查询到的结果赋值给定义的输出变量。通过这完整的6步完成了将查询的结果数据从数据库端传到程序端,实现了OCI与Oracle的数据查询功能。

影像插入功能的处理流程:①SQL语句准备,就是准备具体的Insert语句;②绑定占位符,就是绑定程序端用户输入的插入条件如影像的id号、影像名称等;③执行语句,就是在Oracle中执行Insert语句。

影像删除功能的处理流程:①SQL语句准备,就是准备具体的Delete语句;②绑定占位符,就是绑定程序端用户输入的插入条件如影像的id号、影像名称等;③执行语句,就是在Oracle中执行Delete语句。

4 影像库主要功能实现

4.1 影像入库实现主要流程及代码

(1)建立影像表、字段

建立数据库存储影像的表与属性字段,主要代码如下:

(2)建立影像的Oracle目录对象

图像数据是二进制数据,它经常以磁盘文件的形式存在磁盘上,要将磁盘上的图像文件(例如:BMP文件)装载到Oracle数据表的对象类型字段中必须首先创建Oracle目录对象,使外部文件变为Oracle的BFILE数据类型,BFILE数据是由Oracle管理的外部操作系统文件[3]。主要代码如下:

(3)建立影像的pl/sql存储过程

通过下面存储过程,就可实现将影像数据文件的内容装入Oracle的ordsys.ordimage对象数据类型字段中,代码如下:

(4)影像数据存储实现

在OCI接口下直接调用pl/sql存储过程实现影像数据的导入,代码如下:

经过上述步骤,实现影像数据存储于Oracle库中,影像数据导入数据库如图4所示。

图4 数据库影像导入

4.2 影像检索实现主要代码

本系统的检索采取属性查询的方式,主要代码如下:

经过上述主要代码,实现影像数据的检索显示,其功能界面如图5所示。

图5 数据库影像检索

4.3 效率分析

在内存2G,硬盘300G的单机上,基于本文的方案主要对卫星遥感影像数据的建库、查询显示、漫游功能进行了性能测试,同时在相同的实验条件下与ArcSDE和ArcGIS平台上进行了测试,测试统计数据如表7和表8所示。

入库测试数据表 表7

显示漫游测试数据表 表8

从入库测试数据表上可以看到随着入库数据量的不断增加,本方案入库时间的优势与ArcSDE与相比就越来越明显;显示漫游测试数据表是对不同数据量的单幅影像进行了查询显示、原始分辨率漫游响应时间的性能测试,与在ArcGIS平台上进行了比较分析,通过数据可以看到本方案与ArcGIS的性能很接近,其与客户的交互响应时间流畅可以接受,而且还验证了本方案对数据量大的单幅影像的显示漫游响应性能上的具有一定的优势。

5 结论

本文利用底层OCI接口起到Oracle引擎的作用,采用Oracle升级后新增InterMedia组件中ORDImage类型存储影像,运用PL/sql存储过程完成影像批量入库,完成Oracle影像数据库的开发。实验表明建立遥感影像库的可行性,其进行遥感影像数据存取的设计与开发具有一定的特点和优势:

(1)利用InterMedia组件的ORDImage类型来进行影像数据存储管理,能够真正地将影像数据实体存入Oracle库里,能有效控制特殊区域影像的保密性,提高数据访问效率。同时InterMedia组件集成了影像分析与处理函数,便于后期的深入开发。

(2)在Oracle数据库的接口中,使用最底层的OCI接口,其功能最全、效率最高,支持大数据对象类型,用户与后台数据库交互速度快,根据需要可以利用OCI库函数灵活地编写相应的模块。

(3)编写影像PL/sql存储过程存放在Oracle影像库中,封装了影像入库重复操作的SQL语句,减轻传输通信的负荷,提高数据存储速度,为实现复杂的数据库应用提供了解决方案。

上述的特性为后期数据扩容性及深入开发管理提供了良好的技术基础,同时能够保证影像数据存储的高效性与安全性。

[1]岳国华.Oracle InterMedia多媒体数据存取技术与应用[J].西安科技大学学报,2007,27(3):467~472.

[2]虞欣,杨伯钢.基于Oracle和ArcSDE的正射影像入库研究[C].北京测绘学会,2011(4):137~141.

[3]王海凤,王海亮,郑建茹等.Oracle 11g SQL和PL/SQL从入门到精通[M].北京:中国水利水电出版社,2008.

[4]顾云锋,杨素霞,王智钢等.Oracle数据库中存储过程开发研究[J].计算机与现代化,2011,194(10):138~142.

[5]刘云,季建华,杨军生.基于Oracle数据库的正射影像数据的组织和管理[J].现代测绘,2006,29(1):43~45.

[6]牛得学,崔苗苗,黄超.基于Oracle Spatial的影像数据存储技术研究[J].安徽农业科学,2011,39(7):4254~4256.

[7]贠建明,汪汇兵,唐新明.多源影像数据库金字塔结构的研究与实践[J].测绘科学,2011,36(4):53~55.

[8]何雄.Oracle Spatial与OCI高级编程[M].北京:中国铁道出版社,2006.

猜你喜欢
数据类型金字塔语句
“金字塔”
详谈Java中的基本数据类型与引用数据类型
Great Vacation Places
重点:语句衔接
如何理解数据结构中的抽象数据类型
海上有座“金字塔”
神秘金字塔
基于SeisBase模型的地震勘探成果数据管理系统设计
相似度计算及其在数据挖掘中的应用
如何搞定语句衔接题