賈顯鋒,劉洲榮
(柳州市氣象局,廣西 柳州 545002)
近年來,我國的氣象現(xiàn)代化建設成效顯著,建成了全國綜合氣象信息共享平臺(CIMISS),實現(xiàn)了氣象資料的實時收集、分發(fā)及規(guī)范化存儲管理,為各級氣象臺站共享氣象信息和業(yè)務應用提供了便捷高效的服務手段[1]。
CIMISS提供了氣象數(shù)據(jù)統(tǒng)一服務接口(MUSIC),從而為氣象數(shù)據(jù)應用提供了解決方案,并為部分程序開發(fā)語言提供了開發(fā)接口和較為詳盡的應用開發(fā)示例,這為基層臺站業(yè)務應用開發(fā)和科研工作提供了良好的應用開發(fā)環(huán)境[2-3],各級氣象部門利用CIMISS開發(fā)了多種業(yè)務應用系統(tǒng)[4-10]。然而,作者在科研應用開發(fā)過程中也發(fā)現(xiàn)MUSIC提供的開發(fā)接口并沒有完全覆蓋所有編程語言,對于一些目前仍作為主要開發(fā)工具的 BCB、Delphi、Visual Basic等編程語言并沒有提供相應的開發(fā)示例Demo。作者嘗試使用Windows應用程序編程接口(API)來編程調用CIMISS數(shù)據(jù),以期解決在CIMISS應用中遇到的問題。Windows API是Windows自帶的應用程序開發(fā)接口,理論上所有Windows平臺上的開發(fā)語言都支持 Windows API應用[11-16],這為解決MUSIC不支持的編程語言提供了一種新的解決方案。
MUSIC提供了客戶端、Web service和REST等三種編程服務方式[17-18],本文以REST服務方式為例,提出基于Windows API的CIMISS資料調用方案。
利用REST服務方式,通過在客戶端發(fā)送符合REST風格的HTTP請求,CIMISS服務器即可返回所請求的數(shù)據(jù)??梢姡肦EST方式調用CIMISS資料,HTTP請求功能是關鍵。BCB6.0本身無現(xiàn)成的HTTP請求函數(shù),為了能實現(xiàn)HTTP請求功能,需要利用WINDOWS API函數(shù)來開發(fā)實現(xiàn)該功能。WINDOWS 提 供 了 InternetOpen、InternetOpenUrl、InternetReadFile、InternetCloseHandle等 4個函數(shù)可以實現(xiàn)HTTP請求相關操作,其中InternetOpen用于建立網(wǎng)絡連接,InternetOpenUrl用于打開網(wǎng)絡資源,InternetReadFile用于讀取服務器上的數(shù)據(jù),InternetCloseHandle用于關閉已建立的網(wǎng)絡連接。
利用上述4個API函數(shù),我們可以自己設計一個HTTP請求函數(shù),用于從服務器獲取數(shù)據(jù):首先建立網(wǎng)絡連接,然后將HTTP請求串url發(fā)送到服務器打開網(wǎng)絡資源,接著循環(huán)讀取服務器發(fā)送回來的請求響應數(shù)據(jù),直至完全讀完數(shù)據(jù),最后關閉網(wǎng)絡連接,釋放資源。HTTP請求函數(shù)流程圖如圖1所示,其完整代碼如下:1
值得注意的是,上述自定義函數(shù)中在循環(huán)讀取數(shù)據(jù)的時候,必須每次都要在得到的數(shù)據(jù)后加入字符串結束符‘\0’,否則將導致數(shù)據(jù)異常。利用上述函數(shù),只要網(wǎng)絡正常連接且輸入的資源定位串(url)無誤即可返回所請求的資源。例如,我們要獲取百度的首頁數(shù)據(jù),調用 HttpRequest(“http://www.baidu.com”)即可。同樣地,只要我們給出正確的MUSIC的REST接口調用資源定位串url,就可以獲取相應的CIMISS數(shù)據(jù)。
有了自定義的HTTP請求函數(shù),我們就可以實現(xiàn)對CIMISS平臺的資料進行讀取和處理。通過REST 方式獲得的數(shù)據(jù)有 xml、json、jsonp、html、text等五種格式,獲取數(shù)據(jù)后需要從相應格式轉換為所需要的格式。下面給出BCB6.0編程的xml格式解碼函數(shù)代碼。
有了HTTP請求函數(shù)和xml解碼函數(shù),我們就可自如地調取和應用CIMISS數(shù)據(jù)了。下面以BCB6.0編程調用CIMISS地面氣象實時資料為例,給出一個完整的調用例子:
需要注意的是,對于文件類的資料檢索,需要進行兩次HTTP請求,第一次請求得到文件名、文件格式、文件大小、文件下載地址等相關信息后,再次利用文件下載地址進行HTTP請求即可獲得文件數(shù)據(jù),將文件數(shù)據(jù)保存為指定的文件類型即可。
通過多種應用試驗,證實基于Windows API編程的CIMISS數(shù)據(jù)調用方式具有代碼簡潔、運行穩(wěn)定可靠、調取資料響應迅速等特點,可在業(yè)務系統(tǒng)中進行實際應用。
CIMISS提供了良好的數(shù)據(jù)環(huán)境,這為開發(fā)業(yè)務系統(tǒng)提供了便利條件。為了實現(xiàn)對災害性天氣進行自動監(jiān)測預警,我們以基于Windows API的HTTP請求函數(shù)作為調用CIMISS資料的核心技術,開發(fā)了“災害天氣監(jiān)測預警業(yè)務系統(tǒng)”,系統(tǒng)主界面如圖2所示。該系統(tǒng)以CIMISS地面實時資料作為基礎,實現(xiàn)對地面氣象觀測資料要素進行實時自動監(jiān)測,當監(jiān)測到降水、氣溫、風速、能見度等要素達到設定閾值時,自動通過電腦語音、字幕、手機短信等方式發(fā)出告警信息,彌補了預報員人工監(jiān)測天氣上的不足,對災害性天氣的監(jiān)測和防御起到重要作用。該系統(tǒng)在業(yè)務運行中穩(wěn)定可靠,發(fā)揮了較大的效益。這也證實了Windows API編程調用CIMISS資料進行業(yè)務應用是可行的。
圖2 “災害天氣監(jiān)測預警業(yè)務系統(tǒng)”主界面
本文從解決BCB6.0編程實現(xiàn)HTTP請求功能作為出發(fā)點,成功解決了BCB6.0對CIMISS氣象資料的調用。其主要技術特點有:
(1)Windows API編程技術兼容性強,理論上所有基于Windows的編程語言都可支持此方案。
(2)采用基于Windows API編程方式實現(xiàn)對CIMISS資料調用,有效解決了MUSIC對BCB6.0等一些編程語言兼容性不太好的問題,為CIMISS資料應用提供了一種新的解決方案。
(3)基于 Windows API的HTTP請求代碼簡潔,穩(wěn)定性好,容易搭建CIMISS應用架構,便于快速開發(fā)業(yè)務應用系統(tǒng)。
[1]季永華,孫超,劉一鳴,等.CIMISS中氣象觀測資料處理入庫效率優(yōu)化方法[J].氣象科技,2017,45(1):29-34.
[2]熊劦,鄧衛(wèi)華,胡佳軍,等.基于CIMISS的區(qū)域災害性天氣實時監(jiān)測與報警系統(tǒng)的設計與實現(xiàn) [J].氣象科技,2017,45(3):453-458.
[3]熊安元,趙芳,王穎,等.全國綜合氣象信息共享系統(tǒng)的設計與實現(xiàn)[J].應用氣象學報,2015,26(4):500-512.
[4]李志鵬,胡佳軍,楊立苑,等.基于CIMISS的氣象數(shù)據(jù)處理時效監(jiān)視系統(tǒng)設計與實現(xiàn) [J].氣象與減災研究,2016,39(4):309-113.
[5]王旻燕,鄧莉,趙芳,等.CIMISS中氣象衛(wèi)星數(shù)據(jù)存儲和服務模型[J].安徽農業(yè)科學,2012,40(8):4785-4789.
[6]王宏記,楊代才.基于CIMISS的長江流域氣象水文信息共享系統(tǒng)設計與實現(xiàn)研究 [J].安徽農業(yè)科學,2014,42(32):11565-11570.
[7]楊潤芝,馬強,李德泉,等.內存轉發(fā)模型在CIMISS數(shù)據(jù)收發(fā)系統(tǒng)中的應用[J].應用氣象學報,2012,23(3):377-384.
[8]王祝先.黑龍江省CIMISS前端通信系統(tǒng)設計[J].黑龍江科學,2017,8(17):62-63.
[9]潘雪,董洋,楊英奎.基于CIMISS報文快速處理系統(tǒng)設計[J].現(xiàn)代化農業(yè),2017,12:62-63.
[10]史彩霞,黎穎智,張許斌.基于CIMISS的廣西氣象服務信息綜合業(yè)務系統(tǒng)的設計與實現(xiàn)[J].氣象研究與應用,2016,37(4):82-85.
[11]劉波濤,馮翠麗.物聯(lián)網(wǎng)應用中嵌入式HTTP協(xié)議的設計與實現(xiàn)[J].佳木斯大學學報(自然科學版),2011,29(5):713-718.
[12]呂浩勇,胡寅,張朝陽.一種基于HTTP協(xié)議的動態(tài)Web資源緩存機制及實現(xiàn)[J].黃岡師范學院學報,2014,34(6):65-66.
[13]王艷萍,張銳.在Delphi下用Windows API函數(shù)實現(xiàn)串行通信[J].寧夏工程技術,2003,2(2):141-143.
[14]隋永朋,魏振鋼.Win32 Api函數(shù)的重要作用及調用[J].山東理工大學學報(自然科學版),200620 (6):97-99,102.
[15]AMARDEO C,SARMA,JG.Identitiesin the future lnternet of Things[J].Wireless Pers Commun 2009,49:353-363.
[16]Intemational Telecommunication Union UIT.ITU Internet Reports 2005:The Internet of Things[R].2005.
[17]國家氣象信息中心.全國綜合氣象信息共享平臺(CIMISS)總體設計總論卷[Z].2009.
[18]國家氣象信息中心.全國綜合氣象信息共享平臺(CIMISS)總體設計架構[Z].2011.