孫蕾
【摘要】本文詳細(xì)介紹SEG-Y文件的組成,在對(duì)SEG-Y詳細(xì)研究的基礎(chǔ)上,研究B/S模式下,用戶遠(yuǎn)程對(duì)服務(wù)器提供的SEG-Y資源文件進(jìn)行讀取與演示。研究主要基于.NET平臺(tái),使用ASP.NET動(dòng)態(tài)網(wǎng)站開(kāi)發(fā)技術(shù),代碼主要由C#編寫(xiě),最終實(shí)現(xiàn)用戶對(duì)SEG-Y的讀取,完成地震剖面圖的繪制。
【關(guān)鍵詞】B/S;剖面圖;遠(yuǎn)程演示;SEG-Y
中圖分類號(hào):P315 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):
1緒論
SEG-Y地震數(shù)據(jù)是地球物理領(lǐng)域運(yùn)用很廣泛的一種數(shù)據(jù)存儲(chǔ)格式,本文從理論和實(shí)踐兩個(gè)角度出發(fā),通過(guò)設(shè)計(jì)和實(shí)現(xiàn)一個(gè)基于.NET的SEG-Y瀏覽系統(tǒng),深入探討和了解B/S模式結(jié)構(gòu),ASP.NET在動(dòng)態(tài)網(wǎng)站建設(shè)方面的優(yōu)勢(shì)和SEG-Y文件的分析讀取與演示。
2開(kāi)發(fā)技術(shù)
本文主要使用ASP.NET動(dòng)態(tài)網(wǎng)頁(yè)開(kāi)發(fā)技術(shù),網(wǎng)頁(yè)后臺(tái)程序由C#語(yǔ)言編寫(xiě),前臺(tái)使用HTML+CSS實(shí)現(xiàn),客戶端動(dòng)態(tài)數(shù)據(jù)驗(yàn)證使用js。
3SEG-Y文件分析
3.1SEG-Y文件組成
3.1.1組成簡(jiǎn)介
SEG-Y文件由文件頭文件和數(shù)據(jù)體兩部分組成。文件頭記錄了此文件的各項(xiàng)參數(shù),為文件的進(jìn)一步讀取給出必要信息。數(shù)據(jù)體則是文件的主體部分,它記錄了主要的地震數(shù)據(jù),是繪圖的依據(jù)。
3.1.2文件頭文件介紹與分析
文件頭總長(zhǎng)度為3600字節(jié),分兩部分:第一部分為字符型文件頭,文件頭第二部分為二進(jìn)制文件頭。
3.1.3數(shù)據(jù)體部分介紹與分析
數(shù)據(jù)體由多個(gè)數(shù)據(jù)道組成,每道數(shù)據(jù)分兩部分:道頭和采樣數(shù)據(jù)。
3.2SEG-Y文件處理及實(shí)現(xiàn)
3.2.1SEG-Y文件字符型文件頭(Textual File Header)處理及實(shí)現(xiàn)
字符型文件頭數(shù)據(jù)由EBCDIC代碼組成,所以,必須將其轉(zhuǎn)換為ASCII代碼才可以正確顯示。具體方法是建立兩種代碼關(guān)系對(duì)應(yīng)表,每次讀入一個(gè)字節(jié)EBCDIC代碼,循環(huán)查找EBCDIC代碼表,找出它在EBCDIC表中的位置,在返回ASCII代碼表中對(duì)應(yīng)位置的ASCII代碼。
3.2.2SEG-Y文件二進(jìn)制文件頭(Binary File Header)處理及實(shí)現(xiàn)
二進(jìn)制文件頭由16位和32位二進(jìn)制數(shù)據(jù)構(gòu)成,但在讀取其中的各參數(shù)值時(shí)就要注意,SEG-Y文件以工作站的存儲(chǔ)格式存儲(chǔ)。工作站中的二進(jìn)制數(shù)據(jù)是高字節(jié)在前,低字節(jié)在后面;而微機(jī)中的數(shù)據(jù)則是低字節(jié)在前,高字節(jié)在后。
我們采用先通過(guò)FileStream將400個(gè)字節(jié)的文件信息讀入內(nèi)存,400字節(jié)數(shù)據(jù)按從低地址到高地址的順序存放在一個(gè)數(shù)組中,然后根據(jù)數(shù)據(jù)的存儲(chǔ)位數(shù),決定轉(zhuǎn)換字節(jié)數(shù),如讀取16位數(shù)據(jù),先讀取第一個(gè)字節(jié)放入一個(gè)16位臨時(shí)整型數(shù)中,將整型數(shù)據(jù)左移8位,然后,再讀入下一字節(jié),將其放入另一個(gè)16位臨時(shí)整型數(shù)中,最后,將臨時(shí)16位數(shù)按位或,得到16位微機(jī)格式的地震數(shù)據(jù)。
3.2.3SEG-Y文件道頭文件(Trace Header)的處理及實(shí)現(xiàn)
道頭與二進(jìn)制文件頭數(shù)據(jù)存儲(chǔ)相同,所以,可以采用相同的數(shù)據(jù)處理方式,這里不再贅述。
3.2.4 SEG-Y文件道數(shù)據(jù)(Trace Data)的處理及實(shí)現(xiàn)
道數(shù)據(jù)格式與二進(jìn)制頭文件的控制位有關(guān),長(zhǎng)度由道采樣點(diǎn)數(shù)及采樣點(diǎn)格式共同決定。二進(jìn)制頭文件3225-3226字節(jié)標(biāo)志了采樣點(diǎn)數(shù)據(jù)(道數(shù)據(jù))采用的數(shù)據(jù)格式,采樣點(diǎn)數(shù)由道頭115-116字節(jié)給出,若二進(jìn)制文件頭3503-3504字節(jié)標(biāo)志為0,則該文件道長(zhǎng)一致,可以根據(jù)二進(jìn)制文件頭3221-3222字節(jié)得出,無(wú)需分別讀出每道采樣點(diǎn)數(shù)。若采樣點(diǎn)使用32位數(shù)據(jù)記錄(如:IBM浮點(diǎn)型,IEEE浮點(diǎn)型,4字節(jié)整型),道長(zhǎng)則為采樣點(diǎn)數(shù)×4字節(jié),若采樣點(diǎn)使用16位數(shù)據(jù)記錄(如:2字節(jié)整型),道長(zhǎng)則為采樣點(diǎn)數(shù)×2字節(jié)。
道數(shù)據(jù)依然是以工作站存儲(chǔ)方式存儲(chǔ)數(shù)據(jù),所以,首先要進(jìn)行高低位轉(zhuǎn)換,然后根據(jù)數(shù)據(jù)類型,轉(zhuǎn)換為微機(jī)存儲(chǔ)格式以便讀出。
SEG-Y道數(shù)據(jù)主要用IBM浮點(diǎn)型數(shù)據(jù)記錄,后來(lái)也常用IEEE浮點(diǎn)型數(shù)據(jù)記錄。這里主要介紹IBM浮點(diǎn)數(shù)的存儲(chǔ)格式和轉(zhuǎn)換方法。IBM浮點(diǎn)數(shù)分三部分:符號(hào)位(sign)占1 位, 指數(shù)部分(e)占7位, 尾數(shù)部分(m)占24位。
所得數(shù)值result = (-1)^sign * ( m / (2^24 ) )*16 ^ ( e^ - 64 )。
讀取IBM浮點(diǎn)數(shù)具體方法為,先順序讀入道數(shù)據(jù)至數(shù)組,逐個(gè)讀出4字節(jié)數(shù)據(jù),每個(gè)數(shù)據(jù)先高低位換位(方法同二進(jìn)制文件頭處理方法)。將32位數(shù)右移31位,所剩為符號(hào)位,取出保存;將32位數(shù)與0x7f000000按位與,獲得浮點(diǎn)數(shù)指數(shù)部分,保存;將32位數(shù)與0x00ffffff按位與,獲得浮點(diǎn)數(shù)位數(shù)部分,保存。IBM浮點(diǎn)數(shù)符號(hào)位0表示正數(shù),1表示負(fù)數(shù),指數(shù)部分使用移碼存儲(chǔ),底數(shù)為16,尾數(shù)部分為實(shí)數(shù)小數(shù)點(diǎn)后數(shù)據(jù)。根據(jù)之前提供計(jì)算公式,算出IBM浮點(diǎn)數(shù)微機(jī)中表示值。
3.3讀取SEG-Y文件整體設(shè)計(jì)
3.3.1SEG-Y文件整體分析
綜合分析,設(shè)計(jì)制作字符型文件頭類,二進(jìn)制文件頭類,地震道道數(shù)據(jù)類,SEGY文件類,前三各類分別負(fù)責(zé)各中數(shù)據(jù)文件的讀取,SEGY文件類有前三類組成。
3.3.2 SEG-Y文件字符型文件頭類設(shè)計(jì)
字符型文件頭3200個(gè)字節(jié),由EBCDIC編碼,只包含對(duì)文件的字符描述信息,所以,此類主要負(fù)責(zé)讀出3200字節(jié)的字符信息,將其轉(zhuǎn)換為ASCII后返回。
3.3.3SEG-Y文件二進(jìn)制文件頭類設(shè)計(jì)
二進(jìn)制文件頭包含對(duì)SEG-Y整個(gè)文件的描述信息,對(duì)后續(xù)文件的處理有重要作用。它緊接在3200字節(jié)字符型文件頭之后,所以,從3201開(kāi)始讀入文件,經(jīng)逐個(gè)轉(zhuǎn)換,得到二進(jìn)制文件頭數(shù)據(jù),存儲(chǔ)在類私有變量中,通過(guò)公共屬性供前臺(tái)使用。
3.3.4SEG-Y文件地震道道數(shù)據(jù)類設(shè)計(jì)
道數(shù)據(jù)分為道頭數(shù)據(jù)和道地震數(shù)據(jù),道頭按存儲(chǔ)位置存儲(chǔ)有道各種信息,道地震數(shù)據(jù)則是緊密排列的地震采樣點(diǎn)數(shù)據(jù)。讀取地震道數(shù)據(jù)時(shí),首先判斷該文件是否存在附加字符文件頭文件,設(shè)長(zhǎng)度為length(若不存在,則長(zhǎng)度為零),然后,根據(jù)讀取的道數(shù),設(shè)為tracenum(從1開(kāi)始計(jì)數(shù)),讀取第x道數(shù)據(jù),若道長(zhǎng)一定,文件從3600+length+tracenum×(采樣點(diǎn)數(shù)×采樣點(diǎn)存儲(chǔ)長(zhǎng)度+240)讀取,若道長(zhǎng)不定,則要逐個(gè)讀取,讀取起始位置逐個(gè)計(jì)算得出。
每讀一道數(shù)據(jù),先讀取道頭數(shù)據(jù),讀取方法與讀取二進(jìn)制文件頭相同,不再贅述。讀取道數(shù)據(jù)先判斷數(shù)據(jù)格式,不同格式讀取不同長(zhǎng)度數(shù)據(jù),處理也不同。若數(shù)據(jù)格式為IBM浮點(diǎn)型,則道長(zhǎng)為采樣點(diǎn)數(shù)×4字節(jié),再將IBM浮點(diǎn)型數(shù)據(jù)換算為微機(jī)浮點(diǎn)數(shù);若數(shù)據(jù)格式為4字節(jié)整形,則道長(zhǎng)為采樣點(diǎn)數(shù)×4字節(jié),再將四字節(jié)整型數(shù)據(jù)換算為微機(jī)整數(shù);若數(shù)據(jù)格式為2字節(jié)整形,則道長(zhǎng)為采樣點(diǎn)數(shù)×2字節(jié),再將2字節(jié)整型數(shù)據(jù)換算為微機(jī)整數(shù);若數(shù)據(jù)格式為4字節(jié)IEEE浮點(diǎn)型數(shù)據(jù),則道長(zhǎng)為采樣點(diǎn)數(shù)×4字節(jié),再將四字節(jié)IEEE浮點(diǎn)型型數(shù)據(jù)換算為微機(jī)整數(shù)。
3.3.5SEG-Y文件類設(shè)計(jì)
SEG-Y文件類是前三個(gè)類的集合,通過(guò)它可以初始化和訪問(wèn)指定SEG-Y文件。
4B/S模式SEG-Y格式地震數(shù)據(jù)讀取演示系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)
主要介紹基于B/S模式的SEG-Y格式地震數(shù)據(jù)的讀取演示系統(tǒng)的具體實(shí)現(xiàn)過(guò)程,并給出一些系統(tǒng)成果展示。
4.1設(shè)計(jì)方案
該系統(tǒng)采用B/S模式設(shè)計(jì),分為前后臺(tái)兩個(gè)部分:
4.1.1前臺(tái)設(shè)計(jì)
前臺(tái)是面向用戶提供服務(wù)的系統(tǒng)部分: (1)用戶登錄 (2)首頁(yè) (3)文件目錄(4)詳細(xì)信息 (5)個(gè)人中心。
4.1.2后臺(tái)設(shè)計(jì)
后臺(tái)是系統(tǒng)管理部分,它包括以下部分:(1)管理員登錄(2)首頁(yè)(3)文件管理 (4)用戶管理。
4.2剖面圖繪制實(shí)現(xiàn)
剖面圖繪制使用了ASP.NET的GDI+,GDI+是圖形設(shè)備接口(GDI)的高級(jí)版,它提供了各種豐富的圖形圖像處理功能,主要有二維矢量圖形,圖像處理和版式3部分組成。
具體實(shí)現(xiàn)過(guò)程為用戶選擇文件,服務(wù)器獲得文件編號(hào),進(jìn)而獲得文件在服務(wù)器的路徑,服務(wù)器新建SEGY類,根據(jù)其路徑進(jìn)行初始化,最后,根據(jù)用戶的需求,發(fā)送相關(guān)信息或圖像給用戶。
5總結(jié)
使用B/S模式來(lái)實(shí)現(xiàn)對(duì)SEG-Y文件的讀取與演示可以節(jié)約企業(yè)在系統(tǒng)維護(hù)方面的成本,方便分析人員隨時(shí)隨地接入網(wǎng)絡(luò)了解地震信息,提高分析人員的工作效率。