周丹紅+錢宏超+高建平
摘 要 目前,氣象類省、市級指導產品的種類繁多、查詢較為復雜,常導致縣級氣象綜合業務人員遲看甚至遺漏有關重要的天氣預報、預警等信息。通過本系統的研發實現縣級氣象局綜合業務人員及時便捷地獲取上級部門發布的氣象預報預警等信息,有效避免重要的氣象預警信號發布錯誤、不及時甚至遺漏的問題。本系統的技術關鍵點和難點是如何及時準確便捷地查詢省、市局有關氣象指導產品,并從中提取到本行政區的氣象預報預警等信息,從而更好地做好氣象預報預警服務。
關鍵詞 氣象;氣象服務;資料調用;業務系統
中圖分類號:P451 文獻標志碼:B DOI:10.19415/j.cnki.1673-890x.2018.03.061
氣象現代化建設是提高氣象業務和服務工作技術的有效途徑,也是氣象事業發展的重要標志[1]。而氣象業務智能化在氣象現代化中也有著重要的地位,以智能化、信息化、集約化的理念和方式來加快氣象業務現代化的建設[2]。
目前,縣級氣象部門普遍存在人員編制少、綜合性事務繁多、基層人員身兼數職等問題,這就會造成縣級氣象綜合業務人員抽不出時間制作氣象預報、無法時刻關注當前天氣形勢等問題。如果因為天氣預報預警信息的遲發、漏發等問題造成嚴重的后果,將會給人民的生命和財產造成損失,并且會引發惡劣的社會反響。
隨著現代信息化產業的高速發展,各類軟件在市場的比例不斷增大,應用的領域也越來越多[3]。為了解決上述問題,上高縣氣象局通過申報市局自籌資金科研項目完成了“上高縣氣象業務工作平臺”的研發。平臺通過從江西省氣象內網、宜春市氣象內網和CIMISS(全國綜合氣象信息數據共享平臺)中讀取相關數據,實現了對上高縣上午、下午天氣預報,空氣質量預報,天氣預警信號,區域站故障情況和省臺天氣形勢分析的自動采集、處理與顯示附帶信息更新聲音告警功能,并在平臺界面最上方提供菜單欄,添加日常工作所需的網址和程序以供所有工作在該平臺統一完成,如圖1所示。該平臺集約化程度高、可操作性強,使得日常業務工作的時效性得到很大的提升。
1 上高縣氣象業務工作平臺的技術路線
1.1 自動獲取網頁所需信息并在平臺顯示
其中上下午天氣預報、空氣質量預報、天氣預警信號和天氣形勢分析都是通過獲取網頁源文件再進行后期加工處理顯示,以上午天氣預報為例,利用下載和寫入語句將網頁原始數據寫入文本文件“swyb.txt”當中。
Byte[] pageData = MyWebClient.DownloadData(“http://172.20.132.104/ycsharde/ycyb/morning.htm”);
using (StreamWriter sw = new StreamWriter(System.AppDomain.CurrentDomain.BaseDirectory + “swyb.txt”))
sw.Write(pageHtml);[4]
所得文件如圖2所示。
因為原始文件中1月到9月、1時到9時跟10月到12月、10時到24時的位數不一樣,為了方便后期數據處理,首先將文件中月份和小時統一為兩位數(即01到09月、01到09時),將文件中第十四行變為固定格式yyyy年MM月dd日HH時宜春市各縣市天氣預報,用Split語句分隔“宜”字使之變為“yyyy年MM月dd日HH時”和“春市各縣市天氣預報”兩斷,只要提取第一段就為當天的預報時間,接下來循環搜后面的每一行,判斷前兩個字是否為“上高”,如果是就用編好的子程序觸發聲音報警并將該行放入字符串中,使用Replace替換語句將“-”替換為“至”,“”等其他無用符號替換為空同時生成一個新的字符串,接下來將新的字符串放入textbox框中即取到了當天上午上高的天氣預報,如圖3所示。
下午天氣預報、空氣質量預報、天氣預警信號和天氣形勢分析同理所示。
1.2 通過CIMISS數據自動判斷區域站是否故障并顯示
CIMISS存儲了地面、高空、海洋、輻射、服務產品等14大類氣象數據,能夠滿足實時業務對氣象數據的檢索需求。為了更加高效地檢索數據,CIMISS分別對資料按照時效進行分表存儲,以地面數據為例,該類資料分為逐分鐘、逐小時、逐日、月資料、旬值資料、年值資料。所要選取的區域站資料就是逐小時資料,利用“getSurfEleByTimeAndStaID”(按時間、站號檢索地面數據要素)接口,通過選擇資料代碼、日期時間及站號輸出所需要素,這里所需要素即為資料時間,通過選取當前時間至當前時間前50小時作為日期時間,輸出的要素最后一行即為最近的資料時間,用該時間與當前時間做個減法就可以判斷該區域自動站多少個小時未上線,部分代碼如下:
DateTime retc = DateTime.Now;
DateTime dt1 = DateTime.Now.AddHours(-58);
string mytime = dt1.ToString(“yyyyMMdd-
HH0000”);
while (dt1 < DateTime.Now.AddHours(-8))
{
dt1 = dt1.AddHours(1);
mytime += “,” + dt1.ToString(“yyyyMMddH-
H0000”);
}
DataQueryClient client = new DataQueryClient();
String userId = “”;
String pwd = “”;
String interfaceId = “getSurfEleByTimeAndStaID”;
Dictionary
params1.Add(“dataCode”, “SURF_CHN_MUL_HOR”);
params1.Add(“elements”, “Datetime”);
params1.Add(“times”, mytime);
params1.Add(“staIds”, myid);
params1.Add(“staLevels”, “014”);
String dataFormat = “text”;
StringBuilder retFilesInfo = new StringBuilder();
client.initResources();
int rst = client.callAPI_to_serializedStr(userId, pwd, interfaceId, params1, dataFormat, retFilesInfo);
if (rst == 0)
{
string aa = retFilesInfo.ToString();
string[] bb = aa.Split(‘\n);
string cc = “\r”;
for (int i = bb.Length - 1; i >= 2; i--)
{
if (bb[i].Length > 8)
{
cc = bb[i]; break;
}
}
cc = cc.Substring(0, cc.Length - 1);
retc = Convert.ToDateTime(cc).AddHours(8);
return retc;
}
1.3 日常工作網頁及程序超級鏈接
1.3.1 網頁鏈接
首先添加一個新的窗體作為網頁調用窗口,在該窗體上創建webBrowser控件,為了使打開的網頁束縛在該工作平臺,利用以下語句:
foreach (HtmlElement archor in this.webBrowser1.Document.Links)
{
archor.SetAttribute(“target”, “_self”);
}
foreach (HtmlElement form in this.webBrowser1.Document.Forms)
{
form.SetAttribute(“target”, “_self”);
}
這樣就不會用電腦默認的其他瀏覽器打開網頁,而顯示在之前創建的新的窗體里的webBrowser控件當中,避免有些網站只支持IE瀏覽器而打不開網頁的問題。通過對菜單欄按鈕進行編輯,當點下該按鈕時,將一個全局變量賦值為一個特定的數,然后打開網頁調用窗口,網頁調用程序再通過這個特定的數去打開之前設定好的一一對應的網站,部分代碼如下:
private void toolStripButton2_Click(object sender, EventArgs e)
{
myvar.ttt = 01;
網頁調用 hh = new 網頁調用();
hh.Show();
}
switch (myvar.ttt)
{
case 01: webBrowser1.Navigate(“http://172.20.132.104/”); break;
case 02: webBrowser1.Navigate(“http://10.116.
32.199/”); break;
default: break;
}
private void webBrowser1_NewWindow_1(object sender, CancelEventArgs e)
{
e.Cancel = true;
webBrowser1.Navigate(webBrowser1.StatusText);
}
1.3.2 程序鏈接
C#語言自帶打開應用程序的語句,只需知道該程序的路徑和名稱,部分代碼如下:
System.Diagnostics.Process.Start(@”D:\MICAPS311-201310\micaps3.exe”);[5]
2 結語
通過在上高縣氣象臺幾個月的試用,本平臺有效地提高了業務人員工作的效率,減輕了業務人員時刻關注大量網頁的壓力,將日常應用和相關網頁集約在該平臺都為日常工作提供了許多的便利。該平臺具有很強的通用性,只需稍加修改就可以在其他的縣市推廣應用。
參考文獻:
[1] 黎鍵.新時期推進氣象現代化的若干思考[J].浙江氣象,2012,33(1):1-4.
[2] 王曦.智能化系統集成簡介[J].精密制造與自動化,2011(4):61-64.
[3] 中國氣象報社.準確把握新形勢下氣象現代化的內涵[EB/OL].(2013-05-31)[2017-12-10].http://www.cma.gov.cn/2011xwzx/2011xqxxw/2011xqxyw/201305/t20130531_215335.html.
[4] 李銘.C#高級編程[M].北京:清華大學出版社,2012.
[5] 齊立波.C#入門經典[M].北京:清華大學出版社,2009.
(責任編輯:劉昀)