陈海飞,王 旗,吴海峰,洪 涛,方 涛,曾 成,王日平
(江西省核工业地质局二六四大队,江西 赣州 341000)
实测地质剖面作为地质工作中常用和必要手段,剖面成图涉及大量的数据换算和图表绘制,如何批量处理原始数据,提取成果数据绘制图件,同时保证数据准确、过程高效、易于维护,是本文思考的问题。可以利用数字地质调查系统(DGSS),但不利于批量操作和维护。Microsoft Excel作为图表处理软件,具有强大的数据处理能力和二次开发能力。应用软件编程,将实测地质剖面导线、分析信息表格化,经过自动化处理转换为成果数据,再通过程序处理转换为投图数据,最后利用Section投图生成Mapgis点线文件,绘制剖面地形线、分层界线和导线。
实测剖面图由导线图(水平面)和地形剖面图(垂直面)两部分组成,导线图反映剖面测量路线变化情况,地形剖面图反映地质综合情况[1]。绘图目的是通过在不同图面确定导线、分层位置,表达地质体空间关系。
已知剖面总方位角(成图方位角)α0、导线起点平面直角坐标(X0、Y0、H0)、导线参数(方位角P、斜距L、坡度β)和导线上分层位置斜距Lfc,导线终点坐标(X、Y、H)计算公式如下:
X=X0+cosP×cosβ×L,Y=Y0+sinP×cosβ×L,
H=H0+sinβ×L
分层点坐标(Xfc、Yfc、Hfc)计算公式如下:
Xfc=X0+cosP×cosβ×Lfc,
Yfc=Y0+sinP×cosβ×Lfc,Hfc=H0+sinβ×Lfc
绘图需要应用到的参数:导线水平距Ls、导线高差△H、累计水平距L1、累计高差H1,导线图上剖面水平距dx、剖面偏移距dy、剖面水平累计Dx和剖面偏移累计Dy,剖面图上剖面水平距px、剖面高差距ph、剖面水平累计Px、剖面高差累计Ph,分层导线段水平距fx、分层导线段高差距fh。需要根据分层斜距(视厚度)Hfc、岩层倾向Q和倾角α,求解导线方向与岩性走向夹角γ、绘图视倾角αs和分层真厚度Hz。各计算公式分别如下:
系统包含记录表录入、记录表完善、剖面计算与分层投图和投影数据Section投图四个部分。系统结构见图1。
图1 系统结构图
界面设计包括Excel工作表、自定义鼠标右键菜单和导线与分层投图对话框三部分。
实测地质剖面记录采用《固体矿产勘查原始地质编录规程》(DZ/T 0078-2015)附表1记录格式。为了便于绘图,Excel工作表增加了相关参数的计算列,由导线、导线图、剖面图、产状、分层、地质描述、样品等列表组成。
自定义菜单为鼠标右键菜单,新增菜单三个,分别为:数据比对、完善记录表和剖面计算分层投图。数据比对菜单包含两表完整比对、比对源数据表、精确匹配、数据排空等子菜单,实现常用的表格数据处理功能。完善记录表菜单包含导线计算、分层位置初始化、地质描述补位置等子菜单,对应完善记录表系统。剖面计算分层投图菜单整合全部的数据处理过程,生成最终投图数据。
导线与分层投图对话框为弹出式对话框,为通过菜单方式调用的窗体,其作用是接收投图的相关参数和设置投图对象,见图2。投剖面图生成剖面数据,投地质图则生成地质平面图数据。
图2 导线与分层投图对话框
设计模块3个,包括菜单开发、功能函数与过程、剖面计算。菜单开发模块加载数据比对程序和导线、剖面计算调用程序。功能函数与过程模块加载的是自定义的常用函数和过程,如反算方位角、两点空间位置、岩层坡向取值、数组删重、数组排序、数组维度等。剖面计算模块为主模块,包含增行补录导线尾数、导线计算、剖面计算分层投图三个程序。
程序编写需要调用工作表、行列、单元格等对象的事件、属性或数据,通过判断语句、循环结构等嵌套,运用数学公式计算。其过程一般是:定义变量→获取原始数据→赋值给数组→数据处理→生成新数组→输出给表单。VBA编程将表单数据赋值给数组,在数组内计算,可以极大的提高运行效率。程序开始和结束前需通过Application.EnableEvents语句先后禁止、允许事件循环触发。
利用Sub过程创建菜单是常用的方式,通过调用CommandBars子集的Controls属性实现[1],如创建“两表完整比对”二级子菜单。其功能通过调用过程实现。
自定义函数与过程是为实现特定功能,将编程中反复使用的数学计算模型或处理流程固化。如此既可以简化编程提高效率,又可以减少报错率。自定义函数通过Function过程实现,自定义过程通过Sub过程实现,需区分输入的数据是使用其数值(ByVal)还是地址(ByRef)。
Excel表加载了Worksheet的SelectionChange和Change事件,表格数据变动则激活。对导线列表前四项(1-4列)和导线分层位置(第24列)数据进行修改,如果是第24列数据变化说明是在录入导线分层位置,则启动增行补录导线尾数程序,自动插入下一行填入数据,确保每导分层结尾米数为导线斜距;否则是导线参数变化,则启动导线计算程序,更新剖面绘图数据。
剖面计算分层投图程序基于完善记录表,对导线、分层、产状和样品原始数据进行处理,可以分解为如下步骤:绘图数据计算、投图数据计算、数据合并和数据输出,具体见图3。其中投剖面图的分层线和产状线按视倾角生成。投图数据合并为新数组,赋值给新建的Excel表。
(1)基础数据录入:打开Excel表将剖面起点坐标、基点号、GPS ID、剖面总方位和导线参数等基础数据录入完成。
(2)完善记录表:更新绘图数据点击鼠标右键完善记录表——导线计算。点击完善记录表——分层位置初始化,可以在导线分层位置列自动填充“0-导线斜距”。然后根据记录表录入分层、地质描述、产状和样品信息。地质描述录入格式:起始位置[换行]岩性名称[换行]描述内容。起始位置格式:起~止导线号#[空格]米数[空格]m,如果米数后为“m处”则指夹层或脉体不参与投图。点击完善记录表——地质描述补位置,可以根据导线分层位置自动添加起始位置行。
图3 剖面计算分层投图程序步骤分解图
图4 导线、分层线、产状投影成图
(3)剖面计算与分层投图:点击鼠标右键剖面计算分层投图,弹出是否继续的对话框,选择“是”。设置导线与分层投图对话框相关参数,然后点击“确定”按钮。计算结果赋值到新Excel工作簿内,默认被选中。
(4)Seciton投图:打开Seciton辅助制图软件,点击文件菜单——新建文件,依次点击1辅助工具菜单——表格数据投影——选择数据投影(Excel)。弹出数据投影对话框,比例尺默认为1000不需要改动,取消绘制点和线闭合,然后点击“确定”。调整图元参数,结果见图4。
图件整饰主要为补充完善地质内容,补充图式要素,形成实测地质剖面成果图。