马 彬,唐红昇,肖 晨,李玉涛,牛霭琛
(1.江苏省气象信息中心,江苏南京 210008;2.江苏省淮安市气象局,江苏淮安 223001)
我国是世界上渍涝灾害频繁发生的国家之一,每年不同程度的渍涝危害给农业生产造成了巨大的损失。对农业渍涝的监测预警服务一直是农业气象业务工作的重点内容之一[1]。多年来,江苏省在农田旱涝监测与评估方面也在不断研究之中,由于研究所采用的指标大多是以旬为时间尺度,实时气象防灾减灾的应用意义较小[2]。随着信息化技术的飞速发展,自动气象观测站已广泛应用于数据采集的日常工作中,实时气象观测数据的获取也将更加方便,减少研究所采用指标的时间尺度需求也变得更加紧迫。为更好地向全省农业气象平台及农田旱涝监测预警提供实时、准确的基础数据环境,笔者设计了江苏气象日均数据处理系统,该系统利用JAVA语言的简单、可靠和安全等特性,同时充分结合绿色可移植的嵌入式数据库SQLite[3-4],实现了江苏省70个国家基本站的降水、温度、日照百分率等13种气象要素日均数据的实时处理、标准化存储和系统应用的简易性部署功能。
江苏气象日均数据处理系统主要由数据读取、数据处理和数据存储模块构成,其总体架构分为多源数据层、数据处理层和数据应用层(图1)。
在数据读取模块中,针对不同需求的要素数据,考虑到源数据获取方式的差异性,同时要保证系统源数据的完整性与准确性,在设计开发中采用江苏气象一体化数据库,辅以嵌入式数据库SQLite作为源数据的支撑库。数据处理模块主要对读取的数据进行统计对比、质量控制和数值计算等处理操作,生成系统所需的每日平均值和24个时次总量等数据(图2a)。数据存储模块则对结果数据按照数据应用层中服务平台的数据接口标准进行数据的格式化处理,形成本地文本式存储(图2b)。
由于系统每日4个时次的均值需要当天20:00的数据,因此该系统默认设置的定时执行时间为每日的21:00。此外,用户可以在SystemConfig.properties配置文件中修改定时执行时间、文件保存路径等参数,就可以动态、灵活地调整系统相应的基础配置信息(图2c~e)。
2.1数据读取模块设计
2.1.1常规数据JDBC读取。数据的获取是气象日均数据处理系统的基础,数据读取模块执行获取气象源数据的操作,并将所有获取的数据资料统一推送至数据处理模块进行计算。根据系统开发应用的数据需求,对Oracle数据库中已有的原始数据,如站名、站号、平均气温、最高气温、最低气温、气压、风速等12类要素,采用JDBC(Java DataBase Connectivity,JAVA数据库连接)[5-7]可直接从江苏一体化Oracle数据库中获取,主要代码如下:
//加载Oracle驱动
Class.forName("oracle.jdbc.driver.OracvleDriver");
//获取数据库连接
Connection con = DriverManager.getConnection
("jdbc:odbc:wombat","login","password");
//创建Statement对象
Statement stmt = con.createStatement();
//获取数据集
ResultSet rs = stmt.executeQuery(sql);
//释放资源
rs.close();
stmt.close();
con.close();
2.1.2嵌入式数据库应用。可照时数是太阳中心自出地平线至入地平线,其直射光线在无地障及云雾烟尘遮掩情况下照耀地面的时间[8]。目前,可照时数无法从现有自动站观测采集仪器直接获取,因此在本地一体化数据库中没有此类数据为该系统提供源数据支撑,也就无法计算出系统所需的日照百分率。
图1 系统架构Fig.1 The architecture of the system
图2 气象日均数据处理系统实现展示Fig.2 The implementation display of meteorological daily average data processing system
经研究分析,对于上述较小数据量和低消耗量类型的数据,该系统采用SQLite嵌入式数据库建立业务所需的江苏省70个国家基本站可照时数基础数据,并将此数据库嵌入到程序中作为可照时数的源数据,通过应用程序中的JDBC API来获取数据。SQLite整体架构如图3所示。
图3 SQLite整体架构Fig.3 The overall architecture of SQLite
考虑到除去外界环境因素,每个地点的可照时数的变化比较微小,可根据经验统计近似确定各站点在每日的可照时数[9]。该系统在开发中采用站号、日期以及可照时数的关系对应方式来解决可照时数的源数据获取问题[10-12],其数据库表设计如图4所示。
通过上述设计,气象日均数据处理系统可以有效、快速、
灵活地获取可照时数和常规气象数据,满足了科研和农业气象等不同应用场合对其源数据获取的基本需求。
2.1.3配置文件数据处理。为了体现系统的灵活性,便于用户根据需求进行相关参数的更改和设置,该系统设计了对配置文件的处理。JAVA中的配置文件为properties文本文件,与系统相关的配置信息主要以“键=值”的形式保存在其中,其文件后缀一般为properties格式,通常在properties文件中,用“#”将与配置信息相关的标注进行注释。JAVA中对配置文件的读取主要依靠Properties类,其方法如表1所示。
该系统对配置文件的操作主要代码如下:
//创建Properties对象
properties = new Properties();
//要读取的配置文件的路径和名称
String FilePath = System.getProperty("user.dir")+"/SystemConfig.Properties";
//读取配置路径下的配置文件
InputStream in = new BufferedInputStream(new FileInputStream(FilePath));
//加载配置文件
properties.load(in);
图4 SQLite可照时数数据库表设计Fig.4 The database table design of SQLite possible sunshine duration
方法Method参数类型Typesofparameters参数Parameters描述DescriptiongetProperty()Stringkey用指定的键在此属性列表中搜索属性,通过参数key,得到key所对应的valueLoad()InputStreaminStream从输入流中读取属性列表(键和元素对),通过对指定的文件进行装载来获取该文件中的所有键-值对SetProperty()StringKey,value调用Hashtable的方法put来设置键-值对Store()OutputStream,StringOut,comments将此Properties表中的属性列表(键和元素对)写入输出流,即将键-值对写入到指定的文件中去,与load方法相反Clear()清除所有装载的键-值对
2.2数据处理模块设计
2.2.1数据质量控制。数据质量控制是气象日均数据处理系统的核心。数据质量控制的对象主要是业务开发所需的气温、降水量、日照时数、水汽压、气压、风速以及相对湿度等重要数据资料。
该模块首先对获取的源数据进行时间和空间上一致性检查以及初级质控处理,即对异常、缺测的源数据采用数据阀值和字符串长度解析进行判断过滤,并根据应用接口标准,将其设定为“-888”字符值,便于后续业务人员对存储文件数据的使用。质量控制模块数据流程如图5所示。
图5 质量控制模块数据流程Fig.5 Data flow of quality control module
2.2.2数值计算处理。针对不同需求的平均值数据,采用对应的计算方法实行数据计算处理,主要分为每日4个时次的平均值、每日24个时次的总量以及日照百分率。
2.2.2.1每日4个时次数值平均值及24个时次统计总量。每日4个时次的平均值为每日02:00、08:00、14:00、20:00 4个时次的平均值,其计算表达公式如下:
(1)
在该数据计算中,需要处理的数据要素为日平均气温、日平均水汽压、日平均气压、日平均相对湿度以及日平均风速。
每日24个时次的总量为前一天20:00至当日20:00的数值总和,降水量数据就采用该种处理方法。
2.2.2.2日照百分率。每日的日照百分率为日照时数占可照时数的百分比,其计算公式如下:
日照百分率=日照时数/可照时数×100%
(2)
其中,日照时数可通过Oracle中的小时日照表获取,可照时数可通过SQLlite数据库中可照时数表的可照时数字段获取。
2.2.2.3每日最小相对湿度。每日的最小相对湿度则取02:00、08:00、14:00、20:00 4个时次的相对湿度最小值,其计算表达公式如下:
Umin=MIN{Ui}(i=02,08,14,20)
(3)
式中,Ui表示下标时刻的数值,Umin表示相对湿度最小值。
通过上述计算处理方法,从数据读取模块获取的所有源数据,在该模块中可得到经过质控及计算处理流程后的结果数据。
2.3数据存储模块设计气象资料数据的存储方式通常分为数据库表和文件2种存储方式,以数据库表形式存储的数据为结构化数据,非结构化数据则通常采用文件方式存储。根据系统开发需求,同时考虑到该数据为日常业务工作中使用次数较多,但每日数据量较少的数据,采用非结构化的文本方式存储既可避免对江苏本地数据库增加链接访问的压力,又能实时地为业务、科研人员提供其所需的文本数据。
按照应用层业务需求,每一行只存储一个站号的数据,依次按照站名、站号、日平均气温、日最高气温、日最低气温、日降水总量(前一天20:00至当天20:00)、日照时数、日照百分率、日平均水汽压、日平均气压、日平均风速、日平均相对湿度以及日最小相对湿度排序,并以半角字符 “,”作为数据分隔符进行数据存储。采用上述特定分隔符和要素排列顺序整理数据存储结构并写入文件,可为前端使用的业务平台和科研人员解析文件中的数据提供便利,满足业务应用的实际需求。
该研究介绍了基于JAVA的气象日均数据处理系统功能模块设计、数据处理流程以及气象数据标准化处理、嵌入式数据库等关键技术。该系统从业务应用和研究需求的实际情况出发,基于JAVA Eclipse集成开发环境,利用JDBC、SQLite嵌入式等技术,实现农业气象业务平台基础数据的实时处理功能。
(1)气象日均数据系统依托江苏气象统一数据环境,采用JAVA语言开发、气象数据标准化处理、嵌入式数据库等关键技术,实现江苏省70个国家基本站的降水、温度、日照百分率等13种气象要素日均数据的实时处理与标准化存储等功能。该系统具有资源占用少、管理成本低、部署灵活性高、数据实用性、稳定性强等特点,在农业气象基础数据服务中取得了较好的应用效果。
(2)该系统的数据读取模块采用嵌入式数据库技术,一方面有效地解决了系统所需源数据在统一数据环境中获取的局限性问题,另一方面也减轻了对现有实时业务数据库的访问请求压力,进一步提升了气象为农业定制化数据的服务能力,同时也有助于提升气象信息集约化应用效率的水平。
(3)该系统自2015年5月以来通过江苏省农业气象业务平台为农业防灾抗涝提供实时决策的基础数据环境服务,现已稳定运行2年,在江苏省旱涝监测工作中发挥了重要作用,取得了良好的农业气象服务效果。笔者将根据业务和科研应用的精细化需求,对其进行进一步的优化设计。
[1] 廖永丰,聂承静,杨林生,等.洪涝灾害风险监测预警评估综述[J].地理科学进展,2012,31(3):361-367.
[2] 张旭晖,杨洪建,葛淑芬,等.江苏渍涝灾害气象监测预警[J].中国农学通报,2015,31(35):187-192.
[3] ECKEL B.Java 编程思想[M].陈昊鹏,译.北京:机械工业出版社,2002.
[4] 王冠宇,关永,赵冬生.JAVA在SQLite嵌入式数据库中的应用[J].微计算机信息, 2006,22(1/2): 94-95.
[5] 刘丽珏.JDBC与Java 数据库程序设计[M].北京:人民邮电出版社,2001.
[6] REESE G. Database Programming with JDBC and JAVA[M].Sebastopol: O′Reilly Media Inc., 2000.
[7] 李兴华.Java 开发实战经典[M].北京:清华大学出版社,2009.
[8] 李金城.可照时数的微机计算程序[J].气象,1986,12(10):33-34.
[9] 王昌明.可照时数和太阳高度角计算公式的简化证明[J].山东气象,1989(2):46-48.
[10] 高艳云.气象资料数据库管理系统的设计及其实现[J].电子技术与软件工程,2014(21): 206.
[11] GUAN X M,LIU Y,XU L X,et al.The research to the application of embedded database SQLite [J].Journal of Yangzhou College of Education, 2008(3):7.
[12] XUE B.The application of embedded database SQLite in Java [J].Journal of Tianjin Vocational Institutes,2008(4):40.