基于MapGIS组件技术批量绘制多元素化探剖面图
龚红蕾, 张仲猛, 师淑娟, 刘俊长, 张亚东
河北省地球物理勘查院,河北 廊坊 065000

作者简介: 龚红蕾(1966-),女,大专,工程师,从事地质、地球物理、地球化学勘查工作。E-mail:ljunzhang@sina.com

摘要

利用MapGIS组件技术,通过可视化语言Visual Basic编程完成了多元素化探剖面图的制作。利用此程序绘制几十条多元素剖面的数百条曲线费时仅几分钟,每条剖面均形成一个点(.wt)和线(.wl)文件,效率大为提高。

关键词: MapGIS; 组件技术; 多元素; 剖面图; 批量绘制
中图分类号:P632 文献标志码:A 文章编号:1000-8918(2016)06-1222-05 doi: 10.11720/wtyht.2016.6.26
The key technology and implementation of batch drawing multielements geochemical profile map based on MapGIS component technology
GONG Hong-Lei, ZHANG Zhong-Meng, SHI Shu-Juan, LIU Jun-Zhang, ZHANG Ya-Dong
Hebei Institute of Geophysical Exploration, LangFang 065000, China
Abstract

On the basis of MapGIS component technology, the Visual Basic programming multielement geochemical profile map can be drawn quickly. With this program, hundreds of multielement profile curves are drawn in a few minutes, and each profile could form a point file and a line file. Therefore, the efficiency is greatly improved.

Keyword: MapGIS; component technology; multielements; profile map; batch drawing

在矿产地质调查及各类物化探异常查证工作中, 化探剖面是最常用的技术手段之一。一个勘查项目往往要完成几十条化探剖面, 每个剖面上一般都有十几种元素, 因此需制作的元素剖面曲线多达数百条。以往工作中化探剖面图主要是利用美国Golden公司的Grapher绘图软件制作, 该软件是一款非常优秀的剖面图制作软件, 广泛应用于各个科技领域。一个地区的化探剖面很多参数是相同的, 比如同种元素每厘米代表的元素含量值、XY轴刻度、曲线颜色和线型等, 通常会将一组共生元素绘制在一条剖面上, 采用Grapher制作时都要一一输入, 影响工作效率。另外由于地勘单位在完成图件制作后, 为了进行资料汇交或与其他成果进行套合对比, 通常还要将Grapher格式的文件转换成MapGIS格式。而Grapher不能直接转换为MapGIS格式, 需先转换成AutoCAD的DXF文件, 再转换成MapGIS文件[1], 操作较繁琐。笔者利用MapGIS组件技术, 通过可视化语言Visual Basic编程完成了多元素化探剖面图的制作。生产实践表明, 利用此程序绘制几十条多元素剖面的数百条曲线费时仅几分钟, 效率大为提高。本程序也可应用于重磁、激电等物化探综合剖面图的制作。

1 开发环境的搭建

考虑到目前化探样品试验室测试结果都以Excel电子表格形式提供给用户, 因此本程序将直接读取Excel电子表格。通过在Visual Basic中引用MapGIS的组件[2, 3, 4] MapGIS BasCom1 1.0 Type Library, 调用MapGIS制图功能, 实现Visual Basic编程使用Excel电子表格, 并绘制化探元素剖面图。步骤如下:

1) 从Visual Basic的Project(工程)菜单中选择References(引用), 选中复选框中的MapGIS BasCom1 1.0 Type Library和Microsoft Excel 11.0 Object Library类型库[5, 6, 7]

2) 声明和创建对象, 如:

Dim appexcel As Object '声明Excel应用程序对象

Dim datebook As Object '声明原始数据工作簿对象

Dim datesheet As Object '声明原始数据工作表对象

Dim pntObj As New PntArea '声明和创建MapGIS点工作区

Dim PntInfo As New Pnt_Info '声明和创建MapGIS点信息对象

Dim linObj As New LinArea '声明和创建MapGIS线工作区

Dim LinInfo As New Lin_Info '声明和创建MapGIS线信息对象

Set appexcel = CreateObject(″excel.application″) '创建Excel应用程序对象

Set datebook = appexcel.Workbooks.Open(ysfile) '打开原始数据工作簿ysfile

Worksheets(1).Activate '设置当前表为第一张表

Set datesheet = ActiveCell.CurrentRegion.Cells '设置datesheet

3) 使用对象。如取点工作区中点对象的数目, 读Excel的一个单元:

Dim n As Long '声明一个长整型变量n

Dim x As Double '声明一个双精度型变量x

n=PntObj.count '取点工作区中点对象的数目

x=datesheet.Cells(i, j) '取Excel表中第ij列的数据

2 基本算法及主要实现

首先读取原始数据及绘制参数文件, 然后分别绘制XY轴及刻度, 绘制曲线, 并通过两个循环实现多元素多剖面的绘制, 流程见图1。程序中根据给定的“ 分组” 值, 自动把曲线绘制在相应的元素组中。

2.1 绘图参数的设计

将本程序的主要绘制参数保存在一个Excel电子表格中, 图2是存放格式的一个实例, 可根据具体情况进行调整。程序开始时将此表读入数组, 以供需要时自动调用相关的绘制参数。表中“ 单位” 是绘Y轴时标注的元素含量单位; “ 分组” 是根据元素的共生组合情况给每一个XY剖面内所包含元素的分组号, 一个组内包含元素一般不超过5个, 太多将影响观察效果。本表中14个元素共分3组:Au、Ag、Cu、Pb、Zn, Cd、As、Sb、Hg及Mn、Bi、W、Mo、Sn, 绘制时同一组元素共用一对XY轴, 其中第一组绘制在最下面, 第二组位于第一组之上, 以此类推。“ 数据间隔” 是Y轴方向每厘米代表的元素含量; “ 元素颜色” 是元素的曲线、Y轴刻度符号、Y轴顶部元素及单位符号的MapGIS颜色号; “ 线型” 是元素曲线的MapGIS线型号。

图2 剖面图绘制参数

2.2 X轴的绘制

以(x0, y0)为起点, 按指定比例尺和剖面最大点号绘制水平轴线。

PntInfo.iclr = 1 'X轴刻度标注字符的颜色

posset.Append x0, y0 'posset为点集对象

x=x0+(pend-pstar)* xxishu 'xxishu为与比例尺有关的一个系数

posset.Append x, y0

linObj.Append posset, lininfo_zhou '绘制X轴, lininfo_zhou为轴线参数

绘制X轴时需要处理的是次刻度和主刻度, 程序中安排次刻度线长为1.5 mm、主刻度为2 mm, 在主刻度上标注刻度值。

以下是以次刻度间隔是4、主刻度间隔是20为例的代码。该代码自动处理了开始点号不在主、次刻度上的情况, 通用性强。

kd00 = pstar Mod 4 '刻度间隔为4

If kd00 < > 0 Then

kd00 = pstar + (4 - kd00) '使起始小刻度位置

End If

k = Int((pend - pstar) / 4) '刻度个数

For i = 0 To k

xkd = pstar + i * 4

x = (xkd - pstar) * xxishu + x0

posset.Append x, y0

If xkd Mod 20 = 0 Then '大刻度间隔为20

y = y0 - 2 '大刻度处理, 刻度长2mm

ppos.x = x - 4

ppos.y = y - 4

strkd = Str(xkd) '刻度符号

lRes = pntObj.Append(ppos, strkd, PntInfo) '标刻度符号

Else

y = y0 - 1.5 '小刻度处理, 刻度长1.5mm

End If

posset.Append x, y

linObj.Append posset, lininfo_zhou

posset.RemoveAll

Next i

2.3 Y轴的绘制

以(x0, y0)为起点, 按指定高度绘制竖直轴线。

posset.Append x0, y0

y = 60 + y0 'y轴高度为6cm

posset.Append x0, y

linObj.Append posset, lininfo_zhou

Y轴刻度以0开始, 主、此刻度均按元素含量以固定间隔绘制, 处理较为简单, 代码可参考X轴。

由于每一个XY轴剖面内要绘制多个元素, 每一元素的含量间隔又不一致, 所以每绘制一个元素的曲线, 在Y轴位置左移1.2 cm标注该元素的主刻度值, 颜色与剖面曲线元素一致:

ppos.x = x0 - 12 * yuansu(cs(1, j)) '每一元素右偏移12mm写含量值

For i = 0 To 6 '6个数据间隔

ppos.y = 10 * i - 1 + y0

mak = i * yxishu * 10

strkd = Str(mak)

PntInfo.iclr = cs(3, j) '字符颜色

lRes = pntObj.Append(ppos, strkd, PntInfo)

Next i

ppos.y = ppos.y + 3 '元素符号及单位

strkd = csstr(1, j) + csstr(2, j) '元素符号及单位

lRes = pntObj.Append(ppos, strkd, PntInfo) '写元素符号及单位

2.4 绘制曲线

按给定的X轴比例尺及Y轴数据间隔绘制:

LinInfo.lclr = llincol '设置曲线的MapGIS颜色

LinInfo.ltp = llintpy '设置曲线的MapGIS线型

LinInfo.layer = llinceng '设置曲线的MapGIS图层

For p = rrown To nn '从数据表第rrown行开始

xx = datesheet.Cells(p, llx) '第llx列为剖面的点号

yy = datesheet.Cells(p, lly) '第lly列为剖面的某元素的含量

xx = (xx - ppstar) * xxxishu + xx0

yy = yy / yyxishu + yy0

posset.Append xx, yy

Next p

linObj.Append posset, LinInfo

3 程序使用
3.1 数据准备

1) 参数:按图2的格式进行准备, 输入每个元素的单位、分组、数据间隔、颜色、线型。此表为Excel文件, 元素排列顺序要与原始数据文件一致。

2) 原始数据:原始数据存放在Excel工作薄的第一个工作表中, 数据格式如下:

第一行为字段名:剖面号、点号、元素1、元素2、……、元素m;

以下各行为相应字段的数据, 剖面号、点号均为整型数, 所有剖面数据放在一个Excel文件中。文件在使用前先对元素数据进行重新排序, 排序方式为主关键字为剖面号, 升序; 次关键字为点号, 升序。

3.2 程序使用

程序界面如图3所示。按界面提示输入比例尺分母和剖面条数, 本程序默认X轴次刻度间隔为40 m, 主刻度间隔为200 m; 默认Y轴长度为6 cm, 元素组间间隔为2 cm; 默认作图起点为(0, 0)。如需改动请输入相应的值, 输入完后按绘制按钮。

图3 程序运行界面

依次选择“ 打开原始数据文件” 和“ 打开剖面参数文件” 按钮, 选择剖面数据文件和绘制参数文件。点击“ 绘制” 按钮, 程序运行至结束。绘制结果自动保存在原始数据文件目录中, 不同剖面文件以原始数据表中的剖面号区分。

4 应用实例

图4是河北省北部坝上地区某工区的计算实例。该区为第四系覆盖, 地势平缓, 覆盖层厚度一般在几米至20 m之间。区内偶有露头为新太古界红旗营子群地层, 岩性主要有浅粒岩、黑云斜长片麻岩等。20世纪80年代1:20万区域化探发现Au、Ag、Pb、Zn、Bi等组合异常; 90年代用激电中梯方法进行检查发现低缓激电异常, 走向近东西, 东侧转为北西, 异常宽50~100 m, 长300 m, 视极化率2.5%~2.8%, 强度较低。2013年在该区进行找矿方法试验, 为确定激电异常的矿化特征, 在异常上布置一条南北向化探剖面, 点距40 m, 采用浅层钻取样方法采取基岩面上部风化残留物, 分析元素为Au、Ag、Cu、Pb、Zn、As、Hg、Sb、Cd、W、Sn、Bi、Mo、Mn共14种元素。由本程序绘制的多元素剖面(图4)可见在剖面204点至224点出现明显的Au、As、Cd、Hg、Bi、Mo等异常, 其中Au异常最为明显, 推断异常是以Au为主的矿化引起, 为今后找矿工作提供了依据。

5 结论

利用MapGIS组件技术, 通过引用MapGIS BasCom1 1.0 Type Library, 在Visual Basic中搭建了MapGIS的二次开发环境。在Visual Basic中运用二重循环对每一个剖面每一种元素绘制曲线, 实现了多剖面、多元素地球化学剖面图的绘制。实践证明该程序实用性较强, 可大幅度提高工作效率, 并可有效减少人为因素带来的差错。该程序通过修改参数表也可实现对重、磁、电等多参数曲线的绘制。

The authors have declared that no competing interests exist.

参考文献
[1] 中地软件丛书编委会. MAPGIS地理信息系统参考手册[M]. 武汉: 武汉大学出版社, 2002. [本文引用:1]
[2] 刘俊长, 龚红蕾, 刘军恒, . 基于MapGIS的彩色平剖图的自动绘制[J]. 物探与化探, 2009, 33(5): 592-594. [本文引用:1]
[3] 武汉中地信息工程有限公司, 北京中地时代软件工程有限公司. MAPGIS组件开发手册[M]. 武汉: 武汉大学出版社, 2002. [本文引用:1]
[4] 杨本伦. Visual Basic开发技术大全[M]. 北京: 清华大学出版社, 2010. [本文引用:1]
[5] 刘俊长, 龚红蕾, 陈军威, . 基于MapGis组件技术实现化探异常参数的计算[J]. 物探化探计算技术, 2012, 34(1): 112-115. [本文引用:1]
[6] 龚红蕾, 刘俊长, 师淑娟, . 基于MapGis组件技术实现等值线剖面图极值点的标注[J]. 物探化探计算技术, 2013, 35(5): 624-628. [本文引用:1]
[7] 武汉中地数码科技有限公司, 北京中地时代软件工程有限公司. MAPGIS二次开发培训教程(VB)[M]. 武汉: 武汉大学出版社, 2004. [本文引用:1]
[8] 刘俊长, 龚红蕾, 张玉领, . 用MapGis实现区域化探数据的空间分析[J]. 物探与化探, 2008, 32(6): 690-692. [本文引用:1]
[9] 吴信才. MAPGIS地理信息系统[M]. 北京: 电子工业出版社, 2004. [本文引用:1]
[10] 刘丹, 郑坤, 彭黎辉. 组件技术在GIS系统中的研究与应用[J]. 地球科学, 2002, 27(3): 263-266. [本文引用:1]
[11] 刘长星. 组件式GIS平台及其在行业应用开发中的研究[J]. 测绘技术装备, 2002, 4(3): 43-45. [本文引用:1]
[12] 刘浩军. 航空物探平剖图自动绘制的可视化处理[J]. 物探与化探, 2004, 28(2): 147-149. [本文引用:1]
[13] 陈剑平, 聂淑贞. 基于MAPGIS轴向分带序列软件的二次开发[J]. 物探化探计算技术, 2008, 30(3): 250-254. [本文引用:1]
[14] 高宏伟, 安慧君, 周艳秋, . VB环境下ADO技术在MAPGIS二次开发中的应用[J]. 内蒙古农业大学学报: 自然科学版, 2010, 31(4): 255-258. [本文引用:1]
[15] 廖桂香, 李振辉. MAPGIS二次开发平台下GRD网格法实现渐变色填充剖平图[J]. 物探化探计算技术, 2010, 32(2): 217-221. [本文引用:1]
[16] 郭际元, 曾文. MAPGIS地理信息系统的二次开发[J]. 测绘信息与工程, 2000, 25(1): 16-18. [本文引用:1]