賈顯鋒,劉洲榮
(柳州市氣象局,廣西 柳州 545002)
近年來,我國的氣象現代化建設成效顯著,建成了全國綜合氣象信息共享平臺(CIMISS),實現了氣象資料的實時收集、分發及規范化存儲管理,為各級氣象臺站共享氣象信息和業務應用提供了便捷高效的服務手段[1]。
CIMISS提供了氣象數據統一服務接口(MUSIC),從而為氣象數據應用提供了解決方案,并為部分程序開發語言提供了開發接口和較為詳盡的應用開發示例,這為基層臺站業務應用開發和科研工作提供了良好的應用開發環境[2-3],各級氣象部門利用CIMISS開發了多種業務應用系統[4-10]。然而,作者在科研應用開發過程中也發現MUSIC提供的開發接口并沒有完全覆蓋所有編程語言,對于一些目前仍作為主要開發工具的 BCB、Delphi、Visual Basic等編程語言并沒有提供相應的開發示例Demo。作者嘗試使用Windows應用程序編程接口(API)來編程調用CIMISS數據,以期解決在CIMISS應用中遇到的問題。Windows API是Windows自帶的應用程序開發接口,理論上所有Windows平臺上的開發語言都支持 Windows API應用[11-16],這為解決MUSIC不支持的編程語言提供了一種新的解決方案。
MUSIC提供了客戶端、Web service和REST等三種編程服務方式[17-18],本文以REST服務方式為例,提出基于Windows API的CIMISS資料調用方案。
利用REST服務方式,通過在客戶端發送符合REST風格的HTTP請求,CIMISS服務器即可返回所請求的數據。可見,利用REST方式調用CIMISS資料,HTTP請求功能是關鍵。BCB6.0本身無現成的HTTP請求函數,為了能實現HTTP請求功能,需要利用WINDOWS API函數來開發實現該功能。WINDOWS 提 供 了 InternetOpen、InternetOpenUrl、InternetReadFile、InternetCloseHandle等 4個函數可以實現HTTP請求相關操作,其中InternetOpen用于建立網絡連接,InternetOpenUrl用于打開網絡資源,InternetReadFile用于讀取服務器上的數據,InternetCloseHandle用于關閉已建立的網絡連接。
利用上述4個API函數,我們可以自己設計一個HTTP請求函數,用于從服務器獲取數據:首先建立網絡連接,然后將HTTP請求串url發送到服務器打開網絡資源,接著循環讀取服務器發送回來的請求響應數據,直至完全讀完數據,最后關閉網絡連接,釋放資源。HTTP請求函數流程圖如圖1所示,其完整代碼如下:1



值得注意的是,上述自定義函數中在循環讀取數據的時候,必須每次都要在得到的數據后加入字符串結束符‘\0’,否則將導致數據異常。利用上述函數,只要網絡正常連接且輸入的資源定位串(url)無誤即可返回所請求的資源。例如,我們要獲取百度的首頁數據,調用 HttpRequest(“http://www.baidu.com”)即可。同樣地,只要我們給出正確的MUSIC的REST接口調用資源定位串url,就可以獲取相應的CIMISS數據。
有了自定義的HTTP請求函數,我們就可以實現對CIMISS平臺的資料進行讀取和處理。通過REST 方式獲得的數據有 xml、json、jsonp、html、text等五種格式,獲取數據后需要從相應格式轉換為所需要的格式。下面給出BCB6.0編程的xml格式解碼函數代碼。

有了HTTP請求函數和xml解碼函數,我們就可自如地調取和應用CIMISS數據了。下面以BCB6.0編程調用CIMISS地面氣象實時資料為例,給出一個完整的調用例子:

需要注意的是,對于文件類的資料檢索,需要進行兩次HTTP請求,第一次請求得到文件名、文件格式、文件大小、文件下載地址等相關信息后,再次利用文件下載地址進行HTTP請求即可獲得文件數據,將文件數據保存為指定的文件類型即可。
通過多種應用試驗,證實基于Windows API編程的CIMISS數據調用方式具有代碼簡潔、運行穩定可靠、調取資料響應迅速等特點,可在業務系統中進行實際應用。
CIMISS提供了良好的數據環境,這為開發業務系統提供了便利條件。為了實現對災害性天氣進行自動監測預警,我們以基于Windows API的HTTP請求函數作為調用CIMISS資料的核心技術,開發了“災害天氣監測預警業務系統”,系統主界面如圖2所示。該系統以CIMISS地面實時資料作為基礎,實現對地面氣象觀測資料要素進行實時自動監測,當監測到降水、氣溫、風速、能見度等要素達到設定閾值時,自動通過電腦語音、字幕、手機短信等方式發出告警信息,彌補了預報員人工監測天氣上的不足,對災害性天氣的監測和防御起到重要作用。該系統在業務運行中穩定可靠,發揮了較大的效益。這也證實了Windows API編程調用CIMISS資料進行業務應用是可行的。

圖2 “災害天氣監測預警業務系統”主界面
本文從解決BCB6.0編程實現HTTP請求功能作為出發點,成功解決了BCB6.0對CIMISS氣象資料的調用。其主要技術特點有:
(1)Windows API編程技術兼容性強,理論上所有基于Windows的編程語言都可支持此方案。
(2)采用基于Windows API編程方式實現對CIMISS資料調用,有效解決了MUSIC對BCB6.0等一些編程語言兼容性不太好的問題,為CIMISS資料應用提供了一種新的解決方案。
(3)基于 Windows API的HTTP請求代碼簡潔,穩定性好,容易搭建CIMISS應用架構,便于快速開發業務應用系統。
[1]季永華,孫超,劉一鳴,等.CIMISS中氣象觀測資料處理入庫效率優化方法[J].氣象科技,2017,45(1):29-34.
[2]熊劦,鄧衛華,胡佳軍,等.基于CIMISS的區域災害性天氣實時監測與報警系統的設計與實現 [J].氣象科技,2017,45(3):453-458.
[3]熊安元,趙芳,王穎,等.全國綜合氣象信息共享系統的設計與實現[J].應用氣象學報,2015,26(4):500-512.
[4]李志鵬,胡佳軍,楊立苑,等.基于CIMISS的氣象數據處理時效監視系統設計與實現 [J].氣象與減災研究,2016,39(4):309-113.
[5]王旻燕,鄧莉,趙芳,等.CIMISS中氣象衛星數據存儲和服務模型[J].安徽農業科學,2012,40(8):4785-4789.
[6]王宏記,楊代才.基于CIMISS的長江流域氣象水文信息共享系統設計與實現研究 [J].安徽農業科學,2014,42(32):11565-11570.
[7]楊潤芝,馬強,李德泉,等.內存轉發模型在CIMISS數據收發系統中的應用[J].應用氣象學報,2012,23(3):377-384.
[8]王祝先.黑龍江省CIMISS前端通信系統設計[J].黑龍江科學,2017,8(17):62-63.
[9]潘雪,董洋,楊英奎.基于CIMISS報文快速處理系統設計[J].現代化農業,2017,12:62-63.
[10]史彩霞,黎穎智,張許斌.基于CIMISS的廣西氣象服務信息綜合業務系統的設計與實現[J].氣象研究與應用,2016,37(4):82-85.
[11]劉波濤,馮翠麗.物聯網應用中嵌入式HTTP協議的設計與實現[J].佳木斯大學學報(自然科學版),2011,29(5):713-718.
[12]呂浩勇,胡寅,張朝陽.一種基于HTTP協議的動態Web資源緩存機制及實現[J].黃岡師范學院學報,2014,34(6):65-66.
[13]王艷萍,張銳.在Delphi下用Windows API函數實現串行通信[J].寧夏工程技術,2003,2(2):141-143.
[14]隋永朋,魏振鋼.Win32 Api函數的重要作用及調用[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.