C#调用Surfer接口绘制区域站等值线图

2014-04-08 22:39齐军岐千阳县气象局陕西千阳700宝鸡市气象局陕西宝鸡7006
陕西气象 2014年2期
关键词:等值线图气象要素宝鸡市

王 波 ,齐军岐(.千阳县气象局,陕西千阳 700;.宝鸡市气象局,陕西宝鸡 7006)

C#调用Surfer接口绘制区域站等值线图

王 波1,齐军岐2
(1.千阳县气象局,陕西千阳 721100;2.宝鸡市气象局,陕西宝鸡 721006)

C#;Surfer;区域自动气象站;等值线图

截止2012年底,宝鸡市已建成158个区域自动气象站,实现了多要素的连续动态实时监测,大大增强了灾害性天气的监测预警能力。目前,在对地方的气象服务工作中,各类气象服务材料已必不可少,简单的表格式材料已不能满足当前的服务需求。将Surfer强大的插值、绘图功能和C#编程语言的简单可视化操作以及高效运行效率相结合,利用C#编程语言调用Surfer软件接口的绘图函数,实现区域自动气象站温度和降水资料插值填图、等值线绘制以及色彩填充,将气象资料转化为美观、便于调阅的图像文件,对台站人员更好地应用区域站资料,做好气象服务提供帮助。

1 绘制等值线图流程

首先,利用结构化查询语言(Structured Query Language,简称sql)查询区域站整点数据,结合站点信息动态生成“温度.dat”和“雨量.dat”两个基本气象要素数据文件;接着通过C#调用Surfer软件接口,对基本气象要素数据进行格点化处理,最后加载“宝鸡市底图.bln”、“宝鸡市边界图.bln”两个地图文件和“等级.lvl”色标文件绘制温度、降水等值线色斑图。

2 基本数据文件及格式

2.1 气象要素数据文件

气象要素数据文件(*.dat)的文件格式如下

X Y Z

X0Y0Z0

X1Y1Z1

… … …

XnYnZn

其中第一、二列分别为区域站站点经度和纬度,第三列为气象要素值(如气温、降水量),每行代表一个区域自动气象站的数据。C#生成气象要素数据文件(*.dat)核心代码为

Select 一小时雨量,空气温度 from CawsData where 日期时间=‴ + date + ″0000″ ; (获取区域站雨量和温度数据,date为yyyyMMddhh的时间格式字符串)

StreamReader sr = new StreamReader(baojistation,Encoding.GetEncoding(″GBK″))

(获取区域站经纬度数据)

wendu += station + ″ ″ + T + ″ ″;

StreamWriter sw = new StreamWriter(″温度.dat ″); (生成X、Y、Z格式的“温度.dat”文件)

2.2 地图数据

绘图所需的地图数据为“宝鸡市底图.bln”和“宝鸡市边界图.bln”,包含了市、县边界经纬度数据。宝鸡市底图文件格式为

Length(底图坐标个数) flag(标志)

X0Y0

X1Y1

… …

XnYn

其中length为底图坐标总数,flag为标志位1或0(1代表消除闭合曲线内的等值线,0代表消除闭合曲线外的等值线),Xn、Yn分别代表所辖区县边界经纬度坐标。

宝鸡市边界图与底图格式一样,唯一不同的是边界图包含的是一条连续的边界曲线经纬度坐标,也就是一条闭合曲线,即要求Xn=X0、Yn=Y0。

2.3 色彩填充文件

绘图所需的色彩填充文件为*.lvl格式的色标文件,包含了气象要素值所对应的数量等级颜色值及样式。

3 绘制等值线图

3.1 C#对Surfer软件接口调用引用

首先添加对Surfer软件Interop.Surfer.dll类库文件的引用,然后可以通过编写C#代码实现对Surfer软件各功能的调用,实现宝鸡市区域自动气象站温度、雨量等值线图的绘制。surfer接口引用调用代码

using Surfer; (为C#程序添加Surfer接口引用)

Surfer.Application SurferApp = new Surfer.Application(); (调用Surfer,生成实例对象)

3.2 气象要素数据离散化差值

绘制等值线图需要的数据为格点数据,需要将包含气温、雨量、站点经纬度的气象要素数据转换成格点数据。

气象要素数据格点化转换核心代码为

SurferApp.GridData(datFile,1,2,3,Surfer.SrfDupMethod.srfDupNone,0.03,0.03, ...106.2,108.4,33.4,35.6, Surfer. SrfGridAlgorithm. srfKriging,...); (调用Surfer 实例对象的GridData()方法对气象要素数据进行格点化转换,datFile 为生成的XYZ文件

名,即*.dat文件加路径,0. 03为网格经纬向的分辨率,106.2、33.4分别为起始经、纬度, 108.4、35.6分别为结束经、纬度,插值方法是Kriging方法)

3.3 生成等值线图

气象要素数据通过离散化差值转换为格点数据后,Surfer对格点数据进行Insert平滑处理,通过GridBlank()方法利用“宝鸡市边界.bln”文件去掉地图边界外的区域;建立绘图文档和绘图窗口,将气象要素格点数据生成等值线图添并加到等值面图层;新建并添加色彩填充文件即“等级.lvl”、宝鸡市地图文件、图例、图注等图层,最后将所有图层叠加调用绘图文档的Export()方法生成等值线图并输出。生成等值线图核心代码

SurferApp.GridSplineSmooth(OutGrid, 8, 8, SrfSplineMethod.srfSplineInsert,...); (将格点数据文件进行平滑,平滑方法为Insert,行列的插值点数都为8)

SurferApp.GridBlank(SmoothGrid, BlankFile, ...); (利用“宝鸡市边界.bln”文件去掉地图边界外的区域)

Doc= (Surfer.IPlotDocument)SurferApp.Documents.Add (Surfer.SrfDocTypes.srfDocPlot);

(建立一个绘图文档和一个绘图窗口)

ClassedCounterMap.Levels.LoadFile(LevelFile); (添加等值线图色彩填充文件)

Surfer.IMapFrame mapframe2 = Doc. Shapes. AddBaseMap(BaseFile); (添加宝鸡市底图文件)

sel.OverlayMaps(); (将图层全部选定,进行层叠覆盖)

Doc.Export(OutGrpahic, ...,width=680, height=500, ...) ; (OutGraphic为生成的等值线图片名称,格式可选如png、jpg等 ,680和500为图片的长和宽)

4 结语

C#调用Surfer软件接口既可以充分发挥Surfer软件强大的绘图功能,又可以发挥C#编程强大的人机交互优势,二者相结合所绘制的区域站温度、降水量等值线图可将区域自动气象站观测资料直观和美观的显示出来。

[1] 王建,白世彪,陈晔.Surfer8 地理信息制图[M].北京:中国地图出版社,2004:124-128.

[2] 马玉峰,高春香.VB与Surfer联合编程实现自动绘制气象要素图形[J].内蒙古气象,2010(2):38-40.

[3] 王赟,段燕楠,何俊.基于C#的ASP.NET建立气象数据查询系统[J].电脑编程技巧与维护,2010(13):41-43.

王波,齐军岐.C#调用Surfer接口绘制区域站等值线图[J].陕西气象,2014(2):45-47.

1006-4354(2014)02-0045-03

2013-08-19

王 波(1985—),男,陕西杨陵人,汉族,学士,助理工程师,从事技术保障和气象信息技术开发。

B

猜你喜欢
等值线图气象要素宝鸡市
2010—2019年宝鸡市手足口病流行特征及时空聚集分析
宝鸡市普瑞思电子科技有限公司
成都电网夏季最大电力负荷变化特征及其与气象要素的关系
宝鸡市人民医院简介
沈阳市1951—2013年气候变化特征及其区域蒸发的响应分析
宝鸡市陈仓区:五化提升强堡垒 党建引领扶真贫
北京市朝阳区大气污染物时空分布特征及与气象要素的关系研究
如何来解决等值线问题
探测环境变化对临沭站气象要素的影响
Surfer软件在气象资料自动成图中的应用研究