馬 彬,唐紅昇,肖 晨,李玉濤,牛靄琛
(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.