昔阳区域站数据管理系统设计与实现

(整期优先)网络出版时间:2021-11-04
/ 4

昔阳区域站数据管理系统设计与实现

乔显栋,毋生玮,翟国芳,史贺龙

昔阳县气象局 045400

摘要:昔阳县的区域站数据由各区域站直接通过GPRS方式上传到省气象信息中心的区域气象站数据中心站,然后通过省局内部业务系统进行查看,区域站历史的统计数据的查看有时要经过A、Y文件格式转换,要用地面观测业务软件查看,过程比较繁琐,给我县区域站数据的使用带来诸多的不便。昔阳县气象局设计并实现了适用月本地的区域站数据管理系统。该系统依托MDOS系统或者地面测报业务软件生成的每站每月生成的数据A文件为数据来源,基于C#实现了对A文件的数据解析,并对数据进行分类、分表存储到MySQL数据库,实现了昔阳县区域站数据的统一分类长期存储,并提供了可视化的界面,进行数据的多视图查看。该系统已经投入业务应用,进一步提高了区域站数据的管理、应用能力,为后续区域站数据的二次开发利用提供了有力的支撑。

关键词:区域站;数据管理;A文件;MySQL数据库

区域气象自动站数据是本地农业服务、防灾减灾、气候预测等气象服务的重要的数据基础,对我县业务、服务产品的开发发挥着重要的作用。。目前全国的区域站报文件都传输到省气象信息中心,经过传输、质控、存储等环节,存放于省局的数据库服务器上,由省级CIMISS系统提供数据访问接口实现数据的接入访问。CIMISS系统在访问过程中受局域网网络带宽、数据库查询速度、数据量等因素的限制,为我县区域站数据的频繁访问带来诸多的不便,导致我县区域站数据的利用率不高,合理再利用区域站数据的潜力不大。

为了提高我县访问区域站数据的速度,重新对区域站数据进行整理入库,提高我县区域站数据使用的灵活性。我县局工作人员设计了昔阳县区域气象站数据管理系统,该系统是基于.NET平台开发的桌面应用系统,使用MySQL数据库实现对区域站数据的分类存储,提供了A文件的解析入数据库、区域站数据的查询展示等功能,为后续气象服务产品的制作、防灾减灾等提供了可靠的数据基础。

1、系统总体设计

系统采用分层模块化设计,分为数据库模块、数据显示模块,数据库模块由数据A文件解析模块和数据库操作模块组成,数据显示模块提供了维护视图、统计视图、要素查看视图等三种模式查看数据库数据,其中维护视图可查看区域站历史原始入库数据,统计视图可查看各区域站历史统计数据,要素查看视图可查看逐日每时原始数据。


61832dc7ec8d0_html_315a4b9cb8742d74.gif















图1 模块设计图

61832dc7ec8d0_html_67aaef871c1fef12.gif
















图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各个时段等为字段,以日期为主键,从而实现对区域站各数据要素按日期存储。

61832dc7ec8d0_html_1faefae11ce243cf.png








图3 数据库表图

61832dc7ec8d0_html_b829778f1e73be2c.png









图4 气压要素表图

2.3 数据显示模块:该模块以三种不同的视图方式,查看各区域站数据:维护视图:以站名、时间、各个气象要素等为列名查看气象要素数据,主要用于区域站每个时段数据的查看;统计视图:以站名、时间、各个气象要素等字段统计方式为列名查看气象要素数据,主要用于区域站历史每个时段气象要素统计数据的查看;要素显示视图:以日期、各时段为列名查看各个区域站、各个时段,主要用于区域站各日逐时气象要素数据的查看,同时各个界面提供了时间、站名、气象要素等可选字段自主查询,数据显示使用C#专用数据视图控件GridView绑定DataTable数据,将DataTable表中显示数据,同时实现了数据的分页显示功能,大大增加了区域站数据查询的灵活性。本模块还提供了Excel表格的数据导出功能,导出的气象要素数据科进行编辑、分析、二次开发利用、形成有效的服务产品提供了便利条件。

61832dc7ec8d0_html_f113526a1050bff6.png










图 6 维护视图

61832dc7ec8d0_html_ffd37c1e01ceb6d0.png











图 7 统计视图

61832dc7ec8d0_html_86fde4c5a96b937d.png






图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)男,汉族,山西省昔阳县人,中级工程师,从事研究方向或职业:地面气象观测。