亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于GOCAD軟件的多源地質勘探數據接口開發(fā)

        2023-01-03 12:04:24汪文剛李凱
        物探與化探 2022年6期

        汪文剛,李凱

        (中鐵第四勘察設計院集團有限公司 地質路基設計研究院,湖北 武漢 430074)

        0 引言

        自20世紀80年代以來,三維可視化技術被引入地學領域,三維地質建模技術取得了飛速發(fā)展,各種建模軟件也不斷涌現。以GOCAD為代表的先進地質建模軟件大大提高了地質建模的效率和精度,許多學者以GOCAD為平臺,圍繞三維地質建模開展了大量的研究與應用工作[1-4]。最近幾年,基于GOCAD平臺的礦產資源開發(fā)、地質結構研究、水利工程建設、城市地下空間建設等三維地質建模應用越來越多,發(fā)展前景十分廣闊[5-7]。

        三維地質建模是建立在各種地質勘探等數據之上,其中較為基礎的有鉆探數據,例如井位、井深、巖性分層情況等,地球物理勘探數據(例如:高密度視電阻率數據、地震數據等)可以作為其補充,豐富地質模型的屬性信息。GOCAD本身提供了通用的數據導入功能,在導入鉆探數據方面,需要將鉆孔位置、井深、巖性分層情況等數據按照指定的格式分類整理成多個文本文件,分別依次導入。最基礎的為位置文件,包括鉆孔編號、井口坐標(北坐標、東坐標、高程)、井深等5列數據;其次是巖性分層文件,包括鉆孔編號、地層深度、地層名稱3列數據;對于斜井還需要測斜文件,包括鉆孔編號、方位角、傾角和深度4列數據[8-11]。在導入地球物理勘探數據時,GOCAD無法直接導入各種原始測量數據文件,只能將其以散點數據的形式整理為文本文件,包括測點坐標(北坐標、東坐標、高程)、測量值4列數據;在此之前,還需要將測點位置從測線坐標轉換為大地坐標。此外,對于普遍采用的地球物理勘探成果數據文件—Surfer網格數據文件(*.grd),GOCAD并未提供直接的導入功能。鑒于以上地質勘探數據導入的繁瑣、復雜,無法滿足實際生產的需求,有必要探索自動化的導入手段,使其既能提高數據導入的效率,又能避免人為編輯帶來的誤差。GOCAD提供了非常開放的開發(fā)套件,在此基礎上,針對不同的數據來源開發(fā)接口,可以實現多源數據的快速導入,以解決上述問題。

        1 GOCAD二次開發(fā)介紹

        GOCAD是由法國Nancy大學開發(fā)的一款地質對象計算機輔助設計軟件,具有強大的三維建模、可視化、地質解釋和分析功能,既可以進行表面建模,也可以進行實體建模,既可以設計空間幾何對象,也可以表現空間屬性分布[12]。GOCAD是目前國際上公認的主流建模軟件,在地質工程、地球物理勘探、礦業(yè)開發(fā)、水利工程中均有廣泛的應用。

        GOCAD之所以功能強大并不斷發(fā)展,這與它插件式的開發(fā)模式是分不開的,在核心模塊的基礎上,來自全世界的上百名開發(fā)人員開發(fā)了500多款功能插件,為不同的行業(yè)應用提供了優(yōu)秀的解決方案。商業(yè)化的GOCAD軟件提供了非常開放的開發(fā)套件,通過開發(fā)套件,開發(fā)者可以進行以下操作:①以讀寫方式訪問所有GOCAD對象(C++類,圖1);②訪問所有 GOCAD算法(C++ 類或 API);③創(chuàng)建新算法和新 CLI 命令;④在 CLI 命令中使用第三方庫;⑤創(chuàng)建、編輯、繪制、操作新的GOCAD對象;⑥引入第三方Qt小部件;⑦創(chuàng)建新工作流。GOCAD的二次開發(fā)套件提供插件運行時開發(fā)環(huán)境,采用基于命令框架 (CLI) 的快速原型設計模式(圖2),能夠自動生成 UI 和可編寫的腳本命令,大大提高了編程效率。

        圖1 GOCAD類的繼承關系圖(部分)

        圖2 GOCAD開發(fā)快速原型設計模式

        GOCAD提供的開發(fā)套件可以一鍵配置開發(fā)環(huán)境,自動生成解決方案工程,開發(fā)者只需在.cli文件中編寫描述代碼。其基本結構如下:

        Command [: ]{

        function ( );

        do() {

        };

        dialog( ) {

        ;

        };

        }

        開發(fā)者可以在do代碼塊中編寫邏輯執(zhí)行代碼,其語法規(guī)則與C++十分類似;在dialog代碼塊自定義UI,通過簡單的關鍵字設計對話框控件的排列組合。GOCAD命令框架自定義的數據類型可以自動生成對應的輸入控件,省去了控件設計的麻煩。此外,開發(fā)者還可以自定義輸入參數的外觀顯示、引入第三方QT小部件等。整體來說,GOCAD提供的二次開發(fā)框架既有嚴格的開發(fā)規(guī)則限制,又給予了相對充分的擴展空間,在模式化開發(fā)的同時,也可以方便開發(fā)者按需求定制插件。

        2 鉆探數據

        鉆探數據是三維地質建模的基礎,GOCAD提供了通用的鉆探數據導入功能,主要包括井位數據、地層數據以及測井曲線數據,用戶需要按照指定格式將鉆孔數據整理為文本文件,不同的信息分別依次導入。當鉆孔很多時,這個工作是非常繁瑣的。目前大多數生產單位均有自己的鉆探數據管理系統(tǒng),通過搭建平臺,將鉆探數據管理系統(tǒng)里的數據直接導入到GOCAD中,將會大大提高三維地質建模工作的效率[13]。下面以中鐵第四勘察設計院集團有限公司的地質信息系統(tǒng)(以下簡稱“地質系統(tǒng)”)為例,介紹如何實現這一功能。

        該套地質系統(tǒng)是專為鉆探數據管理所開發(fā)的一套專業(yè)軟件,其功能強大,已投入使用十多年,外業(yè)生產的鉆探數據均通過此系統(tǒng)錄入。地質系統(tǒng)后臺數據存儲采用的是微軟的ACCESS數據庫,該數據庫包括了勘察點表、地層表、靜力觸探表等,囊括了三維地質建模所需要的基本鉆探信息。

        開發(fā)地質系統(tǒng)與GOCAD之間的數據接口可分為3步:①讀取ACCESS數據庫鉆探數據;②根據數據生成GOCAD中的Well(繼承自GObj類)對象;③將Well對象批量導入到GOCAD中。C++對ACCESS數據庫進行操作,常用的方法有DAO(data access objects)和ADO(activeX data objects)2種方式,本文采用ADO的方式,該種方式在各種科技文獻及網絡教程中均有詳細介紹,在此不再贅述。

        為方便讀取數據的管理,可以先自定義一個類,將從數據庫中讀取的井數據存儲到類的實例中,包括井名稱、坐標、地層情況等。從數據庫讀取數據之后,利用GOCAD開發(fā)套件提供的WellAPI生成Well對象,其接口函數為:

        WellAPI::Well* create_well_from_vertical_path(const CString& name, const Point3d& loc, Coord max_depth, const HomogeneousCoordinateSystem& hcs, const Unit& zm_unit, bool specify_well_curve_intervals = false, Coord dzm = 0, EntityId::AccessLevel access_level = EntityId::PUBLIC_ENTITY )

        其中,name、loc、max_depth分別代表井的名稱、大地坐標以及井底高程。生成Well對象之后,還需將地層信息附加到Well對象上,通過WellAPI接口函數實現:

        WellMarker* add_or_replace_marker(WellMarkerSet* marker_set, const CString& marker_name, DepthSystemType dtype, Coord z, Angle::AngleSystem atype, const CString& slope, bool replace, WellMarkerCollection* collection, const UniqueCStringList& forward_layer_name, bool set_gf, const CString& gf_name)

        其中,marker_set、marker_name、z分別為Well對象、地層名稱及其層底深度。同樣的,測井曲線信息也可以通過對應的API接口函數附加到Well對象上。在創(chuàng)建Well對象時,Well對象就自動導入到了GOCAD中,通過GOCAD::store_created(const PtrList& gobjs)函數存儲創(chuàng)建對象,以用于撤銷的目的。至此,完成了從地質系統(tǒng)到GOCAD的鉆探數據接口開發(fā)。圖3為從地質系統(tǒng)讀取的鉆探數據的實例。

        圖3 GOCAD中井數據的顯示

        需要注意的是,GOCAD僅支持UTF-8格式的中文字符,否則會出現亂碼。而通過數據庫讀取出來的字符通常采用的是GB2312的編碼格式,因此,在讀取數據庫的數據之后,需要對其中的中文字符進行處理,將其轉為UTF-8編碼格式。Qt庫函數可以實現這一功能,具體做法是:利用Qt中的fromLocal8Bit()函數將中文字符從本地字符集GB轉為Unicode,再利用toStdString()函數將其轉為滿足GOCAD的API接口函數的字符串類型。此外,GOCAD對于一些特殊字符,例如“&”、“*”等視為非法字符,應在鉆孔編錄中盡量避免使用這些符號或者在接口開發(fā)中對其加以替換。

        3 地球物理勘探數據

        由于施工環(huán)境或生產成本等因素的限制,部分工區(qū)鉆探資料可能不足,地球物理勘探則成為了其重要的補充。地球物理勘探方法眾多,對應的設備儀器多,數據文件類型也是各式各樣,但是三維地質建模依賴的并不是這些原始的記錄文件,而是經過處理或者反演過后的成果數據,這些數據一般可以以點數據的形式導出為文本文件。此外,地球物理勘探數據在進行成果解釋時,通常會使用Golden Software公司的Surfer軟件生成網格數據文件(*.grd),而GOCAD中未提供這一數據格式的導入。

        地球物理勘探可分為面積性勘探和剖面勘探,面積性勘探如重力勘探、磁法勘探等,其測點坐標一般為實測的大地坐標;剖面勘探如高密度電法勘探、電磁法勘探、微動勘探等通常沿測線進行,測點坐標為相對坐標。三維地質建模需要所有的數據源統(tǒng)一到相同的三維空間坐標系統(tǒng)下,因此,對于剖面勘探的點數據文件以及網格數據文件,還需進行額外的坐標匹配工作,將各測點的相對坐標轉為大地坐標。以下介紹基于GOCAD開發(fā)套件開發(fā)數據接口,實現點數據文件以及網格數據文件的導入。

        3.1 點數據

        對于剖面勘探,點數據一般包括測線距離、深度、屬性值(例如電阻率、波速等)3個物理量,為了匹配大地坐標,可在測線上實測所有測點或部分控制點的大地坐標,測量數據包括了測線距離、北坐標、東坐標、高程4個物理量。在接口開發(fā)中,需要同時讀取點數據文件以及測量數據文件,通過簡單的線性插值即可將測線上的坐標轉換為三維空間上的大地坐標,再利用GOCAD開發(fā)套件提供的API函數進行點數據的導入。對于面積性勘探的點數據,其測點一般包含實測的大地坐標,無需進行坐標匹配,可直接利用API函數進行點數據的導入。

        在GOCAD開發(fā)中,單個數據點對應于一個原子(Atom)對象,原子的空間坐標是其最基礎的屬性,也可以賦予其他屬性值,若干個原子可以組成一個點子集(SubVSet),若干個點子集又可以組成一個點集(VSet)。GOCAD中點數據集合即是以VSet對象的形式表現出來的[14],具體實現過程如下:

        VSet* vs = (VSet*)VSetAPI::create(name, *hcs, TypeId(“VSet”), false, coordinate_system);

        //實例化一個VSet對象vs

        PropertyAPI::create_property((AtomicGroup*)vs, property_name);//給vs添加一個屬性

        SubVSet* subset = vs->create_element();//在vs下創(chuàng)建一個點子集subset

        for (int i = 0; i < N; i++) {

        Point3d p(X[i], Y[i], Z[i]);//實例化空間坐標

        VSetAPI::add_atom(subset, p, 1, V[i]); //添加原子對象

        }//循環(huán)添加點數據到subset中

        store_created(vs);//保存vs對象

        首先,實例化一個VSet對象,并給該對象添加一個屬性,然后在此對象上,創(chuàng)建一個SubVSet對象,之后,利用VSetAPI中的add_atom函數將原子對象連同其屬性依次添加到SubVSet中,這樣一個包含點數據的VSet對象就自動導入到了GOCAD中;通過GOCAD::store_created(const PtrList& gobjs)函數存儲創(chuàng)建的對象,以用于撤銷的目的。至此,完成了點數據到GOCAD平臺的接口開發(fā)。圖4為某測線高密度電法點數據導入到GOCAD中的實例。

        圖4 GOCAD中點數據的顯示

        3.2 網格數據

        Surfer網格文件是地球物理勘探普遍采用的成果形式,GOCAD中尚未提供這一數據格式的直接導入[15-16]。在GOCAD中,面可以通過點集生成,因此,在GOCAD中導入網格文件可分為3步:①讀取網格文件中的網格點數據;②導入點數據到GOCAD中;③利用點數據生成面。通過編程可以很容易地從網格文件中讀取到點數據,點數據的導入可參照上節(jié)介紹進行。同樣的,對于剖面勘探數據,還需先進行坐標匹配。這里重點介紹第三步的實現。

        在GOCAD開發(fā)中,面為TSurf對象,GOCAD開發(fā)套件中的TSurfAPI提供了面的多種創(chuàng)建方法,例如,可以直接通過三維空間上的點集(VSet)來創(chuàng)建,也可以通過曲線(PLine)限定面的邊界后,利用面內部的控制點來創(chuàng)建。GOCAD從點集生成面,采用的是Delaunay 三角剖分的方式,通過增加數據密度來增加正確生成更復雜表面的幾率;為了找到確定點之間的連接性(三角剖分)的最佳投影平面,還可以人為指定投影平面。

        在直接從點集生成面的過程中,GOCAD會自動建立點與點之間的拓撲關系,但只適用于簡單規(guī)則的點集(沒有扭曲、翻轉、凹凸等),對于不規(guī)則的點集則不太適用,必須利用曲線對點集的周圍邊界進行擬合,對曲線內部進行三角剖分,結合點集與曲線生成面。從Surfer的網格文件中提取的點數據是規(guī)則的網格點數據,但是如若經過坐標匹配,則可能出現扭曲變形,特別是存在測線彎曲以及地形起伏的情況下,因此,需要采用曲線與點集相結合的方式生成面。點集的生成可以參考上一節(jié)進行,由于Surfer網格文件中點數據的排列是規(guī)則的,可以很容易找到其邊界點,通過這些邊界點生成閉合的曲線。此外,Surfer成果剖面中通常存在“白化區(qū)域”,即空值區(qū)域,GOCAD中同樣也有空值的概念,只需在讀取白化文件時,將指定的白化區(qū)域的值設置為空值(一般為-99999),即可達到“白化”的效果。生成點集和曲線后,利用TSurfAPI的create_from_points_and_curve函數生成TSurf對象。過程如下:

        ...//設置空值

        ...//生成VSet對象vs

        PLine* curve = PLineAPI::create_from_points(pline_name, &points, true, *hcs, “”);

        //生成閉合的邊界曲線curve

        TSurf* ts = TSurfAPI::create_from_points_and_curve(name, curve, vs, true, normal, true);

        //根據點集及其邊界曲線生成面

        //GObjAPI::destroy(curve);刪除curve對象

        //GObjAPI::destroy(vs);刪除vs對象

        store_created(ts);//保存ts對象

        由于點集和曲線在生成的過程中會自動導入到GOCAD中,如有必要,可以通過GObjAPI::destroy(GObj* obj)函數將其刪除,僅保留面對象,通過GOCAD::store_created(const PtrList& gobjs)函數存儲創(chuàng)建的對象,以用于撤銷的目的。

        至此,完成了網格數據到GOCAD平臺的接口開發(fā)。圖5為某測線微動譜比成果剖面(Surfer網格數據文件)導入到GOCAD中的實例。

        圖5 GOCAD中Surfer Grid的顯示

        4 結語

        GOCAD具有強大的三維地質建模功能,數據來源是其建模的基礎。本文基于GOCAD開發(fā)套件,對鉆探數據、地球物理勘探數據接口開發(fā)做了簡要介紹,實現了這些數據的快速高效導入,大大提高了三維地質建模的效率。以上的數據接口開發(fā)僅選取了部分典型的數據類別,實際上三維地質建模的數據來源多種多樣,在GOCAD開發(fā)套件的基礎上,可以根據實際生產需要開發(fā)多種數據的導入接口,在此不做過多介紹。

        日韩av一区二区毛片| 亚洲综合色婷婷七月丁香| 亚洲一区二区三区一区| 美女人妻中出日本人妻| 色婷婷亚洲一区二区三区| 亚洲美国产亚洲av| 国产精品调教| 胳膊肘上有白色的小疙瘩| 精品人妻少妇丰满久久久免| 国产三级在线观看完整版| 久久免费的精品国产v∧| 中出高潮了中文字幕| 五月婷婷丁香视频在线观看| 国产无套乱子伦精彩是白视频| 国产午夜毛片v一区二区三区| 欧美日韩精品| 在线观看亚洲AV日韩A∨| 蜜桃色av一区二区三区麻豆| 久久精品中文少妇内射| 亚洲综合精品伊人久久| 亚洲αⅴ无码乱码在线观看性色| 亚洲黄色大片在线观看| 久久久久99人妻一区二区三区 | 中国男男女在线免费av| 国产综合在线观看| 国产一级大片免费看| 久久精品国产亚洲av高清蜜臀| 国产精品一区二区黑丝| 天天影视性色香欲综合网| 青草网在线观看| 大香蕉视频在线青青草| 国产成人精品999视频| 国际无码精品| 日本高清二区视频久二区| 在线观看av网站永久| 夫妇交换性三中文字幕| 免费人成又黄又爽的视频在线| 国产熟女精品一区二区| 国产情侣一区二区| 国产精品免费久久久久影院仙踪林| 91综合久久婷婷久久|