• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Qt和動態(tài)鏈接庫的SEG-Y格式地震數(shù)據(jù)讀寫軟件開發(fā)

      2017-04-14 01:53:27張成云石深涵熊杰夏成靜張伊
      關(guān)鍵詞:格式文件數(shù)據(jù)格式二進(jìn)制

      張成云,石深涵,熊杰,夏成靜,張伊

      (長江大學(xué)電子信息學(xué)院,湖北 荊州 434023)

      基于Qt和動態(tài)鏈接庫的SEG-Y格式地震數(shù)據(jù)讀寫軟件開發(fā)

      張成云,石深涵,熊杰,夏成靜,張伊

      (長江大學(xué)電子信息學(xué)院,湖北 荊州 434023)

      SEG-Y格式是國際通用的地震數(shù)據(jù)文件格式。針對該格式文件結(jié)構(gòu)復(fù)雜、讀取困難的問題,在Qt框架下采用動態(tài)鏈接庫技術(shù)開發(fā)了可重用的SEG-Y格式地震數(shù)據(jù)讀寫軟件。該軟件首先讀取文件頭和道頭信息,然后以人機(jī)交互方式設(shè)置相應(yīng)參數(shù),最后讀取實(shí)際地震數(shù)據(jù)。測試結(jié)果表明,該軟件能正確讀寫SEG-Y格式地震數(shù)據(jù)文件,并以動態(tài)鏈接庫的形式供第三方使用,為地震數(shù)據(jù)處理解釋軟件的國產(chǎn)化提供支持。

      SEG-Y格式;地震數(shù)據(jù);讀寫軟件;Qt;動態(tài)鏈接庫

      地震勘探是石油勘探中一種最常見和最重要的方法[1],地震數(shù)據(jù)一般采用SEG-Y格式存儲,該格式是由SEG(Society of Exploration Geophysicists)提出的國際標(biāo)準(zhǔn),是石油勘探行業(yè)通用的地震數(shù)據(jù)格式。目前,國外商業(yè)軟件對SEG-Y格式文件讀寫支持較好,但其SEG-Y格式讀寫模塊不對外開放,無法重用。因此,有必要開發(fā)可重用的SEG-Y格式[1]地震數(shù)據(jù)讀寫軟件,為地震數(shù)據(jù)處理解釋軟件國產(chǎn)化提供支持。下面,筆者將先對SEG-Y文件格式進(jìn)行分析,再在Qt框架[2]下開發(fā)SEG-Y格式地震數(shù)據(jù)讀寫軟件,最后分析在Qt中利用DLL對讀寫代碼封裝的方法及軟件調(diào)試結(jié)果。

      1 SEG-Y格式文件格式

      標(biāo)準(zhǔn)SEG-Y格式文件[3]一般包括3部分,第1部分是EBCDIC文本文件頭,第2部分是二進(jìn)制文件頭,第3部分是地震道數(shù)據(jù)集。SEG-Y文件格式如圖1所示,其中,文本文件頭長度為3200字節(jié),采用EBCDIC字符編碼,需轉(zhuǎn)換成ASCII碼后才能在PC上顯示;二進(jìn)制文件頭長度為400字節(jié),其數(shù)據(jù)類型是16位或32位整型,記錄SEG-Y文件的格式信息;地震道數(shù)據(jù)集由各道地震數(shù)據(jù)組成,每一道地震數(shù)據(jù)由240字節(jié)的二進(jìn)制道頭和采樣點(diǎn)數(shù)據(jù)集組成。其中,二進(jìn)制道頭包含該道的CDP號、XLine號、Line號、采樣點(diǎn)數(shù)、采樣間隔、采樣點(diǎn)數(shù)據(jù)格式等信息。

      圖1 SEG-Y文件格式示意圖

      2 SEG-Y格式讀寫軟件設(shè)計(jì)

      圖2 SEG-Y格式讀寫軟件結(jié)構(gòu)框圖

      SEG-Y格式讀寫軟件采用人機(jī)交互方式設(shè)置參數(shù),實(shí)現(xiàn)地震數(shù)據(jù)讀取和導(dǎo)出功能。根據(jù)SEG-Y格式文件的特點(diǎn),設(shè)計(jì)軟件功能模塊框圖如圖2所示。

      該軟件模塊由5個(gè)模塊組成:工作區(qū)管理模塊為新建文件和打開工作區(qū)提供支持;地震數(shù)據(jù)文件信息處理模塊負(fù)責(zé)讀取文本文件頭、二進(jìn)制文件頭和各道頭參數(shù),如CDP號、XLine號、Line號、采樣點(diǎn)數(shù)、采樣間隔、采樣點(diǎn)數(shù)據(jù)格式等;地震數(shù)據(jù)讀取模塊實(shí)現(xiàn)SEG-Y文件數(shù)據(jù)讀取功能;地震數(shù)據(jù)格式轉(zhuǎn)換模塊負(fù)責(zé)IEEE、IBM、PC 3種格式的相互轉(zhuǎn)換;文件管理模塊實(shí)現(xiàn)文件輸入和輸出功能。

      3 SEG-Y格式文件讀寫軟件開發(fā)

      3.1 SEG-Y格式文件讀寫流程

      SEG-Y格式文件的讀取過程復(fù)雜,包括文本文件頭、二進(jìn)制文件頭的解析與顯示,人機(jī)交互進(jìn)行參數(shù)設(shè)置,地震數(shù)據(jù)的讀取、導(dǎo)出等步驟。SEG-Y格式文件讀寫的流程圖如圖3所示。

      圖3 SEG-Y格式文件讀寫流程圖

      3.2 數(shù)據(jù)格式轉(zhuǎn)換

      SEG-Y格式文件支持IEEE、IBM、PC這3種數(shù)據(jù)格式,軟件可以實(shí)現(xiàn)3種格式之間相互轉(zhuǎn)換的功能。以IBM格式轉(zhuǎn)換為IEEE格式為例,其轉(zhuǎn)化代碼如下:

      void SEGy::IBM2IEEE(float* data, bool swap)

      {

      if(swap)

      {

      tem = cbuf[0]; cbuf[0] = cbuf[3]; cbuf[3] = tem;

      tem = cbuf[2]; cbuf[2] = cbuf[1]; cbuf[1] = tem;

      }

      expp = (unsigned char)(*mantis?24);

      *mantis = (*mantis)?8;

      shift = 1;

      while(*mantis > 0 && shift < 23) {

      *mantis = *mantis?1;

      shift++;

      }

      *mantis = *mantis?1;

      sign = expp & 0x80;

      expp = expp & 0x7F;

      if(expp != 0)

      {

      expp = expp-64;

      *umantis = *umantis?9;

      expll = 0x7F + (expp*4 - shift);

      expll = expll?23;

      if(sign) *umantis = expll | *mantis | 0x80000000;

      else *umantis = expll | *mantis;

      }

      }

      3.3 Qt框架下DLL開發(fā)

      DLL可以創(chuàng)建可重用代碼模塊[5,6],通過DLL對代碼進(jìn)行共享,從而實(shí)現(xiàn)SEG-Y格式文件讀寫軟件模塊代碼重用。在Qt中創(chuàng)建DLL工程[4]步驟如下:在Library中選擇C++library,在Type中選擇Shared Library,在Name中命名DLL的工程名。創(chuàng)建完畢之后會生成2個(gè)頭文件,一個(gè)資源文件,除工程名對應(yīng)的頭文件跟資源文件之外,還有一個(gè)“SEGy_global.h”。DLL的工程編譯,在工程名頭文件中加入需要封裝函數(shù)的成員變量和函數(shù),同時(shí)還需要獲取封裝類中的對象,代碼如下:

      extern “C”{

      SEGYSHARED_EXPORT SEGy* getSEGyObject(); //獲取類SEGy的對象

      SEGYSHARED_EXPORT void releseSEGyObject(SEGy*); //獲取類SEGy的對象

      }

      編寫的SEG-Y格式讀寫文件在minGW環(huán)境下進(jìn)行編譯后,在工程的debug文件夾下可以找到“SEGy.dll、SEGy.o、SEGy.a”3個(gè)文件。其中,“SEGy.dll”是在Windows下面可調(diào)用的動態(tài)鏈接庫,“SEGy.o”是在Linux下可調(diào)用的動態(tài)鏈接庫。如果是在MSVC環(huán)境下編譯可以生成“SEGy.lib”和“SEGy.dll”文件,結(jié)果如圖4所示。

      圖4 DLL編譯結(jié)果

      4 軟件測試及結(jié)果

      圖5 測試程序流程圖

      在Qt中建立地震數(shù)據(jù)可視化的測試

      程序,進(jìn)行SEG-Y格式文件可重用模塊的功能檢測。測試程序調(diào)用的流程圖如圖5所示。

      為在測試程序中實(shí)現(xiàn)DLL調(diào)用,首先將SEGy.h和SEGy_global.h頭文件放在當(dāng)前的工程文件夾下,添加到當(dāng)前工程中;然后設(shè)置鏈接庫的路徑;最后在主程序中包含頭文件和宏定義,并導(dǎo)入動態(tài)鏈接庫文件。執(zhí)行結(jié)果圖如圖6所示。

      庫調(diào)用過程中,設(shè)置DLL的路徑需要以下代碼:

      LIBS +=segy.DLLDESTDIR #很重要!路徑設(shè)置問題。

      LIBS += 〗 …/…/segy.DLLDESTDIR

      通過上述代碼指出庫所在的文件夾位置,路徑設(shè)置正確后進(jìn)行庫調(diào)用的下一步操作,代碼如下:

      #include

      #include “SEGy.h”

      typedef SEGy* (*CreatSEGy)();

      typedef bool (*ReleSEGyDll)(SEGy*);

      圖6(a)是SEG-Y格式文件信息的處理:文件篩選獲取,SEG-Y格式文件道頭的讀取操作及地震數(shù)據(jù)的平面或立體呈現(xiàn)的選擇,為文件的讀取做準(zhǔn)備;圖6(b)是對一個(gè)IBM格式文件的識別,讀取結(jié)果正確,說明讀寫軟件能正確讀寫SEG-Y格式地震數(shù)據(jù);圖6(c)是格式轉(zhuǎn)換界面,該文件是由IBM格式轉(zhuǎn)換為IEEE格式,轉(zhuǎn)換后的SEG-Y格式文件各項(xiàng)參數(shù)的變化依次呈現(xiàn),提供詳細(xì)的數(shù)據(jù)變換結(jié)果。

      5 結(jié)語

      利用Qt框架良好的跨平臺特性,編寫了SEG-Y格式地震數(shù)據(jù)文件讀寫代碼,并通過DLL技術(shù)進(jìn)行封裝實(shí)現(xiàn)了軟件模塊的可重用性。軟件測試結(jié)果表明,該軟件能正確讀取SEG-Y格式地震數(shù)據(jù),且具有跨平臺和可重用特性,能為地震數(shù)據(jù)處理解釋軟件的國產(chǎn)化提供支持。

      圖6 SEG-Y格式文件讀取軟件模塊執(zhí)行結(jié)果圖

      [1]劉旭躍,周巍,孔祥寧,等.SEG-Y格式自動轉(zhuǎn)化軟件的研究與實(shí)現(xiàn)[J].物探化探計(jì)算技術(shù),2016,38(1):126~127.

      [2]王文芳,許文峰,許冰清,等.基于Qt的人機(jī)交互2.5維地質(zhì)建模軟件設(shè)計(jì)與實(shí)現(xiàn)[J].成都大學(xué)學(xué)報(bào)(自然科學(xué)版),2013,32(12):371~374.

      [3]劉明忱,孫建國.基于C語言的SEG-Y數(shù)據(jù)格式分析與轉(zhuǎn)化[J] .地球物理學(xué)進(jìn)展,2016,31(1):0260~0267.

      [4]Jasmin Blanchette, Mark Summerfield.C++ GUI Programming with Qt4.Second Edition[M].閆鋒欣,曾泉人,張志強(qiáng),等譯.北京: 電子工業(yè)出版社,2007:174~321.

      [5]王保華,陸建林,左宗鑫.地質(zhì)地層數(shù)據(jù)處理的GRID類設(shè)計(jì)及DLL實(shí)現(xiàn)[J].長江大學(xué)學(xué)報(bào)(自科版),2016,13(7):63~66.

      [6] 宋偉聰,李德春,邱開林,等.VB與Fortran混合編程的重磁數(shù)據(jù)處理可視化系統(tǒng)[J].長江大學(xué)學(xué)報(bào)(自科版),2016,13(17):28~31.

      [編輯] 洪云飛

      2016-11-12

      湖北省教育廳科學(xué)技術(shù)研究項(xiàng)目(D20131206, B2016034);長江大學(xué)創(chuàng)新創(chuàng)業(yè)訓(xùn)練項(xiàng)目(20160042)。

      熊杰(1975-),男,博士,副教授,現(xiàn)主要從事科學(xué)可視化、云計(jì)算、地球物理反演方面的教學(xué)與研究工作,xiongjie@yangtzeu.edu.cn。

      TP391.9;P631.4

      A

      1673-1409(2017)01-0012-05

      [引著格式]張成云,石深涵,熊杰,等.基于Qt和動態(tài)鏈接庫的SEG-Y格式地震數(shù)據(jù)讀寫軟件開發(fā)[J].長江大學(xué)學(xué)報(bào)(自科版),2017,14(1):12~16,74.

      猜你喜歡
      格式文件數(shù)據(jù)格式二進(jìn)制
      用二進(jìn)制解一道高中數(shù)學(xué)聯(lián)賽數(shù)論題
      有趣的進(jìn)度
      二進(jìn)制在競賽題中的應(yīng)用
      使用“格式文件”將徠卡儀器數(shù)據(jù)導(dǎo)出成cass 格式的方法
      在智能交通系統(tǒng)中PLC數(shù)據(jù)格式轉(zhuǎn)換方法的研究
      電子測試(2018年1期)2018-04-18 11:52:49
      編寫徠卡TS02型全站儀格式文件的方法探索
      回歸基礎(chǔ) 到底什么是RAW格式文件?
      論子函數(shù)在C語言數(shù)據(jù)格式輸出中的應(yīng)用
      DWG與SHP數(shù)據(jù)格式互轉(zhuǎn)換方法研究——以龍巖規(guī)劃測繪數(shù)據(jù)為例
      基于Office Open XML格式文件的電子取證方法研究
      麻栗坡县| 抚顺市| 巨鹿县| 鲁山县| 苍溪县| 全南县| 永胜县| 丽江市| 尚义县| 廉江市| 平江县| 镇康县| 招远市| 丘北县| 通化县| 建水县| 六盘水市| 崇文区| 秦皇岛市| 井冈山市| 黎川县| 闽侯县| 德安县| 瑞安市| 江门市| 隆回县| 正定县| 黔南| 南充市| 平塘县| 临夏市| 旬阳县| 麻阳| 容城县| 渭南市| 高州市| 崇阳县| 五华县| 治县。| 莆田市| 溧水县|