APP下载

应用MUSIC 开发北海区域自动气象站采集系统

2016-12-14卢绍宗

安徽农业科学 2016年32期
关键词:北海市数据表气象站

鲁 玲,卢绍宗

(广西北海市气象局,广西北海 536000)



应用MUSIC 开发北海区域自动气象站采集系统

鲁 玲,卢绍宗

(广西北海市气象局,广西北海 536000)

介绍了北海区域自动气象站采集系统的功能设计、数据库和数据表设计以及系统的实现,并列举了该系统的几个关键技术。该采集系统采用C#开发,通过气象数据统一服务接口MUSIC调用全国综合气象信息共享系统CIMISS的地面资料,更新本地基础气象数据库的自动站采集数据表,为北海市气象现代化服务平台提供可靠、准确的数据。通过业务应用证实,系统运行稳定、性能好。该系统对推进全国综合气象信息共享系统CIMISS业务化、实现业务系统与CIMISS的对接起到了示范作用,具有推广价值。

MUSIC;自动气象站采集系统;CIMISS;C#

随着北海市气象事业的不断发展,建设北海市气象现代化服务平台被列为北海市气象局的重点开发项目。该项目以提升北海市气象局现代化建设的科技内涵、增强气象部门业务服务能力、提高业务服务人员工作效率为目的,充分融合和利用现有业务系统,建成统一信息采集、统一数据存贮、统一加工分析处理、统一产品制作、统一信息发布的集约化、智能化的综合气象业务服务平台。

针对中国气象局推进全国综合气象信息共享系统(China Integrated Meteorological Information Service System,CIMISS)[1]业务化应用的要求,北海市气象现代化服务平台主动完成了与CIMISS的对接。数据库系统是北海市气象现代化服务平台的基础,为各种专业业务系统提供可靠、准确的数据。北海市气象现代化服务平台的数据库系统采用SQL SERVER 2014管理,在当地创建基础气象数据库、预警数据库、预报数据库和系统数据库等[2]。北海区域自动气象站采集系统是北海市气象现代化服务平台的一个后台数据处理软件,该采集系统通过气象数据统一服务接口(Meteorological Unified Service Interface Community,MUSIC)调用CIMISS的北海区域地面资料,更新当地基础气象数据库的自动站采集数据表和系统数据库的采集时间表,为服务平台的数据监控和实况信息展示模块提供数据支撑。笔者介绍了该系统的功能设计、数据库和数据表设计以及系统的实现,并列举了该系统的几个关键技术。

1 系统设计

1.1 系统功能设计 CIMISS是一套覆盖全国的集数据收集与分发、质量控制与产品生成、存储管理、共享服务于一体的国家和省级2级气象信息共享业务平台,以满足目前和未来现代气象业务、科研和服务对气象信息的需求,发展继“9210工程”以来的新一代气象信息系统为目标,为气象部门及相关行业用户提供综合气象探测资料和气象产品的共享服务[3]。气象数据统一服务接口(MUSIC)基于国省统一的数据环境CIMISS,面向气象业务和科研,提供全国统一、标准、丰富的数据访问服务和应用编程接口(API),为国、省、地、县各级应用系统提供唯一权威的数据接入服务。MUSIC针对气象应用系统,提供多种不同的服务方式,包括客户端调用服务、web service、REST服务和脚本服务。其中web service一般使用成熟的第三方工程实现,在CIMISS系统中使用axis2来实现。

北海区域自动气象站采集系统开发应用了MUSIC,采用MUSIC提供的web service方式,从服务器获取wsdl服务,通过API接口账号使用callAPI_to_serializedStr方法,设置参数并调用接口getSurfEleByTimeAndStaID,按时间、站号检索地面数据要素,获取北海区域的地面逐小时资料和地面分钟降水资料,返回JSON格式的序列化字符串。经过进一步处理,实现自动气象站观测数据本地入库存储。

1.2 数据库与数据表设计 为了对气象要素进行统一规范的存储和服务,保证气象数据的一致性和准确性,基础气象数据库(db_bh_qx)和系统数据库(db_bh_xt)的设计参考标准《QX/T 102-2009 气象资料分类与编码》和《QX/T 133-2011 气象要素分类与编码》[4-5]。建库后,在基础气象数据库(db_bh_qx)中创建自动站采集数据表(MsgMediumSmallScale)、自动站采集数据临时表(MsgMediumSmallScaleTemp)和北海自动站站点信息表(SmallScaleStation)等数据表。在系统数据库(db_bh_xt)中创建系统采集时间表(Collect_Time)[6]。其中,自动站采集数据表(MsgMediumSmallScale)用于存储采集到的自动气象站观测要素等数据。

1.3 系统运行环境 系统开发平台为Microsoft Visual Studio 2010,编程使用C#语言,运行于Microsoft Windows Server 2012 R2 Standard,数据库管理软件为SQL SERVER 2014。

2 系统实现

2.1 自定义类的设计 系统开发时设计了处理类AutoStation和AutoStationEntity,工具类DBHelperTool,配置类dbConfig和IniFile,通用类DBHelper和Loghelper。在工具类中添加WebsUtil类和Ws类。类的设计及相关说明如表1所示。

表1 类的设计及相关说明

在AutoStationEntity类中定义11个变量(stationId、stationName、stationLongitude、stationLatitude、stationAltitude、stationObserveElement、stationCity、stationCounty、stationDrainageArea、stationJB、stationCollect),然后在该类中自定义11个属性,分别用来表示自动站的站点编号、站点名称、站点经度、站点纬度、站点海拔、站点要素、站点所属市、站点所属县、站点流域、站点级别和站点是否采集标志格式。 在AutoStation类的selectStation方法中首先实例化一个Hashtable对象hashtable,接着读取北海自动站站点信息表(SmallScaleStation)的列值,将站点编号列值转换为string类型后赋值给stationid;然后实例化AutoStationEntity类的一个对象autoStation,并根据读取到的列值分别给对象autoStation定义的站点编号、站点名称等11个属性赋值;向hashtable中添加元素,该元素的键为stationid,值为autoStation;最后返回hashtable。

2.2 自动气象站数据采集流程 OperationAutoStationData 是AutoStation类的一个方法,用于处理自动站数据,其工作流程如图1所示。

2.3 项目配置 在配置文件CollectPath.ini中添加基础气象数据库(db_bh_qx)和系统数据库(db_bh_xt)的配置信息,包括它们的数据源IP地址、数据库名称、登录用户名及密码等。通过dbConfig类可以读取这些配置信息。在项目中添加app.config文件,在appSettings配置节添加键serverIP并设置IP地址,通过调用ws类从该指定IP地址的服务器上即可获取wsdl服务。

2.4 系统界面 系统运行后,首先创建哈希表stationTable并初始化为null,用于存放区域自动气象站站点信息。新建自动站处理类AutoStation对象,调用Createinstance方法创建实例并赋值给该对象[7]。连接系统数据库(db_bh_xt)表Collect_Time,使用GetLasterCollectTime方法获取自动气象站最新采集时间,若该采集时间不为Null,则将最新采集时间赋值给日期控件。系统界面如图2所示。

图1 区域自动气象站数据采集流程Fig.1 Collection process of regional automatic weather station data

图2 北海区域自动气象站采集系统界面Fig.2 The interface of collection system of Beihai regional automatic weather stations

通过系统界面的日期控件可以设置采集时间,点击“修改”按钮可将系统数据库(db_bh_xt)表Collect_Time的采集时间更改为日期控件设定的时间值。点击“启动采集”按钮,若stationTable表行数为0,则使用AutoStation类的selectStation方法从表SmallScaleStation获取北海区域自动站站点信息。然后按采集时间和自动站站号通过MUSIC获取相应的要素数据,将数据进行处理后保存到基础气象数据库(db_bh_qx)的自动站采集数据表(MsgMediumSmallScale)和自动站采集数据临时表(MsgMediumSmallScaleTemp),并更新系统采集时间表(Collect_Time)的采集时间。在实际运行中,将北海区域自动气象站采集系统可执行文件写进批处理文件,并设置该批处理文件每隔15 min自动运行1次。通过对基础气象数据库(db_bh_qx)的访问,在北海市气象现代化服务平台上可以查询到北海区域自动站的实况数据(图3)。

3 系统的关键技术

3.1 数据契约的使用 数据契约(DataContract)是服务器端和客户端之间要传送的自定义数据类型。一旦声明一个类型为DataContract,该类型就可以被序列化在服务器端和客户端之间传送。根据实际情况,需要把每一个要传送的成员声明为DataMember。系统开发时,在WebsUtil类定义数据契约SK和Rain, 区域自动气象站数据采集处理过程要用到这2种数据契约。在数据契约SK和Rain中将相关的要素字段代码声明为DataMember。根据MUSIC中的要素代码定义,在数据契约SK中声明Station_Id_C、Datetime、WIN_D_Avg_2mi、WIN_S_Avg_2mi、WIN_D_Avg_10mi等53个DataMember,在数据契约Rain中声明Station_Id_C、Datetime、PRE等6个DataMember。

图3 北海区域自动站实况数据查询Fig.3 Live data query of Beihai regional automatic weather stations

3.2 JavaScriptSerializer类的使用 JavaScriptSerializer类位于System.Web.Script.Serialization命名空间下。客户端的序列化与反序列化能力由JavaScriptSerializer类的Serialize和Deserialize 2个方法提供。通过web service方式调用方法callAPI_to_serializedStr,并将获得的JSON字符串转换为List类型对象,反序列化后的字符串经过处理再转换为自动站采集数据表(MsgMediumSmallScale)的列值。程序关键代码如下:

param = "userId=BENN_XXXX_XXXXXX" /*1.1 用户名&密码*/

+ "&pwd=XXXXXX"

+ "&interfaceId=getSurfEleByTimeAndStaID" /* 1.2 接口ID */

+ "&dataCode=SURF_CHN_MUL_HOR" /* 1.3 必选参数(按需加可选参数) */

//资料:中国地面逐小时

+ "&elements=Station_Id_C,Datetime,WIN_D_Avg_2mi,WIN_S_Avg_2mi,WIN_D_Avg_10mi,WIN_S_Avg_10mi, WIN_D_S_Max,WIN_S_Max,WIN_S_Max_OTime,WIN_D_INST,WIN_S_INST,WIN_D_INST_Max,WIN_S_Inst_Max,WIN_S_INST_Max_OTime,PRE_1h,TEM,TEM_Max,TEM_Max_OTime,TEM_Min,TEM_Min_OTime,RHU,RHU_Min,RHU_Min_OTIME,VAP,DPT,PRS,PRS_Max,PRS_Max_OTime,PRS_Min,PRS_Min_OTime,LGST,LGST_Max,LGST_Max_OTime,LGST_Min,LGST_Min_OTime,GST,GST_Max,GST_Max_Otime,GST_Min,GST_Min_OTime,GST_5cm,GST_10cm,GST_15cm,GST_20cm,GST_40Cm,GST_80cm,GST_160cm,GST_320cm,EVP_Big,PRS_Sea,VIS_HOR_10MI,VIS_Min,VIS_Min_OTime,Lat,Lon,Alti" //检索要素:站号、站名、小时降水、气压、相对湿度、能见度、2 min平均风速、2 min风向等

+ "×=" + datetime.ToString("yyyyMMddHH0000") //检索时间

+ "&staIds=" + strStationId

+ "&orderby=Station_ID_C:ASC" //排序:按照站号从小到大

+ "&limitCnt=300" //返回最多记录数

+ "&dataFormat=json"; /* 1.4 序列化格式 */

……

WebsUtil websUtil = new WebsUtil();

string rstData = websUtil.getWsString("callAPI_to_serializedStr", param);

int index = rstData.IndexOf(""DS"");

rstData = rstData.Substring(index + 5, rstData.Length - index - 6);

JavaScriptSerializer js = new JavaScriptSerializer();

List sklist = js.Deserialize(rstData, typeof(List)) as List;

3.3 SqlHelper类的使用 SqlHelper类位于System.Data.SqlClient命名空间下,是对数据库操作方法进行封装的类。SqlHelper类的ExecuteNonQuery方法用于执行不返回任何行或值的命令,如非查询类SQL语句。SqlHelper类的ExecuteReader方法执行查询类的SQL语句或存储过程,用于返回SqlDataReader对象,该对象包含由某一命令返回的结果集。ExecuteScalar方法通过已有的数据库连接执行SqlCommand,返回值是该命令返回的第1行的第1列。

在方法selectStation、GetLasterCollectTime、OperationAutoStationData中使用了SqlHelper类。部分程序代码如下:

String strsql = "SELECT [StationID],[StationName],[Province],[City],[County],[Longitude],[Latitude],[Altitude],[StationModel],[ObserveElement],[DrainageArea],[Tributaries],[StartTime],[Jb] FROM [SmallScaleStation] ";

SqlDataReader sqlreader = SqlHelper.ExecuteReader(conn, CommandType.Text, strsql);

3.4 方法重载 方法重载是指调用同一方法名,但各方法中参数的数据类型、个数或顺序不同。只要类中有2个以上的同名方法,且使用的参数类型、个数或顺序不同,调用时编译器就可以判断在哪种情况下调用哪种方法[7]。在设计DBHelper类的方法ExecuteNonQuery时用到了方法重载。程序关键代码如下:

public static int ExecuteNonQuery(SqlConnection connection, CommandType commandType, string commandText)

// 执行指定数据库连接对象的命令

{

return ExecuteNonQuery(connection, commandType, commandText, (SqlParameter[])null);

}

4 结语

北海区域自动气象站采集系统自2016年5月在北海市气象局进行业务试运行以来,能正常采集北海区域41个自动站的地面逐小时资料和地面分钟降水资料,系统运行稳定、性能好,为北海市气象现代化服务平台的数据监控和实况信息展示模块提供了数据支撑。该系统对推进全国综合气象信息共享系统CIMISS业务化、实现业务系统与CIMISS的对接起到了示范作用,具有推广价值。

[1] 熊安元,赵芳,王颖,等.全国综合气象信息共享系统的设计与实现[J].应用气象学报,2015,26(4):500-512.

[2] 李集明,王国复.气象数据库系统总体设计综述[J].气象科技,2007,35(Sl):1-5.

[3] 王旻燕,邓莉,赵芳,等.CIMISS中气象卫星数据存储和服务模型[J].安徽农业科学,2012,40(8):4785-4789.

[4] 国家气象信息中心.气象资料分类与编码:QX/T 102—2009[S].北京:气象出版社,2009.

[5] 国家气象信息中心.气象要素分类与编码:QX/T 133—2011[S].北京:气象出版社,2011.

[6] 于平,李汉彬,段海花,等.市级自动气象站数据库显示系统的设计与实现[J].广东气象,2008,30(6):57-58.

[7] 王小科.C#开发实战宝典[M].北京:清华大学出版社,2012:159.

Development of Collection System of Beihai Regional Automatic Weather Stations Using MUSIC

LU Ling,LU Shao-zong

(Beihai Meteorological Bureau, Beihai ,Guangxi 536000)

This paper introduced the function design, the design of database and data table and system realization of collection system of Beihai regional automatic weather stations, and enumerated several key technologies of the system.The collection system was implemented by C# programming language and got the surface data of China integrated meteorological information service system using meteorological unified service interface community,updated the collection data table of automatic stations of local fundamental meteorological database,which provided accurate and reliable data for Beihai meteorological modernization service platform. The operational application indicated the system performed stably and had good characteristics. The system had a demonstration for promoting operational application of CIMISS and achieving the integration of business systems and CIMISS in Guangxi. The system had promotion value.

MUSIC;Collection system of automatic weather stations;CIMISS;C#

北海市科学技术局项目(北科合201503004,北科合20160 3001)。

鲁玲(1974- ),女,广西北海人,工程师,从事气象信息化建设工作。

2016-09-05

S 163+.7

A

0517-6611(2016)32-0179-05

猜你喜欢

北海市数据表气象站
珠峰上架起世界最高气象站
北海市西村港跨海大桥主桥总体设计
心灵气象站
北海市冯家江水质监测与评价
基于列控工程数据表建立线路拓扑关系的研究
自动气象站应该注意的一些防雷问题
图表
基于VSL的动态数据表应用研究
自动气象站常见故障判断与维护
北海市少年儿童图书馆举行“2013全国少年儿童阅读年”启动仪式