教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 行业资料 >

基于Oracle的影像库开发

来源:网络收集 时间:2026-07-24
导读: 2010年第4期北京测绘 77 基于Oracle的影像库开发 闻兵工1,文 2 江1,,田 毅1 (1.78155部队,四川成都,610036;2.信息工程大学测绘学院,河南郑州450052) [摘 要] 介绍了利用OO4O开发影像数据库的关键技术,通过大字段数据的读取代码,以及建立 COO4OWBG

2010年第4期·北京测绘·

77

基于Oracle的影像库开发

闻兵工1,文

2

江1,,田

毅1

(1.78155部队,四川成都,610036;2.信息工程大学测绘学院,河南郑州450052)

[摘

要]

介绍了利用OO4O开发影像数据库的关键技术,通过大字段数据的读取代码,以及建立

COO4OWBG类实现了影像数据存贮。文章最后演示了基于Oracle数据库开发的成果,并对开发过程中应该注意的事项进行了总结。

[关键词]OO4O;Oracle;影像库[中图分类号]P237

[文献标识码]B

[文章编号]1007-3000(2010)04-3

4.在CimagedbApp::InitInstance()函数中添加OStartup//打开数据库(),

5.在CimagedbApp::ExitInstance()函数中添加OShut-down()//关闭数据库

6.利用ODatabase的Open(数据库名,用户名,密码)函数在需要的地方连接上数据库,

由于应用程序与数据库通讯经常用到底层类O-Database和ODynaset类,因此这两类可以定义成全局变Ovalue、Oparameter、Osession、Opara-量,其他类Ofield、

mArray和DynasetMark也经常用,可以根据需要定义成共有变量或私有变量,在开发程序时候,还要经常查看这些类提供的函数,这样可以提高效率,以少量的代码实现所需功能。

随着测绘科学技术的发展,遥感影像已经不再单纯依赖于传统的可见光影像,而逐步向多光谱和高光谱等方向发展。特别是随着近年来IKONOS、QuickBird、Spot等高分辨率商业遥感卫星的投入和使用,大大促进了航天全数字化的作业手段也已经摄影测量的发展。另一方面,

逐步取代传统的手工绘图的作业模式,作业效率大大提升。作业效率的提高又使得遥感影像的数据量成几何级数增长。面对海量的遥感影像资料和数据成果,如何对其进行有效的管理和使用便成为其中一个主要的问题。因此,建立高效的影像数据库是非常必要的[1]。

OO4O是Oracle专为客户应用程序使用Oracle数据库服务器而提供的开发库,它可以轻松实现Oracle数据库大二进制BLOB字段和空间数据的读取操作,为用户而这些功能要从提供易于访问Oracle的相关独特功能,

ODBC和基于OLE—DB的组件(如ADO)来实现则非常麻烦甚至是不可访问

[2][4]

2建立COO4OWBG类

建立该类的目的是提供一些共有函数,这些函数可

。由于OO4O自身带有C++类

以方便的利用OO4O实现对数据库的通讯,下面是与数据库通讯的主要函数:

BOOLAdddata(CStringm_iddata1,CStringm_iddata2,floatm_iddata3,…);

//把m_iddata1、m_iddata2、m_iddata3、….这些值添加到一条新的记录;

BOOLModifydata(CStringm_iddata1,CStringm_idda-ta2,floatm_iddata3,…);

//用m_iddata1、m_iddata2、m_iddata3、….替换原来的一条记录;可以为空

BOOLquerydata(CStringm_iddata1,CStringm_idda-ta2,floatm_iddata3,…);

//按m_iddata1、m_iddata2、m_iddata3、….中的一个值或几个值查询记录,可以为空;

BOOLDeldata(intm_idname);//删除第m_idname条记录;

CStringm_iddata1,CStringm_iddata2,floatm_idda-ta3,…是按照数据库字段名称类型和顺序进行设置,调用时候要判断数据类型是否一致,然后再对数据库操

库,利用VC++可以以最少的代码方便快速的实现Oracle数据库的访问,运用Oracle后台数据管理工具和VC面向对象编程语言我们就可以开发用来管理影像和测绘成果的数据库,下面将重点介绍影像数据库的开发过程。

1数据库的连接

基于Oracle利用VC++进行数据库开发,让自己的工程正确连接数据库非常关键,我们可以根据工程的大小,选择要建立单文档还是多文档工程,不推荐用对话框。在VC中新建一个多文档工程imagedb,并把Oracle的的头文件、类库和动态链接库添加到工程中,具体操作如下:

1.在imagedb的Debug文件或系统动态库中添加o-raclm32.dll,

2.在imagedb的projectsettings的link中添加ORA-CLM32.LIB或者在tools/options/Directories/添加含有OR-ACLM32.LIB文件的路径

3.在imagedb的stdafx.h头文件中添加#include"or-acl.h"

[收稿日期][作者简介]

2010-04-26

闻兵工(1979—),男,汉族,四川成都人,助理工程师,从事军事测绘工作。

78

·北京测绘·

2010年第4期

作。在这些函数中,我们即可以用ODynaset提供的函数对数据库进行操作,常用函数有AddNewRecord、SetField-Value、GetFieldValue、StartE

dit、DeleteRecord、MoveFirst、

MoveLast、MovePrev、MoveNext、IsEOF、Update等,也可以用ODatabase的ExecuteSQL()执行SQL命令完成对数据库的操作。如果数据库不包含大数据字段,两种方法都可以,但是如果包含大字段,建议用ExecuteSQL()执行SQL命令完成对数据库的操作,这样可以减少出错的概率。

3大数据字段的读取

大数据字段是指用以存储文档、图形图像、音频、视频等大信息量数据的字段,

Oracle数据库中大数据字段包括:BLOB、CLOB、NCLOB、LONG、LONGRAW、BFILE等,其中LONG和LONGRAW字段可以被BLOB、

CLOB字段代替[3]。OO4O提供了OBlob和OClob两个类访问BLOB、CLOB、NCLOB字段,由于这些大字段可以存储4GB的数据,为了提高效率和避免对内存的过度占用,0040对LOB(包括BLOB、

CLOB、NCLOB)字段的读写都采取了设定一个合适的读写缓冲区,然后分次读写大字段数据。首次写LOB字段时,必须先往该字段中插入一个空值,然后编辑该字段,插入实际的大数据。

由于本程序设置的大字段为BLOB,下面提供读取BLOB的函数ReadBlob、WriteBlob。部分提示错误信息代码省略,其中ODynasetm_Dynaset;

BOOLReadBlob(CStringfild)

//该函数是从blob中读取数据,fild是字段名,读取得到数据保留在imagebuffer中,数据的大小Size。

{OBloboblob;

//判断数据空中的blob是不是为空m_Dynaset.GetFieldValue(fild,&oblob);if(oblob.GetSize()==0)

{MessageBox("数据库中没有存储需要的信息");returnFALSE;}try{//获得blob的大小Size=oblob.GetSize();//开辟内存空间

imagebuffer=newBYTE[Size+1];memset(imagebuffer,0,Size);

//读取blob字段oblob.EnableStreaming(Size);shortstatus=OLOB_NEED_DATA;DWORDamtread=0;

while(status==OLOB_NEED_DATA)

{amtread=oblob.Read(&status,(unsignedchar*)im-agebuffer,(unsignedlong)Size);//读取数据}

oblob.DisableStreaming();oblob.Close();returnTRUE;}catch(OExceptionE)

{//添加出现异常时候的错误}}

BOOLWriteBlob(CStringfild,BYTE*bMem,longlMem)

//该函数是向blob中写入数据,fild是字段名,bmem是要存储数据的内存,lmen是数据的大小。

{oresultores;//查看操作结果OBloboblob;

ores=m_Dynaset.StartEdit();ores=m_Dynaset.GetFieldValue(fild,&oblob);

OValue

oval;

try{if(oblob.IsNull())//插入空值{TRACE("OBlobisNull.........");ores=oval.SetEmpty();

ores=m_Dynaset.SetFieldValue(fild,oval);ores=m_Dynaset.Update();ores=m_Dynaset.StartEdit();

ores=m_Dynaset.GetFieldValue(fild,&oblob);if(o …… 此处隐藏:5217字,全部文档内容请下载后查看。喜欢就下载吧 ……

基于Oracle的影像库开发.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/2274837.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)