快速检索
  气象   2006, Vol. 32 Issue (7): 115-118.  

 

引用本文 [复制中英文]

林伙海, 吴陈锋, 2006. 基于surfer8.0实现雨量图形可视化[J]. 气象, 32(7): 115-118.
[复制中文]
Lin Huohai, Wu Chenfeng, 2006. Rainfall Visualization based on Surfer 8.0[J]. Meteorological Monthly, 32(7): 115-118.
[复制英文]

文章历史

2005年1月26日收稿
2005年11月7日收修定稿
基于surfer8.0实现雨量图形可视化
林伙海 , 吴陈锋     
福建省厦门市气象局,361012
摘要:介绍了VB6.0结合surfer8.0实现雨量图形可视化的基本原理, 阐述了系统软件的模块化结构设计的过程, 给出了关键性技术描述, 并展示了系统的主要功能和产品结果。
关键词VB6.0    surfer8.0    雨量图形    可视化    
Rainfall Visualization based on Surfer 8.0
Lin Huohai, Wu Chenfeng    
Xiamen Meteorological Office, Fujian Province 361002
Abstract: This article demonstrates basic principles on how to visualize rainfall by using software Surfer 8.0 connecting with VB6.0. The structure procedures of the software system and key techniques are also introduced, and the image products and main functions are shown in it.
Key words: VB6.0    Surfer8.0    rainfall visualization    
引言

2004年厦门市气象局新一代自动气象站改造完成, 但新的自动站数据查询软件仍然以表格方式查询, 缺乏图形显示的直观性。surfer8.0中文版是美国Golden公司自主研究开发的制作等高线和三维地形立体图的软件。surfer8.0具有很强的图形显示功能, 同时surfer automation提供了大量的ActiveX对象, VB6.0可方便地对surfer automation ActiveX对象进行调用, 这使雨量图形可视化编程成为可能。

1 基本原理

Surfer 8.0的最主要的功能是绘制等高线图, 对要求绘制等高线的数据有特殊的格式要求, 即首先要将数据文件转换成Surf-er8.0认识的grd文件格式, 才能做等高线绘制, 然后在等高线图上加上背景地图(本地的地形图)[1]。由于自动站的设点不可能按网格化的方式来进行布点, 采集到的数据在作图过程中要进行插值计算。最后在等高线之间填上相对应的雨量值的颜色。

在VB6.0中对Surfer 8.0进行嵌入式编程的原理类似于调用ActiveX对象编程。Surfer 8.0采用了Automation方法来公开其接口, 提供了近60种不同种类的Ac-tiveX Automation对象, 它们几乎覆盖了Surfer 8.0的所有功能。在安装Surfer 8.0之后, 开发人员就可以在VB程序中创建、调用它所提供的Automation对象, 用以实现相应的数据可视化功能。更准确地说这种编程方法是一种面向对象的嵌入式编程方法。

2 模块化结构设计

采用功能模块化结构设计, 每个模块都被独立地实现, 模块在功能上独立, 可根据用户需求灵活配置。该应用软件通过调用数据库中的自动站雨量资料实现图形可视化, 程序包括的模块见图 1

图 1 系统软件的结构图
2.1 数据调用模块

该模块使用VB6.0的ADO(AcitveX Data Object)对象实现数据库的连接与数据调用, ADO作为最新的数据库访问模式, 同传统的数据对象层次(DAO和RDO)不同, ADO可以独立创建, 如可以只创建一个“Connection”对象, 但是可以有多个独立的“Recordset”对象来使用它。不同类型的自动站观测仪器, 所采集的雨量资料存贮于多个数据库表中。在调用时段雨量数据时, 通过设置不同的参数变量, 取出各个站的雨量累加值, 并将数据输出至surfer支持的文本格式数据文件中。

2.2 图形绘制模块

该模块调用surfer automation ActiveX对象, 实现自动站离散站点数据的网格化, 并将网格数据白化(将地图边界以外的数据重设为空值)。由于网点数据的不均匀, 采集到的数据要进行插值计算。Surfer 8.0提供了加权反距离、克里格、最小曲率、改进谢别德、自然邻点、最近邻点、多项式回归、径向基函数、带线性插值的三角剖分、移动平均、数据度量、局部多项式等12种网格化方法, 软件选取效果较好的三种方法:加权反距离法、克里格、最小曲率法。网格化只需调用application对象的griddata方法, 并设置相应的参数即可实现。数据等值线绘制共分九个层次, 每个层次的值代表雨量数据的大小, 等值线的取值量级和颜色可根据实际需要进行调整。在加上背景地图时, 先对当地行政地图做数据化处理, 即取行政地图边界线的经纬度, 取的点数越多, 描绘出来的数字地图就越准确。

2.3 显示控制模块

该模块提供应用程序与后台数据库的连接界面, 并可在线测试数据库的工作情况。通过对时间段的选择, 即可显示每分钟的实时雨量, 也可显示历史上任一时段的雨量分布。在编辑菜单选项中, 可随时订正自动雨量站的经纬度、雨量值, 或添加新增雨量站并重新绘制图形。用户可以对网格化方法以及等值线等级进行设置, 可以将图形输出成多种图像格式(如:gif、bmp、jpg、emf、jpeg、png等)进行保存。

2.4 打印输出模块

利用VB为用户提供的Windows公用标准对话框CommonDialog控件, 可实现打印屏幕上显示出来的图形内容。需要解决的是属性匹配与窗体缩放问题。具体过程是:使用打印机的ScaleX和ScaleY方法, 获取以twip为单位的打印机尺寸, 再利用窗体的ScaleX和ScaleY方法将这些尺寸转换为窗体中的坐标系统, 从而实现以窗体的坐标系统提供打印机可打印区域大小的目的。然后, 用这些尺寸作为打印机中新的Scale-Width和ScaleHeight, 即可实现属性匹配。当需要扩大或缩小窗体的大小时, 要确定对象被缩放的系数。除了在软件上直接打印图形外, 还可以通过其它图形显示软件打印保存过的图像。

以上四个模块之间的相互关系见图 1。用户通过显示控制模块向数据调用模块发出请求, 数据调用模块根据用户需求检索数据库中的雨量数据, 并将数据输出为surfer支持的格式数据文件。图形绘制模块根据用户对图形要素的设置进行绘图, surfer可以将图形直接输出成各种图像文件; 也可以将图形拷贝至clipboard, 再由VB的savepicture方法输出图像, 通过打印输出模块把图像打印出来。

3 关键性技术的实现

在编写嵌入Surfer对象的程序代码时, 首先要创建Surfer的应用(Application)对象, 它是这种编程方法的关键; 其次, 根据数据可视化需求, 调用对象的相应方法, 制作图形元产品; 最后, 将最终的可视化结果拷贝至系统粘贴板中, 由应用程序的显示模块调用显示。

以下说明利用VB6.0调用Sufer8.0进行嵌入式编程的代码实现过程。

3.1 创建surfer8.0应用程序对象

Dim surfapp as object

Set surfapp=creatobject

(“surfer.application”)

其中CreateObject是Visual Basic提供的一个方法, 它创建并返回一个对ActiveX对象的引用。CreateObject方法在系统注册表里查找“Sufer.Application”项, 并自动激活Sufer服务。

3.2 创建各种图形对象

(1) 首先建立图形文档并建立shaps对象

Set docs=surfapp.documents

Set plotdoc=docs.add(doctype:=1)

Set shapes=plotdoc.shapes

(2) 用shapes对象的addcontourmap方法建立等值线图对象

Set mapframe=shapes.addcontourmap (gridfilename:=grd_file)

Grd_file是surfer支持的以*.grd为后缀的格点数据格式, 要得到这种格式的数据可以用surfer8.0应用程序对象的gridda-ta方法对离散的站点资料进行网格化, 该方法提供了12种不同的网格方法, 在应用程序中选择了局部多项式加权反距离法、克里格、最小曲率法三种效果较好的方法供用户使用。

(3) 用shapes对象的addbasemap方法建立基面图对象为图形添加地图背景

Set mapframe=shapes.addbasemap (importfilename:=mapfile)

其中mapfile是surfer8.0支持的地图边界文件, 这里选用*.bln格式边界文件。

(4) 用shapes对象的addpostmap方法建立张贴图对象为图形添加雨量及站名标注

Set mapframe=shapes.addpostmap (datafilename=stn_file)

Surfer automation为用户提供了多种方法使其可以设置各种图形对象的属性。

3.3 复制图形结果到系统Clipboard

将已制作的功能部件复制到系统粘贴板(Clipboard)

Shapes.SelectAll

Set selection=plotdoc.Selection

Selection.copy

将系统粘贴板中的图形元产品拷贝至应用程序的显示控件PictureBox中

PictureBox.Picture=
Clipboard.GetData(2)

至此已经完成了数据等值线图形制作的主要工作。如果需要保存数据的可视化结果, Sufer也提供了输出图形文件的功能, 而且支持jpg、bmp、png、dxf等多种图形格式(以上只列出了嵌入代码模块中的一些核心部分)。从数据的调用到图形的绘制, 需应用到更多的程序设计。

4 小结

与表格方式查询相比, 自动站雨量资料的图形方式的查询在直观性方面有较大优势。日常业务中, 它有利于预报员及时了解局地天气细微变化, 提高预报的准确率; 台风、暴雨时, 它有利于各级领导随时掌握厦门地区降雨情况, 及时采取正确的防灾措施; 人工增雨作业中, 它有利于作业指挥和作业人员根据雨情变化, 适时发布正确的作业指令和评估作业效果。随着今后自动站数量的增加, 将越来越精确地反映本地区的实际降水情况。同时, 只要修改数据调用参数, 也可完成自动站其它要素的图形显示。

参考文献
[1]
尼建军, 张学宏. surfer7.0嵌入VB6.0编程实现水文数据快速可视化[J]. 海洋测绘, 2005, 25(1): 64-66.