摘要:為提高工程地質(zhì)數(shù)字化軟件開發(fā)效率,提出了基于開源軟件的工程地質(zhì)數(shù)字化開發(fā)平臺解決方案,能夠在提高開發(fā)效率和標(biāo)準(zhǔn)化水平的同時(shí),減輕勘測企業(yè)對商業(yè)軟件的依賴,快速形成獨(dú)立的、具有自主知識產(chǎn)權(quán)的軟件產(chǎn)品。測試結(jié)果表明:研究所用開源軟件和多層架構(gòu)可以滿足工程地質(zhì)數(shù)字化開發(fā)的要求,對于勘測企業(yè)工程地質(zhì)數(shù)字化研發(fā)具有一定的參考價(jià)值。
關(guān)鍵詞:工程地質(zhì)數(shù)字化; 開源軟件; .NET; 軟件開發(fā)
中圖法分類號:P642 文獻(xiàn)標(biāo)志碼:A DOI:10.15974/j.cnki.slsdkb.2022.02.019
文章編號:1006 - 0081(2022)02 - 0106 - 06
0 引 言
由于工程地質(zhì)內(nèi)、外業(yè)工作的復(fù)雜性,現(xiàn)有商業(yè)軟件并不能完全滿足企業(yè)數(shù)字化的需求,因此大多數(shù)勘測企業(yè)選擇自行開發(fā)工程地質(zhì)數(shù)字化軟件[1-3]。不同企業(yè)對工程地質(zhì)數(shù)字化的需求千差萬別,但對于數(shù)據(jù)庫管理、Excel數(shù)據(jù)處理、Word格式報(bào)告生成、CAD圖件生成等的基本需求是一致的。傳統(tǒng)的開發(fā)方式是通過COM技術(shù)實(shí)現(xiàn)軟件與應(yīng)用程序的通訊,因此軟件運(yùn)行依賴Office,AutoCAD等商業(yè)軟件的支持[4-6]。隨著計(jì)算機(jī)技術(shù)的發(fā)展,尤其是互聯(lián)網(wǎng)技術(shù)和相關(guān)企業(yè)的興起,開源軟件在操作系統(tǒng)、數(shù)據(jù)庫、Web服務(wù)器等多個(gè)方面的應(yīng)用已經(jīng)成為主流[7],通過調(diào)用Office,CAD等有關(guān)開源組件庫,可以脫離Office,AutoCAD等商業(yè)軟件的支持,直接讀寫相應(yīng)格式的文件。
因此,基于開源軟件設(shè)計(jì)了一款工程地質(zhì)數(shù)字化開發(fā)平臺,對數(shù)據(jù)庫、CAD、Office文件讀寫等基礎(chǔ)功能進(jìn)行了封裝,企業(yè)開發(fā)人員僅需通過簡單的調(diào)用,就可以實(shí)現(xiàn)較為復(fù)雜的功能,從而大幅簡化開發(fā)難度,讓開發(fā)人員把精力用在業(yè)務(wù)邏輯上,能夠在有限時(shí)間內(nèi)實(shí)現(xiàn)更多的功能,最大程度滿足勘測企業(yè)的個(gè)性化需求。此外,該開發(fā)平臺的搭建基于開源軟件,有助于減輕勘測企業(yè)對商業(yè)軟件的依賴,形成獨(dú)立的、具有自主知識產(chǎn)權(quán)的軟件產(chǎn)品。
1 開發(fā)語言及相關(guān)開源軟件
1.1 開發(fā)語言選擇
開發(fā)語言的選擇是平臺方案技術(shù)路線的決定性因素之一。C#為微軟公司于2000年基于.NET框架推出的一種面向?qū)ο笄翌愋桶踩默F(xiàn)代編程語言。開發(fā)人員利用C#語言能夠開發(fā)出多種在.NET中運(yùn)行的安全可靠的應(yīng)用程序[8]。C#綜合了VB (Visual Basic) 語言的簡單可視化操作和C++語言的高運(yùn)行效率,兼具Java現(xiàn)代語言的特點(diǎn),是Windows平臺下的首選編程語言。C#的缺點(diǎn)是在Windows以外的平臺上開發(fā)能力較弱,但是近年隨著.NET Core和.NET 5.0的相繼推出,這種情況正在逐步改善。
勘測企業(yè)開發(fā)人員通常并非專業(yè)的程序員,而C#具有的優(yōu)良性能和簡單易用的特點(diǎn),使其特別適合作為工程地質(zhì)數(shù)字化開發(fā)的首選開發(fā)語言。開發(fā)時(shí)可以選擇免費(fèi)的Visual Studio 2019社區(qū)版作為開發(fā)環(huán)境,且其同為微軟公司出品,能夠良好地支持C#。
1.2 相關(guān)開源軟件選擇
開源軟件已經(jīng)成為眾多企業(yè)和軟件項(xiàng)目的基礎(chǔ)配置,對于軟件領(lǐng)域具有重要意義,不僅有助于提升參與者的研發(fā)能力,而且能帶動國家經(jīng)濟(jì)發(fā)展。中國已將軟件開源列入“十四五”規(guī)劃,并發(fā)布木蘭開源系列許可證,致力于構(gòu)建開源生態(tài)[9]。
近年來出現(xiàn)了不少優(yōu)秀的開源軟件,其中不乏基于.NET框架和C#的軟件[10-13]。經(jīng)研究,篩選了一批可用于工程地質(zhì)數(shù)字化開發(fā)的開源軟件,其中與本文相關(guān)的軟件見表1。
2 開發(fā)平臺解決方案
2.1 開發(fā)架構(gòu)
數(shù)據(jù)庫系統(tǒng)開發(fā)一般會根據(jù)“高內(nèi)聚、低耦合”思想,把各個(gè)功能模塊劃分為表示層(UI)、業(yè)務(wù)邏輯層(BLL)和數(shù)據(jù)訪問層(DAL)3層架構(gòu),各層之間通過接口訪問[14-15]。雖然這種多層結(jié)構(gòu)在性能上略有損失(因增加了調(diào)用處理),但它具有可復(fù)用、易維護(hù)的特點(diǎn),比如程序開發(fā)完成后,需要將SQLServer數(shù)據(jù)庫更換為MySQL,僅需修改數(shù)據(jù)訪問層即可。
考慮到工程地質(zhì)數(shù)字化需求的復(fù)雜性,本開發(fā)平臺在經(jīng)典3層架構(gòu)上進(jìn)行了拓展,增加了支撐層和基礎(chǔ)服務(wù)層(如圖1所示),其中支撐層主要負(fù)責(zé)提供軟件開發(fā)的軟、硬件環(huán)境及數(shù)據(jù)庫支持等。
2.2 數(shù)據(jù)訪問層實(shí)現(xiàn)
數(shù)據(jù)訪問層基于中國開源軟件SqlSugar 開發(fā),兼容SQLServer、MySQL、SQLite等所有SqlSugar支持的數(shù)據(jù)庫。根據(jù)工程地質(zhì)數(shù)據(jù)庫的特點(diǎn),數(shù)據(jù)訪問層一般采用DBFirst方式實(shí)現(xiàn),即先建立數(shù)據(jù)庫,再根據(jù)數(shù)據(jù)庫生成實(shí)體模型,實(shí)現(xiàn)數(shù)據(jù)持久化。此外,還需要針對不同的數(shù)據(jù)庫進(jìn)行功能封裝,實(shí)現(xiàn)通用的增、刪、改、查功能;對于有特殊需求的表,可先用代碼生成器生成增、刪、改、查的代碼,再在此基礎(chǔ)上進(jìn)行修改生成。事務(wù)機(jī)制可以保證所有操作正確完成,在操作過程中,一旦出錯(cuò)便立即回滾到初始狀態(tài),從而保證數(shù)據(jù)的完整性。因此在對多個(gè)表進(jìn)行刪除操作時(shí),應(yīng)使用事務(wù)機(jī)制進(jìn)行控制,確保刪除操作正確執(zhí)行。
2.3 基礎(chǔ)服務(wù)層實(shí)現(xiàn)
雖然直接調(diào)用開源.NET組件庫可以實(shí)現(xiàn)相關(guān)功能,但代碼編寫量大,維護(hù)困難。針對工程地質(zhì)數(shù)字化的具體需求,通過對開源.NET組件庫進(jìn)行二次封裝、建立基礎(chǔ)服務(wù)層,既可以避免重復(fù)開發(fā),大幅降低開發(fā)難度,同時(shí)也可以促進(jìn)標(biāo)準(zhǔn)化進(jìn)程,方便以后替換為更合適的開源組件。
(1) 平臺管理模塊。平臺管理模塊主要通過調(diào)用數(shù)據(jù)訪問層實(shí)現(xiàn)平臺通用管理,包括組織機(jī)構(gòu)、人員、物資、資源的管理,字典管理,角色、權(quán)限管理及登錄、注銷等功能。
(2) CAD讀寫模塊?;贜etDXF開發(fā),能夠?qū)崿F(xiàn)新建、打開和保存dxf文件,新建和選擇圖層,設(shè)置字體、字高,繪制直線,繪制多義線,繪制文字,插入圖塊,填充花紋等功能。
(3) Excel讀寫模塊?;贜POI開發(fā),能夠新建或打開xls,xlsx格式文件,并在該文件中指定單元格讀取或?qū)懭雰?nèi)容,以及畫表格線、合并單元格等功能。
(4) Word讀寫模塊。基于NPOI開發(fā),能夠新建或打開doc,docx格式文件,根據(jù)標(biāo)簽定位并讀取或?qū)懭雰?nèi)容,實(shí)現(xiàn)添加或修改表格、段落、頁眉頁腳等功能。
(5) 三維操作模塊?;贏ctiviz實(shí)現(xiàn),能夠打開和顯示ts(受GOCAD,ItasCAD,CATIA支持)或其他格式三維地質(zhì)模型,并進(jìn)行分層顯示、瀏覽、縮放、視圖、面與面的求交運(yùn)算等功能,其中面與面的求交運(yùn)算關(guān)系到能否根據(jù)三維模型實(shí)現(xiàn)二維剖面出圖功能,Activiz 5.8版尚未提供此項(xiàng)功能,但在Activiz 9.0試用版中已經(jīng)實(shí)現(xiàn)。
(6) 自定義控件庫。軟件開發(fā)過程中不可避免地需要自定義一些控件或?qū)σ延锌丶M(jìn)行改造。該庫對自定義控件進(jìn)行統(tǒng)一管理,便于重復(fù)使用。
(7) 其他開發(fā)模塊?;A(chǔ)服務(wù)層是可擴(kuò)展的,根據(jù)需要還可以添加圖表模塊、地理模塊等。圖表模塊主要用于數(shù)據(jù)可視化,可將數(shù)據(jù)以柱狀圖、餅圖、折線圖等形式動態(tài)展現(xiàn);可基于MsChart(為Visual Studio自帶組件)或ZedGraph,ECharts.Net等進(jìn)行具體開發(fā)。地理模塊主要用于地圖操作、坐標(biāo)變換等;其中地圖操作選用GMap.Net開發(fā),坐標(biāo)變換可基于DotSpatial開發(fā)。
2.4 業(yè)務(wù)邏輯層實(shí)現(xiàn)
(1) 勘測數(shù)據(jù)管理。主要實(shí)現(xiàn)鉆孔、平硐、地質(zhì)點(diǎn)等勘測數(shù)據(jù)的增、刪、改、查等,包括數(shù)據(jù)批量導(dǎo)入、數(shù)據(jù)檢查與清洗等。
(2) 地質(zhì)圖自動生成。主要通過調(diào)用CAD和數(shù)據(jù)庫實(shí)現(xiàn),包括鉆孔柱狀圖、地質(zhì)剖面圖、平切圖等的自動生成功能。運(yùn)用模板技術(shù)和通過定制模板,可以滿足不同工程的出圖需求。
(3) 報(bào)告自動生成。通過調(diào)用Word讀寫模塊實(shí)現(xiàn),且通過報(bào)告模板定制,可以根據(jù)數(shù)據(jù)庫中的數(shù)據(jù)生成地質(zhì)報(bào)告。
(4) 地質(zhì)模型管理。通過調(diào)用3D操作模塊,可實(shí)現(xiàn)地質(zhì)模型的導(dǎo)入、縮放、瀏覽等,以及通過三維地質(zhì)模型生成剖面圖的功能。目前三維地質(zhì)建模軟件價(jià)格較高,考慮到地質(zhì)模型通常由少數(shù)人建立、供多數(shù)人應(yīng)用的特點(diǎn),通過開源軟件開發(fā)的切剖面功能可以大幅減少三維建模軟件的采購數(shù)量,節(jié)約企業(yè)資金。
2.5 表示層實(shí)現(xiàn)
(1) 桌面應(yīng)用?;赪inForm開發(fā)。由于原生控件在功能性、美觀性上均不盡人意,因此商業(yè)軟件一般會采用DevExpress等價(jià)格昂貴的第三方商業(yè)控件;而開源控件Krypton Component Factory具有Office風(fēng)格界面,在功能性和美觀性上達(dá)到了較好的平衡,開發(fā)時(shí)可以優(yōu)先選用。此外,也可選用國產(chǎn)的開源控件SunnyUI,該控件時(shí)尚美觀,但在功能性方面沒有增強(qiáng)。
(2) Web應(yīng)用。采用微軟的MVC架構(gòu)開發(fā),界面可以選用國產(chǎn)的LayUI等開發(fā)。
(3) 移動應(yīng)用。采用微軟的Xamarin實(shí)現(xiàn),也可以用國產(chǎn)的Smobiler開發(fā)。二者都支持C#開發(fā)移動應(yīng)用,前者的運(yùn)用需要掌握一定的安卓開發(fā)知識,后者可以通過拖拽直接生成界面,但如果開發(fā)專業(yè)應(yīng)用,需要支付一定費(fèi)用。
3 測試與驗(yàn)證
針對開發(fā)平臺進(jìn)行了部分測試和驗(yàn)證,主要包括數(shù)據(jù)庫、Excel、Word、3D、CAD等,均采用文中所述開源軟件實(shí)現(xiàn)。
(1) 數(shù)據(jù)庫、多層結(jié)構(gòu)及文檔讀寫?;赟QLite數(shù)據(jù)庫、SqlSugar框架和多層結(jié)構(gòu)開發(fā)了DB Builder,界面采用Krypton控件設(shè)計(jì)(圖2),實(shí)現(xiàn)了工程地質(zhì)信息數(shù)據(jù)庫的表結(jié)構(gòu)的管理、數(shù)據(jù)庫自動創(chuàng)建、文檔自動生成(圖3)等功能。
“工程地質(zhì)信息系統(tǒng)”實(shí)現(xiàn)了Excel格式鉆孔數(shù)據(jù)的批量導(dǎo)入、數(shù)據(jù)清洗等功能,可以自動檢查并指出錯(cuò)誤位置(精確到行和列);同時(shí)可以導(dǎo)出符合標(biāo)準(zhǔn)的鉆孔Excel格式文件并用于CATIA三維鉆孔建立。
(2) CAD 自動成圖。開發(fā)了灌漿數(shù)據(jù)管理程序,其CAD自動成圖部分采用netDxf開發(fā),可以根據(jù)灌漿數(shù)據(jù)自動繪制CAD灌漿鉆孔展示圖(圖4)。
(3) 3D操作。采用Activiz 9.0試用版進(jìn)行試驗(yàn)研究,實(shí)現(xiàn)了ts文件的解析,可以打開三維地質(zhì)模型并進(jìn)行分層顯示、縮放、旋轉(zhuǎn)、平移等操作(圖5)。
根據(jù)模型獲取三維剖面線是地質(zhì)切剖面開發(fā)的關(guān)鍵技術(shù)(圖6),為后續(xù)開發(fā)掃平了障礙。
測試結(jié)果表明:基于開源軟件和多層結(jié)構(gòu)的工程地質(zhì)數(shù)字化開發(fā)平臺方案是可行且高效的,可以在不依賴商業(yè)軟件的情況下,較好地滿足工程地質(zhì)數(shù)字化開發(fā)的需求。
4 結(jié) 語
隨著計(jì)算機(jī)技術(shù)特別是網(wǎng)絡(luò)技術(shù)的發(fā)展,開源軟件已經(jīng)成為人類智慧的寶庫。在工程地質(zhì)數(shù)字化研發(fā)中引入開源軟件,結(jié)合當(dāng)前先進(jìn)技術(shù)制定合理的開發(fā)方案,可以幫助勘測企業(yè)在投資較少的情況下,快速實(shí)現(xiàn)工程地質(zhì)數(shù)字化,同時(shí)最大限度滿足企業(yè)的個(gè)性化需求,對于勘測企業(yè)數(shù)字化轉(zhuǎn)型具有重要意義。
值得注意的是,開源軟件并不等同于免費(fèi)軟件,因此企業(yè)在引用開源軟件時(shí)需充分了解并嚴(yán)格遵守開源協(xié)議,以避免法律風(fēng)險(xiǎn)。
參考文獻(xiàn):
[1] 王國光, 李成翔, 陳鍵. GeoStation地質(zhì)三維系統(tǒng)圖件自動編繪方法研究[J]. 水力發(fā)電, 2014, 40(8): 69-71,85.
[2] 石偉明, 劉仕勇, 田華兵. GeoSmart在勘探生產(chǎn)管理中的應(yīng)用[J]. 水電站設(shè)計(jì), 2017, 33(2) :27-28.
[3] 劉聰元, 張春芳, 雷磊. 水利水電工程地質(zhì)數(shù)據(jù)庫系統(tǒng)初步研究與開發(fā)[J].人民長江, 2020, 51(增1): 127-131.
[4] 陳宇龍, 張宇寧. 工程地質(zhì)信息化和自動成圖技術(shù)研究[J]. 水利水電技術(shù), 2018, 49(4): 145-153.
[5] 張偉偉. 地質(zhì)礦產(chǎn)鉆孔數(shù)據(jù)庫管理及成圖系統(tǒng)設(shè)計(jì)與開發(fā)[D]. 合肥:合肥工業(yè)大學(xué), 2013.
[6] 段建肖, 廖立兵, 肖騰, 等. GOCAD三維地質(zhì)建模成果的二次開發(fā)及應(yīng)用研究[J]. 人民長江, 2015, 46(14): 51-54.
[7] OSCHINA.開源軟件及國內(nèi)發(fā)展現(xiàn)狀[EB/OL]. [2021-09-16]. https://www.oschina.net/news/33260/china-opensource-status.
[8] Microsoft. C# 語言介紹[EB/OL]. [2021-09-16]. https: // docs.microsoft.com / zh-cn / dotnet / csharp / tour-of-csharp/.
[9] 涂林延. 開源軟件許可證的法律屬性分析[J]. 法制與社會, 2021(6): 189-190.
[10] 果糖大數(shù)據(jù)科技. SqlSugar ORM 5.X官網(wǎng)文檔[EB/OL]. [2021-09-16]. https://www.donet5.com/Home/Doc.
[11] nissl-lab.npoi[EB/OL]. [2021-09-16]. https://github.com/nissl-lab/npoi.
[12] haplokuon.netDxf[EB/OL]. [2021-09-16]. https://github.com/haplokuon/netDxf.
[13] kitware. 3D Visualization Library for .Net C# and Unity[EB/OL]. [2021-09-16]. https://www.kitware.eu/activiz/.
[14] 朱玲, 薛賀. 基于.NET平臺下的ORM組件的研究與應(yīng)用[J].航空計(jì)算技術(shù), 2007, 37(6): 89-91.
[15] 陳煥彬,淺談. NET三層架構(gòu)在系統(tǒng)開發(fā)中的應(yīng)用[J].電腦與信息技術(shù), 2016, 24(5): 45-47.
(編輯:高小雲(yún))