本发明涉及利用idl程序语言进行极地向量场可视化的流程算法。
背景技术:
idl编程语言功能强大,在航空航天、遥感地信等领域应用广泛。研究人员利用idl绘制向量场图一般使用内置函数ivector,但ivector在对向量场可视化时具有明显的局限性。当数据范围在地理上不对称时,例如图2,假如红色框为数据的地理范围,四个角的经纬度如图2所示。而ivector在进行可视化时,需要输入数据地理范围的最小纬度、最小经度、最大维度和最大经度,也就是将红色框四个角的最小纬度、最小经度、最大维度和最大经度作为ivector的参数,本示例应该输入的参数为(72,-180,90,180)。但是ivector函数默认为数据在地理上是对称的,也就是纬度范围为72°~90°,经度范围是-180°~180°,最终认为数据范围为图中蓝色圆形区域,因此生成的图形肯定是错误的。然而在两极地区的研究数据在地理上往往是不对称的,目前还没有解决此问题的算法,因此,极地向量场可视化方法亟待解决。
技术实现要素:
针对上述idl软件中ivector函数的局限性而导致极地向量场可视化难的问题,本发明的目的提供一种利用idl程序语言进行极地向量场可视化的流程算法。该算法可以将地理范围不对称的二维数据变为一维数据,避免了ivector函数错误识别数据范围的问题。并建立了一整套极地向量场可视化的算法。
本发明解决其技术问题所采用的技术方案是:一种面向idl极地向量场可视化的算法,包括以下步骤:
读取地理经度数据lon、纬度数据lat和向量场v向数据、u向数据并进行插值处理,并将插值后的二维数据进行维度转换,变为一维数据;
建立图层显示窗口,设置投影以及数据的地理范围,显示经纬网;
插入陆地图层,通过一维数据对极地向量进行可视化,叠加所有图层,生成极地向量场图。
所述进行插值处理具体为:
采用最近邻域法,即idl内置函数congrid(),将经度数据lon、纬度数据lat和向量场v向数据、u向数据均插值为x行,y列,形成二维数据。
所述对将插值后的二维数据进行维度转换具体为:
采用idl内置函数reform(),将二维数据转换为一维数据。
所述建立图层显示窗口,设置投影以及数据的地理范围,显示经纬网具体为:
利用imap函数建立图层显示窗口,用map_projection函数设置投影和用limit函数设置数据的地理范围,显示经纬网。
所述插入陆地图层,通过一维数据对极地向量进行可视化,叠加所有图层,生成极地向量场图包括以下步骤:
利用igetcurrent函数和doaction函数插入陆地图层;
将转为一维的u向数据、v向数据、经度数据和维度数据作为idl内置函数的关键字代入可视化函数ivector,对极地向量进行可视化,利用overplot关键字叠加所有图层,生成极地向量场图。
一种面向idl极地向量场可视化的算法,以idl程序实现。
本发明具有以下有益效果及优点:
1.本发明一种面向idl极地向量场可视化的算法,可提供从数据读取到最终成图的一整套极地向量场可视化流程算法。
2.本算法纯采用idl程序语言完成,简洁方便,便于操作
3.本算法可将二维向量场数据和经纬度数据进行转换为一维数据,从而避免了idl内置函数错误识别数据范围的问题。
附图说明
图1是本发明的流程图;
图2是idl内置函数ivector局限性示意图;
图3a是本文发明所涉及的向量数据类型示意图;
图3b是常见向量数据类型示意图;
图4是箭头特征参数图解;
图5是本发明示例结果图;
具体实施方式
下面结合附图对本发明做进一步说明。
如图1所示,一种面向idl极地向量场可视化的算法,读取向量场数据和经度数据,对两种数据进行插值至统一网格大小,通过数据维度转换,将地理范围不对称的二维数据变为一维数据,避免了ivector函数错误识别数据范围的问题。建立图层显示窗口,设置投影和数据的地理范围,插入陆地图层和经纬网图层,利用可视化函数对极地向量进行可视化,叠加所有图层,生成极地向量场图,包括以下步骤:
读取地理经度数据lon、纬度数据lat和向量场v向数据、u向数据并进行插值处理,使两种数据的行、列数分别相同,得到插值后的lon′、lat′、v′、u′;
将插值后的二维的经纬度数据和向量场数据进行维度转换,变为一维数据,得到lon″、lat″、v″、u″;
利用imap函数建立图层显示窗口,用map_projection函数设置投影和用limit函数设置数据的地理范围,显示经纬网;
利用igetcurrent函数和doaction函数,在窗口中插入陆地图层;
将转为一维的u″、v″、lon″和lat″分别作为向量场的经向(水平)分量、纬向(垂向)分量、经度和维度代入idl内置可视化函数ivector的关键字中,对向量场进行可视化,利用overplot关键字叠加所有图层,并显示在建好的窗口之中,生成极地向量场图。
所述对经纬度数据和向量场数据插值的方法具体为:
采用最近邻域法,即idl内置函数congrid()进行处理。假设将经纬度数据和向量场数据统一插值为x行,y列。
所述对插值后的经纬度数据和向量场数据进行维度转换具体为:
维度转换采用idl内置函数reform()进行处理,将二维数据转换为一维数据,以此来避免ivector函数识别数据范围错误。
如图3a、图3b所示,向量是既有大小又有方向,常见的表示方式是用大小(ws)和角度(wd)表示,如图3b所示;也有另一种表示方法,分别有经向(水平u)分量和纬向(垂向v)分量来表示,经向分量平行于纬线,纬向分量平行于经线;而发明所涉及的向量数据为后者表示的类型。由于两极地区在绘图时所用投影,一般采用极地投影,也就是经纬网不是横屏竖直的,而是有一定的弧度。这样就造成了绘图时不能遵循上北下南左西右东的原则进行。随着位置的变化,朝四个方向的角度也会发生变化,在向量场可视化时,极易出错;然而目前没有一部软件或是某个函数专门解决此问题,本发明针对此问题,发明了一套算法,可精确的对极地向量也就是在地理上不对称的向量数据进行可视化。
以下步骤均采用idl语言在idl界面里编译运行完成。
利用idl读文件函数读取向量场v向数据和u向数据,读取经纬度数据,将向量场数据和经纬度利用congrid()函数进行插值,插值到统一网格大小下,网格大小决定最后成图时箭头的密集度,因此为成图美观,需设置合理的网格大小。假设将经纬度数据和向量场数据统一插值为x行,y列,则插值公式为:
lon′=congrid(lon,y,x)
lat′=congrid(lat,y,x)
v′=congrid(v,y,x)
u′=congrid(u,y,x)
公式中v表示向量场的v向原始二维数据,u表示向量场的u向原始二维数据,lon表示向量场对应的二维经度数据,lat表示向量场对应的二维纬度数据,v′表示由向量场的v向原始二维数据经最近邻域法插值后的v向二维数据,u′表示由向量场的u向原始二维数据经最近邻域法插值后的u向二维数据,lon′表示由向量场原始二维经度数据经最近邻域法插值后的二维经度数据,lat′表示由向量场原始二维纬度数据经最近邻域法插值后的二维纬度数据,congrid()为idl软件内置函数,用于数据的插值处理。
利用reform()函数对上述插值后的向量场数据和经纬度数据进行维度转换,转换成一维,以此来避免ivector函数识别数据范围错误,转换公式为:
z=x×y
lon″=reform(lon′,z)
lat″=reform(lat′,z)
v″=reform(v′,z)
u″=reform(u′,z)
v″表示插值后的v向二维数据经reform()维度转换函数转换成的v向一维数据,u″表示插值后的v向二维数据经reform()维度转换函数转换成的u向一维数据,lon″表示插值后的二维经度数据经reform()维度转换函数转换成的一维经度数据,lat″表示插值后的二维纬度数据经reform()维度转换函数转换成的一维纬度数据,reform()为idl软件内置函数,用于数据的纬度转换处理。
利用imap函数建立图层显示窗口,用map_projection函数设置投影和用limit函数设置数据的地理范围,显示经纬网;
利用igetcurrent函数和doaction函数插入陆地图层;
利用可视化函数ivector对极地向量进行可视化,可视化是可对向量箭头的长度,箭头粗细,箭头角度进行调整,如图4。
利用overplot关键字叠加所有图层,最终生成极地向量场图,如图5。