1. 将二维网格数据插值到网格。
就是为了将NCEP月资料2.5度网格插值到1度网格,与日资料进行相应计算。
linint2
;二维插值 lat and lon from 2.5 to 1
u_avg_2=linint2 (lon_0,lat_0,u_avg_1, True, lon_1,lat_1, 0)
lon_0,lat_0:原始经纬度,单调递增(划重点,否则会出现缺省值)
lon_1,lat_1:插值经纬度,单调递增
http://www.ncl.ucar.edu/Document/Functions/Built-in/linint2.shtml
2. 一维插值 p
linint1_n_Wrap
u_avg=linint1_n_Wrap (p_0,u_avg_2, False, p_1, 0, 0)
p_0:原始气压,单调递增或递减
p_1:插值气压,单调递增或递减(递增或递减两者保持一致)
http://www.ncl.ucar.edu/Document/Functions/Built-in/linint1_n.shtml
3. 曲线网格插值到直线网格
rcm2rgrid和rcm2rgrid_Wrap函数可以用于将WRF等模式产品插值到标准网格上
官网说明
http://www.ncl.ucar.edu/Document/Functions/Built-in/rcm2rgrid.shtml
emi_grid = rcm2rgrid_Wrap(lat_emi,lon_emi,emi_mean,lat_grid,lon_grid,0)
需要注意的点:
标准网格的经纬度都是一维的,且为单调递增
如果插值前的数据中有缺省值,必须给出定义emi_mean@_FillValue=-9999
此外关于插值还有系列函数,可以去官网仔细查看
rgrid2rcm:从直线网格插值到曲线网格
rcm2points:从曲线网格插值到不规则站点
triple2grid:将不规则站点数据填充到最近的直线网格
最近使用了一下triple2grid,将站点数据插值到与再分析资料匹配的网格。由于我的站点资料非常细,option选的false,计算速度很快。
triple2grid2d:将不规则站点数据填充到最近的曲线网格
4. 站点数据插值成格点
;读取原始数据及其经纬度
a = asciiread("/public/home/ncl/wrfout/pm25-2013-11-china.txt",(/row,col/),"float")
lat = a(:,1)
lon = a(:,2)
pm25 = a(:,3)
olon=fspan(72,138,132);设置插值范围及格点数,即空间分辨率
olat=fspan(17,57,80)
olon!0 = "lon"
olon@long_name = "lon"
olon@units = "degrees-east"
olon&lon = olon
olat!0 = "lat"
olat@long_name = "lat"
olat@units = "degrees_north"
olat&lat = olat
rscan = (/10,5,3/);连续的有效半径大小,最大为10,依次递减
pm25_reshape = obj_anal_ic_deprecated(lon,lat,pm25,olon,olat,rscan, False) ;Creanm插值
Creanm插值会对高值有所损耗,但空间分布结果最为合理。
通过调整rsan来控制选取的影响范围,rsacn数值越大,影响范围越大,选取影响点越多,曲线越平滑,但是相对来说更容易失真。rsacn的选取单位为维度。例如,上述例子所使用的插值分辨率为0.5deg,影响半径为10,其影响范围为10个纬度,20个格点*20个格点,导致其插值结果失真比较严重。
下图为插值前后的对比,图1为未插值,直接用contour函数画出的图;图二rscan为 (/10,5,3/) ;图三rscan为 (/2,1,0.5/) 。