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