張妍
【摘??要】本文敘述了MapGIS開發(fā)類庫的特點;闡述了虛擬防真技術(shù)的應(yīng)用;討論了系統(tǒng)開發(fā)流程;論述了系統(tǒng)各模塊的實現(xiàn),并給出了部分典型代碼;在現(xiàn)階段具有一定的理論與實踐意義。
【關(guān)鍵詞】MapGIS;虛擬防真;土地整治
1?MapGIS開發(fā)類庫
MapGIS是中國地質(zhì)大學(xué)開發(fā)的通用工具型地理信息系統(tǒng)軟件,MapGIS二次開發(fā)庫主要以API函數(shù)、MFC類庫、ActiveX?控件三種方式為主,開發(fā)庫被封裝于若干動態(tài)鏈接庫(DLL)中[1]。
API函數(shù)在使用方法上與Windows的API函數(shù)完全一樣,因此是獨立于開發(fā)工具的。無論您使用VC++、VB還是BC++、Dephi,您在這些工具中如何調(diào)用Windows的API函數(shù),您就怎么調(diào)用這些二次開發(fā)函數(shù)好了。MAPGIS類庫是為基于MFC(Microsoft?Foundation?Class)的開發(fā)者提供的多個可重用基類,將應(yīng)用程序所需的常見基本功能作了封裝,使用便利,改動靈活。開發(fā)者只需從類庫派生即可使自己的程序獲得從窗口顯示控制到圖形查詢編輯的各項功能。ActiveX?控件是MAPGIS完成組件化改造的成果之一,它們基于COM++模型,使得二次開發(fā)更為快捷便利,代碼的可復(fù)用性更高。
2?虛擬防真技術(shù)
虛擬仿真(Virtual?Reality):仿真(simulation)技術(shù),或稱為模擬技術(shù),就是用一個系統(tǒng)模仿另一個真實系統(tǒng)的技術(shù)。虛擬仿真實際上是一種可創(chuàng)建和體驗虛擬世界(Virtual?World)的計算機系統(tǒng)。此種虛擬世界由計算機生成,可以是現(xiàn)實世界的再現(xiàn),亦可以是構(gòu)想中的世界,用戶可借助視覺、聽覺及觸覺等多種傳感通道與虛擬世界進行自然的交互。它是以仿真的方式給用戶創(chuàng)造一個實時反映實體對象變化與相互作用的三維虛擬世界,并通過頭盔顯示器(HMD)、數(shù)據(jù)手套等輔助傳感設(shè)備,提供用戶一個觀測與該虛擬世界交互的三維界面,使用戶可直接參與并探索仿真對象在所處環(huán)境中的作用與變化,產(chǎn)生沉浸感。VR技術(shù)是計算機技術(shù)、計算機圖形學(xué)、計算機視覺、視覺生理學(xué)、視覺心理學(xué)、仿真技術(shù)、微電子技術(shù)、多媒體技術(shù)、信息技術(shù)、立體顯示技術(shù)、傳感與測量技術(shù)、軟件工程、語音識別與合成技術(shù)、人機接口技術(shù)、網(wǎng)絡(luò)技術(shù)及人工智能技術(shù)等多種高新技術(shù)集成之結(jié)晶。其逼真性和實時交互性為系統(tǒng)仿真技術(shù)提供有力的支撐。[2]
3?系統(tǒng)開發(fā)
廣西土地整治虛擬防真系統(tǒng)開發(fā)流程圖如下:
圖1?廣西土地整治虛擬防真系統(tǒng)開發(fā)流程圖
4系統(tǒng)實現(xiàn)
4.1地形圖三維防真模塊
地形圖三維防真模塊主要是矢量化處理地形圖數(shù)據(jù),從而獲得土地整理項目區(qū)域內(nèi)的高程控制點,通過本模塊生成土地整理項目區(qū)域內(nèi)地形圖的三維可視化成果圖,其典型代碼如下:
Range?objRange,usedRange; LPDISPATCH?lpDisp;
COleVariant?VOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
VARIANT?ret; CString?cstr="";if(!objApp.CreateDispatch("Excel.Application"))
{?AfxMessageBox("無法啟動Excel服務(wù)器!");return;}
GetDlgItem(IDC_eName)->GetWindowText(ExcelFilePathName);
if(ExcelFilePathName.Left(1)=="") {AfxMessageBox("你沒有選擇EXCEL文件!"); return;}? objBooks.AttachDispatch(objApp.GetWorkbooks());
4.2工程布局圖防真模塊
工程布局圖防真模塊主要是從工程布局圖中生成三維可視化成果圖,其典型代碼如下:
objBook?=?objBooks.Open(ExcelFilePathName,VOptional,NULL,VOptional);
objSheets?=?objBook.GetWorksheets();sheet?COleVariant((short)1);COleVariant((short)2);
objBook.AttachDispatch(lpDisp);objSheets.AttachDispatch(objBook.GetWorksheets());
objSheet?=?objSheets.GetItem(COleVariant((short)1));
usedRange.AttachDispatch(objSheet.GetUsedRange());
4.3單體圖三維防真模塊
單體圖三維防真模塊是根據(jù)單體的CAD圖在模塊中生成虛擬可視化成果圖,其典型代碼如下:
index[0]=row;index[1]=1;sa.GetElement(index,&val);switch(val.vt)
{case?VT_R8:{?cstr2.Format("%f",val.dblVal);break;}
case?VT_BSTR:{cstr2=(CString)val.bstrVal;break;}
case?VT_EMPTY:break;}?memset(dat1,0,256);sprintf(dat1,"%s",cstr2);
4.4規(guī)劃設(shè)計三維防真模塊
規(guī)劃設(shè)計三維防真模塊將實地拍攝的照片導(dǎo)入系統(tǒng)中,處理地形的真實紋理,生成虛擬可視化成果圖,其典型代碼如下:
objRange.AttachDispatch(usedRange.GetRows());long?iRowNum=objRange.GetCount();
objRange.AttachDispatch(usedRange.GetColumns());
long?iColumnNum=objRange.GetCount();
objRange?=?objSheet.GetRange(COleVariant("A1"),COleVariant("C1000"));
ret?=?objRange.GetValue(VOptional); COleSafeArray?sa(ret);
5小?結(jié)
本文詳細分析了基于MapGIS開發(fā)廣西土地整治虛擬防真系統(tǒng)的具體過程,實際應(yīng)用表明,該系統(tǒng)界面友好,易于使用,三維防真效果逼真,在現(xiàn)階段具有一定的理論與實踐意義。
參考文獻:
[1]吳信才等.地理信息系統(tǒng)原理與方法.北京:電子工業(yè)出版社,2002.
[2]熊亞蒙.數(shù)字化教育與虛擬課件的實現(xiàn):《科技資訊》,2010年第32期:110-113.
(作者單位:廣西壯族自治區(qū)自然資源調(diào)查監(jiān)測院)