APP下载

基于Surfer和VBA技术的自动化绘制技术研究

2022-09-27贾世俊周鹏李朝辉朱洪潇崔彦岗崔杨洋

地质找矿论丛 2022年3期
关键词:断面图图例绘图

贾世俊,周鹏,李朝辉,朱洪潇,崔彦岗,崔杨洋

(中国冶金地质总局第三地质勘查院,太原 030032)

0 引言

瞬变电磁法又称时间域电磁法(Time domain electromagnetic methods,缩写TEM)因其场源频带宽、分辨率高、操作简单等优点,被广泛应用于金属、石油勘探,水源、地热勘察以及工程地质勘探勘察等领域,应用范围涵盖了地面、地下和海洋,几乎涉及了地球物理探测的各个领域,已成为重要的地球物理探测方法技术之一[1-3]。随着电子技术和计算机技术的快速发展,地球物理勘探仪器的数字化和智能化程度不断提高,瞬变电磁仪器的性能也得到显著的提升。

目前,市场上较为常见的瞬变电磁仪器主要有加拿大GEON-ICS公司的PROTEM系统(包括PROTEM-37,47,57,67等型号)、PHOENIX公司的V6和V8系统、美国ZONGE公司的GDP-32系统、重庆奔腾数控技术研究所的WTEM系统等[4]。主流的瞬变电磁仪器基本都配备了相应的处理解释软件,对采集到的数据进行预处理、反演、输出成图数据[5]。在实际生产应用中,勘探单位常用Surfer软件对上述仪器软件的反演结果进行断面成图和整饰。这一过程基本为参数统一的重复操作,且修改某一参数后所有断面需要重新绘制。尤其在数据量较大的工程项目中断面图件的整饰、修改需要花费大量人力和时间资源。因此,采用计算机完成图件批量绘制和整饰显得尤为需要。本文介绍了一种基于Surfer的数据管理和自动化处理功能,利用VBA技术实现了瞬变电磁法断面图的批量自动化绘制及整饰技术,并就实际应用进行了检验。

1 Surfer和VB技术

1.1 Surfer技术

Surfer是由美国Golden software公司研发的一套功能强大的成图软件,具有强大的插值功能和图件绘制能力,被广泛应用于物探工作中等值线图的绘制[6-8]。Surfer能够使外部程序通过“对象”去“操纵”Surfer程序,提供了一个从外部程序控制Surfer程序的编程接口。Surfer程序的对象为自动化对象(Automation Object),VB等程序语言可以通过使用这些对象的属性(Properties)和方法(Method)实现控制Surfer程序的目的[9]。Surfer采用层次化的方式组织其自动化对象,各对象属性和方法参数可在Surfer程序“help”中获得。

1.2 VBA技术

VBA(Visual Basic for Applications)是基于Visual Basic发展而来的新一代标准宏语言,是微软公司开发的用于Microsoft Office应用程序执行通用自动化(OLE)任务的编程语言。通过VBA技术可以有效地扩展Excel的功能,设计和构建人机交互界面,帮助用户更加高效地完成Excel中公式、函数等基本操作不能完成的任务[10]。

2 程序设计思路

基于Excel的数据管理功能,将多条测线中的瞬变电磁反演数据、测点信息进行排序、筛选、查找匹配并统一数据格式,再利用VBA编程技术按测线输出固定格式的成图数据。

2.1 Excel数据整理

将全区反演成果数据、测量数据、目的层高程信息数据(如煤层底板等高线)等已知数据分别输入Excel表格中sheet1、sheet2、sheet3、……工作表中,以“线号-点号”为统一标识符,利用VLOOKUP函数将各测点数据信息统一到同一数据表中。

VLOOKUP函数的语法规则如下:VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)

各参数说明见表1。

表1 VLOOKUP函数参数特征Table 1 Characteristics of parameters of VLOOKUP function

经匹配后数据格式见表2。其中“#N/A”为VLOOKUP函数所在列匹配结果,当对应“线号-点号”数据存在时显示相应数据,不存在时显示为“#N/A”。

2.2 VBA编程分线输出

以表2数据为基础,采用VBA 编程技术按“线号”分别提取各线数据,并输出为文本格式,并以线号命名。文本数据格式为:

表2 Excel数据整理Table 2 Excel data collation

“X,Y,Z,H,3#,5#,10#”,便于Surfer软件网格化数据。

其中,X为点号;Y为目的层标高;Z为反演电阻率值;H为地表标高;3#,5#,10#分别对应相应煤层的底板标高。

以下为程序分线输出的主要算法:

Do

X=Sheet1.Cells(i, 3)

Y=Sheet1.Cells(i, 7)

Z=Sheet1.Cells(i, 5)

H=Sheet1.Cells(i, 6)

SanM=Sheet1.Cells(i, 8)

WuM=Sheet1.Cells(i, 9)

ShiM=Sheet1.Cells(i, 10)

If Sheet1.Cells(i, 2)=linename Then

sss=X & "," & Y & "," & Z & "," & H & "," & SanM & "," & WuM & "," & ShiM

Print #1, vbCrLf + sss;

Else

Close #1

linename=Sheet1.Cells(i, 2)

……

End If

Loop While Sheet1.Cells(i, 1) <> ""

2.3 VBA编程控制Surfer软件自动化绘图

首先,利用VBA面向对象编程的特点设计图形用户界面(图1),方便使用者输入绘图所需的各

图1 程序图形用户界面Fig.1 Program GUI

类参数[11-19],如工作区名称、盲区深度、绘图比例尺、标注间隔、色标尺寸、滤波次数等参数,添加VBA通用对话框引导用户添加“色标文件”、“数据文件”和“图例文件”路径。

之后,点击“开始绘图”按钮控件进行“单击”事件编程。编程主要实现VBA对Surfer程序的调用、数据文件的导入、网格化、滤波、白化、图件绘制、参数引用设置、色标文件引用、图例文件添加、绘图进度提示以及当前文件下测线文件的遍历绘图,从而实现瞬变电磁法断面图批量自动化绘制。

以下为程序主要功能的代码:

(1)创建Surfer对象。

Set SurferApp=CreateObject("Surfer.Application") “创建Surfer的ActiveX对象”

SurferApp.Visible=False “设置Surfer对象不可见”

Set plot=SurferApp.Documents.Add(1) “添加Surfer绘图窗口”

Set shapes=plot.shapes “创建绘图对象”

(2)数据网格化。

SurferApp.GridData DataFile:=sfilestem$, xCol:=1, yCol:=2,zCol:=3, Algorithm:=2, DupMethod:=2, _NumCols:= (xmax#-xmin#)/(xinc#/2), NumRows:=(xmax#-xmin#)/(xinc#/2), ShowReport:=False, OutGrid:=CSGrd1File$, ymin:=Text3. Text“数据网格化”

其中,DataFile为数据文件;xCol:=1,yCol:=2,zCol:=3分别为网格化数据时X,Y,Z数据所在列;Algorithm为网格化算法;此处的2为克里格法;OutGrid为输出网格文件;ymin为网格最低深度。

(3)网格滤波。

SurferApp.GridFilter InGrid:=CSGrdbFile$, Filter:=9, OutGrid:=CSGrdbFile$

其中,InGrid为输入网格文件;Filter滤波方法;此处的“9”为高斯低通滤波;OutGrid为滤波后输出网格文件。

(4)网格白化。

SurferApp.GridBlank InGrid:=CSGrd1File$, BlankFile:=CSBlnFile$,OutGrid:=CSGrdbFile$

其中,InGrid为输入网格文件;BlankFile为白化文件;OutGrid为白化后输出网格文件。

白化文件由程序根据盲区深度和断面截取深度结合网格数据计算,输出为以线号命名的后缀为“bln”的文件,提取过程主要为获取网格文件边界值和白化范围,并读取相应位置标高。编程以文件读写为主,不作详细论述。此过程同时生成各煤层底板线文件用于等值线图添加煤层底板线。

(5)图件绘制。

Set mapframe=shapes.AddContourMap(CSGrdFile$)“添加等值线图”

Set ContourMap=mapframe.overlays(1)

With ContourMap“设置等值线图各种参数”

Name="InvMod Contour"

Levels.LoadFile (CSLvlFile$)“添加色标文件”

SmoothContours=3

……

With plot.Selection“设置色标尺寸及位置”

Height=Text13.Text

Width=Text14.Text

Left=((mapframe.xmax-mapframe.xmin)/Text6.Text)/2+14

Top=13

DeselectAll

End With

End With

Set basemap=shapes.AddBasemap(ImportFileName:=CSBasFile$)“添加粘贴图,地形线及煤层底板线”

(6)图例文件添加。

采用复制统一图例文件到断面图的方法,图例位置的设置与色标位置类似。主要代码为:

plot.Selection.Copy“复制图例”

shapes.Paste“粘贴图例”

(7)绘图进度提示。

进度提示利用VB控件ProgressBar实现,通过设置绘图过程中ProgressBar的值来显示绘图进度,使用户实时掌握绘图进度。

ProgressBar1.Value=“ ”

(8)测线文件的遍历。

上述过程为完成单幅断面图的过程,为达到批量自动化绘制当前文件夹下所有测线断面图的目的,需要使程序自动遍历当前目录下的所有测线文件,并循环绘图过程。笔者采用了VB中的Dir函数返回当前目录下的指定类型的文件,并用循环语句使绘图过程自动执行,直到完成所有断面图绘制。

3 应用效果

将上述编辑好的程序应用于山西某矿区瞬变电磁勘查项目,该项目瞬变电磁测量面积15.2 km2,资料处理需要绘制断面图600余幅。人工绘图是一个极其耗时费力的工程,且图件修改不方便;采用本程序,成图数据整理、绘图全部实现计算机自动化,图面信息统一,修改方便。

图2为工作区13线瞬变电磁、地质综合剖面图,即为采用本程序绘制,圈出的采空区异常经ZK1301验证,110 m埋深处确为采空。该方法与人工绘图相比效率高,绘图结果可靠,应用效果明显。

图2 ××煤业瞬变电磁13线视电阻率、地质综合剖面Fig.2 Integrated Transicient electromagnetic and geological section of electromagnetic line 13 in a coal industry1.物探推测2#煤层;2.物探推测采空区;3.马兰组黄土;4.二叠系下石盒子组;5.二叠系山西组;6.黄土;7.砂质泥岩;8.砂岩; 9.煤层;10.煤层采空区;11.钻孔及编号

4 结论

(1)基于Surfer和VBA技术的瞬变电磁断面图的自动化绘制技术,利用Surfer和Office公司自带的VBA编程技术进行再次开发,形成的绘制程序界面友好、使用方便、快捷、可操作性强,为后续项目的顺利开展提供了技术支持。

(2)相比手动逐幅绘制,该技术功能贴近野外生产实践需要,图件格式统一,易于统一修改,有效地提高了工作效率,节约了时间及人工成本,具有较大的实践应用价值。

(3)该处理技术还可以应用到其他领域,如绘制气象部门的降雨量等值线图、地球化学领域的污染物扩散浓度图等,应用前景广阔。

猜你喜欢

断面图图例绘图
来自河流的你
“禾下乘凉图”绘图人
机械制图项目课程开发的实践与思考
输电线路纸质断面图数字化方法研究及实现
垂涎三尺
找拼图
找照片
如何让学生巧用图例解决数学问题
《机械制图》教学中断面图的教学探讨
可爱的小鸟