MapGIS与Excel VBA在地物化综合剖面成图中的协同应用
2013-03-12陈小宁王丽君林佳富
陈小宁 王丽君 林佳富
【摘要】本文针对MapGIS明码文件与ExcelVBA在地物化综合剖面成图中的协同应用而展开。首先介绍MapGIS线文件的明码格式,再介绍Excel的自动化语言ExcelVBA自动高效地将原始数据整理并保存为MapGIS线明码文件,在绘制相关曲线的时候,通过相关参数的修改可以对曲线进行任意的组合,以适应实际工作和研究的需要。
【关键词】MapGIS明码文件 ExcelVBA 地物化综合剖面
1问题的提出及解决方法
在工作中,以往地物化综合剖面的绘制往往占用工作人员的大量时间。甚至采用先手绘,然后扫描,再矢量化的方法。工作人员在行业软件中进行了大量的尝试,但当涉及到工作比例尺、成图比例尺、曲线组合等问题的时候,此类软件就不能满足实际需求。
利用ExcelVBA强大的自动化编辑功能,构建MapGIS明码文件,然后将此明码文件转化为MapGIS的线文件,完成图件的绘制,这一过程中通过“偏移量”的设置,可以对元素任意组合,满足实际需要。
思路如图1所示。
2MapGIS文件明码格式介绍
本文主要使用MapGIS的线文件,所以现主要介绍MapGIS线明码文件的格式,点(区)文件的明码格式可参阅相关书籍(如图2)。
逻辑结构:文件头线数 1号线 2号线……n号线
具体为:
A、文件头,8个字节
WMAP9021
B、线数 n
C、1号线
D、线参数
说明:在以上的说明文字中,斜体部分为文件所需内容。文中带下划线的文字为介绍文字,实际明码文件中不需要。线参数包括:线型号,辅助线型号,线色,线宽,X系数,Y系数,辅助色,图层,透明输出(具体数值视MapGIS软件及成图需要)。
3Excel数据准备及ExcelVBA数据计算、提取
3.1绘制“数据计算与提取”按钮并添加按钮的单击事件,代码如下:
PrivateSubCommandButton1_Click()
UserForm1.Show
EndSub
3.2绘制“数据计算与提取”对话框,如图2所示
3.2.1添加“计算”按钮的单击事件
成图数据=观测数据×10×成图比例尺+偏移量
纵向偏移量相当于一常数,不同元素的偏移量设置为同一数值,即表示将这几种元素曲线组合在一起,添加“计算”按钮的单击事件,主要是通过循环语句for…next赋值,部分代码如下:
PrivateSubCommandButton1_Click()
DimiAsLong
DimkAsLong
k=Val(TextBox0.Text)+3
Worksheets("sheet1").Activate
Fori=4TokStep1
ActiveSheet.Cells(i,16).Value=(Val(Cells(i,4))*10/Val(TextBox2.Text)+Val(TextBox3.Text)
ActiveSheet.Cells(i,17).Value=(Val(Cells(i,5))*10/Val(TextBox5.Text)+Val(TextBox6.Text)
……
Nexti
EndSub
3.2.2添加“提取线”按钮的单击事件
“提取线”按钮主要是通过赋值语句将2.1过程中计算的数据按照MapGIS线明码文件的数据格式要求重新组合数据,完成效果如图3所示,步骤如下:
(1)采用VBA的赋值语言建立表头、输入线数、输入线参数,部分代码如下
ActiveSheet.Cells(1,1).Value="WMAP9021"
ActiveSheet.Cells(2,1).Value="16"
ActiveSheet.Cells(3,1).Value="1"
ActiveSheet.Cells(3,2).Value="1"
………
ActiveSheet.Cells(4,1).Value=k
(2)写入x、y坐标,部分代码如下:
Fori=5Tok+4
Worksheets("sheet2").Cells(i,2).Value=Worksheets("sheet1").Cells(i-1,21).Value
Worksheets("sheet2").Cells(i,1).Value=2*i-10
Nexti
(3)写入线的ID号和线长度参数,代码如下:
Worksheets("sheet2").Cells(k+5,1).Value=1
Worksheets("sheet2").Cells(k+5,2).Value=10000
经过以上三步,已经完成了MapGIS明码文件在Excel组建。接下来将Excel文件存储为以“wl”为后缀的文件。
3.3添加“保存线”按钮的单击事件
接下来将Excel文件存储为以“wal”为后缀的文件,字符见已逗号分隔,代码如下
PrivateSubCommandButton4_Click()
Dimstr$,i%,len1%
OpenThisWorkbook.Path&"\001.wal"ForOutputAs#1
Fori=1To[a65536].End(3).Row
len1=Application.CountA(Cells(i,1).EntireRow)
Iflen1=1Then
str=Cells(i,1)
Else
str=Join(Application.Transpose(Application.Transpose_
(Cells(i,1).Resize(1,len1))),",")
EndIf
Print#1,str
Next
Close#1
EndSub
4MapGIS下线明码文件到线文件的转化
4.1打开MapGIS软件的“图形处理”中的“文件转换”对话框,如图4所示。
首先输入已经准备好的MapGIS线明码文件,再输出MapGIS明码格式。至此,完成曲线的所有绘制过程。
4.2曲线的整饰
主要包括坐标轴的绘制、图例的制作、相关注释的添加等等,建议采用MapGIS的“移动坐标调整”、“点输入线”等功能来完成上述工作,以达到精确制图的目的,图件整饰完成后如图5所示。
5存在的问题和建议
本文主要涉及到了MapGIS线明码文件,建议合理的利用MapGIS点明码文件,这样可以快速完成对曲线的注释。
MapGIS作为一款优秀的国产基础地理信息系统软件平台,拥有强大的功能,并支持多种编程语言的二次开发,充分利用这一功能会给我们的工作和学习带来极大地便利和乐趣。
参考文献:
[1]李政,梁海英,李昊.VBA应用基础与实例教程[M].北京:国防工业出版社,2005.
[2]张滨生.利用MAPGIS快速制作点位数据图的一种方法[J].物化探计算技术,2001,23(1):90.
[3]ExcelHome.Excel应用大全.北京:人民邮电出版社.