用Surfer 和Vb 实现区域自动站等值线自动绘制

SurferVb实现区域自动站等值线自动绘制
李湘云  崔庆标   
(西双版纳州气象台 666100)
Surfer功能深入研究后发现,引用VbSufer联合编程,并结合区域自动站数据库,可以实现区域自动站雨量等气象数据的填图、等值线绘制及彩填充,以直观可视的图形方式表现数据。同时与州市(县)界、站点等底图文件叠加显示并输出图形,应用在决策服务产品中,为地方领导和相关部门提供更直观、更准确的气象信息,为领导决策提供科学依据。
关键词:Surfer  Vb  等值线  自动绘图 
1 引言
在气象数据处理和应用工作中,需要绘制大量的气象要素图片,随着气象事业的发展,预报产品不断丰富,服务方式日趋多样化,如影视制作、气象网站等,这在很多情况下需要以图
形替代以往的文字、表格方式,从而直观地表达气象信息,适应受众习惯。目前很多用于气象业务科研应用的图形处理系统,如MicapsGradsSurferMetlab等,在这些软件中,通过Micaps实现图形化显示,是气象业务中通用的方法,但Micaps图形的格式一般软件无法识别。Grads是气象专用软件,但是在Dos环境下开发而成,界面不友好、而且只能读二进制数据,需要自己编程实现,难度较高。Metlab功能强大,想要深入了解如何使用,计算机水平要求较高。Surfer是美国Golden Software公司开发的专业软件,最新的Surfer8.0版本添加了Com组件,任何语言只需简单地引用即可进行开发,是一种较为现代化的软件。而且只要有一定的经纬度数据,Surfer就可绘出任意地域底图,这就为择用诸多地理信息系统数据提供了方便。国内对于Surfer 8. 0的研究涉及环境、地理、气象、水文等多个领域,取得了一定的成果。如梁亮[1]、曾志雄 [2]等如何使用Surfer 8.0绘制气象等值线图;陆志波[3]等人研究了Surfer 8. 0在环境评价和规划中的应用;毛兴华[4]等将Map Info Surfer 结合绘制等值线;董舒[5]做了Surfer软件在绘制水下地形图中的应用。该软件使用方便、简单易学,有着强大的绘图功能,常用的等值线图、线框图、地形地貌图和三维表面图等都可以借助其轻松完成。因此用Surfer生成气象图形,是当今地市级气象部门较为理想的选择。
西双版纳区域加密自动气象站于2007年底建设完成,现有两要素区域自动站45个,但自动站数据查询仍以表格查询为主,缺乏图形显示的直观性。本文通过实例详细说明如何将Surfer 强大的绘图功能与Vb编制交互界面程序的优势结合,实现区域自动站雨量资料的填图、数据插值、等值线绘图及彩填充,并叠加了利用Mapinfo生成的区域矢量底图,将图形信息应用于决策服务,为领导决策提供及时、科学、直观的产品。
2 Surfer8.0软件简介
2.1 软件运行环境及特点
Surfer 8.0是美国Golden Software公司的系列绘图软件之一,该软件简单易学,可以在几分钟内学会主要内容,且其自带的英文帮助,对如何使用Surfer解释的很详细。其中的tutorial教程更是清晰的介绍了Surfer的简单应用,应该说Surfer软件自带的帮助文件是相当完美且容易阅读的,只要学过英语的人都可以很快上手。Surfer的安装比较简单,只要按其提示缺省安装即可。其安装软件的大小不到30M,一般的计算机硬件基本能够顺利使用该软件。Surfer是具有插值功能的绘图软件,因此,即使数据是不等间距的,依然可以用它作图。Surfer的主要功能是绘制等值线图,此外它还可以绘制张贴图,分类张贴图和三
维表面图等形式的图形。Surfer 8.0提供了12种内插方法,能迅速地将离散点的测量数据通过插值转换为连续的数据曲面。Surfer 8.0中的ActiveX自动化所提供的编程接口,很容易用各种ActiveX客户编程语言(如VbDehphi蔡元培的北大时代C#)来定制Surfer
2.2 绘图流程
应用Surfer软件绘制图形,首先要根据不同的作图目的,提供合适格式的数据文件格式。其中,最基本的格式是ASCII码形式的XYZ数据格式。有了原始数据后,需要用Surfer软件的Grid菜单中的命令对此数据进行网格化,将数据格式转换成Surfer软件作图时识别的格式,然后再由此网格化的数据用Map菜单中的命令绘制相应的各种图形。此外,还可以直接将XYZ数据格式用特定的程序语言将其直接转化为Surfer识别的网格化数据格式,我们称之为ASCII码GRD文件,这样同样可以用此网格文件作图。简单的讲,要想用Surfer软件进行绘图,首先要将原始数据文件整理或转换为Surfer绘图要求的文件格式,这样就可以轻松的做出各种漂亮的图形。
3 开发过程
Surfer8.0除了可以手工绘图外,还可以调用其Script语言,从而自动处理图形,这是Surfer的高级应用,也是批量成图的最简单方法。手工用Surfer去绘制气象等值线图,各种参数的设置都非常繁琐,Surfer软件提供了编程脚本语言CS Scripter,可以利用它通过编程方便地控制Surfer的绘图功能。Surfer8.0内置60 多种ActiveX 对象,其包含关系如图1。通过对ActiveX的对象的编程,可以实现Surfer8.0 软件提供的所有绘图功能。在VB6.0中调用Surfer8.0进行嵌入式编程类似于调用ActiveX控件编程,要调用Surfer8.0,就必须先获得Surfer8.0及其下属的对象模型,并把它们赋值给对象变量。在VB6.0中,可以用CreateObject函数创建Application对象。在创建Application对象后,就可以根据前面讲的绘图流程进行下一步的开发了。
1 Surfer自动化对象层次
Fig.1 Surfer automation object layer
4 应用实例
这里介绍西双版纳州区域自动站降水量等值线图自动绘制过程。绘图过程根据前面2.2介绍的绘图流程,总体上可以分为任意时段区域自动站雨量数据获取、Vb调用Surfer绘制等值
线、加载采用 Mapinfo生成的底图矢量文件和图形输出等几个过程。
4.1 获取任意时间间隔区域自动站雨量数据
等值线的绘制关键是数据的收集,Surfer绘图一般使用三列数据:XYZX为经度,Y为纬度,Z为气象要素值。这里采用的数据直接来源于西双版纳州气象局区域自动站数据库。任意时段区域自动站雨量数据由VB自动从数据库中获取,同时用VB把站点经纬度和任意时段区域自动站雨量数据写入文件日本五节句station.dat,并存到指定文件夹,以便用surfer调取。数据的获取也可以把经纬度值先写入文件station.dat,接下来利用华创数据分析应用终端,选择气象要素数据文件,选取某一任意时间间隔为查询条件,获取该时段内本地区所有区域自动站的雨量信息并以Excel方式输出到指定文件夹(data.xls)中,必须注意数据顺序要与站点资料文件对应一致。
4.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:="*\d",xMin:=99.942882, xMax:=101.845122, yMin:=21.146981, yMax:=22.592122
’注: 接着就是利用 VB 代码控制 Surfer 来绘制等值线,生成一个空白的绘图页。用Kriging法将资料内插到网格点上,并定义网格的最大()经纬度,Datefile为包含路径的文件名,这里为雨量数据文件,Outgrid 为数据插之后的输出文件。
SurferApp.GridBlank InGrid:="*\d", BlankFile:="*\bnbj.bln", OutGrid:="*\d"
’注:.bln 文件白化等值线,去掉边界外的插值, 并重新保存,为后面绘制等值线做准备。
Set plot = SurferApp.Documents.Add(1) 
Set ContourMapFrame = plot.Shapes.AddContourMap("*\d ")
’注:生成一个空白的绘图页,并在空白绘图页上生成白化后的等值线图,并指定其文件名为ContourMapFrame
Set ContourMap = ContourMapFrame.Overlays(1)
ContourMap.Levels.LoadFile ("*\降水等级.lvl")
’注:降水等级文件可根据实际情况调整,以绘出较为美观的图形。
ContourMap.SmoothContours = 4
小撒探会ContourMap.ShowColorScale = True
  ContourMap.FillContours = True
’注:载入等值线等级文件,并平滑等值线,设置显示标,最后,填充等值线。
4.3 加载采用 Mapinfo 生成的底图矢量文件
为了更加详细的了解区域内各市县降水分布,为地方领导和各级部门决策提供科学依据,在雨量等值图上加载分县边界十分重要。由于一般图形都是图片格式无法在等值线图上直接加载,笔者根据毛兴华[4]等将Map Info Surfer 结合绘制等值线一文中介绍的方法将西双版纳州市县界图片文件采用Mapinfo软件进行矢量化,并输出为mif 文件,对mif 文件进行适当修改得到可以方便加载在等值线图上的bnbj.bln 边界文件。加载边界地理信息bln 代码如下:
Set Basemap = plot.Shapes.addbasemap(ImportFileName:=*\bnbj.bln泰诺福韦)
’注:给等值线图中国内战plot 加载分县边界数据。
Set postmapframe = plot.Shapes.AddPostMap(datafilename:= "*\station.xls"
三国鼎立形势图xCol:=1 yCol:=2 LabCol:=3)

本文发布于:2024-09-23 18:26:57,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/37086.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   自动   区域
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议