符鳳平,吳哲紅,褚麗君
(1.貴州省安順市氣象局,貴州 安順 561000;2.貴州省鎮(zhèn)寧縣氣象局,貴州 鎮(zhèn)寧 561200)
根據(jù)中國(guó)氣象局《2012年地面氣象觀測(cè)業(yè)務(wù)改革調(diào)整和試點(diǎn)工作方案》(氣發(fā)[2012]15號(hào))的要求,為了適應(yīng)地面氣象觀測(cè)業(yè)務(wù)改革調(diào)整工作,中國(guó)氣象局綜合觀測(cè)司組織制定了新的《地面氣象要素?cái)?shù)據(jù)文件格式(V1.0)》,并于2012年3月31日20時(shí)起開(kāi)始執(zhí)行。自各級(jí)地面自動(dòng)站執(zhí)行新的要素?cái)?shù)據(jù)文件格式以來(lái),由于數(shù)據(jù)文件格式發(fā)生較大變化,文件命名和內(nèi)容格式均與以前有所不同,導(dǎo)致部分氣象業(yè)務(wù)服務(wù)應(yīng)用軟件無(wú)法繼續(xù)使用,使氣象業(yè)務(wù)服務(wù)工作受到一定程度的影響。為了解決這一現(xiàn)狀,充分發(fā)揮地面自動(dòng)站氣象要素?cái)?shù)據(jù)的使用效率,結(jié)合本地氣象業(yè)務(wù)服務(wù)需要,對(duì)地面自動(dòng)站氣象要素?cái)?shù)據(jù)中的國(guó)家級(jí)站單站文件進(jìn)行了開(kāi)發(fā)與應(yīng)用,主要實(shí)現(xiàn)該數(shù)據(jù)的自動(dòng)入庫(kù)、Web顯示與查詢、Excel報(bào)表輸出等功能。入庫(kù)及補(bǔ)調(diào)部分的程序設(shè)計(jì)采用C/S工作模式,可運(yùn)行在局域網(wǎng)內(nèi)任何一臺(tái)計(jì)算機(jī)上,要素顯示與查詢、Excel報(bào)表輸出等功能的實(shí)現(xiàn)基于B/S方式,程序安裝在Web服務(wù)器端,由于工作模式基于B/S方式,操作簡(jiǎn)便,維護(hù)集中在服務(wù)器端。本平臺(tái)的開(kāi)發(fā)與實(shí)現(xiàn),對(duì)于各級(jí)氣象業(yè)務(wù)、服務(wù)及管理部門,均具有一定的參考意義,可在全省范圍內(nèi)各級(jí)氣象部門進(jìn)行推廣使用。
基于省—地—縣氣象光纖通信網(wǎng)和局域網(wǎng),以Windows 2003服務(wù)器操作系統(tǒng)為開(kāi)發(fā)平臺(tái),實(shí)現(xiàn)地面自動(dòng)站逐時(shí)氣象要素自動(dòng)入庫(kù)、按月補(bǔ)調(diào)、前端顯示、要素查詢、Excel報(bào)表輸出等功能。
基于C/S工作模式,在省—地—縣氣象光纖通信網(wǎng)保持暢通前提下,使用VB編程語(yǔ)言編制而成。將入庫(kù)程序運(yùn)行圖標(biāo)放入任務(wù)欄,使其在后臺(tái)自動(dòng)運(yùn)行,定時(shí)讀取各地面自動(dòng)站要素入庫(kù)。為了防止計(jì)算機(jī)網(wǎng)絡(luò)或設(shè)備故障造成資料缺失,實(shí)現(xiàn)資料按月補(bǔ)調(diào)功能。
以Windows 2003服務(wù)器操作系統(tǒng)為工作平臺(tái),依托已建成的氣象寬帶通信網(wǎng)絡(luò),采取B/S工作方式,使用ASP編程環(huán)境、HTML超文本標(biāo)識(shí)語(yǔ)言、VBScript腳本語(yǔ)言、Dreamweaver網(wǎng)頁(yè)設(shè)計(jì)軟件、SQL Server數(shù)據(jù)庫(kù)等技術(shù)開(kāi)發(fā)而成,具有B/S三層邏輯結(jié)構(gòu),即表示層、應(yīng)用邏輯層、數(shù)據(jù)服務(wù)層[1]。
其中表示層代表瀏覽器。其工作流程大概如下:在表示層,只要打開(kāi)瀏覽器,輸入需要訪問(wèn)的網(wǎng)址,瀏覽器隨即向處于應(yīng)用邏輯層的Web服務(wù)器發(fā)出服務(wù)請(qǐng)求,Web服務(wù)器在對(duì)用戶身份進(jìn)行驗(yàn)證完畢后,通過(guò)HTTP協(xié)議把結(jié)果傳回瀏覽器端。
應(yīng)用邏輯層代表Web服務(wù)器。其包含系統(tǒng)的事務(wù)處理邏輯,接受用戶的請(qǐng)求,執(zhí)行相應(yīng)的擴(kuò)展應(yīng)用程序與數(shù)據(jù)庫(kù)進(jìn)行連接,通過(guò)SQL等方式向數(shù)據(jù)庫(kù)提出數(shù)據(jù)處理申請(qǐng),待數(shù)據(jù)庫(kù)服務(wù)器將處理結(jié)果提交給Web服務(wù)器,再由Web服務(wù)器傳送回瀏覽器[2]。這里的 Web服務(wù)器采用 Windows Server 2003操作系統(tǒng)。
數(shù)據(jù)服務(wù)層代表數(shù)據(jù)庫(kù)服務(wù)器,該層接受Web服務(wù)器的操作請(qǐng)求,把運(yùn)行結(jié)果提交給Web服務(wù)器。本平臺(tái)采用SQL Server數(shù)據(jù)庫(kù)系統(tǒng),數(shù)據(jù)庫(kù)命名為as_aws,庫(kù)中建有dmxx表格,將要讀取的各氣象要素如氣溫、水汽壓等設(shè)為數(shù)據(jù)庫(kù)字段,除了年、月、日、時(shí)等字段的數(shù)據(jù)類型設(shè)為smallint外,其它字段的數(shù)據(jù)類型均設(shè)為nvarchar。對(duì)于數(shù)字開(kāi)頭的數(shù)據(jù)庫(kù)字段如2 min風(fēng)向、2 min風(fēng)速等,為了避免數(shù)字與文本混淆引起系統(tǒng)出錯(cuò),將此類字段加上中括號(hào),即[字段名]。
基于省地氣象光纖通信網(wǎng)和局域網(wǎng),自動(dòng)讀取省級(jí)服務(wù)器上的地面氣象要素?cái)?shù)據(jù)文件,定時(shí)將逐時(shí)氣象要素讀取入庫(kù)。利用VB定時(shí)控件,ADODC控件連接SQL Server數(shù)據(jù)庫(kù),在一個(gè)固定時(shí)刻(這里取每小時(shí)正點(diǎn)過(guò)10 min或20 min),逐個(gè)讀取設(shè)置站點(diǎn)的氣象要素,每讀一站,即存入數(shù)據(jù)庫(kù)中。資料的讀取主要依據(jù)地面氣象要素?cái)?shù)據(jù)文件格式(V1.0)具體規(guī)定,按照本區(qū)域臺(tái)站級(jí)別情況,主要讀取國(guó)家級(jí)站單站文件,其名稱為Z_SURF_I_IIiii_yyyyMMddhhmmss_O_AWS_FTM[-CCx].txt。國(guó)家級(jí)站單站文件內(nèi)容共分為13段,每段占據(jù)文件內(nèi)容1行,主要有:測(cè)站基本信息、氣壓數(shù)據(jù)、氣溫和濕度數(shù)據(jù)、累計(jì)降水和蒸發(fā)數(shù)據(jù)等,每段長(zhǎng)度固定。除了第1行測(cè)站信息外,其它段都有固定的段標(biāo)識(shí)符,如氣壓數(shù)據(jù)段的標(biāo)識(shí)符為“PP”,溫度和濕度數(shù)據(jù)段的標(biāo)識(shí)符為“TH”。定時(shí)器讀取要素入庫(kù)流程見(jiàn)圖1。
主要實(shí)現(xiàn)按月補(bǔ)調(diào)功能,設(shè)置進(jìn)度條提示補(bǔ)調(diào)進(jìn)程。事先定義好循環(huán)參數(shù),然后使用雙層循環(huán),外層循環(huán)將每月的天數(shù)作為循環(huán)參數(shù),即選擇從每月的第1天開(kāi)始直到最后1天,內(nèi)層循環(huán)參數(shù)使用0~23,代表每天的24個(gè)北京時(shí)次。由于地面自動(dòng)站資料文件是按照世界時(shí)間命名的,補(bǔ)調(diào)每個(gè)時(shí)次資料前需要事先將北京時(shí)轉(zhuǎn)換為世界時(shí)。
圖1 要素入庫(kù)流程
采用密碼驗(yàn)證后即可進(jìn)入顯示主界面(見(jiàn)圖2)。主界面顯示數(shù)據(jù)庫(kù)中最新時(shí)次的各氣象要素,并進(jìn)行30 s自動(dòng)刷新。由于要素較多,為了快速瀏覽到應(yīng)用較多的氣象要素,可將其顏色作特殊標(biāo)注(如圖中藍(lán)色標(biāo)注)。
將系統(tǒng)讀到的要素最新時(shí)間作為參數(shù),經(jīng)過(guò)一定轉(zhuǎn)換后,分別計(jì)算出前一時(shí)次和后一時(shí)次的具體時(shí)間,然后使用參數(shù)傳遞命令Request.QueryString即可獲取前后時(shí)次,實(shí)現(xiàn)氣象要素信息的自動(dòng)瀏覽。為了簡(jiǎn)略程序代碼,主頁(yè)顯示、前后時(shí)次要素的調(diào)用等3個(gè)ASP文件中的顯示表格均使用“#include file”語(yǔ)句調(diào)用同一個(gè)文件。
由于地面氣象要素?cái)?shù)據(jù)文件經(jīng)過(guò)一定的格式轉(zhuǎn)換后存放,所以在讀取資料入庫(kù)或進(jìn)行Web網(wǎng)頁(yè)顯示前,需要進(jìn)行一定的格式轉(zhuǎn)換。當(dāng)氣象要素缺測(cè)時(shí),文件內(nèi)容被記錄為默認(rèn)字符串如“////”或“,,,,”,為避免在數(shù)值換算或格式轉(zhuǎn)換過(guò)程中出現(xiàn)問(wèn)題,入庫(kù)前首先使用Isnumeric函數(shù)對(duì)其類型是否為數(shù)值進(jìn)行判斷,然后在Web網(wǎng)頁(yè)顯示前使用Formatnumber函數(shù)進(jìn)行格式輸出。如氣溫,入庫(kù)前首先判斷讀出的數(shù)據(jù)是否為數(shù)值,若為數(shù)值,則將讀出的數(shù)據(jù)用1 000減去該值后再入庫(kù),否則,將讀出的數(shù)據(jù)直接添加到數(shù)據(jù)庫(kù)中。進(jìn)行網(wǎng)頁(yè)顯示前,首先判斷檢索數(shù)據(jù)庫(kù)得出的結(jié)果是否為數(shù)值,若為數(shù)值,則將讀出的數(shù)據(jù)乘以0.1后再使用Formatnumber((rs.Fields.Item("氣溫").Value)*0.1,1,-1)命令進(jìn)行格式輸出,否則將該值直接顯示。
圖2 Web顯示主界面
在主頁(yè)顯示界面的下方嵌入文本域和列表2個(gè)控件,文本域控件實(shí)現(xiàn)日期選擇,使用JavaScript腳本語(yǔ)言編制而成,列表控件主要實(shí)現(xiàn)時(shí)次選擇。同時(shí),將2個(gè)控件加入一個(gè)表單中,表單提交使用post方式,使用Request.Form命令分別獲取表單中的控件值,如獲取日期使用命令Request.Form("select_date"),其中select_date為日期控件名稱。然后,使用Dateserial函數(shù)對(duì)獲取的日期文本域表單值進(jìn)行轉(zhuǎn)換,即可取得具體的日期。由于數(shù)據(jù)入庫(kù)時(shí)間采取世界時(shí),所以在實(shí)現(xiàn)網(wǎng)頁(yè)顯示前,需要事先進(jìn)行北京時(shí)與世界時(shí)的轉(zhuǎn)換。
主要實(shí)現(xiàn)對(duì)各氣象要素的自動(dòng)選擇性輸出,可全選或少選,輸出格式為Excel文件類型,對(duì)話框提示是否保存或是否打開(kāi)。
為實(shí)現(xiàn)Excel輸出選擇界面中全選功能,首先將所有checkbox復(fù)選框及button選擇按鈕加入同一個(gè)表單,然后使用按鈕的onclick屬性調(diào)用一個(gè)由JavaScript腳本語(yǔ)言編制而成的自定義函數(shù),函數(shù)代碼如下:
實(shí)現(xiàn)Excel文件輸出時(shí),為了獲取用戶隨機(jī)選擇要素形成的數(shù)據(jù)庫(kù)查詢字段變量,首先將所有checkbox復(fù)選框的 name屬性設(shè)為 checkbox,value屬性設(shè)置為相應(yīng)的數(shù)據(jù)庫(kù)字段(不能有誤,否則會(huì)造成讀取數(shù)據(jù)庫(kù)失敗),如輸出實(shí)時(shí)氣溫,則復(fù)選框的value值設(shè)為數(shù)據(jù)庫(kù)中的“氣溫”字段。
利用表單Form進(jìn)行提交參數(shù)傳遞,除使用Request.QueryString獲取日期參數(shù)外,還使用Request("checkbox")命令獲取復(fù)選框控件值。默認(rèn)獲取的復(fù)選框控件值是由一組逗號(hào)隔開(kāi)的字符串,為了提取到具體的數(shù)據(jù)庫(kù)查詢字段變量,首先使用split函數(shù)取出由逗號(hào)隔開(kāi)的各復(fù)選框值,形成數(shù)組變量ar,在取出的復(fù)選框值后面加上逗號(hào),去除最右邊的逗號(hào)后,形成數(shù)據(jù)庫(kù)查詢字段變量sql2,然后使用"select"+sql2+"from dmxx where…”語(yǔ)句檢索出選擇的氣象要素資料,其主要代碼如下[3]:
寫入Excel文件前,首先定義好表格格式,再先后寫入經(jīng)過(guò)復(fù)選框選擇后檢索的數(shù)據(jù)庫(kù)字段名和對(duì)應(yīng)值。表格格式主要作以下定義:定義頁(yè)面使用字符集為國(guó)標(biāo)漢字碼gb2312,網(wǎng)頁(yè)輸出類型為Excel表格,輸出的Excel表格文件名,Excel表格的單元格類型為文本。
向Excel單元格填入檢索后的氣象要素時(shí),對(duì)于不需作格式轉(zhuǎn)換的字段,直接將其值填入Excel單元格。需作格式轉(zhuǎn)換的字段,使用Select Case語(yǔ)句對(duì)字段名作出判斷后再進(jìn)行轉(zhuǎn)換。如對(duì)時(shí)間類型的字段,數(shù)據(jù)庫(kù)存放采用的是世界時(shí),輸出到Excel文件時(shí),將其轉(zhuǎn)換為北京時(shí)。
對(duì)于其它數(shù)據(jù)庫(kù)字段,格式轉(zhuǎn)換方法與網(wǎng)頁(yè)顯示時(shí)的方法相似,分別使用Isnumeric函數(shù)和formatnumber函數(shù)判斷其內(nèi)容類型和格式化輸出。
系統(tǒng)結(jié)合C/S和B/S兩種工作模式,分別實(shí)現(xiàn)了地面自動(dòng)站逐時(shí)氣象要素的入庫(kù)、顯示、查詢與Excel表格輸出等功能。地面自動(dòng)站資料的Web共享實(shí)現(xiàn),由于操作簡(jiǎn)便、客戶端無(wú)需任何軟硬件安裝的特點(diǎn),使其面向的用戶范圍較廣,在天氣預(yù)報(bào)業(yè)務(wù)、氣象服務(wù)、業(yè)務(wù)管理或其它領(lǐng)域,均有一定的應(yīng)用價(jià)值。正是因?yàn)檫@一點(diǎn),系統(tǒng)在數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)、功能規(guī)劃、安全穩(wěn)定等方面,需要作重點(diǎn)考慮。
通過(guò)基于B/S模式的地面自動(dòng)站氣象要素共享平臺(tái),可實(shí)現(xiàn)的功能比較豐富,如可添加統(tǒng)計(jì)、圖形、地圖等功能,還可采用WEBGIS(萬(wàn)維網(wǎng)地理信息系統(tǒng))技術(shù),將地面自動(dòng)站氣象要素的各種功能通過(guò)使用Web地理信息系統(tǒng)來(lái)實(shí)現(xiàn),使地面自動(dòng)站氣象要素的應(yīng)用更加深入。本文僅以部分功能為例,闡述其相關(guān)技術(shù)與實(shí)現(xiàn)方法。
[1]鄧文淵,陳惠貞,陳俊榮.ASP與網(wǎng)頁(yè)數(shù)據(jù)庫(kù)設(shè)計(jì)[M].北京:中國(guó)鐵道出版社,2004.
[2]羅銳韌.ASP網(wǎng)頁(yè)程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2005.
[3]何薇,舒后.網(wǎng)絡(luò)數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用[M].北京:清華大學(xué)出版社,2009.