C++Builder和Surfer接口技术及其在气象绘图中的应用

2014-11-07 01:08杨辉刘威
科技资讯 2014年10期

杨辉 刘威

摘 要:在气象业务和科研工作中,数据的可视化处理是非常重要的技术。本文基于Surfer接口,使用C++Builder开发了气象数据查询系统,将气象要素以色斑图的形式直观的显示出来,实现气象数据绘图的自动化;同时本文也给出了调用Surfer Automation接口的具体方法和技巧。

关键词:C++builder sufer 气象绘图

中图分类号:TP311 文献标识码:A 文章编号:1672-3791(2014)04(a)-0040-01

等值线图是气象工作中常用到的图形显示方法,它可将气象要素的分布直观地显示出。在业务软件开发中,自主开发等值线的绘制算法较为复杂,因此,可通过对成熟的商业软件进行二次开发,并衔接至自己的系统中来实现。

Surfer软件可实现等值线、三维面图的绘制且具有各种函数运算功能[1],并提供了完整的OLE Automation功能供外部程序调用。本文采用了BCB调用Surfer接口来完成气象数据查询软件的编写,并介绍了该技术在气象数据可视化中的一个具体应用,实现数据成图的自动化,极大提高了业务人员的工作效率。

1 Surfer等值线绘制方法及接口技术

1.1 Automation接口及其优点

Automation接口是指软件提供的允许外部程序访问其对象的编程接口。用户可利用专业的工具软件作为后台,利用开发工具进行二次开发,可实现专业软件的绝大部分功能。

Surfer提供了一套完整的OLE Automation功能供外部应用程序调用[2]。外部程序调用中可以给任何对象的属性赋值,通过赋予不同的参数值改变对象的状态;方法执行过程中可以通过参数控制图形的输出。

1.2 利用Surfer绘制离散点等值线的原理

Surfer绘制离散点等值线的原理是将已给出的离散点数据插值生成光滑曲线,每条曲线上的数据值都是相等的。Surfer的主要内插计算方法有克里金插值发、三角网格线性法、最近距离法、最小二乘法等[3]。

2 C++Builder调用Surfer绘图的关键技术

2.1 背景地图文件的生成

将本地区气象要素的空间变化特征直观的显示出来,需要将本地区边界外的数据裁减掉[4]。这里要用到Surfer的白化功能,白化过程中需要本地区的边界文件。本文利用MapInfo来获取边界数据,具体方法为打开地图,双击需要提取边界的地区使其变为阴影,然后将地理信息复制出来,并粘贴至一个新的数据文件中;利用ReShape功能获取到边界数据,最后利用Export功能将边界文件导出。导出文件经过记事本进行格式修改后可直接在Surfer中作为底图载入。

2.2 数据文件的格式说明

等值线绘制前,需要对原始数据文件进行处理,并生成如下格式的数据文件:

114.87 30.37 162.2

……

数据文件一行为一条记录,每条记录的三条数据分别为经度、纬度和绘制等值线要素的值。

2.3 调用Surfer接口绘制等值线

(1)在BCB中创建Surfer应用程序对象和绘图文档,并通过修改其"Default FilePath"的值来设置默认的文件路径。

V=CreateOleObject("Surfer.Application");

V.OlePropertyGet("Documents").OleFunction("Add",1);

(2)数据文件的格点化与白化处理,并绘制等值线。数据文件格点化所用到的函数为“GridData”,白化过程中所用到的地图文件的路径为变量blank。

V.OleFunction("GridBlank",grd,blank,grd);

Plot.OlePropertyGet("Shapes").OleFunction("AddContourMap",grd);

(3)调取分级文件,并利用分级文件来为等值线填色。

CMap=MapFram.OlePropertyGet("Overlays").OleFunction("Item",1);

CMap.OlePropertyGet("Levels").OleFunction("LoadFile",lvl);

(4)添加地图底图与标注,并设置标注的属性。设置标注的位置时是通过设置PMap的属性来实现,而设置标注的字体、大小时则需要通过设置PMapFont的属性来实现。

Plot.OlePropertyGet("Shapes").OleFunction("AddBaseMap",base);

PostMap=Plot.OlePropertyGet("Shapes").OleFunction("AddPostMap",post);

PFont=PostMap.OlePropertyGet("Overlays").OleFunction("Item",1);

PFont.OlePropertyGet("LabelFont").OlePropertySet("Face","宋体");

2.4 应用实例

区域自动气象站是气象监测网的重要组成部分,在防汛抗旱中发挥着重要的作用。利用传统的Surfer绘图方式将区域自动站数据利用等值线的表现出来,步骤虽不复杂,但是比较繁琐。利用BCB调用Surfer,可实现气象数据等值线绘图的自动化,极大地提高了工作效率。

3 结论

利用C++Builder可视化编程软件,通过Surfer提供的Automation接口,可有效地将BCB的强大软件开发功能与Surfer的高效绘图能力无缝地结合起来,具有非常强的实用性。实践证明,利用BCB与surfer的接口技术对surfer进行控制实现自动化绘图是有效的。

参考文献

[1] 毛兴华.一种绘制等值线的新方法[J].测绘信息与工程,2001(4):34-36.

[2] 连志鸾.Surfer二次开发实现加密雨量图自动显示与输出[J].气象科技,2006,34(2):220-224.

[3] 陈欢欢,李星,丁文秀.Surfer8.0等值线绘制中的十二种插值方法[J].工程地球物理学报,2007,4(1):52-57.

[4] 张娟,周秉荣,苏献锋.VB和Surfer实现气象等值线的自动绘图[J].青海气象,2008(3):47-50.