宋揚 嵇治剛 刁兆亮 劉峰 叢暉 黃欣宇
摘 要:大氣中各個高度上的氣壓、溫度、風向、風速等氣象要素,對于一些受環境因素影響較大的實驗如飛機試飛試驗,航天發射試驗等尤為重要。將氣象數據與地理信息進行結合分析,在實驗前進行氣象數據的提前考察,根據考察分析結果調整實驗,則可有效地避免不良天氣對于實驗的影響。故在該文中,在獲得了一段時間的平均風場網格化數據后,采用地圖開源控件GMap.NET與C#編程語言,開發研制了一種與地理信息相結合的大氣風場分析軟件用于分析氣象數據。
關鍵詞:大氣風場 氣象要素 GMap.NET C# 地理信息
中圖分類號:V35 文獻標識碼:A 文章編號:1674-098X(2015)12(b)-0038-06
Abstract:Air pressure, temperature, wind direction, wind speed and other meteorological factors at each height in the atmosphere are very important for some of the experiments which are greatly affected by the environment like aircraft flight test, space launch test. The meteorological data can be analyzed with the geographic information and be investigated before the experiments to avoid the bad effect from the bad weather. Therefore, in this paper, after getting the average wind field grid data of a period of time, the open source map control GMap.NET and C# programming language are used to develop a wind field analysis software which is combined with the geographic information to analyze the meteorological data.
Key Words:Wind field;Meteorological factors;GMap.NET;C#;Geographic information
大氣中各個高度的氣象要素數據,對于一些對于環境要素較為依賴的實驗,如飛機試飛試驗,航天發射實驗等尤為重要。而在這些氣象要素中,風速與風向要素對于航空航天類的實驗的影響和其他氣象要素相比,又更為重要。因此,建立有效的風場數據分析系統,對航空航天實驗進行預先的氣象考察與分析,進而保障實驗順利穩定的進行,具有很強的實際應用價值和廣闊的應用前景。
在近些年氣象軟件的發展進程中,將氣象數據與地理信息系統(GIS)相結合,以便實驗人員或數據分析人員對于氣象環境有更為形象和客觀的認識,這一種結合開發形式較為流行和常見[1-2,5]。然而,這些軟件或是查詢系統大多采用ArcGIS、MapX這類非開源收費地理信息管理平臺,并且需要用戶提供地圖源或需要對地圖進行二次開發。在該文所涉及的軟件中,所采用的是GMap.NET這款開源、跨平臺的地理信息(GIS)控件,它在Windows Forms和WPF環境中能夠通過Google,Yahoo!,Bing,OpenStreetMap,ArcGIS,Pergo,SigPac等實現尋找路徑、地理編碼以及地圖展示功能,并支持緩存和運行在Mobile環境中。此外,由于GMap.NET代碼完全開源,所以可由用戶定制自己的地圖源(如可使用百度、高德等常用地圖)并離線使用,也可由用戶定制自己的圖層(如可在地圖圖層上繪制風場圖層等氣象信息圖層),具有強大的可二次開發性[3]。
1 軟件基本組織結構
在該文所涉及的軟件中,主要功能包括:歷史風場數據查詢功能(其中包括等風勢線查詢和顯示功能,以及定點風速風向的查詢及分析功能),地圖圖層的顯示及下載功能(地圖圖層主要用于做為風場圖層的背景圖層,可離線),在線氣象數據的查詢及預報功能(可查詢近十天的天氣數據,以及當天每小時的天氣數據)。其基本組織結構如圖1所示。
2 軟件數據庫設計
2.1 風場數據表的建立
以該文中所要分析的風場數據包為例:該風場數據以經緯度2.5°×2.5°的網格進行劃分,網格數據包括經向風速、緯向風速、經向風速標準差、緯向風速標準差。為方便軟件對數據包內的數據進行調用和分析,可針對該數據包建立風場數據庫,并可在后期使用數據庫對數據包進行維護。表1中給出了針對風場數據包所建立的風場數據表。
2.2 城市與地理信息數據表的建立
在前文中所提到的定點風場數據查詢功能中,可使用戶輸入城市名,便可查詢到相應城市的風場數據信息。為實現該功能,需建立城市與地理信息數據表,即可通過查詢表內的城市名,將城市名轉為相應的經緯度信息,再對風場數據表內的數據進行查詢分析,便可獲得所需風場數據。此外,該數據表內也包括各主要城市的城市代碼,在軟件聯網的情況下,可以以向服務商提交城市代碼的方式,獲得所需的在線實時氣象數據。表2為城市與地理信息數據表。
3 軟件各部分設計說明
3.1 地圖圖層部分的實現
地圖圖層的主要用途為作為等風勢線圖層的背景圖層,以便用戶在查詢查看等風勢線時,將風場數據與實際地理位置或是地理環境相對應起來,進而對風場數據具有更為直觀的了解。
地圖圖層的實現主要通過GMap.NET這一開源地圖控件進行實現,該地圖控件和Mapx,ArcGIS等地圖控件相比,具有跨平臺、開源等顯著優點。使用該地圖控件,可以由用戶選擇地圖源(包括Google,Yahoo!,Bing,OpenStreetMap,ArcGIS等地圖),用戶也可重寫該控件的地圖源類,產生新的地圖源。在本軟件中,針對其原有地圖類進行了重寫,選用谷歌地圖和高德地圖作為地圖源。該地圖源類直接從地圖服務器下載地圖,并可以離線方式對地圖進行儲存,也可對感興趣區域進行任意級別的地圖下載,即可實現地圖的離線查看功能。
具體實現方法以高德地圖為例,通過chrome一類可查詢分析網頁源代碼的瀏覽器可知,其在線地圖的實現原理為將若干張獨立的具有一定坐標信息和地圖縮放信息的圖片拼接成相應用戶所需地圖。用戶可通過重寫GMap.NET的地圖源類,主要為重寫地圖源類中的服務器地址和相應圖片url計算公式,再通過GMap.NET已有的圖片拼接算法,便可實現地圖圖層的顯示。部分重寫代碼及說明如下所示,以高德地圖為例:
public abstract class AMapProviderBase_1:
GMapProvider
{
……
public AMapProviderBase_1()
{
MaxZoom=null;//設置地圖最大級別
RefererUrl=“http://www.amap.com/”;//服務器地址
Copyright=string.Format(“?{0}高德 Corporation,?{0}NAVTEQ,?{0}Image courtesy of NASA",DateTime.Today.Year);//地圖提供者以及版權信息
}
……
}
public class AMapProvider_st : AMapProviderBase_1
{
……
string MakeTileImageUrl(GPoint pos,int zoom,string language)
{
var num=(pos.X+pos.Y)%4+1;//服務器序號計算公式
string url=string.Format(UrlFormat,GetServerNum(pos,3)+1,pos.X,pos.Y,zoom);//url合成公式
return url;
}
static readonly string UrlFormat = “http://webst0{0}.is.autonavi.com/appmaptile?style=6&x={1}&y={2}&z={3}”; //url表達式
……
}
此外,該控件還具有離線保存地圖的功能,在將地圖拖拽按鈕設置為左鍵后。在調用該控件顯示地圖圖層后,按住左鍵的同時并按住alt鍵在地圖上拖拽,便可對感興趣的地圖區域進行選中。調用該控件的地圖下載接口,便可實現對于地圖的離線下載及顯示。該控件內部調用了SQLite嵌入式數據庫,可將離線地圖儲存為數據文件。
3.2 等風勢線圖層部分的實現
根據前文所提到的風場數據包,可通過對這些網格化數據使用一定的插值算法,再利用插值化后的數據進行等風勢線的繪制。然而上述方法繪制等風勢線需要一定時間,在本軟件中,需要對12個月份,每個月份16個海拔高度共計192張等風勢線圖進行繪制,顯然動態繪制的方法無法達到要求。故本軟件采用使用第三方軟件繪制并導出等風勢線圖的方法,繪制并制作等風勢線圖圖層。
保證等風速線繪制的精確度,采用專業地理繪圖軟件Surfer進行等風速線的繪制。該軟件是美國Golden Software 公司編制的一款以畫三維圖(等高線,image map,3d surface)的軟件。該軟件具有的強大插值功能和繪制圖件能力,使它成為用來處理XYZ數據的首選軟件,是地質工作者必備的專業成圖軟件。圖2為使用Surfer繪制的一幅等風速線圖,數據采用風場數據包中的數據。
利用Surfer繪制的等風勢圖可以以多種格式從該軟件中導出,在該文所涉及的軟件中,所需的192張等風勢圖以圖片的形式被導出。并且為了方便程序對圖片的調用,這些圖片均以“月份_高度”這種形式進行命名。當用戶在軟件界面上作出了對月份和高度的選擇后,相應的圖片便會被調用以繪制等風勢線圖層。
利用導出的圖片繪制等風勢線圖層,其原理主要為重寫GMap.NET的圖層類。主要工作為確定該圖層的繪制坐標,并使其與地圖圖層縮放級別一致。部分重寫代碼如下所示:
public class GMapMarkerBS:GMapMarker
{
……
public static Bitmap myBitmap;//儲存當前等風勢線原始圖片
public static Bitmap myBitmap_n;//儲存拉抻變形后的等風勢線圖
public int ID;//圖層ID
public GMapMarkerBS(PointLatLng p, int thisID)
: base(p)
{
myBitmap=(Bitmap)Bitmap.FromFile(Application.StartupPath + “\\1\\0\\1_0.png”); //初始等風勢線圖的路徑,代表1月海拔高度0m
ID = thisID;
myBitmap_n=KiResizeImage_1(myBitmap, 683, 383);
}
……
}
重寫完成后,便可根據等風勢圖的經緯度范圍,在地圖圖層的相應坐標上加載該等風勢線圖層。同時為保證等風勢線圖層與地圖圖層縮放級別的一致性,可設置一定時器監測地圖圖層是否發生縮放,若發生縮放,便對等風勢線圖層也進行相應的縮放。相應定時器程序流程圖如圖3所示。
軟件的具體效果如圖4、圖5所示,在圖4所示的軟件主界面中,對所需查詢的等風勢圖的月份和海拔高度進行確定后,便可查詢相應的等風勢圖。從圖4和圖5中也可看出,地圖圖層有多種模式,既有普通地圖模式,也有衛星地圖模式,十分靈活。
3.3 定點風場數據查詢的實現
在實際需求中,用戶不僅需要通過觀察風場圖對數據有一個全面的認識,也需要對一定經緯度或是特定城市的風場數據有一個局部的認識。這就需要軟件對原有網格化數據包進行插值化處理,以求得在允許范圍內的任一點(任意經緯度和海拔高度)的風場數據[4]。
在該文所涉及的軟件中,所采用的插值算法為雙線性插值算法,通過已知點和所求點的距離計算插值算式中的權值并進行插值化處理[6]。具體原理如圖6所示,圖中,,,均為已知點,P為未知點。可先在X方向上進行插值,得到,的值。再在Y方向上進行插值,得到P的值。具體算式如下所示:
(1)
在該程序中,除了要在經緯度方向上進行插值,也要在高度方向上進行插值,即可先在維度方向上進行插值,后在經度方向上進行插值,最后在高度方向上進行插值。
定點查詢的軟件具體效果如圖7所示,可以在軟件中進行定經緯度的風場數據查詢,也可針對一些主要城市進行風場數據的查詢。
此外,該軟件也可針對一定經緯度或是城市,進行其風場數據隨海拔高度變化的趨勢分析。這些分析功能包括了平均風場數據隨高度的變化趨勢圖,以及風速在不同高度下不同概率的分布圖。其效果圖如圖8和圖9所示。
3.4 在線氣象數據查詢的實現
在該軟件的風場數據分析功能中,主要針對的是歷史風場數據的分析,然而,對于實時氣象數據的監測與預測也十分重要。所以,該軟件也具有針對全國各主要城市的常見氣象要素的實時查詢與預報功能。
該功能的實現,主要依賴于外部天氣數據服務商的數據支持。在聯網的情況下,軟件可向遠程服務器發送數據請求,遠程服務器在確認用戶的權限后,會向軟件返回相應數據包。軟件可對數據包進行解析,將實時數據和預測數據以圖表和文字的形式進行顯示。其效果圖如圖10所示。軟件所示的數據來源于和風天氣公司,其數據包括近10 d的天氣預測,和近24 h內的詳細天氣數據。
4 結語
該文介紹了一種基于GMap.NET開源地圖控件的大氣風場查詢軟件。其中,采用第三方專業地理軟件Surfer導出等風勢線圖片和重寫GMap.NET 圖層類的方法完成等風勢線圖層的繪制。采用建立風場數據庫和雙線性插值的方法實現了定點查詢風場數據的功能。此外,該軟件也具有在線查詢實時氣象數據的功能。
該文中的大氣風場查詢軟件可以應用于航空航天等與氣象因素關系較為密切的實驗設計,實驗人員可以根據查詢到的氣象數據對實驗計劃進行相應的調整,具有很強的實際應用價值。同時,該軟件還有很多不足之處,例如可以和實際實驗相結合,給出針對實際實驗的天氣預警信息,或是加入風場數據的維護與更新功能等。在今后的工作中,該軟件會不斷完善以適用于實際實驗的需求。
參考文獻
[1]何永健,曹蕓,黃勇.GIS氣象數據的管理與表達方法[J].南京信息工程大學學報:自然科學版,2011,3(3):232-237.
[2]陳述彭.地理信息系統導論[M].北京:科學出版社,1999:3.
[3]耿雅雅,呂文華,行鴻彥.基于GMap.net雷電監測預警系統設計與實現[J].氣象水文海洋儀器,2014,31(4):83-87.
[4]劉旭林,趙文芳.氣象觀測數據等值線自動繪制系統[J]. 氣象,2009,35(4):102-107.
[5]劉磊,仇菊香,吳國洋.基于Google地圖服務的城市地理信息公共服務平臺的設計與實現[J].測繪標準化, 2011(1):10-13.
[6]趙海波.基于GIS的城市氣象監測要素插值分析研究[D].昆明:昆明理工大學,2010.