鄧 軍
(重慶工程職業(yè)技術(shù)學(xué)院地質(zhì)與測繪工程學(xué)院,重慶 400037)
煤礦地質(zhì)圖件是煤礦地質(zhì)工作的集中反映,是煤礦生產(chǎn)和管理工作的重要依據(jù)。其數(shù)據(jù)量大、覆蓋面廣,它包括各種觀測數(shù)據(jù)、報(bào)表和計(jì)算成果等。隨著煤礦生產(chǎn)的迅速發(fā)展、采掘機(jī)械化程度的提高和開采條件的復(fù)雜化,煤礦生產(chǎn)對地質(zhì)工作的依賴性越來越大,對地質(zhì)圖件的要求也越來越高。目前,我國地質(zhì)信息的地質(zhì)圖件繪制主要使用Autodesk公司的AutoCAD軟件,還有西安集靈公司的CGIS和北京龍軟的地測空間管理信息系統(tǒng)。Auto-CAD是一種計(jì)算機(jī)輔助設(shè)計(jì)系統(tǒng),其主要適用于機(jī)械制圖領(lǐng)域,在礦山制圖方面應(yīng)用并非得心應(yīng)手,主要表現(xiàn)在AutoCAD沒有針對礦山應(yīng)用領(lǐng)域而設(shè)計(jì)專屬的內(nèi)容,在一定程度上降低了地質(zhì)圖件繪制的效率,比如很多礦山方面專有的符號要進(jìn)行大量重復(fù)的繪制,繪圖的精度難以保證,格式規(guī)范難以統(tǒng)一。地測空間管理信息系統(tǒng)和CGIS針對AutoCAD在礦山制圖應(yīng)用方面的不足,增加了大量的專業(yè)符號、線型,極大的方便了繪圖人員。但是,在制圖功能、使用習(xí)慣和軟件的穩(wěn)定方面,又有所不如AutoCAD。而且這幾個(gè)軟件都有自己的圖形格式,在實(shí)際使用中,除了Auto-CAD,煤礦企業(yè)并沒有為各個(gè)部門都配備龍軟和CGIS,造成了在數(shù)據(jù)共享方面存在一定難度,圖件在轉(zhuǎn)換過程中丟失信息,往往要浪費(fèi)大量的人力修改。在分析當(dāng)前問題存在的基礎(chǔ)上,本文提出基于Autodesk AutoCAD來開發(fā)地質(zhì)圖件繪制系統(tǒng),以期望解決目前存在的問題。
第一部分包括:現(xiàn)有地質(zhì)圖件的坐標(biāo)校正,鉆孔數(shù)據(jù)庫的建立維護(hù),根據(jù)鉆孔數(shù)據(jù)庫自動(dòng)生成鉆孔,根據(jù)鉆孔數(shù)據(jù)生成各種等值線,如底板等高線圖、瓦斯含量等值線、瓦斯壓力等值線等。其中地質(zhì)圖件的坐標(biāo)校正是地質(zhì)圖件自動(dòng)繪制的基礎(chǔ),經(jīng)過校正,鉆孔的坐標(biāo)和AutoCAD的坐標(biāo)系相吻合,保證了自動(dòng)繪制的鉆孔在圖形上的正確位置。根據(jù)鉆孔的坐標(biāo)值來生成Delauney三角網(wǎng),再生成各種等值線。第二部分主要是現(xiàn)在煤礦生產(chǎn)中常用的圖件圖例的自動(dòng)生成。如儲量計(jì)算圖中的儲量圖、煤層小柱狀,瓦斯地質(zhì)圖中的瓦斯測壓點(diǎn)、動(dòng)力現(xiàn)象點(diǎn)、煤層采樣點(diǎn)、瓦斯突出點(diǎn)、瓦斯相對涌出量點(diǎn)、瓦斯抽放泵站等。第三部分是地質(zhì)圖件常用線形的半自動(dòng)繪制。包括巖巷、煤巷、儲量塊段界線、井田邊界線、鐵路公路保護(hù)煤柱線、瓦斯含量等值線、煤層頂板巖性分界線、煤厚等值線、瓦斯絕對涌出量等值線等。
AutoCAD的二次開發(fā)工具主要有ObjectARX,VBA和Lisp,其中ObjectARX功能強(qiáng)大,編程效率很高,但是開發(fā)平臺為VC++,VC++相對于其他兩種開發(fā)方式來說,開發(fā)者的學(xué)習(xí)成本很高,而且VC++在程序的GUI方面較為薄弱。VBA和Lisp雖然簡單容易上手,但是這兩種開發(fā)方式對于開發(fā)大型的程序方面無能為力。而.NET開發(fā)模式則結(jié)合了VC++功能強(qiáng)大與VBA易學(xué)易用的特點(diǎn),可以快速的開發(fā)出功能強(qiáng)大的AutoCAD程序。
AutoCAD.NETAPI是Autodesk在AutoCAD2006中為.NET新增的一組API,.NET API提供了一系列托管的外包類(Managed Wra-pperClass),使開發(fā)人員可在.NET框架下,使用任何支持.NET的語言,如VB.NET,C#等對AutoCAD進(jìn)行二次開發(fā)。
系統(tǒng)總體分為四個(gè)模塊,分別是數(shù)據(jù)庫管理模塊,等值線自動(dòng)生成模塊,常用圖例自動(dòng)生成模塊,常用線形的建立使用。其中,數(shù)據(jù)庫管理模塊連接鉆探數(shù)據(jù)庫,獲取各種鉆探數(shù)據(jù),主要是本系統(tǒng)中使用的鉆孔信息和瓦斯地質(zhì)信息,如鉆孔的名稱、鉆孔坐標(biāo)、孔口標(biāo)高、鉆孔深度、煤層厚度等。瓦斯地質(zhì)信息包括瓦斯涌出量、瓦斯壓力點(diǎn)、瓦斯突出點(diǎn)等。儲量信息包括塊段號及儲量級別、塊段平均面積、儲量、煤層平均厚度、煤層傾角。等值線自動(dòng)生成模塊負(fù)責(zé)根據(jù)鉆孔的深度生成底板等高線,根據(jù)鉆孔的煤厚生成煤厚等值線,根據(jù)瓦斯信息生成瓦斯含量等值線、瓦斯絕對涌出量等值線。在生成等值線之前,需要用戶對圖形進(jìn)行坐標(biāo)校正,程序提供了用三個(gè)點(diǎn)校正的功能,在誤差范圍之內(nèi),對圖形進(jìn)行坐標(biāo)校正。常用圖例自動(dòng)生成模塊負(fù)責(zé)繪制地質(zhì)圖件中常用的各種圖例。根據(jù)用戶輸入的坐標(biāo)和比例尺在地圖的特定位置插入圖例。由于.NET不支持自定義實(shí)體,所以在圖例的建模方面使用塊,所有的塊狀圖例都繼承于一個(gè)抽象類UserDefine-Object,User Define Object定義了一些基本的方法和屬性,派生類根據(jù)自身的特性,繼承或者重寫其中的一些方法屬性,針對不同的實(shí)體,每個(gè)派生類具有自己專有的屬性方法。這樣面向OO的編程,可以最大程度的減少編寫代碼的工作量。系統(tǒng)示意圖見圖1。
2.3.1 使用工廠模式連接數(shù)據(jù)庫
隨著數(shù)字礦山的推進(jìn),全國各大煤礦基本上都建立了自己的數(shù)據(jù)庫系統(tǒng),以便對地測數(shù)據(jù)進(jìn)行管理。具體到各個(gè)煤礦采用的解決方案不同,中小型應(yīng)用基本采用Microsoft Access或Microsoft SQL Server,大型的應(yīng)用采用MicrosoftSQL Server或者Oracle居多。以貴州響水礦為例,鉆探數(shù)據(jù)采用了Access和SQL Server兩種方式來存儲。在.NET中我們可以使用System.Data.Odbc命名空間中所提供的類實(shí)現(xiàn)對所有數(shù)據(jù)庫的操作。但是在.NET對各種不同的數(shù)據(jù)庫還提供了特有的數(shù)據(jù)提供程序。如:訪問SQL Server數(shù)據(jù)庫可以使用 System.Data.SqlClie-nt命名空間下的類;訪問Oracle數(shù)據(jù)庫可以使用 System.Data.OracleClient命名空間下的類。利用這些特有的數(shù)據(jù)庫提供程序可以獲得更高的性能。所以在開發(fā)軟件的過程中,我們需要設(shè)計(jì)一種模式用來支持利用特定的數(shù)據(jù)庫提供程序訪問特定的數(shù)據(jù)庫,而不是統(tǒng)一使用ODBC連接。在本次項(xiàng)目的實(shí)施過程中利用.NET中反射的原理簡化了工廠類的代碼,并且實(shí)現(xiàn)了動(dòng)態(tài)創(chuàng)建對象實(shí)例的功能。通過web.config配置文件的自定義配置節(jié)點(diǎn),配置具體數(shù)據(jù)庫訪問的Provider,并設(shè)置應(yīng)用程序默認(rèn)數(shù)據(jù)庫訪問Provider。通過修改配置文件,就能夠達(dá)到添加和修改應(yīng)用程序所訪問的具體數(shù)據(jù)庫。在程序中,各種具體數(shù)據(jù)庫訪問Provider,都繼承一個(gè)名為DataProvider的數(shù)據(jù)訪問工廠類。該類動(dòng)態(tài)的構(gòu)造配置文件中所設(shè)置的默認(rèn)的具體數(shù)據(jù)訪問Provider。
圖1 系統(tǒng)示意圖
2.3.2 AutoCAD托管類的二次封裝
在程序的開發(fā)過程中,使用頻率最高的是AutoCAD提供的ObjectARX托管類中提供的一些方法。但是在編寫代碼的過程中發(fā)現(xiàn),這些托管類存在許多不便的地方,比如封裝的粒度太細(xì),存在一些Bug,常用的代碼無法重用,還有一些C++的全局函數(shù)沒有提供等等。為了解決這些問題,編寫一個(gè)自定義的類庫是比較好的解決方案。根據(jù)自定義類庫的命名規(guī)則,將這個(gè)類庫命名為GZXS.GIS309.ARXDotNet。自定義類庫極大的減少了代碼編寫的工作量并且更容易維護(hù),在傳統(tǒng)的C#開發(fā)過程中,如果在Auto-CAD模型空間中加入一個(gè)實(shí)體,需要做以下工作:
而且在每次加入實(shí)體的過程中都必須重新編寫,無疑重復(fù)工作量很大。而采用了自定義類庫后,上面的代碼就可以簡寫為:
2.3.3 采用第三方控件來開發(fā)用戶界面
用戶界面(UI:User Interface)是整個(gè)軟件的前端,也是關(guān)系到用戶體驗(yàn)最重要的一部分,除了業(yè)務(wù)邏輯的組織之外,方便、美觀的用戶界面可以直觀的展現(xiàn)軟件的功能,使用戶學(xué)習(xí)、熟悉、使用軟件的效率大為提高。在軟件的開發(fā)過程中,考慮到上述因素,良好的UI設(shè)計(jì)必不可少。但是Visual Studio2005自帶的一些控件不能滿足需求。而自己開發(fā)新的自定義控件將會使工作量急劇增大,因此,使用一款合適的第三方控件產(chǎn)品就成為最好的選擇。
軟件采用了一套Visual Studio.NET開發(fā)環(huán)境下的界面擴(kuò)展框架組件,提供類似Office2007,Office2003以及OfficeXP風(fēng)格的菜單和工具條、任務(wù)面板、自動(dòng)隱藏并可拆分的標(biāo)簽式的可??看翱凇ista風(fēng)格的氣泡控件、多功能面板控件等。還支持最新的Rabin風(fēng)格的窗體以及相關(guān)控件,而且實(shí)現(xiàn)這些不需要寫任何代碼,就像使用Visual Studio2005自帶的控件一樣方便。
2.3.4 采用面向接口的設(shè)計(jì)
在本系統(tǒng)中,采用了面向?qū)ο蟮乃枷耄到y(tǒng)的各種功能是由不同對象協(xié)作完成的。在這種情況下,各個(gè)對象內(nèi)部如何實(shí)現(xiàn)在系統(tǒng)設(shè)計(jì)的時(shí)候相對來說不是最重要的,而各個(gè)對象之間的協(xié)作關(guān)系則成為系統(tǒng)設(shè)計(jì)的關(guān)鍵。小到不同類之間的通信,大到各模塊之間的交互,在系統(tǒng)設(shè)計(jì)之初是著重考慮的重點(diǎn),這也是系統(tǒng)設(shè)計(jì)的主要工作內(nèi)容。因此,本系統(tǒng)在設(shè)計(jì)的時(shí)候采用了面向接口的設(shè)計(jì)思想,編程的時(shí)候,依賴抽象,而不依賴于具體實(shí)現(xiàn),這樣,在修改和維護(hù)的時(shí)候,已有的代碼不需要修改,只需要增加類即可。
本文在針對煤礦地質(zhì)圖件繪制現(xiàn)存問題的基礎(chǔ)上,提出了利用AutoCAD.NET API和C#來實(shí)現(xiàn)地質(zhì)圖件繪制軟件的方法。采用最新的AutoCAD二次開發(fā)工具迅速的構(gòu)建了地質(zhì)圖件繪制軟件的框架,開發(fā)出的繪制系統(tǒng)與AutoCAD無縫集成,實(shí)現(xiàn)了地質(zhì)圖件繪制的基本功能,并且采用了第三方控件,擁有良好的人機(jī)操作界面。本文中系統(tǒng)的設(shè)計(jì)豐富了地質(zhì)圖件軟件的種類,同時(shí)也拓展了相關(guān)方面軟件開發(fā)的思路。
[1]曾洪飛,張 帆,盧擇臨.AutoCAD VBA& VB.NET開發(fā)基礎(chǔ)與實(shí)例教程[M].北京:中國電力出版社,2007.
[2]涂興子,林在康.基于CAD的數(shù)字礦井模型及應(yīng)用[M].徐州:中國礦業(yè)大學(xué)出版社,2005.
[3]丁 華.煤礦地測管理信息系統(tǒng)的建立[J].礦山測量,1996(1):21-23.