符鳳平,吳哲紅,馮新建,陳貞宏
(貴州省安順市氣象局,貴州 安順 561000)
自2012年3月31日20時(shí)起執(zhí)行新的地面自動(dòng)站氣象要素?cái)?shù)據(jù)文件格式以后,由于其文件命名和內(nèi)容格式均與以前有所不同,數(shù)據(jù)文件格式發(fā)生較大變化,導(dǎo)致部分氣象業(yè)務(wù)服務(wù)應(yīng)用軟件無法繼續(xù)使用,氣象業(yè)務(wù)服務(wù)、科研開發(fā)工作受到不同程度的影響。相關(guān)技術(shù)人員曾利用地面自動(dòng)站資料異地備份服務(wù)器上的資料,對自動(dòng)站逐日氣象要素進(jìn)行了開發(fā)與應(yīng)用,但由于程序采用C/S工作方式,安裝與使用均不太方便,造成對異地備份服務(wù)器上的資源利用不足,地面自動(dòng)站異地備份系統(tǒng)未能充分發(fā)揮作用。
至目前為止,在地面自動(dòng)站氣象要素網(wǎng)絡(luò)共享方面的開發(fā)較少,造成地面自動(dòng)站氣象要素的共享程度不高,自動(dòng)站資料未能充分發(fā)揮效益。為了改善以上所述現(xiàn)狀,充分發(fā)揮地面自動(dòng)站氣象要素?cái)?shù)據(jù)的使用效率,結(jié)合氣象業(yè)務(wù)、服務(wù)及管理的實(shí)際需要,非常有必要對地面自動(dòng)站氣象要素?cái)?shù)據(jù)進(jìn)行開發(fā)與應(yīng)用。
本平臺(tái)采用C/S和B/S兩種軟件體系結(jié)構(gòu),最終實(shí)現(xiàn)地面自動(dòng)站氣象要素的Web共享。由于面向用戶的前端程序采取B/S工作模式,維護(hù)與操作較為簡便,適合使用對象較廣,對于提高氣象業(yè)務(wù)服務(wù)、科研及管理水平,具有一定的積極意義。
平臺(tái)主要分為后臺(tái)模塊和前臺(tái)模塊兩部分。后臺(tái)模塊主要實(shí)現(xiàn)地面自動(dòng)站氣象要素入庫與補(bǔ)調(diào)等功能,包含逐時(shí)要素和逐日要素入庫與補(bǔ)調(diào)兩部分子程序,其程序可集中或分散運(yùn)行于同一網(wǎng)段內(nèi)的任何一臺(tái)計(jì)算機(jī)上。其中“逐時(shí)要素入庫程序”實(shí)現(xiàn)定時(shí)讀取存放在省級(jí)服務(wù)器上的長Z文件,“逐日要素入庫程序”實(shí)現(xiàn)定時(shí)讀取本地異地備份服務(wù)器上的B文件。前臺(tái)模塊主要實(shí)現(xiàn)逐時(shí)要素和逐日要素基于Web方式下的顯示與查詢、統(tǒng)計(jì)與報(bào)表輸出、各類統(tǒng)計(jì)圖生成等功能。平臺(tái)主要結(jié)構(gòu)見圖1。
基于省—地—縣氣象光纖通信網(wǎng)和局域網(wǎng),以Windows 7操作系統(tǒng)為開發(fā)平臺(tái),分別采用C/S和B/S兩種結(jié)構(gòu)。后臺(tái)模塊的實(shí)現(xiàn),基于C/S工作模式,使用VB編程語言和SQL Server數(shù)據(jù)庫技術(shù),實(shí)現(xiàn)逐時(shí)、逐日氣象要素的入庫及補(bǔ)調(diào)。前臺(tái)模塊的實(shí)現(xiàn),基于B/S工作模式,使用ASP開發(fā)環(huán)境、VML語言、VBScript與JavaScript腳本語言等技術(shù),實(shí)現(xiàn)要素顯示與查詢、自動(dòng)統(tǒng)計(jì)與Excel報(bào)表輸出、各類統(tǒng)計(jì)圖生成等功能。
圖1 平臺(tái)主要結(jié)構(gòu)
2.3.1 后臺(tái)模塊 主要實(shí)現(xiàn)逐時(shí)、逐日氣象要素的入庫與補(bǔ)調(diào)。逐時(shí)氣象要素入庫程序主要讀取各自動(dòng)站逐時(shí)上傳到省級(jí)服務(wù)器的數(shù)據(jù)文件,其文件格式主要參考中國氣象局綜合觀測司組織制定并于2012年3月31日20時(shí)起開始執(zhí)行的《地面氣象要素?cái)?shù)據(jù)文件格式(V1.0)》。
逐日要素入庫程序分老站和新站兩部分。老站(即ZQZ-C2自動(dòng)站)入庫程序主要讀取地(市)級(jí)異地備份服務(wù)器BaseData子目錄下的B文件。新站(即DZZ4新型自動(dòng)站)入庫程序主要讀取省級(jí)服務(wù)器上的自動(dòng)站長Z文件,其中最高氣溫、最低氣溫、降水、蒸發(fā)、日照等數(shù)據(jù)來源于每天20時(shí)的長Z文件,平均氣溫來源于每天02、08、14、20 4個(gè)時(shí)次的氣溫平均值。讀出的逐時(shí)或逐日氣象要素,通過一定計(jì)算或格式轉(zhuǎn)換后再寫入數(shù)據(jù)庫。
2.3.2 前臺(tái)模塊[1]顯示與查詢:主要以表格方式實(shí)現(xiàn)逐時(shí)和逐日氣象要素的顯示與查詢,顯示的氣象要素均已進(jìn)行格式轉(zhuǎn)換,如要素觀測時(shí)間,已從世界時(shí)轉(zhuǎn)換為北京時(shí)。顯示主界面以30 s自動(dòng)刷新,顯示最新逐時(shí)氣象要素信息。在顯示界面,鏈接入日期控件,方便對歷史氣象要素進(jìn)行查詢。
統(tǒng)計(jì)與報(bào)表輸出:分別實(shí)現(xiàn)按日、旬、月對自動(dòng)站逐日氣象資料進(jìn)行統(tǒng)計(jì)。統(tǒng)計(jì)時(shí),事先選擇日期、氣象要素、自動(dòng)站名等,經(jīng)過一定的計(jì)算或轉(zhuǎn)換后,即可將統(tǒng)計(jì)信息直接導(dǎo)入到Excel報(bào)表文件,打開或保存該文件均可。
曲線圖生成:可在線生成時(shí)序圖和三線圖,從生成的“要素時(shí)序圖”,可動(dòng)態(tài)監(jiān)控自動(dòng)站各氣象要素過去24 h的變化情況,從“要素三線圖”可動(dòng)態(tài)監(jiān)控各自動(dòng)站每月每天固定時(shí)次氣溫、水汽壓、本站氣壓等要素的變化趨勢。
平臺(tái)實(shí)現(xiàn)功能中,部分功能如逐時(shí)氣象要素的自動(dòng)入庫與補(bǔ)調(diào)、顯示與查詢、統(tǒng)計(jì)與報(bào)表輸出等,在筆者已發(fā)表的論文中已有介紹,這里主要介紹其它部分功能。
3.1.1 逐日氣象要素入庫 基于地—縣氣象光纖通信網(wǎng)和局域網(wǎng),自動(dòng)讀取地(市)級(jí)異地備份服務(wù)器BaseData目錄下的B文件,定時(shí)將逐日氣象要素讀取入庫。B文件是一個(gè)Access數(shù)據(jù)庫文件,其包含的tabPrimObservData1表存放每個(gè)時(shí)次的要素值,該表中的DryBulbTemp字段代表干球溫度,PrecipitationAmount字段記錄定時(shí)降水量(僅02時(shí)、08時(shí)、14時(shí)、20時(shí)有記錄),利用這兩個(gè)字段,可分別計(jì)算出日平均氣溫與日降水。B文件中的tabPrimObservData2表存放每日要素值,如 EvapanAmount字段代表小蒸發(fā),EvapgaugeAmount字段代表大蒸發(fā),SunshineSum字段代表日照。讀出的逐日氣象要素在經(jīng)過一定計(jì)算或格式轉(zhuǎn)換后,再寫入SQL Server數(shù)據(jù)庫。逐日要素入庫流程見圖2。
3.1.2 逐日氣象要素補(bǔ)調(diào) 主要實(shí)現(xiàn)兩種補(bǔ)調(diào)功能,第1種補(bǔ)調(diào)方式,即自動(dòng)讀取系統(tǒng)日期所在當(dāng)月1日到當(dāng)日的B文件。第2種補(bǔ)調(diào)方式,即讀取系統(tǒng)日期所在上月每天的B文件。通過這兩種方式將各站逐日氣象要素補(bǔ)調(diào)入庫,并設(shè)置進(jìn)度條提示補(bǔ)調(diào)進(jìn)程。
3.2.1 VML 語言簡介[2]VML(Vector Markup Language矢量可標(biāo)記語言)是一種圖形編程語言。矢量的圖形意味著圖形被放大或縮小時(shí),其質(zhì)量不受任何影響。VML相當(dāng)于IE里面的畫筆,結(jié)合腳本語言,可在 IE中繪制矢量圖形。ASP架構(gòu)與VML語言的幾何原理如圖3所示。中間層為Web服務(wù)器,通過ADO和數(shù)據(jù)庫進(jìn)行數(shù)據(jù)交換,可從數(shù)據(jù)層中查詢出信息。在表示層,通過在ASP文件頁面中嵌入VML語言,可動(dòng)態(tài)生成各種Web矢量圖形。
3.2.2 時(shí)序圖的實(shí)現(xiàn) 主要實(shí)現(xiàn)氣溫、相對濕度、小時(shí)降水量等氣象要素在當(dāng)前系統(tǒng)時(shí)間過去24 h的變化曲線。圖4為氣溫時(shí)序圖生成界面。
圖2 逐日氣象要素入庫流程
圖3 ASP與VML幾何原理圖
圖4 氣溫時(shí)序圖生成界面
這里以生成過去24 h氣溫變化曲線為例,簡述其實(shí)現(xiàn)方法及步驟。
①首先確定年、月、日、站名等參數(shù),從數(shù)據(jù)庫表dmxx中讀出氣溫值。由于SQL Server數(shù)據(jù)庫dmxx表中各氣象要素的存放使用世界時(shí),在讀取數(shù)據(jù)庫生成曲線圖前,須使用時(shí)間函數(shù)如Year()、Month()、Day()和轉(zhuǎn)換函數(shù)DATESERIAL()將其轉(zhuǎn)換為北京時(shí)。
②建立時(shí)間與氣溫要素對應(yīng)關(guān)系的坐標(biāo)系。時(shí)間作為坐標(biāo)系的橫坐標(biāo)值,橫坐標(biāo)實(shí)行動(dòng)態(tài)處理,其序列值隨系統(tǒng)時(shí)間變化而動(dòng)態(tài)改變,始終顯示當(dāng)前系統(tǒng)時(shí)間過去24 h的序列值。在實(shí)現(xiàn)時(shí),首先獲取當(dāng)前系統(tǒng)時(shí)間,將其作為時(shí)間橫坐標(biāo)極大值,再回推取得前24 h各時(shí)次的時(shí)間值,作為對應(yīng)各時(shí)次的坐標(biāo)值,循環(huán)生成24條坐標(biāo)豎線,分別對應(yīng)24h的各個(gè)時(shí)次,當(dāng)前系統(tǒng)時(shí)間前24h的時(shí)間值為坐標(biāo)原點(diǎn)。溫度要素作為坐標(biāo)系的縱坐標(biāo)值,縱坐標(biāo)的上下限取值范圍根據(jù)該時(shí)段的氣溫極值作動(dòng)態(tài)調(diào)整[3]。
③定義數(shù)組total(1,2),作為橫縱坐標(biāo)值參數(shù)。其中,total(0,1)代表橫坐標(biāo)字符串,total(1,1)代表縱坐標(biāo)字符串。生成曲線圖時(shí)經(jīng)過一定的轉(zhuǎn)換后,再生成橫縱坐標(biāo)具體值。在計(jì)算橫坐標(biāo)時(shí),將23時(shí)作為間隔時(shí)間,分別從數(shù)據(jù)庫中讀取相應(yīng)的氣溫值,然后將兩次讀取的字符串相加,形成最終的橫縱坐標(biāo)字符串。
④定義曲線圖參數(shù)和坐標(biāo)參數(shù)。定義的參數(shù)主要包括:曲線圖居左居頂距離、圖表寬度、圖表高度、圖表標(biāo)題、X軸單位、Y軸單位等。
⑤定義背景顏色,計(jì)算系列參數(shù)值,最后畫出曲線。計(jì)算的參數(shù)主要包括縱坐標(biāo)最大值、橫縱坐標(biāo)間距等。畫出曲線前,先分別畫出橫豎線條。以下是畫氣溫變化曲線的主要代碼:
for i=1 to num1‘num1代表橫坐標(biāo)深度
…
response.Write "<div id='line_"&i&"'style='display:"&displaystr&";'> "
for j=0 to num2-2‘num2代表縱坐標(biāo)深度
this_hight1=cint(line_code(i,j+1)/(5*item_hight)*10000)‘item_hight代表縱坐標(biāo)間距
this_hight2=cint(line_code(i,j+2)/(5*item_hight)*10000)
response.Write"<v:line…>"
response.Write " <o(jì):extrusion v:ext='view'…/>"
…
next
3.2.3 三線圖的實(shí)現(xiàn) 主要實(shí)現(xiàn)每月08時(shí)、14時(shí)、20時(shí)各自動(dòng)站氣溫、水汽壓、本站氣壓等3個(gè)氣象要素的變化曲線,并可進(jìn)行歷史查詢。為了方便瀏覽,根據(jù)3個(gè)氣象要素值的大概范圍,畫圖時(shí)使用雙坐標(biāo)系,氣溫和水汽壓使用一個(gè)坐標(biāo)系,本站氣壓使用另一個(gè)坐標(biāo)系。三線圖的實(shí)現(xiàn)方法與步驟簡述如下:
①確定y4、m4、d4等參數(shù)值。通過計(jì)算,得出分別代表年、月、日、站名等的參數(shù) y4、m4、d4、zm1,然后從數(shù)據(jù)庫dmxx表中讀出相應(yīng)的氣溫、水汽壓、本站氣壓3個(gè)要素值。不同自動(dòng)站之間切換時(shí),采用表單的 post提交方式,然后使用 Request.QueryString命令獲取傳遞的站名參數(shù)。
②定義二位數(shù)組total2(d4,3),并賦初值。二位數(shù)組total2(d4,3)中的d4為第①步驟中計(jì)算出來的日期,代表橫坐標(biāo)最大值。在進(jìn)行二位數(shù)組定義后首先賦初值,定義線條名稱、顏色、寬度、類型、折點(diǎn)類型等參數(shù),如total2(0,1)="氣溫,#FF0000,1.5,1,3",其中#FF0000 代表氣溫曲線顏色,1.5 代表線條寬度,1代表線條類型,3代表折點(diǎn)類型。total2(0,2)和total2(0,3)分別定義水汽壓和本站氣壓的曲線參數(shù)。
③定義曲線圖和坐標(biāo)參數(shù)。主要定義曲線圖標(biāo)題、兩個(gè)坐標(biāo)的Y軸單位、居左居頂距離、曲線圖寬度和高度、隔線條數(shù)、隔線顏色、底板顏色等參數(shù)。
④分別計(jì)算兩個(gè)坐標(biāo)系的Y軸最大值。首先分別取得氣溫和水汽壓數(shù)組、本站氣壓數(shù)組中(第1行、第1列除外)最大的數(shù)據(jù)temp1和temp1_1,然后通過計(jì)算取得兩個(gè)坐標(biāo)系Y軸的最大值temp4和temp4_1。
⑤計(jì)算坐標(biāo)相關(guān)參數(shù)。如坐標(biāo)線左側(cè)距離left_width、距左側(cè)距離left_x、坐標(biāo)高度TTAH、坐標(biāo)寬度TLAW。
⑥畫底板、橫向等分線條、Y軸左側(cè)橫線、Y軸右側(cè)橫線、Y軸線右側(cè)坐標(biāo)等。
根據(jù)以上步驟計(jì)算出來的各種參數(shù),結(jié)合Response.write"<v:shape>”命令,即可畫出。
⑦畫出Y軸左側(cè)線坐標(biāo)、坐標(biāo)線x,y、右側(cè)Y軸坐標(biāo)線等,取出各種線條參數(shù)值最后即可分別畫出3條曲線。
程序代碼略。
基于C/S和B/S兩種工作模式,使用相關(guān)技術(shù)與方法,建立地面自動(dòng)站氣象要素網(wǎng)絡(luò)共享平臺(tái),實(shí)現(xiàn)逐時(shí)氣象要素和逐日氣象要素的入庫與補(bǔ)調(diào)、顯示與查詢、統(tǒng)計(jì)與報(bào)表輸出、曲線圖生成等功能。平臺(tái)的建立,有效實(shí)現(xiàn)了地面自動(dòng)站氣象要素的網(wǎng)絡(luò)共享,擴(kuò)展了自動(dòng)站數(shù)據(jù)的應(yīng)用,為氣象要素?cái)?shù)據(jù)使用者提供了一套實(shí)用高效的數(shù)據(jù)分析工具,使地面自動(dòng)站氣象要素的開發(fā)與應(yīng)用更加深入。通過該平臺(tái),用戶不僅可以及時(shí)把握氣象要素值及其變化趨勢,對氣溫、雨量等關(guān)鍵氣象要素過去24 h內(nèi)極值產(chǎn)生時(shí)段的獲取更是準(zhǔn)確及時(shí),尤其是平臺(tái)的顯示與查詢、在線統(tǒng)計(jì)、曲線圖生成等功能,為更精細(xì)、快捷、準(zhǔn)確的氣象業(yè)務(wù)服務(wù)提供了強(qiáng)有力的支撐,在其它如業(yè)務(wù)管理、氣象科研等領(lǐng)域,均有一定的使用價(jià)值。
[1]符鳳平,吳哲紅,褚麗君,等.基于WEB方式的地面自動(dòng)站逐時(shí)氣象要素共享平臺(tái)[J].貴州氣象,2012,36(6):50-53.
[2]陳嫻,劉開文,王蓉玲,等.VML項(xiàng)目開發(fā)實(shí)踐[M].北京:中國鐵道出版社,2004.
[3]劉平,白滔,等.氣象要素ASP時(shí)間序列圖的實(shí)現(xiàn)方法[J].貴州氣象,2010,3(34):35-38.