趙奎鋒
(1.陜西省氣象局秦嶺和黃土高原生態(tài)環(huán)境氣象重點實驗室,西安 710016;2.陜西省氣象科學研究所,西安 710016)
氣象實況觀測數(shù)據(jù)是站點離散數(shù)據(jù),在氣象預報服務和科研工作中,常常用到科學繪圖技術對這些離散數(shù)據(jù)進行分析,勾畫氣象要素面上的分布情況,以便直觀地呈現(xiàn)其分布特點。實際業(yè)務中,經(jīng)常使用的科學繪圖軟件有Golden Surfer、NCL(the NCAR command language)、GrADS(grid analysis and display system,格點分析和顯示系統(tǒng))等[1-4],其中GrADS 是當今氣象學科中廣泛使用的數(shù)據(jù)處理和顯示軟件系統(tǒng),可讀取格點或站點氣象資料(二進制或GRIB 碼格式),并進行加工處理。可實現(xiàn)等值線、流線、填圖、地圖、曲線等多種圖形顯示。隨著網(wǎng)絡技術的發(fā)展,基于WEB技術的在線資料共享方式受到歡迎,但是多數(shù)共享采用的是資料后臺處理成圖表后的靜態(tài)共享,較少采用網(wǎng)絡在線交互出圖。OpenGrADS是基于GrADS的擴展,提供CGI(common gate interface,公共網(wǎng)關接口)接口,支持WEB環(huán)境下的交互出圖。本文介紹結(jié)合Python軟件利用OpenGrADS進行觀測數(shù)據(jù)在線交互繪圖的技術及應用。
Python是一種解釋腳本語言,類似 VBScript、JavaScript、Perl等腳本語言。如圖1所示,Python的CGI編程,是利用WEB服務器和一個Python自定義的腳本之間交換信息。通過設立的HTTP服務器,在某個目錄中的文件被請求作為一個程序執(zhí)行,并將結(jié)果發(fā)送到瀏覽器來顯示。這個函數(shù)被調(diào)用的通用網(wǎng)關接口或CGI程序稱為CGI腳本[5-6]。
圖1 Python CGI架構(gòu)圖
IIS(Internet information services,互聯(lián)網(wǎng)信息服務)常常用來搭建WEB運行環(huán)境。對于一些簡單的通用網(wǎng)關接口腳本,IIS使用windows scripting host來解析VBScript 和 JavaScript,而對于Python的CGI腳本語言,IIS使用配置的Python腳本解釋程序來解析,其配置需要在IIS管理器中將擴展名為“.py”的程序映射到Python安裝目錄的執(zhí)行程序,并賦予“全部動作”執(zhí)行的權限即可。通過配置,給IIS運行python CGI程序搭建了運行環(huán)境。
OpenGrADS是一個致力于改進GrADS的界面和擴展性的項目。它通過改進用戶定義命令和自定義功能,允許用戶添加自己的動態(tài)鏈接插件,引入了PHP、Perl和Python等腳本語言,使其可以基于GrADS發(fā)展更多的擴展,并且十分方便地與WEB結(jié)合,應用于網(wǎng)絡交互界面[7]。
從1.9 rc1版本開始,OpenGrADS增加了一項功能,即實現(xiàn)了對GIS的Shape地圖文件的支持,通過調(diào)用Shape格式的地理信息數(shù)據(jù)庫的數(shù)據(jù)非常簡便地繪制出地圖底圖[8]。
服務器端存儲了自動氣象站、區(qū)域站的觀測數(shù)據(jù)。由于設備故障或其他因素,可能存在一些奇異數(shù)據(jù),尤其以區(qū)域站的奇異數(shù)據(jù)最多;因此,在從CIMISS(China intergrated meteorological information service system,全國綜合氣象信息共享系統(tǒng))中通過MUSIC(meteorological unified service interface community,氣象數(shù)據(jù)統(tǒng)一服務接口)提取站點離散數(shù)據(jù)后,需加以修正之后才可以用來繪圖。
這里用到Python CGI程序處理數(shù)據(jù)。如圖2左側(cè)所示,通過表單用戶選取起止時間,服務器端利用CGI程序從CIMISS共享系統(tǒng)中提取該時段的自動站、區(qū)域站數(shù)據(jù),在線交互修改、消除奇異值后,提交給數(shù)據(jù)處理分析程序,將其加工成GrADS所支持的格式。上述經(jīng)修正的數(shù)據(jù)為文本格式,要通過轉(zhuǎn)換格式處理為GrADS所支持二進制數(shù)據(jù)[9]。
圖2 網(wǎng)絡交互GrADS繪圖流程
如圖2所示,在Python CGI程序中導入OpenGrADS模塊,代碼如下:
import grads
from grads.gacore import GaCore
導入OpenGrADS模塊后,添加如下代碼以打開ctl描述文件:
ga('openaws_mask.ctl', Quiet=True, Block=True)
ga('openaws.ctl')
利用“ga”命令可以運行桌面版GrADS的gs腳本,從而設置x坐標軸、y坐標軸、色斑圖顏色、等值線間隔、色標標注方式、地圖底圖等[10]。
值得一提的是,自從GrADS2.0.a8版本開始,GrADS引入了對SHP地圖的支持,可以非常方便地自定義繪制地域范圍,通過地理信息系統(tǒng)定義好地圖之后,在繪圖時調(diào)用即可,代碼如下:
ga('set mpdraw off'') #關閉默認地圖
ga('draw shp shaanxi)#繪制以shaanxi.shp命名的地圖
還可以根據(jù)需要將河流的SHP地圖文件疊加繪制到圖形中。繪制完成后,將圖形存于WEB服務器的目錄下,并在瀏覽器中顯示,代碼如下:
ga('printimaws.png x1000 y773 white')
在業(yè)務應用中,通過動態(tài)WEB頁面的交互,可以提供多個選項以便繪制出符合業(yè)務服務需求的標準圖形。如:起止時間段、數(shù)據(jù)類型(國家自動氣象站、區(qū)域氣象站或者兩者混合輸出)、色標類型(是否采用中國氣象局規(guī)定的色標)、繪制地圖的區(qū)域(全國或某省某市范圍)、插值的分辨率、疊加的地圖(地質(zhì)災害易發(fā)區(qū)、河流、交通信息等)。這些選擇通過WEB以表單形式選擇。由于GrADS對中文的支持不足,可以通過Python豐富的圖形處理插件對圖形進行后期處理,如標注圖形名稱、時間區(qū)間、數(shù)量單位等信息,減少了業(yè)務人員后期處理的工作量。
(1)交互環(huán)境下的快速實時繪圖是氣象業(yè)務服務不可或缺的技術,在交互環(huán)境下選擇繪圖起止時間段、行政區(qū)域、分辨率參數(shù),疊加河流和地質(zhì)災害易發(fā)區(qū)等地理信息,業(yè)務人員還可以對奇異數(shù)據(jù)進行訂正,能繪制出反映天氣情況的真實圖形。
(2)利用Python語言的擴展性和豐富的插件,便捷地部署CGI交互環(huán)境,同時由于OpenGrADS具有Python擴展庫,使得GrADS能部署于服務器端,從而能提供快速繪圖的網(wǎng)絡環(huán)境。
(3)GrADS2.0.a8版本開始引入了對SHP地圖的支持,極大地方便了自定義行政區(qū)域范圍的繪圖,采用中國氣象局規(guī)定的色標繪制符合標準的圖形,通過Python豐富的圖形處理插件對圖形進行后期處理,減少了業(yè)務人員后期處理的工作量。