刘文洁
(浙江省气象服务中心,浙江 杭州 310017)
气象数据加工处理和服务过程中往往涉及大量的气象要素图片绘制工作,预报和服务产品越来越丰富,图形具有文字和表格等形式所不具备的直观、简洁等优势,更符合大众接受服务信息的习惯。现今很多绘图软件如Micaps、Grads、Surfer、Metlab等用于气象业务和服务系统的应用,Surfer是美国Golden Software公司开发的专业软件,其添加了Com组件,可通过各类编程语言,直接调用即可便捷地进行开发,可谓大大提高了气象预报服务过程天气要素绘图工作效率。
Surfer软件是美国Golden Software公司出品的一款绘制三维图线的具有插值功能的绘图软件,其主要功能是绘制等高线(contour map)、张贴图(post map)、分类张贴图(classed post map)、矢量图(vector map)、影像图(image map)、线框图(wireframe map)、3D表面图(3D surface map)等形式的图形。在日常气象工作中经常需要绘制各类气象要素的等值线图,因此可以使用Surfer软件来完成这些工作,为制作气象预报和服务材料提供更加形象化的图例。本文主要通过介绍绘制浙江省2014年9月20日08时—9月23日14时该时段的降水量等值线图的过程,来说明如何在气象工作中利用Surfer软件绘制各类气象要素的等值线图。
使用Surfer软件绘制彩信第二帧图片,但并不是我们具有了数据文件就可以直接绘制出来的,Surfer要求绘制等值线的数据有特殊的格式要求,即我们首先要将数据文件转换成Surfer能够识别的的文件格式,才能绘制,下面我们以2014年9月20日08时—9月23日14时全省各自动站降水量为例,绘制该时段的降水量等值线图。
Surfer软件支持文件类型有[.xls]文件、[.dat]文件、[.txt]文件。数据格式为经度、纬度、要素。如绘制雨量图,只需保留总雨量、纬度和经度三列数据就可。
格式如下:排列的顺序依次为第一列(X)即为各自动站点经度,第二列(Y)为各自动站点纬度,第三列(Z)为对应的降水量数据:
lon(X) lat(Y) rain(Z)
121.77 29.56 331.1
122.26 28.89 305.1
首先所有的作图都要以高温.Srf作为底图,具体操作步骤如下。
1)打开Surfer底图界面→左边Map→Contours→鼠标右键删除其它图片→如下图1所示。
图1 高温.srf底图
2)创建网格文件
通过创建的(X、Y、Z)数据文件我们就可以生成绘制一个等值线图或表面图所需要的网格[.grd]文件。创建一个网格文件的具体操作为:选择Surfer网格菜单中的网格→数据→查找范围→D:彩信图2014年9月20日08时—9月23日14时浙江各站要素.xls→打开→弹出对话框,在网格化方法中选择一种插值方法,最好选择克里格方法(Kriging),因为这种方法在插值点与取样点重合时,插值的点就是样本点的值,而其它并不能保证如此。再根据经纬度选择合适的X方向、Y方向并修改最小、最大值。需把X方向最小118.11改118,X方向最大122.81改123;Y方向最小27.17改27,Y方向最大31.17改31.5。点确认→跳出界面替换存在的D:彩信图2014年9月20日08时—9月23日14时浙江各站要素.grd?→点是→网格文件D:彩信图2014年9月20日08时—9月23日14时浙江各站要素.grd已经创建→确定
3)选择Surfer网格菜单中的网格→样条平滑→打开→弹出对话框→插入的节点数行间和列间都改成10→确认→替换存在的D:彩信图out.grd?→确定→显示out.grd已经被成功平滑……
4)选择Surfer网格菜单中的网格→白化→打开→单击zj.bln→打开→保存→out.grd已存在。要替换它吗?→是→D:彩信图out.grd已经被成功白化……→确定
5)选择Surfer地图菜单中的等值线图→新建等值线图→打开
6)将新建的等值线图移到左边空白的地方→Map→Contours→鼠标右击属性→出现对话框→“常规”选项卡里,我们在这里勾选“填充等值线”和“颜色比例”选项,然后在“等级”选项卡,我们可以设置等值线的间距及填充颜色,如果是降水量图,一般选择蓝色系,由浅向深变化;如果是最低、最高温度图,一般选择红色系,由浅向深变化。一般色彩图等级调3~4个等级,如果层次感还不是太美观也可以调5个等级。(注:降水量图色彩定制:第1级:196.216.255 第2级:102.153.255第3级:0.95.255第4级:0.0.255第5级:0.0.102,温度图色彩定制:第1级:255.255.204 第2级:255.204.0 第3级:255.102.51 第4级:255.0.0)等值线等级分别调为0,10,50,80,100,线条中所有实线部分全部改成空白的,填充背景里按颜色由浅到深设置好,标注中全部改否,比例中改成0.75。
7)把底图和新的等值线图选中框起来,鼠标右击→排列对象→中间→右对齐,上对齐或者直接把等值线图拖到底图上面,与底图重叠,变成一张图→鼠标右击→对象次序→移动到后面;右边的比色刻度尺和毫米可以改大小,(如果是温度图就把mm的地方改成℃)调到合适的大小。
8)去掉左边Map里前面4项打√
9)图片输出
最后我们还要对绘制的图片进行输出,文件→输出,然后选择需要保存的图片文件名及格式,一般Surfer绘制的气象要素等值线图输出为bmp格式或者png格式的图像文件质量较为理想,输出效果见下图2。
10)图片处理
并设置图例的标题,加载地市名称,如果区域中有空白的地方用区域中相同的颜色把它填色,如下图3所示。
图2 输出效果图
图3 20日08时—23日14时全省雨量分布图
1)获取任意时间间隔区域自动站雨量数据等值线的绘制关键是数据的收集,Surfer绘图一般使用3列数据:XYZ,X为经度,Y为纬度,Z为气象要素值。这里采用的数据直接来源于西双版纳州气象局区域自动站数据库。任意时段区域自动站雨量数据由VB自动从数据库中获取,同时用VB把站点经纬度和任意时段区域自动站雨量数据写入文件station.dat,并存到指定文件夹,以便用surfer调取。数据的获取也可以把经纬度值先写入文件station.dat,接下来利用华创数据分析应用终端,选择气象要素数据文件,选取某一任意时间间隔为查询条件,获取该时段内本地区所有区域自动站的雨量信息并以Excel方式输出到指定文件夹(data.xls)中,必须注意数据顺序要与站点资料文件对应一致。
2)VB调用Surfer绘制等值线,VB具有强大的“所见即所得”图形用户界面和编译功能。由于它支持ActiveX自动化控制协议,因此很容易在二者间建立ActiveX自动化连接,实现VB应用程序对Surfer绘图功能的调用。代码如下:
Set SurferApp=CreateObject(“Surfer.Application”)
’注:创建对象,CreateObject是Vb提供的一个方法,它创建并返回一个对ActiveX对象的引用。CreateObject方法在系统注册表里查找“Sufer.Application”项,并自动激活Surfer服务。
SurferApp.GridData DataFile:="*station.dat", xCol:=1, yCol:=2,zCol:=3, Algorithm:=2, DupMethod:=2, ShowReport:=False,
OutGrid:="*station.grd",xMin:=99.942882, xMax:=xx, yMin:=xx, yMax:=xx
’注:接着就是利用VB代码控制Surfer来绘制等值线,生成一个空白的绘图页。用Kriging法将资料内插到网格点上,并定义网格的最大(小)经纬度,Datefile为包含路径的文件名,这里为雨量数据文件,Outgrid为数据插之后的输出文件。
SurferApp.GridBlank InGrid:="*station.grd", BlankFile:="*nbj.bln", OutGrid:="*station.grd"
’注:用.bln文件白化等值线,去掉边界外的插值,并重新保存,为后面绘制等值线做准备。Set plot=SurferApp.Documents.Add(1)
Set ContourMapFrame=plot.Shapes.AddContourMap("*station.grd")
’注:生成一个空白的绘图页,并在空白绘图页上生成白化后的等值线图,并指定其文件名为ContourMapFrame。
Set ContourMap=ContourMapFrame.Overlays(1) ContourMap.Levels.LoadFile("*降水等级.lvl")’注:降水等级文件可根据实际情况调整,以绘出较为美观的图形。
ContourMap.SmoothContours=4
ContourMap.ShowColorScale=True
ContourMap.FillContours=True
注:载入等值线等级文件,并平滑等值线,设置显示色标,最后,填充等值线。
3)加载采用Mapinfo生成的底图矢量文件为了更加详细的了解区域内各市县降水分布,为地方领导和各级部门决策提供科学依据,在雨量等值图上加载分县边界十分重要。由于一般图形都是图片格式无法在等值线图上直接加载,加载边界地理信息bln代码如下:
Set Basemap=plot.Shapes.addbasemap(ImportFileName:=“*nbj.bln”)
’注:给等值线图plot加载分县边界数据。
Set postmapframe=plot.Shapes.AddPostMap(datafilename:="*station.xls",xCol:=1,
yCol:=2,LabCol:=3)
’注:添加张贴图,生成一个地区区域自动站数据填图图层。
其中station.xls为自动站数据,第一行为经度,第二行为纬度,第三行为站点名称。
Set postmap1=PostMapFrame.Overlays(1)
'注:下面对张贴图的属性进行设置
Set MkFormat=postmap1.Symbol
With MkFormat
.Size=0.05
.Index=12
End With
'注:设置站点符号的大小和形状
Set lbFont = postmap1.LabelFont
With lbFont
.Face = "宋体"
.Size = 8
End With ' 注:设置站点名称的字体和大小
4) 图形输出 VB中显示图形一般用Picture 框或Image 框控件的Loadpicture 方法实现。Surfer 绘制的图形不能直接在VB程序下显示,可将Surfer 图形导出为.gif 等Picture 框控件所支持的图形文件格式,再用Loadpicture 方法实现图形在Picture 框中显示。
以gif 文件为例,将Surfer 图形导出的代码如下:
Set adtext=plot.Shapes.AddText(x:=1.5,y:=4,Text:="xxxx年xx月xx日xx小时降水图")
With adtext.Font
.Face = "宋体"
.Size = 14
End With
' 注:在图形的空白处加入标注
plot.Shapes.SelectAll
plot.Select.OverlayMaps
’注:将上述所有图层进行合并
plot.Export FileName:="*data.gif",Options:="Width=600,Height=450" plot.Close
SurferApp.Quit
使用Surfer软件绘制气象等值线图具有十分重要的意义,根据绘制出的直观、形象的气象要素等值线图,能对本地区的气象要素分布情况有一个清楚的认识,在使用中合理选用等值线间隔等级、刻度间隔和字体大小,还可以使图片简洁、美观。
参考文献:
[1] 文雅,郭治兴.应用Win—Surfer软件绘制降水等值线图[J].土壤与环境,2002,11(4):360-362.
[2] 陈欢欢,李星,丁文秀.Surfer8.0等值线绘制中的十二种插值方法[J].工程地球物理学报,2007,4(1):52-57.
[3] 张杰,梁俊宁.Surfer8.0在绘制气象等值线中的应用[J].现代农业科技,2010(1):284-286.
[4] 张仁凌.齐向华.使用Sufer软件绘制雨量等值线图[J].水利水文自动化,2007,12(4):45-47.