馬 彬,唐紅昇,肖 晨,李玉濤,牛靄琛
(1.江蘇省氣象信息中心,江蘇南京 210008;2.江蘇省淮安市氣象局,江蘇淮安 223001)
我國(guó)是世界上漬澇災(zāi)害頻繁發(fā)生的國(guó)家之一,每年不同程度的漬澇危害給農(nóng)業(yè)生產(chǎn)造成了巨大的損失。對(duì)農(nóng)業(yè)漬澇的監(jiān)測(cè)預(yù)警服務(wù)一直是農(nóng)業(yè)氣象業(yè)務(wù)工作的重點(diǎn)內(nèi)容之一[1]。多年來(lái),江蘇省在農(nóng)田旱澇監(jiān)測(cè)與評(píng)估方面也在不斷研究之中,由于研究所采用的指標(biāo)大多是以旬為時(shí)間尺度,實(shí)時(shí)氣象防災(zāi)減災(zāi)的應(yīng)用意義較小[2]。隨著信息化技術(shù)的飛速發(fā)展,自動(dòng)氣象觀測(cè)站已廣泛應(yīng)用于數(shù)據(jù)采集的日常工作中,實(shí)時(shí)氣象觀測(cè)數(shù)據(jù)的獲取也將更加方便,減少研究所采用指標(biāo)的時(shí)間尺度需求也變得更加緊迫。為更好地向全省農(nóng)業(yè)氣象平臺(tái)及農(nóng)田旱澇監(jiān)測(cè)預(yù)警提供實(shí)時(shí)、準(zhǔn)確的基礎(chǔ)數(shù)據(jù)環(huán)境,筆者設(shè)計(jì)了江蘇氣象日均數(shù)據(jù)處理系統(tǒng),該系統(tǒng)利用JAVA語(yǔ)言的簡(jiǎn)單、可靠和安全等特性,同時(shí)充分結(jié)合綠色可移植的嵌入式數(shù)據(jù)庫(kù)SQLite[3-4],實(shí)現(xiàn)了江蘇省70個(gè)國(guó)家基本站的降水、溫度、日照百分率等13種氣象要素日均數(shù)據(jù)的實(shí)時(shí)處理、標(biāo)準(zhǔn)化存儲(chǔ)和系統(tǒng)應(yīng)用的簡(jiǎn)易性部署功能。
江蘇氣象日均數(shù)據(jù)處理系統(tǒng)主要由數(shù)據(jù)讀取、數(shù)據(jù)處理和數(shù)據(jù)存儲(chǔ)模塊構(gòu)成,其總體架構(gòu)分為多源數(shù)據(jù)層、數(shù)據(jù)處理層和數(shù)據(jù)應(yīng)用層(圖1)。
在數(shù)據(jù)讀取模塊中,針對(duì)不同需求的要素?cái)?shù)據(jù),考慮到源數(shù)據(jù)獲取方式的差異性,同時(shí)要保證系統(tǒng)源數(shù)據(jù)的完整性與準(zhǔn)確性,在設(shè)計(jì)開(kāi)發(fā)中采用江蘇氣象一體化數(shù)據(jù)庫(kù),輔以嵌入式數(shù)據(jù)庫(kù)SQLite作為源數(shù)據(jù)的支撐庫(kù)。數(shù)據(jù)處理模塊主要對(duì)讀取的數(shù)據(jù)進(jìn)行統(tǒng)計(jì)對(duì)比、質(zhì)量控制和數(shù)值計(jì)算等處理操作,生成系統(tǒng)所需的每日平均值和24個(gè)時(shí)次總量等數(shù)據(jù)(圖2a)。數(shù)據(jù)存儲(chǔ)模塊則對(duì)結(jié)果數(shù)據(jù)按照數(shù)據(jù)應(yīng)用層中服務(wù)平臺(tái)的數(shù)據(jù)接口標(biāo)準(zhǔn)進(jìn)行數(shù)據(jù)的格式化處理,形成本地文本式存儲(chǔ)(圖2b)。
由于系統(tǒng)每日4個(gè)時(shí)次的均值需要當(dāng)天20:00的數(shù)據(jù),因此該系統(tǒng)默認(rèn)設(shè)置的定時(shí)執(zhí)行時(shí)間為每日的21:00。此外,用戶可以在SystemConfig.properties配置文件中修改定時(shí)執(zhí)行時(shí)間、文件保存路徑等參數(shù),就可以動(dòng)態(tài)、靈活地調(diào)整系統(tǒng)相應(yīng)的基礎(chǔ)配置信息(圖2c~e)。
2.1數(shù)據(jù)讀取模塊設(shè)計(jì)
2.1.1常規(guī)數(shù)據(jù)JDBC讀取。數(shù)據(jù)的獲取是氣象日均數(shù)據(jù)處理系統(tǒng)的基礎(chǔ),數(shù)據(jù)讀取模塊執(zhí)行獲取氣象源數(shù)據(jù)的操作,并將所有獲取的數(shù)據(jù)資料統(tǒng)一推送至數(shù)據(jù)處理模塊進(jìn)行計(jì)算。根據(jù)系統(tǒng)開(kāi)發(fā)應(yīng)用的數(shù)據(jù)需求,對(duì)Oracle數(shù)據(jù)庫(kù)中已有的原始數(shù)據(jù),如站名、站號(hào)、平均氣溫、最高氣溫、最低氣溫、氣壓、風(fēng)速等12類要素,采用JDBC(Java DataBase Connectivity,JAVA數(shù)據(jù)庫(kù)連接)[5-7]可直接從江蘇一體化Oracle數(shù)據(jù)庫(kù)中獲取,主要代碼如下:
//加載Oracle驅(qū)動(dòng)
Class.forName("oracle.jdbc.driver.OracvleDriver");
//獲取數(shù)據(jù)庫(kù)連接
Connection con = DriverManager.getConnection
("jdbc:odbc:wombat","login","password");
//創(chuàng)建Statement對(duì)象
Statement stmt = con.createStatement();
//獲取數(shù)據(jù)集
ResultSet rs = stmt.executeQuery(sql);
//釋放資源
rs.close();
stmt.close();
con.close();
2.1.2嵌入式數(shù)據(jù)庫(kù)應(yīng)用??烧諘r(shí)數(shù)是太陽(yáng)中心自出地平線至入地平線,其直射光線在無(wú)地障及云霧煙塵遮掩情況下照耀地面的時(shí)間[8]。目前,可照時(shí)數(shù)無(wú)法從現(xiàn)有自動(dòng)站觀測(cè)采集儀器直接獲取,因此在本地一體化數(shù)據(jù)庫(kù)中沒(méi)有此類數(shù)據(jù)為該系統(tǒng)提供源數(shù)據(jù)支撐,也就無(wú)法計(jì)算出系統(tǒng)所需的日照百分率。
圖1 系統(tǒng)架構(gòu)Fig.1 The architecture of the system
圖2 氣象日均數(shù)據(jù)處理系統(tǒng)實(shí)現(xiàn)展示Fig.2 The implementation display of meteorological daily average data processing system
經(jīng)研究分析,對(duì)于上述較小數(shù)據(jù)量和低消耗量類型的數(shù)據(jù),該系統(tǒng)采用SQLite嵌入式數(shù)據(jù)庫(kù)建立業(yè)務(wù)所需的江蘇省70個(gè)國(guó)家基本站可照時(shí)數(shù)基礎(chǔ)數(shù)據(jù),并將此數(shù)據(jù)庫(kù)嵌入到程序中作為可照時(shí)數(shù)的源數(shù)據(jù),通過(guò)應(yīng)用程序中的JDBC API來(lái)獲取數(shù)據(jù)。SQLite整體架構(gòu)如圖3所示。
圖3 SQLite整體架構(gòu)Fig.3 The overall architecture of SQLite
考慮到除去外界環(huán)境因素,每個(gè)地點(diǎn)的可照時(shí)數(shù)的變化比較微小,可根據(jù)經(jīng)驗(yàn)統(tǒng)計(jì)近似確定各站點(diǎn)在每日的可照時(shí)數(shù)[9]。該系統(tǒng)在開(kāi)發(fā)中采用站號(hào)、日期以及可照時(shí)數(shù)的關(guān)系對(duì)應(yīng)方式來(lái)解決可照時(shí)數(shù)的源數(shù)據(jù)獲取問(wèn)題[10-12],其數(shù)據(jù)庫(kù)表設(shè)計(jì)如圖4所示。
通過(guò)上述設(shè)計(jì),氣象日均數(shù)據(jù)處理系統(tǒng)可以有效、快速、
靈活地獲取可照時(shí)數(shù)和常規(guī)氣象數(shù)據(jù),滿足了科研和農(nóng)業(yè)氣象等不同應(yīng)用場(chǎng)合對(duì)其源數(shù)據(jù)獲取的基本需求。
2.1.3配置文件數(shù)據(jù)處理。為了體現(xiàn)系統(tǒng)的靈活性,便于用戶根據(jù)需求進(jìn)行相關(guān)參數(shù)的更改和設(shè)置,該系統(tǒng)設(shè)計(jì)了對(duì)配置文件的處理。JAVA中的配置文件為properties文本文件,與系統(tǒng)相關(guān)的配置信息主要以“鍵=值”的形式保存在其中,其文件后綴一般為properties格式,通常在properties文件中,用“#”將與配置信息相關(guān)的標(biāo)注進(jìn)行注釋。JAVA中對(duì)配置文件的讀取主要依靠Properties類,其方法如表1所示。
該系統(tǒng)對(duì)配置文件的操作主要代碼如下:
//創(chuàng)建Properties對(duì)象
properties = new Properties();
//要讀取的配置文件的路徑和名稱
String FilePath = System.getProperty("user.dir")+"/SystemConfig.Properties";
//讀取配置路徑下的配置文件
InputStream in = new BufferedInputStream(new FileInputStream(FilePath));
//加載配置文件
properties.load(in);
圖4 SQLite可照時(shí)數(shù)數(shù)據(jù)庫(kù)表設(shè)計(jì)Fig.4 The database table design of SQLite possible sunshine duration
方法Method參數(shù)類型Typesofparameters參數(shù)Parameters描述DescriptiongetProperty()Stringkey用指定的鍵在此屬性列表中搜索屬性,通過(guò)參數(shù)key,得到key所對(duì)應(yīng)的valueLoad()InputStreaminStream從輸入流中讀取屬性列表(鍵和元素對(duì)),通過(guò)對(duì)指定的文件進(jìn)行裝載來(lái)獲取該文件中的所有鍵-值對(duì)SetProperty()StringKey,value調(diào)用Hashtable的方法put來(lái)設(shè)置鍵-值對(duì)Store()OutputStream,StringOut,comments將此Properties表中的屬性列表(鍵和元素對(duì))寫入輸出流,即將鍵-值對(duì)寫入到指定的文件中去,與load方法相反Clear()清除所有裝載的鍵-值對(duì)
2.2數(shù)據(jù)處理模塊設(shè)計(jì)
2.2.1數(shù)據(jù)質(zhì)量控制。數(shù)據(jù)質(zhì)量控制是氣象日均數(shù)據(jù)處理系統(tǒng)的核心。數(shù)據(jù)質(zhì)量控制的對(duì)象主要是業(yè)務(wù)開(kāi)發(fā)所需的氣溫、降水量、日照時(shí)數(shù)、水汽壓、氣壓、風(fēng)速以及相對(duì)濕度等重要數(shù)據(jù)資料。
該模塊首先對(duì)獲取的源數(shù)據(jù)進(jìn)行時(shí)間和空間上一致性檢查以及初級(jí)質(zhì)控處理,即對(duì)異常、缺測(cè)的源數(shù)據(jù)采用數(shù)據(jù)閥值和字符串長(zhǎng)度解析進(jìn)行判斷過(guò)濾,并根據(jù)應(yīng)用接口標(biāo)準(zhǔn),將其設(shè)定為“-888”字符值,便于后續(xù)業(yè)務(wù)人員對(duì)存儲(chǔ)文件數(shù)據(jù)的使用。質(zhì)量控制模塊數(shù)據(jù)流程如圖5所示。
圖5 質(zhì)量控制模塊數(shù)據(jù)流程Fig.5 Data flow of quality control module
2.2.2數(shù)值計(jì)算處理。針對(duì)不同需求的平均值數(shù)據(jù),采用對(duì)應(yīng)的計(jì)算方法實(shí)行數(shù)據(jù)計(jì)算處理,主要分為每日4個(gè)時(shí)次的平均值、每日24個(gè)時(shí)次的總量以及日照百分率。
2.2.2.1每日4個(gè)時(shí)次數(shù)值平均值及24個(gè)時(shí)次統(tǒng)計(jì)總量。每日4個(gè)時(shí)次的平均值為每日02:00、08:00、14:00、20:00 4個(gè)時(shí)次的平均值,其計(jì)算表達(dá)公式如下:
(1)
在該數(shù)據(jù)計(jì)算中,需要處理的數(shù)據(jù)要素為日平均氣溫、日平均水汽壓、日平均氣壓、日平均相對(duì)濕度以及日平均風(fēng)速。
每日24個(gè)時(shí)次的總量為前一天20:00至當(dāng)日20:00的數(shù)值總和,降水量數(shù)據(jù)就采用該種處理方法。
2.2.2.2日照百分率。每日的日照百分率為日照時(shí)數(shù)占可照時(shí)數(shù)的百分比,其計(jì)算公式如下:
日照百分率=日照時(shí)數(shù)/可照時(shí)數(shù)×100%
(2)
其中,日照時(shí)數(shù)可通過(guò)Oracle中的小時(shí)日照表獲取,可照時(shí)數(shù)可通過(guò)SQLlite數(shù)據(jù)庫(kù)中可照時(shí)數(shù)表的可照時(shí)數(shù)字段獲取。
2.2.2.3每日最小相對(duì)濕度。每日的最小相對(duì)濕度則取02:00、08:00、14:00、20:00 4個(gè)時(shí)次的相對(duì)濕度最小值,其計(jì)算表達(dá)公式如下:
Umin=MIN{Ui}(i=02,08,14,20)
(3)
式中,Ui表示下標(biāo)時(shí)刻的數(shù)值,Umin表示相對(duì)濕度最小值。
通過(guò)上述計(jì)算處理方法,從數(shù)據(jù)讀取模塊獲取的所有源數(shù)據(jù),在該模塊中可得到經(jīng)過(guò)質(zhì)控及計(jì)算處理流程后的結(jié)果數(shù)據(jù)。
2.3數(shù)據(jù)存儲(chǔ)模塊設(shè)計(jì)氣象資料數(shù)據(jù)的存儲(chǔ)方式通常分為數(shù)據(jù)庫(kù)表和文件2種存儲(chǔ)方式,以數(shù)據(jù)庫(kù)表形式存儲(chǔ)的數(shù)據(jù)為結(jié)構(gòu)化數(shù)據(jù),非結(jié)構(gòu)化數(shù)據(jù)則通常采用文件方式存儲(chǔ)。根據(jù)系統(tǒng)開(kāi)發(fā)需求,同時(shí)考慮到該數(shù)據(jù)為日常業(yè)務(wù)工作中使用次數(shù)較多,但每日數(shù)據(jù)量較少的數(shù)據(jù),采用非結(jié)構(gòu)化的文本方式存儲(chǔ)既可避免對(duì)江蘇本地?cái)?shù)據(jù)庫(kù)增加鏈接訪問(wèn)的壓力,又能實(shí)時(shí)地為業(yè)務(wù)、科研人員提供其所需的文本數(shù)據(jù)。
按照應(yīng)用層業(yè)務(wù)需求,每一行只存儲(chǔ)一個(gè)站號(hào)的數(shù)據(jù),依次按照站名、站號(hào)、日平均氣溫、日最高氣溫、日最低氣溫、日降水總量(前一天20:00至當(dāng)天20:00)、日照時(shí)數(shù)、日照百分率、日平均水汽壓、日平均氣壓、日平均風(fēng)速、日平均相對(duì)濕度以及日最小相對(duì)濕度排序,并以半角字符 “,”作為數(shù)據(jù)分隔符進(jìn)行數(shù)據(jù)存儲(chǔ)。采用上述特定分隔符和要素排列順序整理數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)并寫入文件,可為前端使用的業(yè)務(wù)平臺(tái)和科研人員解析文件中的數(shù)據(jù)提供便利,滿足業(yè)務(wù)應(yīng)用的實(shí)際需求。
該研究介紹了基于JAVA的氣象日均數(shù)據(jù)處理系統(tǒng)功能模塊設(shè)計(jì)、數(shù)據(jù)處理流程以及氣象數(shù)據(jù)標(biāo)準(zhǔn)化處理、嵌入式數(shù)據(jù)庫(kù)等關(guān)鍵技術(shù)。該系統(tǒng)從業(yè)務(wù)應(yīng)用和研究需求的實(shí)際情況出發(fā),基于JAVA Eclipse集成開(kāi)發(fā)環(huán)境,利用JDBC、SQLite嵌入式等技術(shù),實(shí)現(xiàn)農(nóng)業(yè)氣象業(yè)務(wù)平臺(tái)基礎(chǔ)數(shù)據(jù)的實(shí)時(shí)處理功能。
(1)氣象日均數(shù)據(jù)系統(tǒng)依托江蘇氣象統(tǒng)一數(shù)據(jù)環(huán)境,采用JAVA語(yǔ)言開(kāi)發(fā)、氣象數(shù)據(jù)標(biāo)準(zhǔn)化處理、嵌入式數(shù)據(jù)庫(kù)等關(guān)鍵技術(shù),實(shí)現(xiàn)江蘇省70個(gè)國(guó)家基本站的降水、溫度、日照百分率等13種氣象要素日均數(shù)據(jù)的實(shí)時(shí)處理與標(biāo)準(zhǔn)化存儲(chǔ)等功能。該系統(tǒng)具有資源占用少、管理成本低、部署靈活性高、數(shù)據(jù)實(shí)用性、穩(wěn)定性強(qiáng)等特點(diǎn),在農(nóng)業(yè)氣象基礎(chǔ)數(shù)據(jù)服務(wù)中取得了較好的應(yīng)用效果。
(2)該系統(tǒng)的數(shù)據(jù)讀取模塊采用嵌入式數(shù)據(jù)庫(kù)技術(shù),一方面有效地解決了系統(tǒng)所需源數(shù)據(jù)在統(tǒng)一數(shù)據(jù)環(huán)境中獲取的局限性問(wèn)題,另一方面也減輕了對(duì)現(xiàn)有實(shí)時(shí)業(yè)務(wù)數(shù)據(jù)庫(kù)的訪問(wèn)請(qǐng)求壓力,進(jìn)一步提升了氣象為農(nóng)業(yè)定制化數(shù)據(jù)的服務(wù)能力,同時(shí)也有助于提升氣象信息集約化應(yīng)用效率的水平。
(3)該系統(tǒng)自2015年5月以來(lái)通過(guò)江蘇省農(nóng)業(yè)氣象業(yè)務(wù)平臺(tái)為農(nóng)業(yè)防災(zāi)抗?jié)程峁?shí)時(shí)決策的基礎(chǔ)數(shù)據(jù)環(huán)境服務(wù),現(xiàn)已穩(wěn)定運(yùn)行2年,在江蘇省旱澇監(jiān)測(cè)工作中發(fā)揮了重要作用,取得了良好的農(nóng)業(yè)氣象服務(wù)效果。筆者將根據(jù)業(yè)務(wù)和科研應(yīng)用的精細(xì)化需求,對(duì)其進(jìn)行進(jìn)一步的優(yōu)化設(shè)計(jì)。
[1] 廖永豐,聶承靜,楊林生,等.洪澇災(zāi)害風(fēng)險(xiǎn)監(jiān)測(cè)預(yù)警評(píng)估綜述[J].地理科學(xué)進(jìn)展,2012,31(3):361-367.
[2] 張旭暉,楊洪建,葛淑芬,等.江蘇漬澇災(zāi)害氣象監(jiān)測(cè)預(yù)警[J].中國(guó)農(nóng)學(xué)通報(bào),2015,31(35):187-192.
[3] ECKEL B.Java 編程思想[M].陳昊鵬,譯.北京:機(jī)械工業(yè)出版社,2002.
[4] 王冠宇,關(guān)永,趙冬生.JAVA在SQLite嵌入式數(shù)據(jù)庫(kù)中的應(yīng)用[J].微計(jì)算機(jī)信息, 2006,22(1/2): 94-95.
[5] 劉麗玨.JDBC與Java 數(shù)據(jù)庫(kù)程序設(shè)計(jì)[M].北京:人民郵電出版社,2001.
[6] REESE G. Database Programming with JDBC and JAVA[M].Sebastopol: O′Reilly Media Inc., 2000.
[7] 李興華.Java 開(kāi)發(fā)實(shí)戰(zhàn)經(jīng)典[M].北京:清華大學(xué)出版社,2009.
[8] 李金城.可照時(shí)數(shù)的微機(jī)計(jì)算程序[J].氣象,1986,12(10):33-34.
[9] 王昌明.可照時(shí)數(shù)和太陽(yáng)高度角計(jì)算公式的簡(jiǎn)化證明[J].山東氣象,1989(2):46-48.
[10] 高艷云.氣象資料數(shù)據(jù)庫(kù)管理系統(tǒng)的設(shè)計(jì)及其實(shí)現(xiàn)[J].電子技術(shù)與軟件工程,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.