◆賈 東
(赤峰市氣象局 內(nèi)蒙古 024000)
內(nèi)蒙古氣象局預(yù)報質(zhì)量考核系統(tǒng)設(shè)計與實現(xiàn)
◆賈 東
(赤峰市氣象局 內(nèi)蒙古 024000)
內(nèi)蒙古氣象局預(yù)報質(zhì)量考核系統(tǒng)于2011年正式上線,是擁有自主知識產(chǎn)權(quán)的預(yù)報業(yè)務(wù)系統(tǒng),主要應(yīng)用于全區(qū)氣象部門的城鎮(zhèn)天氣預(yù)報、災(zāi)害性天氣落區(qū)預(yù)報的質(zhì)量考核。經(jīng)過連續(xù)連續(xù)五年的建設(shè),目前已經(jīng)實現(xiàn)業(yè)務(wù)化穩(wěn)定運行,支撐了自治區(qū)氣象局預(yù)報質(zhì)量考核工作,同時發(fā)展成為各盟市氣象局質(zhì)量分析的最主要工具,促進了全區(qū)預(yù)報準(zhǔn)確率的穩(wěn)步提高。系統(tǒng)采用目前先進Nutz框架結(jié)構(gòu)和html5語言實現(xiàn),最大限度的提高Web開發(fā)能力,解決第三方類庫在Web項目開發(fā)中的低效問題,用最少的代碼做最多的事情。
預(yù)報質(zhì)量;Nutz框架;java web應(yīng)用;B/S結(jié)構(gòu);Bootstrap開發(fā)
內(nèi)蒙古自治區(qū)預(yù)報質(zhì)量考核系統(tǒng)基于java web開發(fā)的B/S結(jié)構(gòu)應(yīng)用平臺,并且結(jié)合了目前先進的 Nutz框架結(jié)構(gòu)和Bootstrap等多種前后端開發(fā)語言實現(xiàn),在平臺的可維護性、可擴展性和系統(tǒng)的兼容性上有非常大的優(yōu)勢。該系統(tǒng)對全區(qū)天氣預(yù)報質(zhì)量檢驗和預(yù)報員個人預(yù)報質(zhì)量客觀化考核起到支撐作用,有效地促進了全區(qū)預(yù)報準(zhǔn)確率的提高,據(jù)中國氣象局國家氣象中心統(tǒng)計數(shù)據(jù)顯示,近四年來全區(qū)48小時內(nèi)氣溫預(yù)報準(zhǔn)確率提高幅度達到7%以上,其中24、48小時最高溫度預(yù)報準(zhǔn)確率分別提高10%、9.5%,最低溫度預(yù)報準(zhǔn)確率提高了6.6%、7%。相對國家指導(dǎo)預(yù)報技巧更是實現(xiàn)跨越式進展,在全國31個?。ㄖ陛犑?、自治區(qū))的24小時技巧排名中,高溫技巧由2010年第28名提高到2014年第3名,低溫技巧由第29名提高到第6名。
根據(jù)實際需求,系統(tǒng)分為后臺數(shù)據(jù)采集及運算、前臺數(shù)據(jù)查詢顯示兩大部分。后臺數(shù)據(jù)采集及運算是整個平臺的基礎(chǔ),采用Java語言實現(xiàn)模塊功能。主要負(fù)責(zé)天氣實況、盟市預(yù)報、國家指導(dǎo)預(yù)報、區(qū)局指導(dǎo)預(yù)報、災(zāi)害落區(qū)預(yù)報等基礎(chǔ)數(shù)據(jù)的采集工作,根據(jù)相應(yīng)算法計算出評分結(jié)果數(shù)據(jù)、日統(tǒng)計數(shù)據(jù)、月統(tǒng)計數(shù)據(jù)、災(zāi)害落區(qū)數(shù)據(jù)、個人質(zhì)量數(shù)據(jù)、風(fēng)檢驗數(shù)據(jù)等并入庫保存;前臺數(shù)據(jù)查詢與顯示頁面是面向全區(qū)預(yù)報員用戶的窗口,采用目前先進的html5語言、Bootstrap前端開發(fā)框架和Nutz框架技術(shù)實現(xiàn),負(fù)責(zé)盟市評分、全區(qū)評分、災(zāi)害評分、全區(qū)個人排名等模塊的查詢顯示和數(shù)據(jù)下載功能及值班登記、個人預(yù)報上傳等功能。
圖1 預(yù)報質(zhì)量考核系統(tǒng)功能結(jié)構(gòu)圖
內(nèi)蒙古自治區(qū)預(yù)報質(zhì)量考核系統(tǒng)采用java語言及html5語言開發(fā)的一款基于B/S結(jié)構(gòu)的Java web應(yīng)用平臺,后臺數(shù)據(jù)采集模塊每日定時從區(qū)局?jǐn)?shù)據(jù)庫和各盟市上傳預(yù)報目錄中進行數(shù)據(jù)的采集與解析,主要包括天氣實況數(shù)據(jù)、盟市預(yù)報數(shù)據(jù)、區(qū)臺指導(dǎo)數(shù)據(jù)、災(zāi)害預(yù)報數(shù)據(jù)等基本數(shù)據(jù)。設(shè)定平臺的數(shù)據(jù)采集模塊每天定時運行,從區(qū)局?jǐn)?shù)據(jù)庫采集數(shù)據(jù),然后把數(shù)據(jù)入庫到平臺數(shù)據(jù)庫中,在此過程中要注意對異常數(shù)據(jù)的處理。數(shù)據(jù)采集完成后,開始使用不同的預(yù)報檢驗算法對全區(qū)臺站各項預(yù)報質(zhì)量進行計算,并把得到的結(jié)果存入數(shù)據(jù)庫中。前端 web頁面服務(wù)使用Tomcat作為應(yīng)用服務(wù)器,用戶通過瀏覽器訪問系統(tǒng)(目前訪問地址為:http://10.62.11.102)。并且對于一些基本的服務(wù)器信息,如區(qū)局基本資料的存放地址、報文的存儲路徑等信息都存放在系統(tǒng)的配置文件中,當(dāng)服務(wù)器信息有變動時,無需修改源代碼,只需修改配制文件即可,方便系統(tǒng)的擴展和移植。
系統(tǒng)的運行依托于大量基礎(chǔ)數(shù)據(jù)的采集和計算,包括盟市預(yù)報、國家指導(dǎo)報、區(qū)局指導(dǎo)預(yù)報、災(zāi)害落區(qū)預(yù)報、天氣實況數(shù)據(jù)。目前基礎(chǔ)數(shù)據(jù)的采集分兩種方式,常規(guī)方式為從區(qū)局信息中心數(shù)據(jù)庫進行采集,采用數(shù)據(jù)庫直接連接方式;備份采集方式為區(qū)局目錄報文讀取,采用FTP連接方式。這樣做的好處在于當(dāng)一路數(shù)據(jù)采集遇到故障時可通過另一方式進行數(shù)據(jù)采集,大大地提高了數(shù)據(jù)的完整性。數(shù)據(jù)采集完成后,對這些基礎(chǔ)數(shù)據(jù)按照盟市、時次、時效、站號、日期等要素進行分類計算,并對其中的異常數(shù)據(jù)進行容錯性處理,保證計算結(jié)果的正確。如對數(shù)據(jù)中“9999”,“null”的處理和對報文中“////”的處理,另外在報文讀取中還要注意更正報的判斷,保證讀取到最新的預(yù)報數(shù)據(jù)。如在當(dāng)日運行時間內(nèi)由于報文或數(shù)據(jù)的缺失導(dǎo)致數(shù)據(jù)無法錄入,可實現(xiàn)對數(shù)據(jù)的補錄與更新操作。在程序中通過Nutz Dao技術(shù)進行數(shù)據(jù)庫的連接和讀取寫入操作,提高了數(shù)據(jù)庫的訪問速度,減少了數(shù)據(jù)庫的壓力。
容易出現(xiàn)數(shù)據(jù)不完整的地方有兩種,一種是基礎(chǔ)數(shù)據(jù)的缺失。數(shù)據(jù)的錄入與計算過程中,由于基礎(chǔ)數(shù)據(jù)的不完整或者讀取中出現(xiàn)的數(shù)據(jù)連接異常錯誤,會導(dǎo)致某些要素的評分結(jié)果不準(zhǔn)確。這就要對數(shù)據(jù)的完整性進行檢查。在后臺采集模塊中,當(dāng)日數(shù)據(jù)采集完成后,會對預(yù)報數(shù)據(jù)和實況數(shù)據(jù)進行檢查,根據(jù)全區(qū)臺站數(shù)和所發(fā)預(yù)報數(shù)量進行對比,把缺失數(shù)據(jù)的站臺信息統(tǒng)一入庫,形成數(shù)據(jù)缺失表,可在前臺顯示頁面中的系統(tǒng)管理模塊中查看。另一種是計算后形成的中間數(shù)據(jù)的缺失。在數(shù)據(jù)采集與計算過程中,出現(xiàn)如網(wǎng)絡(luò)中斷、數(shù)據(jù)計算異常、服務(wù)器故障時,都會中斷采集模塊的正常運行,從而導(dǎo)致中間關(guān)鍵環(huán)節(jié)的數(shù)據(jù)缺失,在程序設(shè)計上采用日志的方式對采集模塊的運行進行記錄,從運行日志中可以很方便的看出程序運行情況,哪些環(huán)節(jié)的運算出現(xiàn)錯誤等信息,方面管理人員對所缺失的數(shù)據(jù)進行查詢補錄工作。
前端web應(yīng)用使用Tomcat搭建服務(wù),Tomcat 服務(wù)器是一個免費的開放源代碼的Web 應(yīng)用服務(wù)器,屬于輕量級應(yīng)用服務(wù)器,是開發(fā)和調(diào)試 JSP 程序的首選。首先需要安裝 JDK(java development kit) Java 語言的軟件開發(fā)工具包。然后進行 tomcat環(huán)境變量的配置。具體配置內(nèi)容如下:
JAVA_HOME= C:Program FilesJavajdk1.6.0
TOMCAT_HOME= d:myjava omcat 6.0
CLASSPATH=.; C:Program FilesJavajdk1.6.0lib;
服務(wù)搭建完成后,把項目發(fā)布到服務(wù)器端,即可通過瀏覽器訪問。
項目使用了目前比較先進的nutz技術(shù),通過nutzDao可以很方便的實現(xiàn)對數(shù)據(jù)庫的連接,訪問等操作。在web應(yīng)用中需要在配制文件web.xml中進行相應(yīng)配制。nutzIoc將一部分關(guān)于對象的依賴關(guān)系單獨存儲在某種介質(zhì)里,并且提供一個接口幫助使用者獲得這些對象。在今后的項目開發(fā)中,如數(shù)據(jù)庫地址、用戶名和密碼發(fā)生改變時,不需要進行Java代碼的重新編譯,在此配置中修改即可。
NutzMvc是要和一個 Web 服務(wù)器(比如本系統(tǒng)使用的Tomcat)一起工作的,它存在的意義就是要把一個標(biāo)準(zhǔn)的 HTTP請求,轉(zhuǎn)發(fā)到某一個 Java 函數(shù)中??蛇M行參數(shù)的解析并提供幾個基本的渲染方式(比如 JSP, JSON)每一種 HTTP 請求,在函數(shù)上聲明一個注解,這個注解,在程序中使用以下代碼@IocBean(name="dataservice"),在需要引用該類中使用dataservice ds=IocInit.iocb.get(dataservice.class," dataservice ")得到類的聲明。
天氣預(yù)報質(zhì)量檢驗中需要大量的專業(yè)計算公式,參照《全國城鎮(zhèn)天氣預(yù)報質(zhì)量國家級檢驗方案》和《中短期天氣預(yù)報質(zhì)量檢驗辦法》進行了大量公式的總結(jié)、分析與演算,并最終在程序中實現(xiàn)。
將降水量分為小雨、中雨、大雨、暴雨、大暴雨、特大暴雨和小雪、中雪、大雪、暴雪10個等級(見表1),檢驗各級降水、一般性降水[小雨(雪)至大雨(雪)]和暴雨(雪)以上(暴雨至特大暴雨和暴雪)預(yù)報情況。累加降水量級檢驗:檢驗對≥0.1mm、≥10.0mm、≥25.0mm、≥50.0mm降水的預(yù)報情況。
其中,F(xiàn)i為第i站(次)預(yù)報溫度,Oi為第i站(次)實況溫度,K為1、2,分別代表NrK為預(yù)報正確的站(次)數(shù),NfK為預(yù)報的總站(次)數(shù)。
溫度預(yù)報準(zhǔn)確率的實際含義是溫度預(yù)報誤差≤1℃(2℃)的百分率。
從整體模塊功能分布上來看,平臺包括面向用戶的頁面顯示功能,基于查詢結(jié)果的報表生成功能,圖表顯示功能,基礎(chǔ)數(shù)據(jù)錄入功能及其它一些系統(tǒng)維護與監(jiān)測功能。
圖2 風(fēng)檢驗圖表顯示頁面
Java Excel俗稱jxl,是一開放源碼項目,通過它可以讀取Excel文件的內(nèi)容、創(chuàng)建新的Excel文件、更新已經(jīng)存在的Excel文件。使用該API非Windows操作系統(tǒng)也可以通過純Java應(yīng)用來處理Excel數(shù)據(jù)表。因為是使用Java編寫的,所以我們在Web應(yīng)用中可以通過JSP、Servlet來調(diào)用API實現(xiàn)對Excel數(shù)據(jù)表的訪問。通過java操作excel表格的工具類庫,支持Excel 95-2000的所有版本,生成Excel 2000標(biāo)準(zhǔn)格式,支持字體、數(shù)字、日期操作,能夠修飾單元格屬性,支持圖像和圖表。
圖表功能使用 Echarts圖表庫實現(xiàn)。它基于 Canvas,純Javascript圖表庫,提供直觀、生動、可交互、可個性化定制的數(shù)據(jù)可視化圖表。創(chuàng)新的拖拽重計算、數(shù)據(jù)視圖、值域漫游等特性大大增強了用戶體驗,賦予了用戶對數(shù)據(jù)進行挖掘、整合的能力??缮烧劬€圖、柱狀圖、k線圖等圖表的實現(xiàn),可在生成的圖表上進行一些拖拽重計算特性,帶來了數(shù)據(jù)統(tǒng)計圖表從未有過的用戶體驗,允許用戶對統(tǒng)計數(shù)據(jù)進行有效的提取、整合,甚至在多個圖表間交換數(shù)據(jù)。具體實現(xiàn)步驟:
(1)需要在頁面通過為ECharts準(zhǔn)備一個具備大小(寬高)的Dom。
(2)引用所用的jar文件:
(3)進行相關(guān)配制寫入:
require.config({paths:{echarts:'js/dist'}});
var option = { legend: {data: ['主班', '全區(qū)平均', '指導(dǎo)','指導(dǎo)平均']},
color: ['#ff7f50', '#da70d6', '#87cefa', '#32cd32', '#6495ed','#ff69b4', '#ba55d3', '#cd5c5c', '#ffa500', '#40e0d0'],
toolbox: {show: true, feature: {mark: {show: true},
dataView: { readOnly: false},
magicType : {show: true, type: ['line', 'bar']},
restore: {show: true},
saveAsImage:{show: true} }},
calculable: false,
animation:false,
animationDuration: 10,
xAxis: [{type: 'category', boundaryGap: true, }],
series: [{name: '主班', type: 'bar', barGap:2, itemStyle: {
normal: {lineStyle: {shadowColor: 'rgba(0,0,0,0.4)'},
label : {show : true}}}},
name: '全區(qū)平均', type: 'line', itemStyle: {normal: {lineStyle: {
shadowColor: 'rgba(0,0,0,0.4)'}}}}
圖3 高溫2度24小時圖表顯示
當(dāng)前正值現(xiàn)代天氣業(yè)務(wù)、服務(wù)型業(yè)務(wù)建設(shè)迅速推進時期,內(nèi)蒙古天氣預(yù)報質(zhì)量考核系統(tǒng)的全面網(wǎng)絡(luò)化形式、全面的功能設(shè)計、統(tǒng)一的數(shù)據(jù)管理、公開透明的檢驗形式正好滿足了時代發(fā)展和業(yè)務(wù)改進的需要。Java語言、nutz框架、bootstrap等先進的語言與設(shè)計工具的應(yīng)用,使平臺在整體布局上層次分明,結(jié)構(gòu)清晰。功能的模塊化實現(xiàn),使平臺在可擴展性與可維護性上面有很強的優(yōu)勢。通過三年多的全區(qū)業(yè)務(wù)應(yīng)用,也充分證明了該系統(tǒng)功能實用、技術(shù)先進、運行穩(wěn)定、為我區(qū)預(yù)報質(zhì)量的檢驗提供了一個非常必要的平臺。
[1]梁勇.Java語言程序設(shè)計[M].機械工業(yè)出版,2011.
[2]李緒成.java語言程序設(shè)計(java7) [M].清華大學(xué)出版社,2014.
[3]Y Daniel Liang.Java語言程序設(shè)計基礎(chǔ)篇[M].機械工業(yè)出版社,2008.
[4]孫衛(wèi)琴.Java面向?qū)ο缶幊蘙M].電子工業(yè)出版社,2006.
[5]李剛.瘋狂Java講義[M].電子工業(yè)出版社,2012.
[6]梁勇. Java深入解析——透析Java本質(zhì)的36個話題[M].電子工業(yè)出版社,2013.
[7]孫衛(wèi)琴.Tomcat與Java Web開發(fā)技術(shù)詳解(第2版) [M].電子工業(yè)出版社,2009.