昔阳县气象局 045400
摘要:昔阳县的区域站数据由各区域站直接通过GPRS方式上传到省气象信息中心的区域气象站数据中心站,然后通过省局内部业务系统进行查看,区域站历史的统计数据的查看有时要经过A、Y文件格式转换,要用地面观测业务软件查看,过程比较繁琐,给我县区域站数据的使用带来诸多的不便。昔阳县气象局设计并实现了适用月本地的区域站数据管理系统。该系统依托MDOS系统或者地面测报业务软件生成的每站每月生成的数据A文件为数据来源,基于C#实现了对A文件的数据解析,并对数据进行分类、分表存储到MySQL数据库,实现了昔阳县区域站数据的统一分类长期存储,并提供了可视化的界面,进行数据的多视图查看。该系统已经投入业务应用,进一步提高了区域站数据的管理、应用能力,为后续区域站数据的二次开发利用提供了有力的支撑。
关键词:区域站;数据管理;A文件;MySQL数据库
区域气象自动站数据是本地农业服务、防灾减灾、气候预测等气象服务的重要的数据基础,对我县业务、服务产品的开发发挥着重要的作用。。目前全国的区域站报文件都传输到省气象信息中心,经过传输、质控、存储等环节,存放于省局的数据库服务器上,由省级CIMISS系统提供数据访问接口实现数据的接入访问。CIMISS系统在访问过程中受局域网网络带宽、数据库查询速度、数据量等因素的限制,为我县区域站数据的频繁访问带来诸多的不便,导致我县区域站数据的利用率不高,合理再利用区域站数据的潜力不大。
为了提高我县访问区域站数据的速度,重新对区域站数据进行整理入库,提高我县区域站数据使用的灵活性。我县局工作人员设计了昔阳县区域气象站数据管理系统,该系统是基于.NET平台开发的桌面应用系统,使用MySQL数据库实现对区域站数据的分类存储,提供了A文件的解析入数据库、区域站数据的查询展示等功能,为后续气象服务产品的制作、防灾减灾等提供了可靠的数据基础。
1、系统总体设计
系统采用分层模块化设计,分为数据库模块、数据显示模块,数据库模块由数据A文件解析模块和数据库操作模块组成,数据显示模块提供了维护视图、统计视图、要素查看视图等三种模式查看数据库数据,其中维护视图可查看区域站历史原始入库数据,统计视图可查看各区域站历史统计数据,要素查看视图可查看逐日每时原始数据。
图1 模块设计图
图2 数据流图
2、系统实现
2.1 A文件解析模块:A文件主要从MDOS系统或者地面观测业务软件生成下载而来,其格式为文本文件,是气象部门存储每月气象数据的文件,是气象上最早存储气象资料的方式之一,到目前为止主要的地面观测业务系统还在使用。该文件主要由台站参数、观测数据、质量控制、附加信息四个部分组成,其中观测数据由20个地面要素构成,每个要素在文件中的排列顺序是固定的。20个要素由(指示码)进行界定,其排列顺序是:气压(P)、气温(T)、湿球温度(I)、水汽压(E)、相对湿度(U)、云量(N)、云高(H)、云状(C)、能见度(V)、降水量(R)、天气现象(W)、蒸发量(L)、积雪(Z)、电线积冰(G)、风(F)、浅层地温(D)、深层地温(K)、冻土深度(A)、日照时数(S)、草面(雪面)温度(B)。其中部分要素进行了归并如海平面气压归并到气压,露点温度归并到湿球温度,地面状态归并到草面(雪面)温度,整体形成该要素的一个数据段。昔阳县现有区域自动气象站19个其中六要素(气压、温度、湿度、风向、风速、雨量)区域站6个,五要素(气压、温度、风向、风速、雨量)区域站1个,四要素(温度、风向、风速、雨量)区域站2个,两要素(温度、雨量)区域站5个,单要素(雨量)区域站5个,分别安装于昔阳县全部11个乡镇,每个区域站每月可在MDOS系统中生成一份A文件。该文件解析模块以A文件指示码进行界定,对A文件的各要素数据段进行循环解析。如气压要素解析代码:
private DataTable P_parser(ref DataRow dataRow, string[] metaData, DataTable pTable, ref int kCount, ref int day)
{
//正则表达式验证格式的有效性
Regex re = new Regex(@"^[\d|\/]{4}$");
if (re.IsMatch(metaData[0]))
{
for (int j = 0; j < metaData.Length; j++)
{
if (Regex.IsMatch(metaData[j], @"^(\d|\/){4}\.$"))
{
if(j==13&&Convert.ToInt16(metaData[j].Substring(0, 4)) >9000)
dataRow[kCount+1] = metaData[j].Substring(0, 4);
else
dataRow[kCount] = metaData[j].Substring(0, 4);
pTable.Rows.Add(dataRow);
dataRow = pTable.NewRow();
dataRow["date"] = day;
day++;
kCount = 1;
continue;
}
if (re.IsMatch(metaData[j]))
{
dataRow[kCount] = metaData[j];
kCount++;
}
//解析海平面气压
if (Regex.IsMatch(metaData[j], @"^(\d|\/){4}\=$"))
{
if (j == 13 &&Convert.ToInt16(metaData[j].Substring(0, 4)) > 9000)
dataRow[kCount + 1] = metaData[j].Substring(0, 4);
else
dataRow[kCount] = metaData[j].Substring(0, 4);
pTable.Rows.Add(dataRow);
kCount = 1;
day = 1;
break;
}
}
}
return pTable;
}
各气象要素分类转化成C#特有的DataTable数据结构分类进行临时存储,为后续的数据入库提供基础。
2.2 数据库操作模块:本系统采用MySQL数据库存储区域站数据,在本店建立MySQL数据库管理系统,MySQL是一个关系型数据库管理系统,是Oracle旗下产品,该数据库管理系统简单、易用、体积小、速度快,非常适合存储中大规模的我县的区域站要素数据存储使用,数据库操作模块通过调用MySql.Data.dll动态链接库文件建立了MySQL数据库的连接,调用SQL语句实现对数据库区域站各气象要素表的增、删、改、查等操作,其中该模块还实现了各气象要素DataTable表到数据库各要素表存储转化。代码如下:
//数据表格存储入数据库
public static void DataTableToMySql(DataTable SourceTable,String destinationTable,String month)
{
if(Convert.ToInt16(ExecuteScalar("select count(adate) from " + destinationTable + " where adate like \'" + month + "%\'")) > 0)
return;
using (MySqlConnection destinationConnection = new MySqlConnection(connstr))
{ //打开数据库连接
destinationConnection.Open();
using(MySqlCommand cmd=new MySqlCommand())
try
{
string cmdtext;
cmd.Connection = destinationConnection;
//向数据表插入元素数据
foreach(DataRow dataRow in SourceTable.Rows)
{
cmdtext = "insert into " + destinationTable + "(" + ColumnName(destinationTable) + ") values(" + GetValues(dataRow,month) +")";
cmd.CommandText = cmdtext;
cmd.ExecuteNonQuery();
}
}
catch(Exception ex)
{
Console.Write(ex.ToString());
}
finally
{
destinationConnection.Close();
}
}
}
区域站数据库以“区站号+要素”分别建立数据表,数据表主要以日期、0-23各个时段等为字段,以日期为主键,从而实现对区域站各数据要素按日期存储。
图3 数据库表图
图4 气压要素表图
2.3 数据显示模块:该模块以三种不同的视图方式,查看各区域站数据:维护视图:以站名、时间、各个气象要素等为列名查看气象要素数据,主要用于区域站每个时段数据的查看;统计视图:以站名、时间、各个气象要素等字段统计方式为列名查看气象要素数据,主要用于区域站历史每个时段气象要素统计数据的查看;要素显示视图:以日期、各时段为列名查看各个区域站、各个时段,主要用于区域站各日逐时气象要素数据的查看,同时各个界面提供了时间、站名、气象要素等可选字段自主查询,数据显示使用C#专用数据视图控件GridView绑定DataTable数据,将DataTable表中显示数据,同时实现了数据的分页显示功能,大大增加了区域站数据查询的灵活性。本模块还提供了Excel表格的数据导出功能,导出的气象要素数据科进行编辑、分析、二次开发利用、形成有效的服务产品提供了便利条件。
图 6 维护视图
图 7 统计视图
图8 要素显示视图
3.结语
昔阳县区域站数据管理系统的建立,实现了对我县各区域站数据存取、查询、检索等功能和对各区域站数据的统一管理。把质量控制过的A文件数据导入到建立好的MySQL数据库的各要素表中,为了实现对数据的查看,设计了数据查询的界面,提供了数据要素、统计、日数据等方式的查询方式,提供了Excel表格的数据导出功能,为以后的气候分析、气象灾害风险评估、防灾减灾区划、农业气象区划等气象服务工作提供了更好的数据支撑。为气象服务产品的二次开发提供了更有力的支持。
参考文献
[1]罗鹏斌,祁晓龙,孙玉莲,黄成秀,杨东旭,李芸,汪琪.临夏州气象基础数据支撑系统研究 现代农业科技 2016年第9期:241-243.
[2]王若瞳,黄向东,张博,等海量气象数据实时解析与存储系统的设计与实现[J].计算机工程与科学,2015(11):2045-2054.
[3]黄锐,任伟颖,蓝天飞.人工读取区域自动气象站存储数据的方法与技巧[J].气象水文海洋仪器,2015(2):87-90.
[4]张威.C#语言基础教程[M].北京:人民邮电出版社,2001.
作者简介:乔显栋(1984.09)男,汉族,山西省昔阳县人,中级工程师,从事研究方向或职业:地面气象观测。