Wgrib2提取小区域数据
对于GRIB2数据处理,常见的一个需求是提取全场区域内一个子区域数据。wgrib2
提供了几种处理方法。
GRIB2数据提取方法
wgrib2主要通过两种方法限制提取范围,一是根据格点索引范围;二是通过经纬度范围进行指定。
-ijbox
根据格点索引范围截取数据区域。
-ijbox out X..Z,A grid values in bounding box X=i1:i2[:di] Y=j1:j2[:dj] Z=file A=[bin|text|spread]
该选项需要四个参数,第一个是X方向索引范围:起始i1,结束i2,可选步长间隔di;第二个是Y方向范围,用法类似;第三个是写出文件名;第四个参数指定生成文件格式,支持bin/text/spread。
-lola
根据经纬度范围截取数据区域。
-lola out X..Z,A lon-lat grid values X=lon0:nlon:dlon Y=lat0:nlat:dlat Z=file A=[bin|text|spread|grib]
该选项需要四个参数,第一个是经度范围:起始经度lon0,经线数nlon,经线间隔dlon;第二个是维度范围,用法类似;第三个是写出文件名;第四个参数指定生成文件格式,支持bin/text/spread/grib。
-ijsmall_grib
根据索引范围截取数据区域生成grib数据。
-ijsmall_grib out X Y Z make small domain grib file X=ix0:ix1 Y=iy0:iy1 Z=file
该选项需要三个参数,第一个是X方向索引范围:起始ix0,结束ix1;第二个是Y方向范围,用法类似;第三个是写出文件名。
-small_grib
根据索经纬度范围截取数据区域生成grib数据。
-small_grib out X Y Z make small domain grib file X=lonW:lonE Y=latS:latN Z=file
该选项需要三个参数,第一个是经度范围,从西到东;第二个是纬度范围,从南到北;第三个是写出文件名。
示例
样例数据是NCEP GFS 0.5°预报场数据gfs.t00z.pgrb2.0p50.f000,数据范围是(lon: 0:395.5:0.5, lat: -90:90:0.5)。
需求:提取70-135E,0-54N范围地表温度场数据。对应的索引范围是X方向141-271,Y方向是181-289。
# 使用-ijbox
$ wgrib2 gfs.t00z.pgrb2.0p50.f000 -match "TMP:surface" -ijbox 141:271 181:289 out1.bin bin
# 使用-lola
$ wgrib2 gfs.t00z.pgrb2.0p50.f000 -match "TMP:surface" -lola 70:131:0.5 0:109:0.5 out2.grb2 grib
$ wgrib2 out2.grb2 -grid
1:0:grid_template=0:winds(N/S):
lat-lon grid:(131 x 109) units 1e-06 input WE:SN output WE:SN res 48
lat 0.000000 to 54.000000 by 0.500000
lon 70.000000 to 135.000000 by 0.500000 #points=14279
# 使用-ijsmall_grib
$ wgrib2 gfs.t00z.pgrb2.0p50.f000 -match "TMP:surface" -ijsmall_grib 141:271 181:289 out3.grb2
# 使用-small_grib
$ wgrib2 gfs.t00z.pgrb2.0p50.f000 -match "TMP:surface" -small_grib 70:135 0:54 out4.grb2
Regridding插值
当需要生成不同分辨率数据或者不同网格数据时,需要进行插值处理。wgrib2提供-new_grid
及相关的选项(-new_grid_winds
、-new_grid_interpolation
),可以处理不同网格、不同分辨率、不同插值方法、矢量标量类型数据。
-new_grid
-new_grid out X..Z,A bilinear interpolate: X=projection Y=x0:nx:dx Z=y0:ny:dy A=grib_file alpha
比如经纬度网格插值
-new_grid latlon lon0:nlon:dlon lat0:nlat:dlat outfile
示例
前面样例数据相同范围插值到1°分辨率数据。
$ wgrib2 gfs.t00z.pgrb2.0p50.f000 -match "TMP:surface" -new_grid latlon 70:66:1.0 0:55:1.0 out5.grb2
$ wgrib2 out5.grb2 -grid
1:0:grid_template=0:winds(N/S):
lat-lon grid:(66 x 55) units 1e-06 input WE:SN output WE:SN res 48
lat 0.000000 to 54.000000 by 1.000000
lon 70.000000 to 135.000000 by 1.000000 #points=3630
参考资料
https://www.cpc.ncep.noaa.gov/products/wesley/wgrib2/new_grid.html
https://www.cpc.ncep.noaa.gov/products/wesley/wgrib2/new_grid_interpolation.html

