房淑波,張建磊,翟向東,馮 琦
(1.綏化市氣象局,黑龍江 綏化 152002;2.中國氣象局,北京 100081)
區域自動氣象站是一種適用于中小尺度天氣系統監測的無人自動站。隨著氣象現代化的發展,區域自動氣象站已成為氣象綜合觀測站網的重要組成部分,其數據對提高天氣預報水平、氣象服務、氣象防災減災預警等發揮著重要的作用。而其中區域站各要素等值線圖對預報、決策人員有著很大幫助。在眾多繪圖軟件中,Surfer最為方便實用,Surfer是一款十分流行的二、三維數據處理和顯示軟件,在氣象業務中得到廣泛的應用,其視圖功能強大,等值線圖繪制是其主要的功能,軟件操作使用方便,是平時制作氣象數據等值線常用的一款最為方便實用的軟件。
區域自動氣象站主要有風向、風速、氣溫、降雨量4要素觀測。目前黑龍江省的區域氣象自動站查詢軟件是華創公司開發的CAWSAnyWhereServer軟件,在實際業務使用中存在數據檢索功能單一,不能對任意時段要素繪制等值線圖等問題。為充分利用區域自動氣象站豐富的氣象資料,結合實際業務工作的需要,有必要對區域自動氣象站數據庫數據的結構和存儲方式進行分析,并對其數據的開發與應用進行探討。
(1)區域站數據庫的連接。目前區域站數據存儲在各市局服務器中,在客戶端可以通過Adodb組件加以連接,provider屬性串格式如下:
Provider=SQLOLEDB.1;
Persist Security Info=True;
User ID=用戶名;
Password=密碼;
Initial Catalog=CAWSAnyWhereServer;
Data Source=221.210.188.66,1443
其中CAWSAnyWhereServer為區域站數據庫名,221.210.188.66,1433為數據庫服務器地址,端口號。
(2)確認數據表名。建立數據連接后,可以通過select*from sysobjects語句查詢庫內表的名稱,區域站軟件更新升級后,改變了數據庫結構,每個站點對應數個表,表名格式:H字母開頭為該站小時數據,M字母開頭為該站分鐘數據,后5位是區站號。如果要一次查詢多個站點,要一次循環打開多個表。
(3)確認數據結構??梢酝ㄟ^ select name from syscolumns where id in (select id from sysobjects where name='表名')語句查詢各表結構,以小時數據表為例,各站表結構是一致的,TT表示觀測時間,BA表示小時雨量。
(4)查詢任意時段數據。對各站任意時段小時數據合計查詢,關鍵SQL語句見下:
SELECT sum(BA)FROM站小時數據表where(TT>'開始時間')and(TT<=‘結束時間’)。
用Surfer繪圖一般要經過以下幾個步驟:
(1)繪制底圖。底圖一般為當地矢量格式,可以從micaps軟件相關目錄中找到本省地圖加以修改,地圖文件為文本文件,第一行第一項為地圖中點的個數,第二項為0;以下各行為地圖數據,由經緯坐標組成。
(2)網格化。網格化前要準備好要素數據文件,數據文件的格式為文本文件,每行最少要有3項數據:經度、緯度、要素值。操作前注意設置網格范圍要與底圖大小相同。選好網格化方法后生成網格文件。
(3)白化。白化的目的是使超出本地區范圍以外的部分不畫等值線,白化需要準備白化地圖,此地圖也是矢量地圖,為本地區的輪廓,要求輪廓線連續并封閉,即整個地圖是一條首尾相連的連線。將上步生成的網格文件通過白化地圖白化操作,生成新的網格文件,文件中本地區以外的部分,Surfer就不會繪制等值線了。
(4)繪制等值線。加載白化后的網格文件,繪制等值線,并給等值線填色等。
(5)疊加。Surfer還提供了張貼圖功能,可以將離散站點數據顯示在地圖上。建立張貼圖需要準備文本格式文件,格式為每行最少3項數據:經度、緯度、待顯示內容。
Surfer軟件安裝后,就可以通過引用它提供的控件編制程序繪制等值線圖了,對控件的引用如下:
var SurferApp=new ActiveXObject(“Surfer.Application”);
var doc=SurferApp.Documents.Add(1);
編寫Surfer程序,涉及到的數據文件較多,一般有3個文件是固定不變的:地圖文件、白化地圖文件、站點索引文件,站點索引文件中最少要包含區站號、經度、緯度3個字段內容。動態生成的文件包括:
(1)通過站點索引文件中的區站號索引訪問網絡數據庫,形成的站點要素文件。文件中最少要包含經度、緯度、要素值,該文件的形成需要訪問區域站數據庫,是整個過程的關鍵,Surfer用該文件生成網格文件。
語句執行后,將形成的數組保存到站點要素文件中,以待下步執行。
(2)網格化生成的未白化網格文件。網格化是繪制等值線的關鍵步驟,需要準備上步動態生成的站點要素文件,在Surfer中網格化是通過GridData函數調用的,Grid-Data函數參數較多,其中幾個主要參數含義為:
DataFile:氣象站點要素文件;xCol,yCol,zCol:坐標及要素值在數據文件中的位置;NumCols,NumRows:插值時的總行數、列數;xMin,xMax,yMin,yMax:大小范圍,應該同底圖的范圍相同;Algorithm:插值方法。NumCols,NumRows參數值越大,等值線越流暢,等值線層邊緣越光滑,但速度也越慢。針對不同類型的氣象要素,應該選擇不同的插值方法。
(3)白化后的網格文件。調用相關方法:SurferApp.GridBlank(未白化網格文件,白化地圖文件,白化后網格文件);語句執行后生成的白化后網格文件。之后調用Add-ContourMap語句繪制等值線圖層,參數為白化后的網格文件。
(4)用于顯示站點要素值的張貼圖文件。Surfer張貼圖用于顯示區域站點名稱、站點要素值等,每顯示一類要新建一動態文件,所需的文件格式最少為3個字段:經度、緯度、待顯示值。經度、緯度從站點索引文件中得到,待顯示值則需要訪問區域站數據庫得到。通過方法AddPostMap,將要素值加到新的張貼圖層中。最后疊加各個圖層,輸出等值線圖片。
氣象要素數據的質量直接影響繪制等值線的效果,因此有必要在繪制等值線前對數據進行質量控制,最簡單的篩選是剔除缺測站點,參與繪制等值線的站點要素文件不應該包含缺測站點。
可以考慮在服務器端架設Web服務器,在服務器端安裝Surfer軟件,客戶端只需瀏覽器即調用圖形了。如用ASP編程,需要在服務器端降低客戶訪問Surfer控件的權限,PHP編程則不需要設置。
為提高效率,將輸出的圖片文件名設為查詢時間段,客戶端第一次查詢某時段后生成圖片文件,下次再有訪問,程序先檢測目錄里是否有該時段圖片,如有則直接顯示圖片,省略運算過程。程序還應在客戶訪問時檢查刪除早期圖片文件,保持固定的圖片數目。