基于MapGIS开发广西土地整治虚拟防真系统探讨
2019-10-21张妍
张妍
【摘 要】本文叙述了MapGIS开发类库的特点;阐述了虚拟防真技术的应用;讨论了系统开发流程;论述了系统各模块的实现,并给出了部分典型代码;在现阶段具有一定的理论与实践意义。
【关键词】MapGIS;虚拟防真;土地整治
1 MapGIS开发类库
MapGIS是中国地质大学开发的通用工具型地理信息系统软件,MapGIS二次开发库主要以API函数、MFC类库、ActiveX 控件三种方式为主,开发库被封装于若干动态链接库(DLL)中[1]。
API函数在使用方法上与Windows的API函数完全一样,因此是独立于开发工具的。无论您使用VC++、VB还是BC++、Dephi,您在这些工具中如何调用Windows的API函数,您就怎么调用这些二次开发函数好了。MAPGIS类库是为基于MFC(Microsoft Foundation Class)的开发者提供的多个可重用基类,将应用程序所需的常见基本功能作了封装,使用便利,改动灵活。开发者只需从类库派生即可使自己的程序获得从窗口显示控制到图形查询编辑的各项功能。ActiveX 控件是MAPGIS完成组件化改造的成果之一,它们基于COM++模型,使得二次开发更为快捷便利,代码的可复用性更高。
2 虚拟防真技术
虚拟仿真(Virtual Reality):仿真(simulation)技术,或称为模拟技术,就是用一个系统模仿另一个真实系统的技术。虚拟仿真实际上是一种可创建和体验虚拟世界(Virtual World)的计算机系统。此种虚拟世界由计算机生成,可以是现实世界的再现,亦可以是构想中的世界,用户可借助视觉、听觉及触觉等多种传感通道与虚拟世界进行自然的交互。它是以仿真的方式给用户创造一个实时反映实体对象变化与相互作用的三维虚拟世界,并通过头盔显示器(HMD)、数据手套等辅助传感设备,提供用户一个观测与该虚拟世界交互的三维界面,使用户可直接参与并探索仿真对象在所处环境中的作用与变化,产生沉浸感。VR技术是计算机技术、计算机图形学、计算机视觉、视觉生理学、视觉心理学、仿真技术、微电子技术、多媒体技术、信息技术、立体显示技术、传感与测量技术、软件工程、语音识别与合成技术、人机接口技术、网络技术及人工智能技术等多种高新技术集成之结晶。其逼真性和实时交互性为系统仿真技术提供有力的支撑。[2]
3 系统开发
广西土地整治虚拟防真系统开发流程图如下:
图1 廣西土地整治虚拟防真系统开发流程图
4系统实现
4.1地形图三维防真模块
地形图三维防真模块主要是矢量化处理地形图数据,从而获得土地整理项目区域内的高程控制点,通过本模块生成土地整理项目区域内地形图的三维可视化成果图,其典型代码如下:
Range objRange,usedRange; LPDISPATCH lpDisp;
COleVariant VOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
VARIANT ret; CString cstr="";if(!objApp.CreateDispatch("Excel.Application"))
{ AfxMessageBox("无法启动Excel服务器!");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单体图三维防真模块
单体图三维防真模块是根据单体的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规划设计三维防真模块
规划设计三维防真模块将实地拍摄的照片导入系统中,处理地形的真实纹理,生成虚拟可视化成果图,其典型代码如下:
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小 结
本文详细分析了基于MapGIS开发广西土地整治虚拟防真系统的具体过程,实际应用表明,该系统界面友好,易于使用,三维防真效果逼真,在现阶段具有一定的理论与实践意义。
参考文献:
[1]吴信才等.地理信息系统原理与方法.北京:电子工业出版社,2002.
[2]熊亚蒙.数字化教育与虚拟课件的实现:《科技资讯》,2010年第32期:110-113.
(作者单位:广西壮族自治区自然资源调查监测院)