刘俊长,龚红蕾,陈军威,刘军恒
(河北省地球物理勘查院,河北 廊坊 065000)
基于MapGIS组件技术实现化探异常参数的计算
刘俊长,龚红蕾,陈军威,刘军恒
(河北省地球物理勘查院,河北 廊坊 065000)
在Visual Basic环境中编写一个求化探异常参数的程序,程序首先运用MapGIS组件(COM)技术,构造了含有元素分析数据的点工作区,然后读入MapGIS异常区文件(.wp)。通过点对区的相交分析,提取出异常数据,进而对数据进行计算,求得异常参数。程序结果输出到EXCEL工作表中,非常实用。
Visual Basic;MapGIS;组件;化探异常参数;计算
新一轮的区域化探数据更新及各省矿调工作,获得了大量的地球化学异常,其中一项重要的工作就是化探异常登记。异常的登记工作包括计算一系列的异常参数,主要有各元素的异常面积、最高值、平均值、衬度、规模、浓度分带数目等。相对于区域化探中的大量异常,此项工作是一项细致而繁琐的工作,国内、外目前都是从数据图上利用手工逐点输入元素的异常数据,从异常图上得到面积,然后求取各项参数。手工方法费时费力,且易出错。作者在本文中利用MapGIS组件技术,在Visual Basic环境下开发出一个化探异常参数的计算程序,该程序能够自动获得异常数据和异常面积。程序只需输入EXCEL原始数据文件和Map-GIS异常区文件,即可输出各元素的化探异常参数,输出结果保存在EXCEL中。
MapGIS是地质行业使用最广泛的GIS平台[1、2],作为一款优秀的 GIS软件,提供了完备的数字制图、数据库管理及空间分析等功能[3]。为了使用户更方便地使用这一空间信息管理系统,MapGIS还提供了二次开发功能,其中,基于组件技术的二次开发可以很好地引入Visual Basic开发环境中。
1.1MapGIS组件介绍
组件技术,即是组件对象模型(Component Object Model,缩写COM),是对对象及其数据和方法的封装,是使软件生产更加符合人类的行为方式而研发的一种新的软件开发技术。组件有自己的属性和方法,属性是组件对象数据的特性,方法则是组件对象的行为。在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。
MAPGIS以组件的方式提供了完善的GIS功能,包含在若干动态链接库(DLL)和ActiveX控件(OCX)文件中[4、5],具体如下:
基础组件文件:MapGisBasCom1.dll
基础控件文件:MapGisBasCtl.dll、MapGis-BasCtl1.dll、MapGisBasCtl2.dll
图形显示组件文件:MapGisDspCom.dll图层管理组件文件:MapGisLayerCom.dll
地图、图例管理组件文件:MapGisMapCom.dll图库管理组件文件:MapGisDBSCom.dll
图像分析管理组件文件:MapGisRasterCom.dll图形编辑控件文件:EditView.ocx工程管理控件文件:MapTree.ocx
属性编辑控件文件:AttStruEdit.ocx
属性结构编辑控件文件:GisAttEdit.ocx
(1)运行 MapGIS二次开发包中的setup.exe,或是对需要的组件进行注册:Windows开始菜单->运行:regsvr32C∶\mapgis67\program\MapGisBasCom1.dll,此处假设使用 MapGisBas-Com1.dll组件,并且组件位于C∶\mapgis67\program\中。
(2)在项目中嵌入 MAPGIS对象类型库[4、5],即从Visual Basic的Project(工程)菜单中选择References(引用),当References对话框出现后,选中复选框中所需的类型库,如MapGisBasCom1 1.0Type Library。
(3)声明和为对象分配内存空间,例如:
Dim PntObj As PntArea ’声明点工作区对象变量PntObj
Set PntObj=New PntArea ’为PntObj分配内存空间
(4)使用对象的方法、属性。
例如,取点工作区中点对象的数目:
Dim n As long ’声明一个长整型变量n
n=PntObj.count ’取点工作区中点对象的数目
目前,在试验室化探分析数据多是以EXCEL电子表格形式提供给地勘单位,因此在Visual Basic直接使用EXCEL电子表格,可省去数据格式的转换,使用也非常方便。
在 Visual Basic中使用EXCEL方法[6、7]如下:
(1)在Visual Basic中引用EXCEL类型库Microsoft Excel 11.0Object library。方法与引用MapGisBasCom1 1.0Type Library相似。
(2)声明与创建EXCEL应用程序对象、工作薄对象、工作表对象。
Dim MyApp As Excel.Application ’定义应用程序类
Dim MyBook As Excel.Workbook ’定义工件簿类
Dim Mysheet As Excel.Worksheet ’定义工作表类
Set MyApp= CreateObject(“Excel.Application”) ’创建EXCEL应用对象
Set My Book= My App.Workbooks.Open(dataxls) ’打开EXCEL工作簿,dataxls为工作薄文件
Set Mysheet= MyBook.Worksheets(1)’打开EXCEL工作表
(3)在程序中引用工作表单元。
Dim x
x=Mysheet.Cells(1,2) ’把工作表中第1行第2列单元中的数据赋给x
程序首先创建一个 MapGIS点工作区[8]PntObj,依着EXCEL工作表所提供的数据形式构造点工作区属性结构。逐点读入EXCEL工作表数据,依据横坐标(x)、纵坐标(y),向点工作区PntObj添加点对象xy;依着该点的元素含量构造属性数据Myrecord,并把属性数据添加到点工作区PntObj。依次读完EXCEL工作表中所有数据后,按上述方法,构造包含属性数据的点工作区PntObj。
接下来建立一个MapGIS区工作区RegObj,读入MapGIS异常区文件,该文件与MapGIS点工作区PntObj进行点对区的相交分析[9~11]。相交分析完成后又形成一个点工作区PntObj2,该工作区仅包含异常点位的空间及属性数据。
以点工作区PntObj2的属性数据为基础,求取各异常的相关参数,最后把结果输出到EXCEL工作表中。
算法流程见下页图1。
(1)构造点属性结构。
声明属性字段信息结构对象fldinf:
Dim fldinf As New Field_Head
构造需添加的字段信息,其中Mysheet是原始数据的EXCEL表对象:
fldinf.fieldname= Mysheet.Cells(1,i)’EXCEL表中第一行为字段的名称
fldinf.fieldtype= gisDOUBLE_TYPE’元素含量定义为双精度型
fldinf.point_leng=3 ’小数点后3位数据
fldinf.msk_leng=15 ’数据长为15
fldinf.edit_enable=1 ’可编辑
fldinf.ptc_pos= -1 ’字段序号
向点工作区添加字段:
flag=pntObj.att.stru.AppendField(fldinf)’flag为TRUE则成功
(2)添加一个二维点。
图1 算法流程图Fig.1 Algorithm flow chart
lRes=pntObj.Append(xy,“”,PntInfo)’xy为一个点对象D_Dot,lRes为点号
(3)构造和添加属性数据。
Dim Myrecord As Rcord’声明属性记录对象
For i=0To m-1
Myrecord.Value(i+1)= Mysheet.Cells(k,i) ’给第k点的第i个元素记录赋值
Next i
flag=pntObj.att.Write(k,Myrecord)
’写第k条记录到工作区,flag为TRUE则成功
(4)加载异常区文件。
Dim RegObj As New RegArea ’声明并创建区工作区对象
rtl=regObj.Load(ycfile) ’ycfile为异常区文件,rtl为TRUE则成功
(5)点对区的空间相交分析。
Dim AnaObj As New Analysis ’声明并创建分析对象
r=0.01 ’模糊结点半径
Op=gisOVLY_INTER ’迭加操作类型为点对区相交分析
rtl= anaObj.OverlayPntReg(pntObj,regObj,pntObj2,r,Op) ’点对区的分析,结果在pntobj2中,rtl为TRUE则成功
(6)异常参数求取。
异常面积从MapGIS区工作区读取,并把单位换算为平方公里;
Dim Myrecord2As Record
Dim Myregatt As RegAtt
flag= myregatt.Get(i,myrecord2) ’得到第i点的属性记录数据
s= myrecord2.Item(2).Value ’读面积
s=s/1000000 ’把单位换算为平方公里
异常浓度分带数的求取:
fendai=Log(max/xiaxian)/Log(2)+1’max为异常范围内某元素的最大值,xiaxian为异常下限
Ifendai=Int(fendai) ’将fendai截尾取整即为异常浓度分带数
其它参数如最大值、平均值、衬度(平均值/异常下限)、规模(面积×衬度)等实现较为简单,此略。
(1)原始数据。原始数据存放在EXCEL工作薄的第一个工作表中,数据格式如下。
第一行为字段名:横坐标,纵坐标,元素1、元素2、……、元素m
第二行为异常下限:空,空,元素1、元素2、……、元素m
以下各行为相应字段的数据,其中横坐标和纵坐标的单位为米。
(2)异常区文件。由MapGIS的空间分析模块形成,仅包含由异常下限围成的区域,不需内部分带情况。制作该文件时,横坐标和纵坐标的单位也为米,以使和点工作区的单位一致。另外,还需要在MapGIS制图模块中修改该文件的属性结构,在最后添加一个YCH字段,为双精度型,存储异常号。子异常用小数表示,如12.1、12.2分别表示第12号异常的1号子异常和2号子异常。
该程序界面非常简洁(见图2),操作也非常简单。
(1)点击“计算”按钮,开始计算,见图2。
图2 程序界面Fig.2 Program interface
(2)弹出对话框,提示“打开原始数据工作薄”,打开原始数据EXCEL文件。
(3)依次提示“开始 XX元素的计算!”,见图3。点击“确定”,弹出“打开XX元素异常区文件”对话框,打开异常区文件,开始计算。
图3 开始Ag元素的计算Fig.3Starts the Ag element computation
(4)在所有元素计算完成后,程序弹出EXCEL界面,显示各元素以及各个异常的计算结果。
图4是河北省1∶200 000围场幅Ag、Al2O3、As、Au的计算输出结果。
程序运用MapGIS组件技术,在Visual Basic中,作者首先构造了含有元素分析数据的点工作区,然后读入MapGIS异常区文件。通过点对区的相交分析,提取出异常数据,进而对数据进行计算,求得异常参数。该程序解决了繁琐的人工挑选,并输入异常数据的工作,计算准确。对于大面积的区域化探工作,可节省大量的人力物力,非常实用。
[1] 刘俊长,龚红蕾,刘军恒,等.基于 MapGIS的彩色平剖图的自动绘制[J].物探与化探,2009,33(5):592.
[2] 刘俊长,龚红蕾,张玉领,等.用MapGis实现区域化探数据的空间分析[J].物探与化探,2008,32(6):690.
[3] 中地软件丛书编委会.MAPGIS地理信息系统参考手册[M].武汉:武汉大学出版社,2002.
[4] 武汉中地信息工程有限公司,北京中地时代软件工程有限公司.MAPGIS组件开发手册[M].武汉:武汉大学出版社,2002.
[5] 刘英才,王宏生,李景春.基于MapGIS组件技术实现地理信息系统的鹰眼功能[J].地质与资源,2009,18(1):77.
[6] 张强,刘飚.Excel 2007与VBA编程从入门到精通[M].北京:电子工业出版社,2007.
[7] 杨本伦.Visual Basic开发技术大全[M].北京:清华大学出版社,2010.
[8] 武汉中地数码科技有限公司,北京中地时代软件工程有限公司.MAPGIS二次开发培训教程(VB)[M].武汉:武汉大学出版社,2004.
[9] 吴信才.MAPGIS地理信息系统[M].北京:电子工业出版社,2004.
[10]王家耀.空间信息系统原理[M].北京:科学出版社,2001.
[11]郭仁忠.空间分析[M].武汉:武汉测绘科技大学出版社,1997.
图4 输出结果Fig.4 Output result
TP 317.4
A
1001—1749(2012)01—0112—04
2011-06-13 改回日期:2011-09-07
刘俊长(1963-),男,本科,高极工程师,从事地质矿产,地球物理地球化学勘查工作。