甄廷忠,李子平,張穎
(1.昆明市氣象局,云南昆明 650500;2.茂名市氣象局,廣東茂名 525000)
近年來,汛期短時(shí)強(qiáng)降水引發(fā)的洪澇、滑坡、泥石流、城市內(nèi)澇等災(zāi)害時(shí)有發(fā)生,給人民生命財(cái)產(chǎn)造成巨大損失[1]。做好汛期短時(shí)強(qiáng)降水監(jiān)測(cè)和報(bào)警服務(wù)已經(jīng)成為各級(jí)氣象部門汛期氣象服務(wù)的重要內(nèi)容[2-3]。自動(dòng)氣象站是一種能自動(dòng)觀測(cè)、存儲(chǔ)和傳輸氣象數(shù)據(jù)的設(shè)備[4],短時(shí)強(qiáng)降水的監(jiān)測(cè)依據(jù)主要是自動(dòng)氣象站的雨量數(shù)據(jù)[5],隨著氣象現(xiàn)代化的不斷推進(jìn),自動(dòng)氣象站數(shù)量、觀測(cè)數(shù)據(jù)種類和頻次不斷增加[6],對(duì)短時(shí)強(qiáng)降水的監(jiān)測(cè)和報(bào)警提出了更高的要求。
目前,國(guó)內(nèi)已有許多自動(dòng)氣象站雨量報(bào)警方面的研究,如杜小松等[7]研發(fā)了區(qū)域自動(dòng)站報(bào)警系統(tǒng);劉鑄飄[8]設(shè)計(jì)了自動(dòng)站實(shí)況圖形監(jiān)控及災(zāi)害預(yù)警程序;常國(guó)旭等[9]開發(fā)了自動(dòng)站實(shí)時(shí)短信報(bào)警系統(tǒng)。但這些研究大部分是基于單時(shí)次數(shù)據(jù)或基于小時(shí)數(shù)據(jù)的整點(diǎn)到整點(diǎn)的累積數(shù)據(jù)的監(jiān)測(cè)和報(bào)警。自動(dòng)氣象站的雨量觀測(cè)原理是從整點(diǎn)開始累積雨量數(shù)據(jù),分鐘數(shù)據(jù)以固定頻次上傳一次數(shù)據(jù),并且數(shù)據(jù)不清零;直到下一個(gè)整點(diǎn)時(shí)刻上傳小時(shí)雨量數(shù)據(jù)后清零,開始進(jìn)行下一個(gè)小時(shí)雨量數(shù)據(jù)觀測(cè)[10-11]。故基于單時(shí)次數(shù)據(jù)的監(jiān)測(cè)和報(bào)警,時(shí)間跨度短,缺乏連續(xù)性[12],雨量數(shù)據(jù)可能被觀測(cè)設(shè)備整點(diǎn)分割造成漏報(bào);基于小時(shí)數(shù)據(jù)的整點(diǎn)到整點(diǎn)的累積數(shù)據(jù)監(jiān)測(cè)和報(bào)警,時(shí)間間隔大,時(shí)效性不高[13]。昆明市有近700個(gè)區(qū)域自動(dòng)氣象站,觀測(cè)以2和6要素為主,觀測(cè)頻次為5 min。其中有400多個(gè)自動(dòng)氣象站實(shí)行雙通道傳輸,數(shù)據(jù)同時(shí)存入省級(jí)數(shù)據(jù)庫和市級(jí)數(shù)據(jù)庫,剩余200多個(gè)自動(dòng)氣象站實(shí)行單通道傳輸,數(shù)據(jù)全部存入市級(jí)數(shù)據(jù)庫。面對(duì)海量的觀測(cè)數(shù)據(jù),昆明市各級(jí)氣象部門只能依靠自動(dòng)站廠家配發(fā)的軟件和云南省短臨預(yù)報(bào)預(yù)警一體化業(yè)務(wù)系統(tǒng)(下稱“一體化系統(tǒng)”)對(duì)各站點(diǎn)各要素值進(jìn)行查詢、監(jiān)測(cè)和報(bào)警,自動(dòng)站廠家配發(fā)的軟件可以查看全市所有站點(diǎn)的數(shù)據(jù),但沒有報(bào)警功能;一體化系統(tǒng)雖然能實(shí)現(xiàn)報(bào)警,但只能對(duì)400多個(gè)省級(jí)站點(diǎn)的小時(shí)數(shù)據(jù)進(jìn)行報(bào)警,已經(jīng)無法滿足日益精細(xì)的氣象業(yè)務(wù)服務(wù)要求。故有必要根據(jù)昆明市自動(dòng)氣象站觀測(cè)業(yè)務(wù)實(shí)際情況,研發(fā)基于昆明市市級(jí)數(shù)據(jù)庫中分鐘雨量數(shù)據(jù)的滑動(dòng)1 h累積雨量監(jiān)測(cè)和報(bào)警軟件。
在實(shí)際降水過程中,降水時(shí)空分布不均。例如短時(shí)強(qiáng)降水發(fā)生在11:30至12:30(北京時(shí),下同),其中11:30—12:00降水量為10 mm,12:00—12:30降水量為10 mm,要求1 h雨量達(dá)到20 mm報(bào)警。自動(dòng)氣象站在整點(diǎn)時(shí)刻會(huì)生成小時(shí)雨量數(shù)據(jù),同時(shí)雨量清零并重新計(jì)數(shù),新的累積雨量存入分鐘雨量數(shù)據(jù),直至下一個(gè)整點(diǎn)[14]。因此,在該例中,12:00和13:00的小時(shí)雨量數(shù)據(jù)均為10 mm,其他任何時(shí)次的分鐘雨量數(shù)據(jù)都小于或等于10 mm。無論使用單時(shí)次分鐘數(shù)據(jù)還是單時(shí)次小時(shí)數(shù)據(jù)進(jìn)行監(jiān)測(cè),都無法觸發(fā)報(bào)警。但如果使用基于小時(shí)雨量數(shù)據(jù)的整點(diǎn)到整點(diǎn)累積雨量進(jìn)行監(jiān)測(cè),至少等到13:00雨量才能累積到20 mm,但時(shí)間已經(jīng)過去了2 h,同樣無法觸發(fā)報(bào)警。但如果以觀測(cè)頻次(5 min)為時(shí)間間隔,基于分鐘數(shù)據(jù)定時(shí)計(jì)算滑動(dòng)累積雨量,就可以實(shí)現(xiàn)11:30至12:30雨量達(dá)到20 mm的報(bào)警。
軟件的核心業(yè)務(wù)問題是解決因降雨量數(shù)據(jù)被觀測(cè)設(shè)備整點(diǎn)分割而造成監(jiān)測(cè)缺失和報(bào)警漏報(bào)的問題,在監(jiān)測(cè)到設(shè)定區(qū)域有滑動(dòng)累積雨量達(dá)到報(bào)警閾值時(shí),快速、準(zhǔn)確地進(jìn)行聲音報(bào)警,并將報(bào)警信息在第一時(shí)間發(fā)送到業(yè)務(wù)值班人員手機(jī)上,引起值班人員重視。其設(shè)計(jì)理念是以數(shù)據(jù)為核心,以需求為導(dǎo)向,根據(jù)自動(dòng)氣象站數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)查詢、數(shù)據(jù)統(tǒng)計(jì)方法,分析實(shí)際業(yè)務(wù)報(bào)警要求,研究滑動(dòng)累積雨量監(jiān)測(cè)和報(bào)警算法,實(shí)現(xiàn)滑動(dòng)1 h累積雨量的實(shí)時(shí)監(jiān)測(cè),觸發(fā)報(bào)警時(shí)以聲音報(bào)警和短信報(bào)警的方式,保證業(yè)務(wù)值班人員在任何時(shí)刻、任何地方都能準(zhǔn)確、及時(shí)收到報(bào)警信息。
系統(tǒng)在Microsoft Visual Studio 2010的C#環(huán)境下開發(fā)完成,電腦需要安裝Microsoft.NET Framework 4.0組件才能運(yùn)行本系統(tǒng)。系統(tǒng)采用昆明市級(jí)自動(dòng)氣象站內(nèi)網(wǎng)服務(wù)器SQL數(shù)據(jù)庫作為數(shù)據(jù)源,計(jì)算機(jī)須接入昆明市氣象業(yè)務(wù)內(nèi)網(wǎng)通信系統(tǒng)。
昆明市滑動(dòng)1 h累積雨量報(bào)警軟件的結(jié)構(gòu)示意圖如圖1,軟件包括數(shù)據(jù)整合和客戶端兩部分。昆明市近700個(gè)自動(dòng)氣象站的數(shù)據(jù)分別存儲(chǔ)于兩個(gè)服務(wù)器,數(shù)據(jù)整合是利用SQL數(shù)據(jù)庫“作業(yè)”技術(shù),將2個(gè)服務(wù)器數(shù)據(jù)整合到統(tǒng)一的數(shù)據(jù)庫服務(wù)器上。客戶端利用SQL數(shù)據(jù)庫查詢技術(shù),查詢最近1 h分鐘雨量數(shù)據(jù),對(duì)數(shù)據(jù)缺測(cè)和雨量要素空缺的自動(dòng)站進(jìn)行分類和統(tǒng)計(jì),用戶可設(shè)定是否報(bào)警;對(duì)存在分鐘雨量數(shù)據(jù)(不管數(shù)據(jù)是否齊全)的站點(diǎn)套用滑動(dòng)1 h累積雨量算法,對(duì)達(dá)到雨量報(bào)警閾值的站點(diǎn)進(jìn)行列表顯示,并觸發(fā)聲音報(bào)警和短信報(bào)警。
圖1 昆明市滑動(dòng)1 h累積雨量報(bào)警軟件結(jié)構(gòu)示意圖
昆明市自動(dòng)氣象站觀測(cè)數(shù)據(jù)從兩個(gè)公網(wǎng)地址回傳到服務(wù)器,分別存儲(chǔ)在兩臺(tái)服務(wù)器的SQL SERVER數(shù)據(jù)庫中。由于兩臺(tái)服務(wù)器在氣象業(yè)務(wù)服務(wù)中使用不方便,特通過SQL SERVER的“作業(yè)”功能將兩數(shù)據(jù)庫中的數(shù)據(jù)同步到專用服務(wù)器的 SQL SERVER 目標(biāo)數(shù)據(jù)庫中。SQL SERVER的作業(yè)是一系列由SQL SERVER代理按順序執(zhí)行的指定操作[15-16]。通過在專用服務(wù)器的目標(biāo)數(shù)據(jù)庫中建立鏈接、新建步驟、新建作業(yè)計(jì)劃等操作,將兩個(gè)源數(shù)據(jù)庫中的數(shù)據(jù)每5 min重復(fù)一次的拉到目標(biāo)數(shù)據(jù)庫中,完成市級(jí)自動(dòng)站數(shù)據(jù)的整合。
SQL數(shù)據(jù)庫中包含了“StationPar”數(shù)據(jù)表,該數(shù)據(jù)表用于存儲(chǔ)自動(dòng)氣象站站點(diǎn)信息,包含了表示站點(diǎn)地理區(qū)域的“Area”字段。地理區(qū)域根據(jù)昆明市各縣市區(qū)行政區(qū)劃來劃分,所有自動(dòng)氣象站在建站時(shí)均設(shè)置了所屬行政區(qū)域。本軟件在設(shè)置報(bào)警區(qū)域時(shí),創(chuàng)建報(bào)警區(qū)域字符串,按照勾選“checkBox”控件方法(圖2),不斷在字符串中增加或刪除選擇的行政區(qū)劃即可。在報(bào)警區(qū)域判定時(shí),采用“A.Contains(B)”語句判定站點(diǎn)區(qū)域B是否包含在報(bào)警區(qū)域A中(A、B均為string格式字符串)。
圖2 報(bào)警區(qū)域設(shè)置截圖
滑動(dòng)1 h累積雨量時(shí)間軸如圖3所示,假設(shè)現(xiàn)在時(shí)刻是H:m,推算出過去1 h的時(shí)間范圍為H-1:M至H:M,如果m的個(gè)位數(shù)≥5,那么M等于m的十位數(shù)和個(gè)位數(shù)為5組成的兩位數(shù);如果m的個(gè)位數(shù)<5,那么M等于m的十位數(shù)和個(gè)位數(shù)為0組成的兩位數(shù)。實(shí)現(xiàn)代碼如下所示:
圖3 滑動(dòng)1 h累積雨量時(shí)間軸示意圖
查詢SQL數(shù)據(jù)庫分?jǐn)?shù)數(shù)據(jù)表中H-1(時(shí))M(分)至H(時(shí))M(分)的分鐘雨量數(shù)據(jù)(用R(H-1)M、RHM等表示)和小時(shí)數(shù)據(jù)表中H時(shí)整的數(shù)據(jù)RH,分別計(jì)算時(shí)間軸前半部分累積雨量R1=RH-R(H-1)M和后半部分累積雨量R2=RHM,滑動(dòng)1 h累積雨量R=R1+R2。在實(shí)際業(yè)務(wù)運(yùn)行中,可能會(huì)遇到R(H-1)M、RHM等數(shù)據(jù)缺測(cè)的情況,在前半部分累積雨量的計(jì)算過程中如果遇到缺測(cè),需要按時(shí)間軸依次向右查詢相應(yīng)時(shí)刻的雨量值代替R(H-1)M;在后半部分累積雨量的計(jì)算過程中如果遇到缺測(cè),需要按時(shí)間軸依次向左查詢相應(yīng)時(shí)刻的雨量值代替RHM,計(jì)算出的結(jié)果如達(dá)到報(bào)警閾值,同樣觸發(fā)報(bào)警。同時(shí)對(duì)缺測(cè)時(shí)間段進(jìn)行統(tǒng)計(jì)和顯示,提醒業(yè)務(wù)人員有數(shù)據(jù)缺測(cè)。
報(bào)警機(jī)制是通過判定站點(diǎn)滑動(dòng)1 h累積雨量,對(duì)達(dá)到報(bào)警閾值的自動(dòng)氣象站“站號(hào)”、“站名”、“區(qū)域”、“站址”、“數(shù)據(jù)起始時(shí)間”、“數(shù)據(jù)結(jié)束時(shí)間”、“數(shù)據(jù)時(shí)長(zhǎng)”、“觸發(fā)報(bào)警時(shí)間”信息進(jìn)行顯示,開通定時(shí)器定時(shí)對(duì)“ListView”顯示控件的顯示“Items”數(shù)量進(jìn)行判定,如果“Items”數(shù)量大于0,代表有站點(diǎn)1 h滑動(dòng)雨量達(dá)到報(bào)警閾值,觸發(fā)報(bào)警。
報(bào)警方式分為聲音報(bào)警和短信報(bào)警。聲音報(bào)警時(shí)通過API函數(shù)編程實(shí)現(xiàn)音樂文件讀取、設(shè)置、播放等操作,從而實(shí)現(xiàn)本軟件的聲音報(bào)警。短信報(bào)警是利用企信通實(shí)現(xiàn)手機(jī)短信報(bào)警。企信通是一個(gè)面向企業(yè)消息通信的短信平臺(tái)[17],其接口是面向有一定技術(shù)開發(fā)能力的企業(yè)用戶的短信(sms)接口,支持C#開發(fā)環(huán)境下的二次開發(fā)[18]。通過調(diào)用動(dòng)態(tài)鏈接庫“h.dmkj.QXT_API.dll”,工程中添加引用“using h.dmkj.QXT_API;”,并調(diào)用接口函數(shù)“SendSms”來實(shí)現(xiàn)短信的發(fā)送。短信發(fā)送代碼如下:
2019年7月19日下午,受低渦切變線影響,昆明市出現(xiàn)颮線天氣過程,颮線從北往南移動(dòng),出現(xiàn)雷暴、大風(fēng)、冰雹天氣。昆明市呈貢區(qū)湯池街道大平地村的自動(dòng)氣象站監(jiān)測(cè)到該站點(diǎn)從16:45開始下雨,到17:00整降水量為19.2 mm;從17:00到17:05降水量為3.1 mm;17:00到18:00降水量為21.3 mm。設(shè)定報(bào)警閾值為20 mm,該軟件在17:07:25觸發(fā)報(bào)警,最近1 h累積雨量達(dá)到22.3 mm,軟件運(yùn)行與報(bào)警信息截圖如圖4所示。本例中如果用小時(shí)數(shù)據(jù)進(jìn)行雨量監(jiān)測(cè)和報(bào)警,至少要等到18:00才能對(duì)降水量21.3 mm進(jìn)行報(bào)警,本軟件將報(bào)警時(shí)間提前了約55 min。且后續(xù)每5 min進(jìn)行一次報(bào)警,滑動(dòng)1 h累積降水量最大值為16:40至17:40時(shí)間段累積降水量40.4 mm,比利用小時(shí)數(shù)據(jù)報(bào)警時(shí)多19.1 mm。
圖4 2019年7月19日17:08軟件運(yùn)行與報(bào)警信息截圖
昆明市滑動(dòng)1 h累積雨量報(bào)警軟件以昆明市自動(dòng)氣象站市級(jí)數(shù)據(jù)庫分鐘雨量數(shù)據(jù)為數(shù)據(jù)源,利用SQL數(shù)據(jù)庫技術(shù)和企信通短信報(bào)警技術(shù),依托滑動(dòng)1 h累積雨量算法,實(shí)現(xiàn)了時(shí)間間隔為5 min的滑動(dòng)1 h累積雨量的監(jiān)測(cè)和報(bào)警。軟件運(yùn)行穩(wěn)定可靠,界面友好,用戶可設(shè)置報(bào)警閾值和勾選報(bào)警行政區(qū)域,報(bào)警分為聲音報(bào)警和手機(jī)短信報(bào)警,報(bào)警準(zhǔn)確及時(shí),讓值班人員在任何時(shí)刻、任何地點(diǎn)都能收到報(bào)警信息,減小了業(yè)務(wù)人員的值守壓力。在短時(shí)強(qiáng)降水過程中,報(bào)警時(shí)間間隔短、時(shí)效性高,有效避免了因數(shù)據(jù)被整點(diǎn)分割造成的漏報(bào)。相較于以小時(shí)雨量數(shù)據(jù)為數(shù)據(jù)源的報(bào)警,報(bào)警時(shí)間有明顯提前,報(bào)警雨量數(shù)據(jù)更能反映降水實(shí)況,根據(jù)相同站點(diǎn)不同時(shí)刻的報(bào)警雨量數(shù)據(jù)大小,可判斷雨勢(shì)的基本變化情況。