admin 管理员组文章数量: 1086019
2024年4月20日发(作者:oracledatediff函数怎么用)
维普资讯
1-翻噩塌!踞 回郾I僵息技术与僵息亿
基于Java与XML的测井矢量图形处理技术
Operating Vectorgraph of Well Logging in Java and XML
侯飞‘ 刘培刚一
HOU Fei LlU Pei—gang
Abstract The formational feature of logging graph and the requirement of storing and operating were intro—
duced in this paper.The concept of the logging vectorgraph and the method of operating a logging vectorraph ign
Java and XML were alSO put forward.The disposing flow was confirmed.SO as the discussion for the feasibility of
storing a vectorgraph of well logging with an XML file.Then the structure of this kind of XML ifle,the procedure
of its creation and the process of reproducing logging vectorgraph by an XML file were provided.An XML file Was
created from the practical example.Therefore,the vectorgraph of well logging was generated from XML file.
Keywords Java XML Graph of well logging Vectorgraph of well logging
1 引言
在油田测井过程中有大量的数据产生,这些数据反映了
本组成元素(每一个道就表示一种属性),道元素由段元素组
成,段元素拥有数据,每一个元素都有自己的属性,如高度、
宽度、位置等。段的显示内容分曲线、文字、图片、填充区域
地层的岩性、电阻率、自然电位、吸水性、C/O比等特性,通过
这些特性可以判断地层中的含油情况。为了能直观地表达
油井穿过的地层的性质,这些数据需要加工处理,以图的形
等多种形式,它们都是根据元素拥有的数据产生的。
2.2测井矢量图处理流程
测井矢量图在Java网络处理平台中创建、编辑、显示。
式表现出来,同时对检测结果加以解释,一并置于图形之中,
创建与编辑测井矢量图时,需要人工选择确定它的组成结构
以及数据内容(外部数据);保存时,测井矢量图以XML文件
由此产生了测井图。随着油田生产信息化的发展趋势,测井
图的网络处理成为迫切需要解决的问题。本文依据测井图
格式写入一个数据流中,根据需要保存到数据库或者保存为
本地XML文件;通过Java网络处理平台选择数据库中已存
在的图形或者选择本地图形文件(XML文件),可以显示、编
辑选中的测井矢量图。测井矢量图的网络处理流程如图1
的实际处理要求,以矢量图的方式存储测井图,即存储测井
矢量图,并提出了在XML文件中存储、以Java程序编辑的
处理方法。
2测井矢量图及处理流程简介
2.1测井矢量图
所示。图中箭头方向表示数据流向,箭头上的标注框注释了
执行的功能。
测井图是根据测井数据生成的图形,它把油井的各种信
息以图的方式直观地反映出来c.为了进行网络处理,存储测
井图时需要保存生成该图的原始测井数据,显示测井图时根
据存储的测井数据重新生成。这种存储方式与矢量图形存
储机制类似,因此称此时的测井图为测井矢量图。测井矢量
图是综合柱状图、测井曲线图等测井图的网络处理表现形
式。
3 XML与测井矢量图形
3.1 XML文件的构成
XML文件由首部和数据内容两部分组成。首部包括
XML指令和文件类型声明两部分。XML指令指定了XML
版本、样式表和其他信息,解析器用这些信息来正确地解析
XML文件。文件类型声明为XML文件指定一个格式文件。
XML文件的数据内容以树的形式构成,包含元素、属性、文本
数据三种类型的内容。每个XML文件的数据部分以根元素
开始,派生出各种分支元素,分支元素又派生下一级分支元
素或者包含文本数据,文本数据相当于树的叶子。元素可以
测井矢量图由多个部分组成,每一种组成部分结构类似
但内容不同,每一个组成部分有自己的属性和数据,各个组
成部分独立存储。以综合柱状图为例:综合柱状图以道为基
有一个或多个属性,也可以没有属性。属性和文本都是数据
胜利油田物探研究院海外室 山东东营257000
信息。
3.2 XML文件存储测井矢量图形
中国石油大学(华东)计算机与通信工程学院山东东营257061
维普资讯
僵息技术与僵息亿E目}兰野I 暖
数
选 保
据
外
部
择
网
舌 涓
井
r_=:=—] 存 - 库
数 络 创编 矢 写入 数据流.
据. 处 量
理 建辑 图 数据流 保 X
平 形
A 存 M
口 L
文
件
图1 测井矢量图网络处理流程图
XML文件的构成方式恰好满足了测井矢量图以属性的 下面将对这三种方法逐一介绍。
形式存储组成元素的特点。测井矢量图中的组成元素与4.2.1用JDOM创建XML文件
XML文件中的元素相应,组成元素的各种属性也均能在 JDOM中元素的类型是Element,元素创建之后,可以用
XML元素中以属性或元素文本的形式表示。选用XML文件 addChild(Element)方法添加子元素,用addAttribute(Stirng,
作为测井矢量图的存储格式,每一个测井矢量图形存储到数 Stirng)方法添加元素属性,用setContent(Stirng)方法设置元
据库中是一条记录,存储到本地则是一个XML文件。将其 素内容。使用JDOM创建XML文件时,首先创建一个根元
存储到数据库中,既能保持测井矢量图的结构、数据,又能减 素,用这个根元素来创建JDOM Document,之后依次创建分
少数据库操作;将其作为XML文件存储到本地,可以直接察 支元素并添加到根元素上,添加完毕,JDOM Document完成,
看、编辑测井矢量图的数据内容,当然这种编辑方式具有危 然后使用标准Formatter类XMLOutputter将JDOM Document
险性,不推荐使用。 输出到输出流中。
3.3测井矢量图形的XML文件结构设计4.2.2用DOM创建XML文件
XML矢量图形文件的作用是存储矢量图形数据,结构较DOM把DOM树中的东西都看作节点(Node),它提供了
为简单,除去必要的版本信息等XML指令外,只有数据内 createElement()、createAttribute()等方法创建各种节点。
容。DOM树由DOM Document表示,为了与DOM树正确联系起
测井矢量图的结构是一棵树,其根节点是测井矢量图, 来,创建节点时需要求助于DOM Document。DOM中没有关
根节点的子节点是道节点,道节点的子节点是段节点,段节
于元素内容的概念,在设置一个元素的值时,需要先创建一
点的子节点是数据节点。XML矢量图形文件以测井矢量图
个关于元素内容的节点(如文本节点),然后使用appenChild
形的树型结构为基础,按照相同的结构建立,以测井矢量图 ()方法把它添加到需要它的父元素中。DOM树建立之后,
作为整个文件的根元素,在根元素下建立道元素,在道元素
使用序列化方法将其写入输出流,以Apache Xe ̄es为例,需
下建立段元素,在段元素下建立数据元素;同时,在道元素和 要使用org.apache.XML.serialize.XMLSerializer类。
段元素中建立相关属性,把测井矢量图中的数据内容作为数 4.2.3字符串创建XML文件
据元素,其他所有属性都设为道、段元素的属性。
除了使用Java提供的接口,用字符串的方式创建XML
4 Java与XML处理测井矢量图形
文件更直观、容易理解。使用JDOM或DOM创建XML文件
需要了解它们的相关接口和使用方法,字符串方式则不需
4.1 Java与xML结合
要。XML文件是一种文本文件,可以把XML文件的所有内
XML从一开始就和Java捆绑在一起。Java要求开发者 容包括XML文件的格式符、指令、元素、内容全部以字符的
自行安排网络数据格式及其表示格式,并要求使用类似JSP 形式按顺序添人字符串,写到输出流之中。为了减少系统开
这类不把内容层与表示层真正分离的技术;XML只是原数 销、提高程序效率,在字符串添加过程中注意使用Stirng-
据,脱离了类似解析器和XSL处理器这样的程序后没有用 Buffer对象,然后转为Stirng对象,而不要直接使用Stirng对
处,当Java和XML结合使用时,可以弥补对方的不足。而且
象。
Java提供了一套完整的API集合,使得XML可以直接在Java 4.3将测井矢量图形存为XML文件或存人数据库
代码中使用。XML文件的生命周期中有两个基本阶段,首先
测井矢量图既可以保存为本地XML文件,也可以存人
是解析文件,然后是操作文件中的数据。Java有处理这些任
数据库。测井矢量图在Java程序中生成之后以流的方式存
务的简单方法。
在,如果保存到本地,需要打开文件选择器(JFileChooser)以
4.2用Java创建XML格式的测井矢量图形
供操作人员指定XML文件的存储路径及名称,根据指定的
JDOM和DOM都提供了操作XML数据的方式,使用它
路径和名称建立XML文件及其输出流,将测井矢量图的数
们,在Java程序中可以容易的创建XML文件。另外,还有一
据写入文件输出流存人该文件;如果存储到数据库,可以选
种更为简单的、使用字符串的方式创建XML文件的方法。
用BLOB方式,先在数据库中插入一条以测井矢量图名称为
维普资讯
团嘲I僵息技术与僵息.t:
标识符、带有BLOB字段占位符(如字符串)的记录.然后查
询该条记录.取得BLOB字段,得到BI OB的输出流,将测井
矢量图数据写入BLOB输出流,存入BI OB字段。
-.4通过XML_义件生成测井矢量图形
<curve name=“”base=“”color=“”></curve>
//曲线数据
</curvecolumn>
<fillcolumn type=“1”order=“”width:“”startdepth=“”
测井矢量图的显示包括取得XML文件、解析XML文
件、生成图形和绘制图形四部分。
4.4.1取得XML文件
stopdepth=“”>//填充(解释)道
<fillsegment order=“”filltype=‘‘0”startdepth=“”
stopdepth=“”> //单符填充段
<filldata></filldata>
</fillsegment>
存储测井矢量图的XML文件可能存于本地,也可能存
于数据库记录中,因此取得XML文件的方式也分为两种。
取得存于本地的测井矢量图文件需要打开文件选择器
(JFileChooser)供操作人员选择XML文件,然后建立所选文
件的输入流,读入文件内容;取得存于数据库中的测井矢量
图文件,首先以测井矢量图名称为条件检索到相应记录,然
后取得该记录的BLOB字段,得到BLOB的输入流,读入文件
内容。
4.4.2解析XML文件
//填充图例数据
<fillsegment order=…’filltype=“1”startdepth=“’’
stopdepth=“”> //平铺填充段
iflldata></filldata>
</fillsegment>
</fillcolumn>
</graph>
//填充图例数据
5.1.2测井曲线图的实际示例如图2
一
测井矢量图的XML文件取得之后,必须经过解析,才能
使用其中的数据。现在Java出现了很多出色的解析器,如
Sun公司的ProjectX,Apache软件基金会的Xerces,Oracle的
、
、
XML解析器等,开发者可以选择任意一种熟悉的或惯用的解
析器,生成JDOM或者DOM的Document对象,然后遍历它,
取得它的各节点的属性和值,并以之生成测井矢量图的道、
’I
、、
≯
I厂
段等各元素,赋予这些元素属性和数据。
4.4.3生成图形
图2测井曲线图示例
测井矢量图的生成与创建过程是一致的。其差别在于,
5.2测井曲线图的存储
创建是人工确定测井矢量图的元素结构以及每个元素的数
据来源并把它们添加到测井矢量图的过程,而生成则是程序
的数据并把它们添加到测井矢量图的过程。图形元素添加
完毕之后,测井矢量图即已生成。
4.4.4绘制图形
5.2.1 将测井矢量图数据写入字符串
StringBuffer stirng=new StringBuffer();//gO建缓存字符串
gb23l2\‘‘?>\n”);//写入XML文件首部
stirng.append(“<graph>\n”);stirng.append(“<head>图
头</head>\n”);//写入测井矢量图的图头//以下部分是
ljj1j
stirng.append(“<?xml version=\.1 1.0\“encoding=\..
XML文件中解析出测井矢量图的元素结构以及每个元素
程序依次绘制道元素,在道元素中绘制段元素,在段元
写入曲线道数据的循环体
stirng.append(“<curveoolumn曲线道属性>\n”);//写入
曲线道属性
素中绘制数据处理后得到的字符、曲线、图片或者填充区域。
5 Java与XML处理测井曲线图(测井矢量图的一
种)
实例
本例仅体现测井矢量图的存储和重生成过程,不考虑具
体创建过程和详细绘制过程。
5.I 测井曲线图的存储结构和示例
5.1.1测井曲线图的XML文件结构如下:
<?xml version=“1.0”encoding=“gb2312”?>//XML文
stirng.append(“深度数据\n”);//写入深度数据
//以下部分是写入曲线数据的循环体
swing.append(“<curve曲线属性>\n”);
//写入曲线属性
stirng.append(“曲线数据\n”);
//写入曲线数据
stirng.append(“</curve>\n”);
件首部
<graph> //XML文件数据内容
//图头
//曲线数据写入完毕
stirng.append(“</curvecolumn>\n”); <head>
<hzjh></hzjh>
//曲线道数据写入完毕
<cjrq></cjrq>
</head>
<curveeolumn type=‘‘0”order:“”width=“”startdepth=
“”
//以下部分写入填充道数据(解释结果总在最后一个道中)
stirng.append(“<fillcolumn填充道属性>\n”);//写入填
充道属性
stopdepth=“”>//曲线(数据)道
//以下部分是写入填充段数据的循环体
stirng.append(“<fillsegment填充段属性>\n”);//写 <depth></depth> //深度数据
维普资讯
-
人填充段属性
仅在于取得XML文件数据的途径不同。
string.append(“填充数据\n”);// 写入填充数据
5.3.1读取本地XMI 文件数摒
string.append(“<fillsegrnent>\l1”);
FileInputStream inStream=new FileInputStream(“文件名.
//填充段数据写入完毕
xml”);//建立文件输入流
string.append(“</fillcolumn>\n”);
5.3.2读取数据库(Oracle)中的XML文件数据
//填充道数据写入完毕
第一步,从数据库中查询取得BLOB字段,生成BLOB对
string.append(“</graph>\n”);
象:
5.2.2保存测井矢量图到本地XML文件
ResultSet rs=st.executeQuery(select graphdata from
FileOutputStream fos=new File0utputStream(new File
rgaph where graphname=“文件名.xml”);//st是Statement
(“文件名.xml”));//gq建XML文件输出流
对象
ofs.write(stirng.toString().getBytes());//将数据字符
BLOB lob=((OracleResuhSet)rs).getBLOB(1);
串写入输出流
第二步,取得BLOB对象的输入流:
fos.close();//关闭输出流
InputStream inStream=lob.getBinaryStream();
5.2.3保存测井矢量图到数据库(以Oracle为例)
5.3.3生成测井矢量图 .
假定数据库中存在一个graph表,表结构如下:
取得XML文件输入流inStream之后,把它传递给网络
rgaph(
处理平台,网络处理平台解析该XML文件的数据,把正确的
rgaphname not null varchar2(50),
数据还原为各种元素对象,依次添加到测井矢量图中,并且
graphdata BLOB
绘制测井矢量图。
)
6 总结
数据库连接已经建立。
第一步,向数据库中插入一条包括BLOB占位符的记录
测井矢量图是一种特殊的图形,不同于栅状图形,也不
字段的记录,此时,BLOB字段中仅仅是一个占位符,可以是
同于传统的矢量图形,它以图形的形式显示,以数据的形式
一
个普通字符串,如:
存储,对于测井矢量图的处理与具体的图形结构相关。本文
st.executeUpdate(inse ̄into graph(graphname,graphda—
提出Java和XML结合处理测井矢量图的方法,满足了测井
ta)values(“文件名”,“000”));
矢量图的处理、传输、存储要求,解决了测井矢量图的实际应
第二步,从数据库中查询取得该BLOB字段,并生成
用问题,在油田开发系统平台中取得了良好效果,也为同类
BLOB对象,以备更新,如:
图形的处理提供了参考。
Resuhsct rs=st.executeQuery(select graphdata from
rgaph where graphname=“文件名”for update);
参考文献:
BLOB lob=((OracleResuhSet)rs).getBLOB(1);
[1] Brett McLaughlin.JAVA与XML[M].孙兆林,等译.
第三步,取得BLOB对象的输出流,将数据字符串写入
北京:中国电力出版社,2001.
输出流,如:
[2] George Reese.JDBC与Java数据库编程(第二版)
OutputStream bos:lob.getBinaryOutputStream();
[M].石永鑫,等译.北京:中国电力出版社,2002.
bos.write(stirng.toString().getBytes());
[3]Cay S.Horstmann、Gary Cornel1.最新Java 2核心技术
5.3测井曲线图的重生成
[M],王建华,等译.北京:机械工业出版社,2003.
测井矢量图可以通过本地XML文件生成,也可以通过
[作者简介] 侯飞(1978~),男,山东东营人,硕士研
存储在数据库中的XML文件数据生成,这两种方法的区别
究生,刘培刚(1979一),男,山东潍坊人,硕士研究生。
・
+一+-+-+一+一+-+-+“+-+-+-+一+一+-+-+一+一—・卜-+-+-+一+一—・卜“—+_-+-+一+-+一—・卜一+-+-+一+-—・卜-—・卜-+-+-—・卜-+一—・卜-—・卜一+-—・卜-—・卜-—・卜-—’一・
(上接第1l3页)
search:P roe ACM S IGMOD,47-57,1984.
节点的链表下时,TG索引也要比不建立索引效率要高。在 [2] N.Beckman,H.P.Kriegel,R.Schneider,B.Sceger,
实际应用中应尽量调整步长避免明显聚集。
The R—Tree:an efficient and robust access method for
5结束语
points and rectangles ACM SIGMOD,322-33l,1990.
[3] 严蔚敏、吴伟民,数据结构,清华大学出版社,1992.
TG索引秉承了多种空间索引方法的优点,而且避免了 [4] 史杏荣、孙贞寿,基于固定网格划分和面向类对象的
它们的不足,不仅操作简单,结构清晰,而且明显的提高了查
四分树空间索引机制,小型微型计算机系统,1998.
询效率。但是作为一种新的空间索引方法,它还有很多方面 [作者简介] 李昕(1978一),男,山东东营人,助教,硕
可以进一步完善和优化。总之,TG索引是一种优秀的索引
士,主要研究方向为数据库与信息系统。
方法,具有相当大的实用价值。
(收稿日期:2oo6一o6—22)
参考文献:
[1] Guttman,R—Trees a dynamic index structure for spatial
版权声明:本文标题:基于Java与XML的测井矢量图形处理技术 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1713576134a641547.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论