甘業(yè)安
摘要: 本文敘述了MapGIS軟件的先進(jìn)成圖理論;介紹了VC++開發(fā)語言的開發(fā)原理與代碼機(jī)制;淺述了MapGIS二次開發(fā)類庫的操作原理;討論了基于MapGIS開發(fā)地質(zhì)礦產(chǎn)鉆孔柱狀圖的開發(fā)流程總圖;深入探討了鉆孔柱狀圖各模塊實(shí)現(xiàn)的原理與代碼;最后,文章給出了地質(zhì)礦產(chǎn)鉆孔柱狀圖生成的基礎(chǔ)步驟流程并分析了圖形形成原理;希望能給廣大同行帶來一定的理論與實(shí)踐意義。
關(guān)鍵詞:MapGIS類庫,鉆孔柱狀圖,地質(zhì)礦產(chǎn),二次開發(fā)
中圖分類號(hào):F407.1 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):
鉆孔柱狀圖是工程地質(zhì)中廣泛使用的基礎(chǔ)性圖件,但是通常采用傳統(tǒng)的手工繪制,效率低而且不易修改,不能滿足實(shí)際工作的需要。近年來,隨著計(jì)算機(jī)技術(shù)的應(yīng)用與基于GIS(地理信息系統(tǒng))利用數(shù)學(xué)地質(zhì)方法進(jìn)行礦產(chǎn)預(yù)測的應(yīng)用,需要一種GIS支持的礦區(qū)鉆孔柱狀圖繪制系統(tǒng),其不僅要能繪制鉆孔柱狀圖,而且還能對(duì)礦區(qū)鉆孔數(shù)據(jù)進(jìn)行對(duì)比和數(shù)據(jù)管理,為基于GIS應(yīng)用數(shù)學(xué)地質(zhì)方法對(duì)礦區(qū)進(jìn)行礦產(chǎn)預(yù)測提供數(shù)據(jù)準(zhǔn)備[1-2]。
本文基于國產(chǎn)地理信息系統(tǒng)軟件平臺(tái)MAPGIS,開發(fā)了針對(duì)地礦行業(yè)的鉆孔柱狀圖自動(dòng)生成系統(tǒng),實(shí)現(xiàn)了圖與數(shù)據(jù)的統(tǒng)一。
1 MapGIS概述
1.1 MapGIS軟件
圖形數(shù)據(jù)庫管理子系統(tǒng)是地理信息系統(tǒng)的重要組成部分。MAPGIS的圖形數(shù)據(jù)庫管理系統(tǒng)可同時(shí)管理數(shù)千幅地理底圖,其主要功能如下:
圖庫操作功能---提供了建立圖庫、修改及刪除圖庫等一系列操作;以及圖幅入庫的參數(shù)設(shè)置,包括幅面的大小、經(jīng)緯跨度和比例尺等等;對(duì)編輯好的圖庫,系統(tǒng)還提供了圖庫輸出功能,將其轉(zhuǎn)化為地理信息系統(tǒng)或管網(wǎng)屬性系統(tǒng)等的底圖,備其他系統(tǒng)使用。為嚴(yán)格確保數(shù)據(jù)的完整性,在建庫過程中作值域檢查、依賴關(guān)系檢查、重復(fù)記錄檢查,系統(tǒng)對(duì)用戶數(shù)據(jù)自動(dòng)備份,用戶數(shù)據(jù)一旦遭意外而被破壞,可啟用備份數(shù)據(jù)。
引入“庫類”的概念,建立了一種數(shù)據(jù)組織與管理的新方法,使得地圖數(shù)據(jù)的存儲(chǔ)與檢索非常靈活。庫類的操作提供了增加類、刪除類、更換類、修改類名、瀏覽類。
圖幅操作功能---提供了記錄輸入、顯示、修改、刪除等功能,每個(gè)記錄(也稱一個(gè)圖幅)包括標(biāo)識(shí)符、控制點(diǎn)及其所代表的圖元的圖形文件,用戶根據(jù)需要可隨時(shí)調(diào)用、存取、顯示、查詢?nèi)我粓D幅。
信息查詢功能---系統(tǒng)提供了經(jīng)緯查詢、日期查詢、標(biāo)識(shí)查詢和條件查詢功能,用戶根據(jù)需要可隨時(shí)選擇任何一種方式進(jìn)行操作。圖幅檢索提供了空間條件檢索、庫類檢索、圖形屬性檢索以及綜合條件檢索;用戶利用這些功能可將所需要的圖形及屬性數(shù)據(jù)從圖庫中提取出來。
圖幅剪取功能---提供了輸入剪取框、讀入剪取框和臨時(shí)構(gòu)造剪取框三種方式,每種方式都可以任意設(shè)置剪取框,系統(tǒng)自動(dòng)剪取框內(nèi)的各幅圖件,并生成新的圖件。
圖幅配準(zhǔn)功能---提供了圖幅變換功能,可隨時(shí)對(duì)裝入的圖幅進(jìn)行平移變換、比例變換、旋轉(zhuǎn)變換和控制點(diǎn)變換,以滿足用戶的需求。
1.2 VC++開發(fā)語言
Visual C++作為一種程序設(shè)計(jì)語言,它同時(shí)也是一個(gè)集成開發(fā)工具,提供了軟件代碼自動(dòng)生成和可視化的資源編輯功能。在使用Visual C++開發(fā)應(yīng)用程序的過程中,系統(tǒng)為我們生成了大量的各種類型的文件。
擴(kuò)展名為dsw的文件類型,這種類型的文件在VC中是級(jí)別最高的,稱為Workspace文件。在VC中,應(yīng)用程序是以Project的形式存在的,Project文件以.dsp擴(kuò)展名,在Workspace文件中可以包含多個(gè)Project,由Workspace文件對(duì)它們進(jìn)行統(tǒng)一的協(xié)調(diào)和管理。與dsw類型的Workspace文件相配合的一個(gè)重要的文件類型是以opt為擴(kuò)展名的文件,這個(gè)文件中包含的是在Workspace文件中要用到的本地計(jì)算機(jī)的有關(guān)配置信息,所以這個(gè)文件不能在不同的計(jì)算機(jī)上共享,當(dāng)我們打開一個(gè)Workspace文件時(shí),如果系統(tǒng)找不到需要的opt類型文件,就會(huì)自動(dòng)地創(chuàng)建一個(gè)與之配合的包含本地計(jì)算機(jī)信息的opt文件。
1.3 MapGIS開發(fā)類庫
MapGIS軟件提供了完備的二次開發(fā)函數(shù)庫及類庫,具有強(qiáng)大的二次開發(fā)功能。它具有開放性、多層次、全功能、高效率的特點(diǎn),并支持VC++、VB、Delphi等集成開發(fā)環(huán)境。用戶可在MapGIS平臺(tái)上,開發(fā)面向各自領(lǐng)域的應(yīng)用程序。目前,MapGIS二次開發(fā)庫主要提供API函數(shù)、ActiveX控件、MFC類庫等三種方式[3]。
MapGIS二次開發(fā)函數(shù)采用匈牙利命名法,即動(dòng)賓結(jié)構(gòu)命名法,并且所有函數(shù)都以下橫線開始,以便和Windows函數(shù)以及其他語言函數(shù)明顯區(qū)別開來,如_GetLin 表示取線實(shí)體。MapGIS動(dòng)態(tài)函數(shù)庫提供了從最基本數(shù)據(jù)單元的讀取,保存,更新和維護(hù)到MapGIS地圖庫的建立和漫游,以及空間分析,圖象處理等一系列功能,MapGIS應(yīng)用程序可以根據(jù)需要在任何層次上進(jìn)行開發(fā)。除了API函數(shù)外,MapGIS還為基于MFC(Microsft Foundation Class)的開發(fā)者提供多個(gè)可重用基類,將應(yīng)用程序所需的常見基本功能作了封裝,使用便利,改動(dòng)靈活。
2總體結(jié)構(gòu)圖
基于MapGIS開發(fā)鉆孔柱狀圖總體結(jié)構(gòu)圖如下所示:
圖1 基于MapGIS開發(fā)鉆孔柱狀圖總體結(jié)構(gòu)圖
3 模塊開發(fā)
3.1 礦區(qū)操作
礦區(qū)操作可分為:新建礦區(qū)、追加礦區(qū)、刪除礦區(qū)、清理系統(tǒng)庫與系統(tǒng)數(shù)據(jù)導(dǎo)入等幾大部分。程序要實(shí)現(xiàn)的具體功能如下:
(1)新建礦區(qū)
對(duì)于一個(gè)新的礦區(qū),首先必須新建礦區(qū)。點(diǎn)擊“礦區(qū)操作新建礦區(qū)”。其中礦區(qū)名稱、礦區(qū)代碼及基本分析數(shù)為必填項(xiàng)。上述信息輸入完后,關(guān)閉“新建礦區(qū)”窗口,點(diǎn)擊“瀏覽礦區(qū)”時(shí),在列表中就可以看到了。
(2)追加礦區(qū)
追加礦區(qū)可以根據(jù)系統(tǒng)目前礦區(qū)代碼編號(hào)情況,重新賦予備份礦區(qū)新的礦區(qū)代碼。
(3)刪除礦區(qū)
打開刪除礦區(qū)界面,單擊下一礦區(qū)到所選擇礦區(qū)。點(diǎn)擊刪除按鈕,即刪除當(dāng)前所選頁面的礦區(qū)的全部數(shù)據(jù)(不會(huì)有刪除提示)。
(4)清理系統(tǒng)庫
置空數(shù)據(jù)庫,數(shù)據(jù)庫內(nèi)的所有記錄將全被刪除。
(5)系統(tǒng)數(shù)據(jù)導(dǎo)入
打開礦區(qū)操作菜單,點(diǎn)擊數(shù)據(jù)導(dǎo)入,進(jìn)入系統(tǒng)數(shù)據(jù)導(dǎo)入子界面。其中礦區(qū)原代碼為系統(tǒng)下礦區(qū)目錄名,礦區(qū)新代碼為本系統(tǒng)下的礦區(qū)代碼。
礦區(qū)操作部分代碼如下:
BOOL CMyPrjEditDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
m_Prj = _PRJCreateProject();
if(m_Prj)
{
SetPathName(m_Prj->FileName,FALSE);
}
else
return FALSE;
return TRUE;
}
void CMyPrjEditDoc::OnCloseDocument()
{
CDocument::OnCloseDocument();
}
3.2 鉆孔地質(zhì)編錄
柱狀圖功能包括數(shù)據(jù)采集(鉆孔地質(zhì)編錄)和柱狀圖繪制兩部分,數(shù)據(jù)采集是利用EXCEL數(shù)據(jù)作為存儲(chǔ)體。數(shù)據(jù)庫數(shù)據(jù)錄入必需在本程序里面打開,不然可能造成不可預(yù)料的錯(cuò)誤。
鉆孔地質(zhì)編錄部分代碼如下:
CString ExcelFilePathName;
_Application objApp;
Workbooks objBooks;
_Workbook objBook;
Worksheets objSheets;
_Worksheet objSheet;
Range objRange,usedRange;
LPDISPATCH lpDisp;
COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
VARIANT ret;
CString cstr="";
if(!objApp.CreateDispatch("Excel.Application"))
{
AfxMessageBox("無法啟動(dòng)Excel服務(wù)器!");
return;
}
GetDlgItem(IDC_eName)->GetWindowText(ExcelFilePathName);
objBooks.AttachDispatch(objApp.GetWorkbooks());
3.3 花紋庫建立
花紋庫是需要數(shù)據(jù)庫表中的圖案號(hào)和MapGis圖案庫中的圖案號(hào)對(duì)應(yīng)的[4]。
花紋庫部分代碼如下:
if(cstr2.Compare(str8)==0)
{ index00[0]=row;index00[1]=2;
sa.GetElement(index00, &val00);
str3=(CString)val00.bstrVal;
break;
}
usedRange.ReleaseDispatch();
objRange.ReleaseDispatch();
objSheet.ReleaseDispatch();
objSheets.ReleaseDispatch();
objBook.ReleaseDispatch();
objBooks.ReleaseDispatch();
3.4 數(shù)據(jù)庫邏輯檢查
數(shù)據(jù)庫邏輯檢查主要是檢查實(shí)體之間的空間對(duì)應(yīng)與拓?fù)潢P(guān)系,實(shí)現(xiàn)的部分代碼如下:
if(prj==NULL) return;
D_RECT mapRect;
double pagewid,pagehei,transx,transy;
_PRJGetRange(prj,&mapRect);
_PRJAutoSetPrnParamByScale(mapRect,XX,YY,0,0,&pagewid,&pagehei,&transx,&transy);
prj->Prj_Head.TranX = transx;
prj->Prj_Head.TranY = transy;
prj->Prj_Head.ScaleX =XX;
prj->Prj_Head.ScaleY =YY;
4 鉆孔柱狀圖生成
鉆孔柱狀圖自動(dòng)生成步驟如下:
(1)新建礦區(qū)。這個(gè)完成后會(huì)在“數(shù)據(jù)采集”菜單下的“礦區(qū)信息”查看。
(2)鉆孔地質(zhì)數(shù)據(jù)錄入。
(3)填寫剖面信息:需要填寫剖面基本信息和剖面樁號(hào)信息。
(4)填寫測井?dāng)?shù)據(jù)。
(5)編輯花紋庫。
(6)數(shù)據(jù)邏輯檢查。數(shù)據(jù)完成后需要數(shù)據(jù)邏輯檢查。
(7)參數(shù)設(shè)置。
(8)鉆孔柱狀圖自動(dòng)生成。
5 小 結(jié)
本文利用了MapGIS軟件二次開發(fā)類庫結(jié)合VC++快速實(shí)現(xiàn)了圖形與屬性的互查等GIS功能,使得生成的圖形更好地符合了編輯報(bào)告的需求,同時(shí)也為其它地
質(zhì)礦產(chǎn)圖件的自動(dòng)生成做好了準(zhǔn)備工作。
實(shí)踐證明,程序運(yùn)行穩(wěn)定,生成圖形美觀協(xié)調(diào)。由于MapGIS在地質(zhì)及相關(guān)行業(yè)得到了廣泛的應(yīng)用,所以該系統(tǒng)在地質(zhì)勘探、金屬礦產(chǎn)勘查與地質(zhì)找礦等領(lǐng)域具有廣闊的應(yīng)用前景。
參考文獻(xiàn)
[1] 張生偉.鉆孔信息管理和柱狀圖成圖方法的改進(jìn)研究[D].武漢:中國地質(zhì)大學(xué),2009.
[2] 魏蓮,卞州罡,盧建杰,等.基于MAPGIS的柱狀圖系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J]地球科學(xué)一中國地質(zhì)大學(xué)學(xué)報(bào)。2006,31(5):743—746.
[3] 中地軟件叢書編委會(huì).MapGIS二次開發(fā)培訓(xùn)教程(c++版)[M].武漢:中地公司,2001.
[4] 楊榮新.露天采礦學(xué)(下冊(cè)).第一版[M],徐州:中國礦業(yè)學(xué)院出版社,1986.