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