孙蕾
【摘要】本文详细介绍SEG-Y文件的组成,在对SEG-Y详细研究的基础上,研究B/S模式下,用户远程对服务器提供的SEG-Y资源文件进行读取与演示。研究主要基于.NET平台,使用ASP.NET动态网站开发技术,代码主要由C#编写,最终实现用户对SEG-Y的读取,完成地震剖面图的绘制。
【关键词】B/S;剖面图;远程演示;SEG-Y
中图分类号:P315 文献标识码:A 文章编号:
1绪论
SEG-Y地震数据是地球物理领域运用很广泛的一种数据存储格式,本文从理论和实践两个角度出发,通过设计和实现一个基于.NET的SEG-Y浏览系统,深入探讨和了解B/S模式结构,ASP.NET在动态网站建设方面的优势和SEG-Y文件的分析读取与演示。
2开发技术
本文主要使用ASP.NET动态网页开发技术,网页后台程序由C#语言编写,前台使用HTML+CSS实现,客户端动态数据验证使用js。
3SEG-Y文件分析
3.1SEG-Y文件组成
3.1.1组成简介
SEG-Y文件由文件头文件和数据体两部分组成。文件头记录了此文件的各项参数,为文件的进一步读取给出必要信息。数据体则是文件的主体部分,它记录了主要的地震数据,是绘图的依据。
3.1.2文件头文件介绍与分析
文件头总长度为3600字节,分两部分:第一部分为字符型文件头,文件头第二部分为二进制文件头。
3.1.3数据体部分介绍与分析
数据体由多个数据道组成,每道数据分两部分:道头和采样数据。
3.2SEG-Y文件处理及实现
3.2.1SEG-Y文件字符型文件头(Textual File Header)处理及实现
字符型文件头数据由EBCDIC代码组成,所以,必须将其转换为ASCII代码才可以正确显示。具体方法是建立两种代码关系对应表,每次读入一个字节EBCDIC代码,循环查找EBCDIC代码表,找出它在EBCDIC表中的位置,在返回ASCII代码表中对应位置的ASCII代码。
3.2.2SEG-Y文件二进制文件头(Binary File Header)处理及实现
二进制文件头由16位和32位二进制数据构成,但在读取其中的各参数值时就要注意,SEG-Y文件以工作站的存储格式存储。工作站中的二进制数据是高字节在前,低字节在后面;而微机中的数据则是低字节在前,高字节在后。
我们采用先通过FileStream将400个字节的文件信息读入内存,400字节数据按从低地址到高地址的顺序存放在一个数组中,然后根据数据的存储位数,决定转换字节数,如读取16位数据,先读取第一个字节放入一个16位临时整型数中,将整型数据左移8位,然后,再读入下一字节,将其放入另一个16位临时整型数中,最后,将临时16位数按位或,得到16位微机格式的地震数据。
3.2.3SEG-Y文件道头文件(Trace Header)的处理及实现
道头与二进制文件头数据存储相同,所以,可以采用相同的数据处理方式,这里不再赘述。
3.2.4 SEG-Y文件道数据(Trace Data)的处理及实现
道数据格式与二进制头文件的控制位有关,长度由道采样点数及采样点格式共同决定。二进制头文件3225-3226字节标志了采样点数据(道数据)采用的数据格式,采样点数由道头115-116字节给出,若二进制文件头3503-3504字节标志为0,则该文件道长一致,可以根据二进制文件头3221-3222字节得出,无需分别读出每道采样点数。若采样点使用32位数据记录(如:IBM浮点型,IEEE浮点型,4字节整型),道长则为采样点数×4字节,若采样点使用16位数据记录(如:2字节整型),道长则为采样点数×2字节。
道数据依然是以工作站存储方式存储数据,所以,首先要进行高低位转换,然后根据数据类型,转换为微机存储格式以便读出。
SEG-Y道数据主要用IBM浮点型数据记录,后来也常用IEEE浮点型数据记录。这里主要介绍IBM浮点数的存储格式和转换方法。IBM浮点数分三部分:符号位(sign)占1 位, 指数部分(e)占7位, 尾数部分(m)占24位。
所得数值result = (-1)^sign * ( m / (2^24 ) )*16 ^ ( e^ - 64 )。
读取IBM浮点数具体方法为,先顺序读入道数据至数组,逐个读出4字节数据,每个数据先高低位换位(方法同二进制文件头处理方法)。将32位数右移31位,所剩为符号位,取出保存;将32位数与0x7f000000按位与,获得浮点数指数部分,保存;将32位数与0x00ffffff按位与,获得浮点数位数部分,保存。IBM浮点数符号位0表示正数,1表示负数,指数部分使用移码存储,底数为16,尾数部分为实数小数点后数据。根据之前提供计算公式,算出IBM浮点数微机中表示值。
3.3读取SEG-Y文件整体设计
3.3.1SEG-Y文件整体分析
综合分析,设计制作字符型文件头类,二进制文件头类,地震道道数据类,SEGY文件类,前三各类分别负责各中数据文件的读取,SEGY文件类有前三类组成。
3.3.2 SEG-Y文件字符型文件头类设计
字符型文件头3200个字节,由EBCDIC编码,只包含对文件的字符描述信息,所以,此类主要负责读出3200字节的字符信息,将其转换为ASCII后返回。
3.3.3SEG-Y文件二进制文件头类设计
二进制文件头包含对SEG-Y整个文件的描述信息,对后续文件的处理有重要作用。它紧接在3200字节字符型文件头之后,所以,从3201开始读入文件,经逐个转换,得到二进制文件头数据,存储在类私有变量中,通过公共属性供前台使用。
3.3.4SEG-Y文件地震道道数据类设计
道数据分为道头数据和道地震数据,道头按存储位置存储有道各种信息,道地震数据则是紧密排列的地震采样点数据。读取地震道数据时,首先判断该文件是否存在附加字符文件头文件,设长度为length(若不存在,则长度为零),然后,根据读取的道数,设为tracenum(从1开始计数),读取第x道数据,若道长一定,文件从3600+length+tracenum×(采样点数×采样点存储长度+240)读取,若道长不定,则要逐个读取,读取起始位置逐个计算得出。
每读一道数据,先读取道头数据,读取方法与读取二进制文件头相同,不再赘述。读取道数据先判断数据格式,不同格式读取不同长度数据,处理也不同。若数据格式为IBM浮点型,则道长为采样点数×4字节,再将IBM浮点型数据换算为微机浮点数;若数据格式为4字节整形,则道长为采样点数×4字节,再将四字节整型数据换算为微机整数;若数据格式为2字节整形,则道长为采样点数×2字节,再将2字节整型数据换算为微机整数;若数据格式为4字节IEEE浮点型数据,则道长为采样点数×4字节,再将四字节IEEE浮点型型数据换算为微机整数。
3.3.5SEG-Y文件类设计
SEG-Y文件类是前三个类的集合,通过它可以初始化和访问指定SEG-Y文件。
4B/S模式SEG-Y格式地震数据读取演示系统设计实现
主要介绍基于B/S模式的SEG-Y格式地震数据的读取演示系统的具体实现过程,并给出一些系统成果展示。
4.1设计方案
该系统采用B/S模式设计,分为前后台两个部分:
4.1.1前台设计
前台是面向用户提供服务的系统部分: (1)用户登录 (2)首页 (3)文件目录(4)详细信息 (5)个人中心。
4.1.2后台设计
后台是系统管理部分,它包括以下部分:(1)管理员登录(2)首页(3)文件管理 (4)用户管理。
4.2剖面图绘制实现
剖面图绘制使用了ASP.NET的GDI+,GDI+是图形设备接口(GDI)的高级版,它提供了各种丰富的图形图像处理功能,主要有二维矢量图形,图像处理和版式3部分组成。
具体实现过程为用户选择文件,服务器获得文件编号,进而获得文件在服务器的路径,服务器新建SEGY类,根据其路径进行初始化,最后,根据用户的需求,发送相关信息或图像给用户。
5总结
使用B/S模式来实现对SEG-Y文件的读取与演示可以节约企业在系统维护方面的成本,方便分析人员随时随地接入网络了解地震信息,提高分析人员的工作效率。