溫舟 婁芳蕾 史虹婷 賈寧 徐玉秀 高銘
摘要:根據(jù)錦州市現(xiàn)在氣象業(yè)務(wù)的實(shí)際情況,利用Visual Basic語(yǔ)言,在.net4.0框架及SQLServer2008數(shù)據(jù)庫(kù)的支持下,調(diào)用遼寧省CIMISS數(shù)據(jù)環(huán)境庫(kù)的數(shù)據(jù),開(kāi)發(fā)了錦州市自動(dòng)站數(shù)據(jù)實(shí)時(shí)顯示報(bào)警平臺(tái)。該平臺(tái)可實(shí)現(xiàn)錦州地區(qū)自動(dòng)站數(shù)據(jù)當(dāng)前實(shí)況顯示,可選時(shí)段查詢(xún),具體數(shù)據(jù)查詢(xún),降水等值線(xiàn)圖以及達(dá)到預(yù)警閾值報(bào)警等功能。該平臺(tái)的開(kāi)發(fā)有效地提高了錦州市氣象臺(tái)的工作效率,有效地提高了預(yù)報(bào)預(yù)警質(zhì)量與氣象服務(wù)能力。
關(guān)鍵詞:自動(dòng)站;CIMISS;.net4.0編程;SQL數(shù)據(jù)庫(kù)系統(tǒng)
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2019)11-0101-03
1 背景
自動(dòng)站實(shí)時(shí)數(shù)據(jù)的顯示與報(bào)警是提高預(yù)報(bào)準(zhǔn)確率及氣象服務(wù)效果的重要保障,此前我市因?yàn)樽詣?dòng)站廠(chǎng)家問(wèn)題,具有兩個(gè)自動(dòng)站數(shù)據(jù)庫(kù),分別為長(zhǎng)春廠(chǎng)與華云廠(chǎng),也因此有兩個(gè)查看自動(dòng)站數(shù)據(jù)的顯示平臺(tái)。根據(jù)遼寧省氣象局安排,目前我市自動(dòng)站中心站已遷移至遼寧省氣象局,我市原有的自動(dòng)站顯示平臺(tái)已經(jīng)無(wú)法運(yùn)轉(zhuǎn),為了滿(mǎn)足春播及汛期服務(wù)要求,特制作開(kāi)發(fā)此平臺(tái)。
此平臺(tái)數(shù)據(jù)利用氣象數(shù)據(jù)統(tǒng)一服務(wù)接口(MUSIC)獲取,氣象數(shù)據(jù)統(tǒng)一服務(wù)接口(MUSIC:Meteorological Unified Service Interface Community),基于國(guó)省統(tǒng)一的數(shù)據(jù)環(huán)境(CIMISS),面向氣象業(yè)務(wù)和科研,提供全國(guó)統(tǒng)一、標(biāo)準(zhǔn)、豐富的數(shù)據(jù)訪(fǎng)問(wèn)服務(wù)和應(yīng)用編程接口(API),為國(guó)、省、地、縣各級(jí)應(yīng)用系統(tǒng)提供唯一權(quán)威的數(shù)據(jù)接入服務(wù)。
2 平臺(tái)概述
2.1 平臺(tái)功能
平臺(tái)主要包括以下內(nèi)容:后臺(tái)數(shù)據(jù)處理,自動(dòng)站數(shù)據(jù)客戶(hù)端顯示,預(yù)警報(bào)警提醒及雨量圖制作等功能。
2.2 平臺(tái)開(kāi)發(fā)環(huán)境
平臺(tái)開(kāi)發(fā)語(yǔ)言使用Visual Basic與Matlab,開(kāi)發(fā)環(huán)境為Visual Studio2010[1-3]、.net4.0、Matlab2008a,在網(wǎng)絡(luò)數(shù)據(jù)庫(kù)SQLServer2008[4]的支持下,由此開(kāi)發(fā)的自動(dòng)站數(shù)據(jù)實(shí)時(shí)顯示報(bào)警平臺(tái)。
2.3 平臺(tái)設(shè)計(jì)
本平臺(tái)開(kāi)發(fā)共包含兩部分。
2.3.1 后臺(tái)數(shù)據(jù)處理
后臺(tái)數(shù)據(jù)處理包含小時(shí)數(shù)據(jù)處理及分鐘數(shù)據(jù)處理兩部分。其中小時(shí)數(shù)據(jù)包括小時(shí)內(nèi)最高、最低氣溫及出現(xiàn)時(shí)間,最大風(fēng)、極大風(fēng)風(fēng)向風(fēng)速及出現(xiàn)時(shí)間,1小時(shí)累計(jì)降水,最小能見(jiàn)度及出現(xiàn)時(shí)間等要素;分鐘數(shù)據(jù)包括當(dāng)前溫度、風(fēng)向風(fēng)速、降水、能見(jiàn)度等要素。
2.3.2 客戶(hù)端顯示
客戶(hù)端數(shù)據(jù)顯示則分別為各要素(溫度、風(fēng)、降水、能見(jiàn)度)當(dāng)前實(shí)況顯示,可選時(shí)段查詢(xún),具體數(shù)據(jù)查詢(xún),降水等值線(xiàn)圖以及達(dá)到預(yù)警閾值報(bào)警等內(nèi)容。
3 平臺(tái)具體實(shí)現(xiàn)
3.1 后臺(tái)數(shù)據(jù)處理
利用SQL Server2008數(shù)據(jù)庫(kù)建立小時(shí)數(shù)據(jù)要素表、分鐘數(shù)據(jù)要素表以及自動(dòng)站基本信息表。自動(dòng)站基本信息表包含Station_C、Station_N、經(jīng)緯度等5列,小時(shí)數(shù)據(jù)要素表包含Time、Station_C、Tem_MAX等15 列,分鐘數(shù)據(jù)要素表包含ime、Station_C、Tem 、PRE等7列。
利用VB.Net語(yǔ)言建立兩個(gè)類(lèi),HourData及MinuteData,設(shè)置與數(shù)據(jù)庫(kù)表中相對(duì)應(yīng)的只讀屬性,包含1個(gè)Download方法,用來(lái)從CIMISS服務(wù)器中讀取數(shù)據(jù)。在數(shù)據(jù)取回出現(xiàn)錯(cuò)誤時(shí),設(shè)置屬性值為Nothing,添加至SQL Server2008數(shù)據(jù)庫(kù)中顯示為NULL。需要說(shuō)明的是,自動(dòng)站分鐘數(shù)據(jù)要素在CIMISS服務(wù)器不同的表中,需要分別進(jìn)行讀取。其中分鐘降水量為累積降水量,需自行運(yùn)算生成5分鐘非累積降水量。
利用VB.Net語(yǔ)言將自動(dòng)站基本信息表中每一站號(hào)進(jìn)行讀取,放置1個(gè)Timer控件,每秒觸發(fā)一次Tick事件,每五分鐘及每小時(shí)利用ForEach循環(huán),將每一自動(dòng)站數(shù)據(jù)自CIMISS數(shù)據(jù)庫(kù)中讀取并寫(xiě)入本地?cái)?shù)據(jù)庫(kù)表中。同時(shí)隱藏Form窗口,以達(dá)到后臺(tái)處理目的。部分程序代碼如下:
For Each st As String In station
Try
If table = "MinuteData" Then
data1 = New MinuteData(st, MiTime)
ElseIf table = "HourData" Then
data1 = New HourData(st)
End If
Dim t As Type
Dim PIS() As System.Reflection.PropertyInfo
Dim Column As New StringBuilder
Dim Value As New StringBuilder
t = data1.GetType
PIS = t.GetProperties()
For Each pi As System.Reflection.PropertyInfo In PIS
If Not IsNothing(pi.GetValue(data1, Nothing)) Then
Column.Append(pi.Name & ",")
Value.Append(pi.GetValue(data1, Nothing).ToString & "','")
End If
Next
Column.Remove(Column.Length - 1, 1)
Value.Remove(Value.Length - 3, 3)
_objDataAdapter.SelectCommand.CommandText = "INSERT INTO " & table & " (" & Column.ToString & ") " & "VALUES('" & Value.ToString & "')"
_objDataAdapter.SelectCommand.ExecuteNonQuery()
Catch ex As Exception
Dim i As Integer = station2.Length
station2(i - 1) = st
ReDim Preserve station2(i + 1)
Continue For
End Try
data1.close()
data1.Dispose()
Next
3.2 客戶(hù)端顯示
3.2.1 自動(dòng)站數(shù)據(jù)顯示及報(bào)警功能
利用VB.net語(yǔ)言將每一自動(dòng)站基本信息表讀入自定義的StationInfo結(jié)構(gòu)中,并建立文本及圖形兩個(gè)數(shù)組與其相對(duì)應(yīng),以便于地圖上進(jìn)行顯示。
為各要素(溫度、風(fēng)、降水、能見(jiàn)度)設(shè)置當(dāng)前實(shí)況顯示,可選時(shí)段查詢(xún),具體數(shù)據(jù)查詢(xún)等按鈕,觸發(fā)相應(yīng)的Click事件后,于本地?cái)?shù)據(jù)庫(kù)中讀取相應(yīng)的數(shù)據(jù),并與文本數(shù)組中顯示。
根據(jù)遼寧省氣象局文件相關(guān)要求,在小時(shí)降水量達(dá)到20mm;累計(jì)降水量達(dá)到40mm、80mm、100mm、150mm、200mm、250mm、300mm;溫度達(dá)到35℃以上;風(fēng)速達(dá)到所設(shè)置閾值;能見(jiàn)度達(dá)到所設(shè)置閾值時(shí),本平臺(tái)會(huì)出現(xiàn)報(bào)警提示音,并將其站名變?yōu)榧t色同時(shí)顯示在主界面右側(cè)空白處。部分代碼如下:
Dim Belongs As String
If County = "錦州" Then
Belongs = ""
Else
Belongs = " and Station.county ='" & County & "'"
End If
Dim _objDataSet As New DataSet
Dim sqlR As New SQL
If tabels = "M" Then
ReDim SelText(2)
SelText(0) = "declare @LDT datetime set @LDT = (select max(time) from MinuteData) SELECT Station.Station_N , minutedata.Station_C ,@LDT,sum(MinuteData.pre) as '過(guò)去1小時(shí)降水' FROM MinuteData INNER JOIN Station on MinuteData.Station_C =Station.Station_C where Time between DATEADD (HH ,-1 ,@LDT) and @LDT group by MinuteData.Station_C , Station.Station_N , Station.County having sum(MinuteData.pre)>20 and sum(MinuteData.pre)<9999" & Belongs
SelText(1) = "SELECT Station.Station_N , minutedata.Station_C ,MinuteData.Time ,MinuteData.Wind_V as '當(dāng)前風(fēng)速' FROM MinuteData INNER JOIN Station on MinuteData.Station_C =Station.Station_C where Time =(SELECT MAX(Time) FROM MinuteData) and Wind_V>" & TxtWind_S.Text & "and Wind_V<999" & Belongs
SelText(2) = "SELECT Station.Station_N , minutedata.Station_C ,MinuteData.Time ,MinuteData.Vis as'當(dāng)前能見(jiàn)度' FROM MinuteData INNER JOIN Station on MinuteData.Station_C =Station.Station_C where Time =(SELECT MAX(Time) FROM MinuteData) and Vis<" & TxtVis.Text & Belongs
ElseIf tabels = "H" Then
ReDim SelText(9)
SelText(0) = "declare @LDT datetime set @LDT = (select max(time) from hourData) SELECT Station.Station_N , hourdata.Station_C , @LDT ,sum(HourData.R_1h) as '過(guò)去24小時(shí)降水' FROM hourData INNER JOIN Station on hourData.Station_C =Station.Station_C where Time between DATEADD (HH ,-24 ,@LDT) and @LDT group by hourData.Station_C ,Station.Station_N , Station.County having sum(HourData.R_1h)>40 and sum(HourData.R_1h)<9999" & Belongs
SelText(9) = "SELECT Station.Station_N , Hourdata.Station_C ,HourData.Time ,HourData.Vis_Min as '過(guò)去1小時(shí)最小能見(jiàn)度' FROM hourData INNER JOIN Station on hourData.Station_C =Station.Station_C where Time =(SELECT MAX(Time) FROM hourData)and Vis_Min<" & TxtVis.Text & Belongs
End If
3.2.2 雨情圖繪制
雨情圖繪制部分采用VB.net語(yǔ)言與Matlab語(yǔ)言混合編程方式,主程序?yàn)閂B.net語(yǔ)言。這種方法實(shí)施起來(lái)顯得有些復(fù)雜,但是可以完全脫離MATLAB環(huán)境,實(shí)現(xiàn)軟件的快速開(kāi)發(fā)。
利用Matlab語(yǔ)言將等值線(xiàn)繪制方法寫(xiě)成m文件,在MATLAB的命令窗口中輸入:>> deploytool,設(shè)置好項(xiàng)目名,并指定目標(biāo)組件的形式是.NET Assembly,然后確定,將其封裝在一個(gè)類(lèi)塊(dll文件)中,以供主程序進(jìn)行調(diào)用。主程序在點(diǎn)擊雨情圖制作后,即可根據(jù)所選時(shí)間段進(jìn)行雨情圖繪制。
4 平臺(tái)應(yīng)用
本平臺(tái)自2017年5月開(kāi)始在錦州市氣象臺(tái)進(jìn)行測(cè)試使用,6月在錦州地區(qū)各縣市氣象局正式投入使用。此平臺(tái)投入使用后,可以一目了然地看到錦州地區(qū)各鄉(xiāng)鎮(zhèn)自動(dòng)站實(shí)況溫度、風(fēng)、降水、能見(jiàn)度等數(shù)據(jù),能夠生成降水的等值線(xiàn)圖,并可在達(dá)到預(yù)警閾值時(shí)進(jìn)行報(bào)警。在2017年汛期期間,成功的對(duì)每次降水進(jìn)行監(jiān)控及報(bào)警,有效地提高了預(yù)報(bào)預(yù)警質(zhì)量與氣象服務(wù)能力。
5 結(jié)束語(yǔ)及討論
1)本平臺(tái)實(shí)現(xiàn)了錦州地區(qū)自動(dòng)站各要素(溫度、風(fēng)、降水、能見(jiàn)度)當(dāng)前實(shí)況顯示,可選時(shí)段查詢(xún),具體數(shù)據(jù)查詢(xún),降水等值線(xiàn)圖以及達(dá)到預(yù)警閾值報(bào)警等功能。
2)本平臺(tái)目前正在錦州地區(qū)良好使用,有效地提高了預(yù)報(bào)預(yù)警質(zhì)量與氣象服務(wù)能力。
3)本平臺(tái)后臺(tái)數(shù)據(jù)處理部分在遇到網(wǎng)絡(luò)問(wèn)題時(shí),無(wú)法從CIMISS數(shù)據(jù)庫(kù)取回?cái)?shù)據(jù),且暫時(shí)無(wú)補(bǔ)傳手段,影響部分功能應(yīng)用。
4)由于不是專(zhuān)業(yè)的編程人員,平臺(tái)的美化方面略顯不足,且仍舊存在著暫時(shí)未發(fā)現(xiàn)的bug,針對(duì)這些存在的問(wèn)題,將繼續(xù)對(duì)本平臺(tái)隨時(shí)進(jìn)行更新和維護(hù)。
參考文獻(xiàn):
[1] 威利斯, 紐薩姆. Visual Basic2010入門(mén)經(jīng)典[M]. 6版. 北京: 清華大學(xué)出版社, 2011.
[2] James Foxall. Visual Basic2010入門(mén)經(jīng)典[M]. 北京: 人民郵電出版社, 2011.
[3] Bill Sheldon, Billy Hollis, Kent Sharkey, 等. Visual Basic 2010 NET4高級(jí)編程[M]. 6版. 北京: 清華大學(xué)出版社, 2011.
[4] 郭鄭州, 陳軍紅. SQL Server2008完全學(xué)習(xí)手冊(cè)[M]. 北京: 清華大學(xué)出版社, 2011.
【通聯(lián)編輯:謝媛媛】