基于GMap.NET的大气风场分析软件的研制
2015-05-30宋扬嵇治刚刁兆亮刘峰丛晖黄欣宇
宋扬 嵇治刚 刁兆亮 刘峰 丛晖 黄欣宇
摘 要:大气中各个高度上的气压、温度、风向、风速等气象要素,对于一些受环境因素影响较大的实验如飞机试飞试验,航天发射试验等尤为重要。将气象数据与地理信息进行结合分析,在实验前进行气象数据的提前考察,根据考察分析结果调整实验,则可有效地避免不良天气对于实验的影响。故在该文中,在获得了一段时间的平均风场网格化数据后,采用地图开源控件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.