2023年11月30日发(作者:)
2010年第4期
2010年12月 山 东 乞 象 第3O卷
总第124期
基于Surfer Automation技术的气象等值线自动绘制
杨学斌
(德州市气象局,山东德州253078)
摘要:介绍了在VB6.0环境下,引. ̄Surfer Automation提供的ActiveX对象,通过
对象编程,实现了基于Surfer Automation技术气象等值线的自动绘图方法,充
分应用Surfer8.0强大的等值线的绘制功能,达到了客户应用程序与SurferN.务器
通讯的目的
关键词:编程;等值线;自动绘图
中图分类号:TP31 文献标识码:B 文章编号:1005—0582(2010)04—0030—04
引言
Windows应用程序(服务器端),即被调用的程
序外显自身的对象体系结构,供调用者引用。从
Surfer7版开始,Surfer提供了对Automation技术
的支持,Surfer8.0对其功能进一步扩充,为通过
高级语言程序控制Surfer自动绘图提供了编程接
Golden Software Surfer 8.0(以下简称Surfer)
是一款基于Windows操作系统的二维和三维绘
图软件,不仅提供了多种插值方法,还具有强大
的绘制等值线、3D立体等矢量图能力。通过研究
Surfer的Automation技术,在VB6.0环境下引入对
口,用户通过使用这项技术,可在自己开发的客
户应用程序中,方便地引入Surfer的Automation
对象,通过对象编程,在客户程序中轻松地实现
Surfer强大的图形绘制功能l1 J。
1.2 Surfer对象
象编程,在客户应用程序中调用Surferg ̄务器系
统的自动化对象的属性、方法实现了等值线图快
速自动绘制功能,在后台运行SurferJJ ̄务器程序,
脱离其主控界面,最终提供一种简便、快速的绘
图途径,自定义功能强,具有非常强的实用性。
文中以德州市加密自动气象站的降水量为例,研
究等值线自动绘制方法和过程。
1 ActiveX Automation对象模型
1.1 ActiveX Automation技术
Surfer采用层次化的方式来组织其自动化对
象(图1){ ,其中应用程序对象(Application
Object)处于最高层,所有其他对象是直接或间接
通过应用程序对象派生而来,各级对象的获得需
逐级进行。常用的Surfer对象有:Application,
BaseMap,ContourMap,Document,Documents,
Grid,ImageMap,Levels,MapFrame,Overlays,
Plot Document,Selection,Shape,Shapes,Windows
ActiveX Automation是Microsoft公司提出的
一
种技术方法,用于Windows开发平台下应用程
等。Application ̄象代表Surfer应用程序实例,
序之间的交互,该技术允许通过外显的对象由一
是其它Surfer对象的根,Document对象是文档类
对象的基类,它派生出的类有plotdocument,
个Windows应用程序(客户控制端)控制另一个
收稿日期:2010—01—26
作者简介:杨学斌(1975一),男,甘肃静宁人,高级工程师,主要从事短期天气预报工作。
・
30 ・
wksdocument等。Shape对象是绘图元素对象的基
类。Suffer中的绘图元素有很多,如坐标轴、等值
线、色标、文本等。
图1 Surfer主要的Automation对象模型树
2 等值线绘制方法
等值线的绘制主要采用模块化结构设计,模
块可独立实现,在功能上独立,根据用户需求灵
活设置,该应用软件通过调用数据库中的自动站
雨量资料实现图形可视化。
2.1站点资料文件的生成 法,并设置相应的参数即可实现,主要代码为:
使用VB6.0的ADO(AcitveX Data Object)对
象实现数据库连接与数据调用。在调用时段雨量
数据时,通过设置不同的日期和时问参数变量,
得到各个站点的雨量累加值,并将数据输出至
Surfer支持的txt,xls等格式数据文件中,站点资
料文件格式为:
经度,纬度,变量(此行在数据文件中不存在)
116.3241,37.5331,40.3
116.3234,37.3531,43.9
●●●' ●●●' ●●●
各数据问必须用逗号分隔,数据的排列顺序
没有任何限制,只要在网格化站点资料时与
GridData函数的参数xCol,yCol,zCol相对应即可。
2.2 Suffer应用程序对象的创建与启动
在VB6.0中,首先引用Surfer的Application对
象,才能在客户程序中与SurferH ̄务器通讯。
Application对象是Surfer对象模型中的根对象,代
表着Surfer;4 ̄ ̄身。用于创建Surfer应用程序实例的
方法的关键代码为:
Dim SurfApp As Object’声明对象变量
SufferApp=CreateObject(”Suffer.Applica-
tion”)’创建Suffer应用程序实例
SurfApp.Visible=Ture
SurfApp.WindowState=srfWindowStateNormal
2_3站点资料的网格化
具有了数据文件还不能直接绘制等值线,
Surfer ̄求绘制等值线的数据有特殊的格式要求,
由于网点数据的不均匀,采集到的数据要进行插
值计算,即要将数据文件转换成Suffer认识的grd
文件格式,才能绘制等值线。Suffer提供了加权反
距离、克里金、最小曲率、改进谢别德、自然邻
点、最近邻点、多元回归、径向基函数、线性插
值三角网、移动平均、数据度量、局部多项式等
12种网格化方法『3】,通过比较,程序中选取效果较
好的加权反距离法、克里金、径向基函数三种方
法。网格化只需调用Application对象的griddata方
SurfApp.GridDataDataFile:=RainFall,Col:
=
1,yCol:=2,zCol:=3,xMin:=lonmin,Max:
=
Ion
max,yMin:=lat
min,yMax:=lat
max,
_
Algorithm:=sffRadialBasis,DupMethod:=2。
ShowRepod:true,RBBasis Xype:=srfMultiQuadric,
OutGrid:=App.Path+”\output.grd”,OutFmt:
=sffGridFmtS7
’进行srfRadialBasis网格化插值
’DataFile:输人站点数据文件名
’Algorithm:网格化方法,Surfer ̄值方法较多,
’DupMethod:消除重复点的方法;参数值=2
表示要消除所有重复点
’xMin yMax:网格化区域
’ShowRepod:是否输出报告
’OutGrid:输出Grid格式文件Output.grd
.
31 .
’OutFmt:输出的格点文件格式 SmoothContours=True’平滑等值线
.
ShowColorScale=True’显示色标
需要说明的是,等值线绘制优劣的关键点之
一
.
是空间内插法的选取,研究认为在不同的时空
EndWith
Set Levels=BlankShapesMap.LevelsLevels’
尺度内,每个方法对不同变量估计的误差是不一
样的。对于不同的空间变量,在不同的地域和不
同的时空尺度内所谓的“最优”内插法是相对的。
在台站分布密集的区域不同空间内插方法之间
获取等值线等级对象实例
Levels.SetLabelFrequency FirstIndex:=1,
NumberToSet:=1,NumberToSkip:=l’设置标注
差异较小,在台站分布稀疏的区域则差异较大I”。
对于色标,只有填充等值线后才有意义。既
2.4等值线的绘制
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:=sffGfidFmtS7
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).Fil1.ForeColor=RGB(255一
colorinc, 255一colorinc, 255)’蓝色
Else
colorinc=255# (i一10)/(n.10)
Levels(i).Fil1.ForeColor=RGB(255,255
一
colorinc, 255一colorinc)’红色
End If
Nexti
2.4.2加入Surer基面图和张贴图
等值线通常是以基面图为参考,Surfer用
AddBaseMap方法添加基面图,边界颜色、宽度
等设置应与填充色和等值线相区别;张贴图是依
站点地理信息对其位置和名称等标注,因区域站
注,否则影响输出图片的效果,同样可以对标注
的符号和站点名称进行设置,主要代码如下:
Set BaseMap=Plot.Shapes.Add BaseMap
方法输出。需要说明的是,若输出的是矢量图,
则按原图大小输出,其大小不受控制,通过比较 (importiflename:=App.Path+”kmap\dz.bin”)’建
立基面图对象
Set ContourMap=ContourBaseMapFrame.
发现EMF格式图片质量最好;若输出位图,则按
用户需要尺寸输出图形。对于有填充色的图片,
Overlays.Item(1)’获取基面图对象实例 输出的图片最好不用JPG格式,因其压缩比较大,
Set postMap1=BlankShapes.AddPostMap
图片质量较差,以PNG、GIF或BMP格式输出的
(datafilename:=Text5.Text,xCol:=2,yCol:
=
3,Lab Col:=1)’建立张帖图对象
Set postMap=postMap 1.Overlays.Item(1)’
获取张贴图对象实例
2.4_3 坐标格式设置
Surfer是基于图层管理的软件,基面图、张
贴图的网格坐标必须与等高线图的网格坐标一 输出图片后,要把已经启动的Surfer文档和
致,因此在设置坐标格式前必须用OverLay命令
把所有地图合成一幅图,需要注意的是OverLay
命令只能对基面图、张贴图和等值线图合成,至
于文本和色标等仍为分层的。主要代码如下:
Plot.Shapes.SelectAll’选择所有图
Set Shapes=Plot.Selection.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.
Surfer支持矢量和位图图形格式,用Export
图片质量最好。主要代码如下:
Plot.Export FileName:=App.Path+”\pich'ain.
emf”, Options:=”Defaults=1,
一
Width=500,
Height=500,ColorDepth=24”’输出矢量图,语
句中的Options选项不起作用
2.6 Surfer应用程序的关闭和退出
进程关闭并退出。主要代码如下:
SurfApp.Documents.CloseAll’关闭文档
SurfApp.Quit’退出Surfer程序
3 结论
Surfer7以后的版本提供了Automation技术,
供用户进行二次编程开发。通过Surfer提供的
Automation技术,利用ContourMap和MapFrame
对象进行二次编程开发,能够满足业务化需求,
实现操作方法简捷,输出图形优美、线条光滑的
目的,在业务应用程序中实现Surfer强大的等值
线图绘制功能。
参考文献:
【1】贾宏元,赵光平,孙银川,等.基于Surfer
Automation对象技术的等值线自动绘图方法研
究与应用IJ】.计算机系统应用,2006,7:21—22.
[2】陈斌.使用Surfer嵌入编程技术实现地学中
的数据快速可视化fJ].地质找矿论丛,2006,
21(3):224.
[3】陈欢欢,李星,丁文秀.Surfer8.0等值线绘制
中的十二种插值方法fJ].工程地球物理学报,
・
33 ・


发布评论