基于VB对Surfer软件二次开发实现等值线图自动绘制

2015-11-23 13:21郭文彬
河南科技 2015年14期
关键词:等值线图白化网格化

郭文彬

(北京华地四维勘测技术有限公司,北京 100096)

Microsoft Visual Basic(VB)是一种由Microsoft公司开发的结构化的、模块化的、面向对象的、包含协助开发环境的事件驱动为机制的可视化程序设计语言。VB拥有图形用户界面(GUI)和快速应用程序开发(RAD)系统,可以轻易地使用DAO、RDO、ADO连接数据库,或者轻松地创建ActiveX控件。程序员可以轻松地使用VB提供的组件快速建立一个应用程序[1]。

Surfer是美国Golden Software公司编制的一款以画三维图(等高线,image map,3d surface)的软件。该软件具有强大插值功能和绘制图件能力,是处理XYZ数据的首选软件。可以轻松制作基面图、数据点位图、分类数据图、等值线图、线框图、地形地貌图、趋势图、矢量图以及三维表面图等;提供十几种数据网格化方法,包含几乎所有流行的数据统计计算方法;提供各种流行图形图像文件格式的输入输出接口以及各大GIS软件文件格式的输入输出接口,大大方便了文件和数据的交流和交换;提供新版的脚本编辑引擎,自动化功能得到极大加强[2]。

本文通过VB和Surfer编程,结合工程中的数据特点,编制了Surfer自动成图工具,实现了等值线图的自动绘制。自动生成的等值线图如图1所示,程序界面如图2所示。

图1 等值线图

图2 程序界图

1 Surfer对象模型

Surfer的程序结构是采用ActiveX组件技术构建的,可以采用各种编程语言如VB操作Surfer软件,并调用其对象的属性和方法实现自动绘制各种图形的功能。Surfer的对象层次结构如图3所示,其中最顶层的对象为Application对象,即Surfer本身,下面有四个直接对象:Documents Collection,Windows,Grid 和 VarioComponent。Documents Collection包含多级子对象,其中PlotDocument所包含的Shapes Collection是所有图形的集合以及符号和文本的集合。在Surfer中等值线图Contour Map也是图形的一种[3-4]。

Surfer的等值线自动成图就是通过调用这些对象的方法和属性来实现的。

图3 Surfer的对象层次结构图

2 Surfer自动成图及实现

2.1 Surfer成图基本过程

使用Surfer软件绘制图形主要包括以下几个步骤:

①选择数据文件,根据工程的特点选择对应的3列数据,其中第一列为对应图形的X坐标值,第二列为对应图形的Y坐标值,第三列为高程或者其他属性值。

②选择合适的插值方法对所需要的数据进行网格化处理,生成对应的grd格式文件。

③根据已有的grd网格文件生成等值线图。

④对所绘制的等值线图进行颜色填充、白化处理以及标注等美化处理。

⑤把地图和等值线图、白化叠加,完成图形绘制。

本文Surfer自动化成图也是基于上述Surfer绘图的基本步骤来实现的。

2.2 Surfer自动化成图实现

对Surfer数据成图的过程和Surfer的对象模型有了清楚的了解后,就可以编写Surfer自动化成图的代码了。主要过程如下,显示部分代码[5-6]。

//定义Surfer对象和变量

Dim srf As New Surfer.Application

Dim plotDoc AsSurfer.IPlotDocument

Dim mapFrame AsSurfer.IMapFrame

Dim mapbase AsSurfer.IBaseMap

Dim mdbmapFrame As Surfer.IMapFrame

Dim mdbmapbase As Surfer.IBaseMap

Dim gcmapFrame AsSurfer.IMapFrame

Dim gcmapbase AsSurfer.IBaseMap

Dim mapContour As Surfer.IContourMap

Dim titletextAs Surfer.IText

Dim inFile,strfilename As String

Dim outFile,filemanyaddress As String

Dim intPos,i As Integer

Dim baseName As String

Dim GridFile As String

Dim outGridFile As String

Dim inFileName As String

Dim FilesAs Variant

Dim x,y AsDouble

Dim AxisAs Surfer.IAxis

//选择输入、输出文件和路径

With CommonDialog1

.MaxFileSize=32767

.DialogTitle=“打开文件”

.CancelError=False

.Filter=“TXT文件|*.txt|DAT文件|*.dat|所有文件(*.*)|*.*”

.Flags=cdlOFNAllowMultiselectOr cdlOFNExplorer

.ShowOpen

Files=Split(filemanyaddress,Chr(0))

For i=1 To UBound(Files)Step 1

Files(i)=Files(0)&“”&Files(i)

Next i

……

//网格化数据

srf.GridData DataFile:=strfilename,xCol:=2,yCol:=5,zCol:=4,yMin:=yminy,yMax:=ymaxy,xMin:=y,xMax:=x,NumRows:=((ymaxy-yminy)/ydist+1),NumCols:=((x-y)/xdist+1),Algorithm:=srfKriging,showreport:=False, outgrid: =outFile, OutFmt: =srfGridFmtS7,dupmethod:=srfDupNone

SetplotDoc=srf.Documents.Add(srfDocPlot)

//绘制等值线

Set map Frame=plotDoc.Shapes.AddContourMap(outFile)

SetmapContour=mapFrame.Overlays(1)

IfCheck1.Value=1 Then

mapContour.Levels.LoadFile(Text11.Text)

End If

mapContour.FillContours=True

mapContour.LabelFont.Size=dgxsize

mapContour.LabelFont.Face=Text9.Text

mapContour.SmoothContours=4

mapContour.SmoothContours=srfConSmoothHigh

//白化处理

IfCheck2.Value=1 Then

Set mapFrame=plotDoc.Shapes.AddBaseMap(Text12.Text&inFileName&".bln")

Setmapbase=mapFrame.Overlays(1)

mapbase.Line.Width=gcblnsize

End If

IfCheck3.Value=1 Then

Set mapFrame=plotDoc.Shapes.AddBaseMap(Text13.Text&inFileName&“.bln”)

Setmapbase=mapFrame.Overlays(1)

mapbase.Line.Width=mdbblnsize

End If

……

//添加标题和保存Surfer图形

Set titletext=plotDoc.Shapes.AddText(x:=(xpage/2-2),y:=(ypage-1),Text:=inFileName&“线视电阻率拟断面图”)

titletext.Font.Face=Text7.Text

titletext.Font.Size=titlesize

plotDoc.SaveAsbaseName&“.srf”

srf.ScreenUpdating=True

srf.Documents.CloseAllsrfSaveChangesNo

srf.Quit

到此,完成了Surfer的自动化成图。

3 结语

本文通过利用VB和Surfer实现了自动绘制等值线图,同时借助于其强大的数据分析和绘图功能可以应用到其他领域,同时发现可以修改其配置文件surfer.set实现更多更好的功能,同时也更加简化。

[1]Microsoft Corporation微软(中国)有限公司.Visual Basic6.0中文版程序号指南[R].北京:希望电脑公司出品,1998.

[2]杨朝辉,党立华.基于Surfer Automation技术的三维立体渲染图的绘制[J].海洋测绘,2003(26):47-49.

[3]熊文兵.用Surfer7.0绘制气象等值线图[J].广西扩展名,2003(43):55-57.

[4]陈明,何门贵.利用Grapher绘制彩色渐变剖面平面图[J].物探与化探,2008,32(2):196-198.

[5]周阳,黄浩云,李志强,等.基于C#与Surfer Automation完成大气污染扩散等值线自动化生成[J].环境科学与管理,2011,36(1):31-34.

[6]黄梦龙.基于Surfer自动化的等值线图实时绘制与网络发布方法[J].测绘与空间地理信息,2012,12(35):176-180.

猜你喜欢
等值线图白化网格化
以党建网格化探索“户长制”治理新路子
白化黄喉拟水龟人工培育研究①
最严重白化
城市大气污染防治网格化管理信息系统设计
如何来解决等值线问题
化解难题,力促环境监管网格化见实效
网格化城市管理信息系统VPN方案选择与实现
白化茶种质资源分类研究
白化和紫化茶种质资源开发进展
Surfer软件在气象资料自动成图中的应用研究