2023年11月30日发(作者:)

2010年第4期

2010年12月 乞 象 第3O卷

总第124期

基于Surer Automaton技术的气象等值线自动绘制

杨学斌

(德州市气象局,山东德州253078)

摘要:介绍了在VB6.0环境下,引. ̄Surfer Automaton提供的ActveX对象,通过

对象编程,实现了基于Surfer Automaton技术气象等值线的自动绘图方法,充

分应用Surfer8.0强大的等值线的绘制功能,达到了客户应用程序与SurferN.务器

通讯的目的

关键词:编程;等值线;自动绘图

中图分类号:TP31 文献标识码:B 文章编号:1005—0582(2010)04—0030—04

引言

Windows应用程序(服务器端),即被调用的程

序外显自身的对象体系结构,供调用者引用。从

Surfer7版开始,Surfer提供了对Automation技术

的支持,Surfer8.0对其功能进一步扩充,为通过

高级语言程序控制Surfer自动绘图提供了编程接

Golden SoftwarSurfer 8.0(以下简称Surfer)

是一款基于Windows操作系统的二维和三维绘

图软件,不仅提供了多种插值方法,还具有强大

的绘制等值线、3D立体等矢量图能力。通过研究

Surfer的Automaton技术,在VB6.0环境下引入对

口,用户通过使用这项技术,可在自己开发的客

户应用程序中,方便地引入Surfer的Automaton

对象,通过对象编程,在客户程序中轻松地实现

Surfer强大的图形绘制功能l J。

1.2 Surfer对象

象编程,在客户应用程序中调用Surferg ̄务器系

统的自动化对象的属性、方法实现了等值线图快

速自动绘制功能,在后台运行Surfer ̄务器程序,

脱离其主控界面,最终提供一种简便、快速的绘

图途径,自定义功能强,具有非常强的实用性。

文中以德州市加密自动气象站的降水量为例,研

究等值线自动绘制方法和过程。

ActveX Automaton对象模型

1. ActveX Automaton技术

Surfer采用层次化的方式来组织其自动化对

象(图1){ ,其中应用程序对象(Applcaton

Object)处于最高层,所有其他对象是直接或间接

通过应用程序对象派生而来,各级对象的获得需

逐级进行。常用的Surfer对象有:Applcation,

BaseMap,ContourMap,Document,Documents,

Grid,ImageMap,Levels,MapFrame,Overlays,

Plot Document,Selection,Shape,Shapes,Windows

ActiveX Automaton是Microsof公司提出的

种技术方法,用于Windows开发平台下应用程

等。Applcation ̄象代表Surfer应用程序实例,

序之间的交互,该技术允许通过外显的对象由一

是其它Surfer对象的根,Document对象是文档类

对象的基类,它派生出的类有plotdocument,

个Windows应用程序(客户控制端)控制另一个

收稿日期:2010—01—26

作者简介:杨学斌(1975一),男,甘肃静宁人,高级工程师,主要从事短期天气预报工作。

30 ・

wksdocument等。Shape对象是绘图元素对象的基

类。Sufer中的绘图元素有很多,如坐标轴、等值

线、色标、文本等。

图1 Surfer主要的Automaton对象模型树

2 等值线绘制方法

等值线的绘制主要采用模块化结构设计,模

块可独立实现,在功能上独立,根据用户需求灵

活设置,该应用软件通过调用数据库中的自动站

雨量资料实现图形可视化。

2.1站点资料文件的生成 法,并设置相应的参数即可实现,主要代码为:

使用VB6.0的ADO(AcitveX Data Object)对

象实现数据库连接与数据调用。在调用时段雨量

数据时,通过设置不同的日期和时问参数变量,

得到各个站点的雨量累加值,并将数据输出至

Surfer支持的txt,xls等格式数据文件中,站点资

料文件格式为:

经度,纬度,变量(此行在数据文件中不存在)

116.3241,37.5331,40.

116.3234,37.3531,43.

各数据问必须用逗号分隔,数据的排列顺序

没有任何限制,只要在网格化站点资料时与

GridData函数的参数xCol,yCol,zCol相对应即可。

2.2 Sufer应用程序对象的创建与启动

在VB6.0中,首先引用Surfer的Applcaton对

象,才能在客户程序中与SurerH ̄务器通讯。

Applicaton对象是Surfer对象模型中的根对象,代

表着Surfer ̄身。用于创建Surfer应用程序实例的

方法的关键代码为:

DiSurfApp As Object声明对象变量

SuferApp=CreateObject(”Sufer.Applca-

on”)’创建Sufer应用程序实例

SurfApp.Visible=Ture

SurfApp.WindowState=srfWindowStateNormal

2_站点资料的网格化

具有了数据文件还不能直接绘制等值线,

Surer ̄求绘制等值线的数据有特殊的格式要求,

由于网点数据的不均匀,采集到的数据要进行插

值计算,即要将数据文件转换成Sufer认识的grd

文件格式,才能绘制等值线。Sufer提供了加权反

距离、克里金、最小曲率、改进谢别德、自然邻

点、最近邻点、多元回归、径向基函数、线性插

值三角网、移动平均、数据度量、局部多项式等

12种网格化方法『】,通过比较,程序中选取效果较

好的加权反距离法、克里金、径向基函数三种方

法。网格化只需调用Applcaton对象的griddata方

SurfApp.GridDataDataFile:=RainFall,Col:

1,yCol:=2,zCol:=3,xMin:=lonmin,Max:

on

max,yMin:=lat

min,yMax:=lat

ma

_

Algorthm:=sfRadialBasis,DupMethod:=2。

ShowRepod:true,RBBasis Xype:=srfMulQuadric,

OutGrid:=App.Path+”\output.grd”,OutFmt:

=sfGridFmtS7

进行srfRadialBasis网格化插值

DataFie:输人站点数据文件名

Algorm:网格化方法,Su ̄值方法较多,

DupMehod:消除重复点的方法;参数值=2

表示要消除所有重复点

’xMin yMax:网格化区域

’ShowRepod:是否输出报告

’OutGrid:输出Grid格式文件Outputgr

31 .

OutFmt:输出的格点文件格式 SmoothContours=True’平滑等值线

ShowColorScale=True’显示色标

需要说明的是,等值线绘制优劣的关键点之

是空间内插法的选取,研究认为在不同的时空

EndWith

Set Levels=BlankShapesMap.LevelsLevels’

尺度内,每个方法对不同变量估计的误差是不一

样的。对于不同的空间变量,在不同的地域和不

同的时空尺度内所谓的“最优”内插法是相对的。

在台站分布密集的区域不同空间内插方法之间

获取等值线等级对象实例

Levels.SetLabelFrequency FirstIndex:=1,

NumberToSet:=1,NumberToSkip:=l’设置标注

差异较小,在台站分布稀疏的区域则差异较大I”。

对于色标,只有填充等值线后才有意义。既

2.等值线的绘制

Surfer的最主要功能是绘制等值线图,Shape

对象是绘图元素对象的基类,但Shape是由 (red,green,blue)函数的三个参数动态生成,

PlotDocument派生而来,因此绘图前必须添加

PlotDocument对象。

Set Plot=SurfApp.Documents.Add

(srfDocPlot)’添加plot文档

Set BlankShapes=Plot.Shapes’获取绘画元

素对象集合实例

网格化的站点资料是以给定最大、最小经纬

度的矩形区域内空间插值形成的grd资料。如要

绘制某一区域内的等值线,首先用GridBlank方法

对指定区域外的等值线白化掉,重新生成一个

grd文件,然后用AddContourMap方法绘制等值

线;若不需要白化掉区域外的等值线,则直接用

AddContourMap方法绘制等值线,代码为:

SurfApp.GridBlank InGrid:=App.Path+”\

output.grd”,BlankFile:=App.Path+”hnap\dz

blank.bin”,OutGrid:=App.Path+”\outblank.

grd”,OutFmt:=sfGfdFmtS7

Set BlankShapes 1=BlankShapes.Add Contour

Map(App.Path+”\outblank.grd”)

2.4.1等值线设置

般情况下,通过以上方式生成的等值线不

能满足业务需要,必须对其做如下重新设置。

Set BlankShapesMap=BlankShapes 1.Overlays

Item(1)’建立等值线对象实例 点的空间分布密度不同,可以选择关键点突出标

With BlankShapesMap

FillContours=True’填充等值线

32 .

可装载色标文件,也可在程序中控制颜色的变

化,本程序中采用后一种方法制作,利用RGB

1~10级是从白色到蓝色渐变,10以上为白色到

红色渐变,主要代码如下:

n=Levels.Count’获取等值线等级数量

colorinc=255#/(n一1)

For i=1 To n

Set LineContour=Levels(i)

LineContour.Line.ForeColor=srfcolorblue

线条颜色

Ifi<11 Then

colorinc=255# (i.1)/(n.1)

Levels(i).Fi1.ForeColor=RGB(255一

colorinc, 255一colorinc, 255)’蓝色

Else

colorinc=255# (i一10)/(n.10)

Levels(i).Fi1.ForeColor=RGB(255,255

colornc, 255一colorinc)’红色

End If

Nexti

2.4.加入Surer基面图和张贴图

等值线通常是以基面图为参考,Surfer用

AddBaseMap方法添加基面图,边界颜色、宽度

等设置应与填充色和等值线相区别;张贴图是依

站点地理信息对其位置和名称等标注,因区域站

注,否则影响输出图片的效果,同样可以对标注

的符号和站点名称进行设置,主要代码如下:

Set BaseMap=Plot.Shapes.Add BaseMap

方法输出。需要说明的是,若输出的是矢量图,

则按原图大小输出,其大小不受控制,通过比较 (importename:=App.Path+”kmap\dz.bin”)’

立基面图对象

Set ContourMap=ContourBaseMapFrame.

发现EMF格式图片质量最好;若输出位图,则按

用户需要尺寸输出图形。对于有填充色的图片,

Overays.em(1)’获取基面图对象实例 输出的图片最好不用JPG格式,因其压缩比较大,

Set postMap1=BlankShapes.AddPostMap

图片质量较差,以PNG、GIF或BMP格式输出的

(datafename:=Text5.Text,xCol:=2,yCol:

3,Lab Col:=1)’建立张帖图对象

Set posMap=postMap 1.Overlays.Item(1)’

获取张贴图对象实例

2.4_ 坐标格式设置

Surfer是基于图层管理的软件,基面图、张

贴图的网格坐标必须与等高线图的网格坐标一 输出图片后,要把已经启动的Surfer文档和

致,因此在设置坐标格式前必须用OverLay命令

把所有地图合成一幅图,需要注意的是OverLay

命令只能对基面图、张贴图和等值线图合成,至

于文本和色标等仍为分层的。主要代码如下:

PlotShapes.SelectAll’选择所有图

Set Shapes=Plot.Selecton.OverlayMaps’

选择地图合成处理

Set Axes=Shapes.Axes

For i=l To 4

Set Axis=Axes(i)

With Axis

If i=4 Or i=2 Then

MajorTickType=srfTickNone’右侧和上部

主刻度不用标注

Else

MajorTickType=srfTickln左侧和下部主

刻度向内标注

EndIf

MinorTicksPerMajor=9

LabelFont.Color=srfColorBlue

EndWith

Next

2.5 图片输出 2007,4(1):53—55.

Surer支持矢量和位图图形格式,用Expor

图片质量最好。主要代码如下:

Plot.Export FileName:=App.Path+”\pich'ain.

emf”, Options:=”Defaults=1,

Width=500,

Height=500,ColorDepth=24”’输出矢量图,语

句中的Optons选项不起作用

2.6 Surfer应用程序的关闭和退出

进程关闭并退出。主要代码如下:

SurfApp.Documents.CloseAll’关闭文档

SurfApp.Quit’退出Surfer程序

3 结论

Surfer7以后的版本提供了Automation技术,

供用户进行二次编程开发。通过Surfer提供的

Automaton技术,利用ContourMap和MapFrame

对象进行二次编程开发,能够满足业务化需求,

实现操作方法简捷,输出图形优美、线条光滑的

目的,在业务应用程序中实现Surfer强大的等值

线图绘制功能。

参考文献:

1】贾宏元,赵光平,孙银川,等.基于Surfer

Automaton对象技术的等值线自动绘图方法研

究与应用IJ】.计算机系统应用,2006,7:21—22.

2】陈斌.使用Surfer嵌入编程技术实现地学中

的数据快速可视化fJ].地质找矿论丛,2006,

21(3):224.

3】陈欢欢,李星,丁文秀.Surfer8.0等值线绘制

中的十二种插值方法fJ].工程地球物理学报,

33 ・