爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 28632|回复: 32

关于欧洲中心GRIB数据格式的解码问题

[复制链接]
发表于 2015-1-21 10:19:12 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
之前国家气象局下发的是每个预报时次一个文件,文件大小都是一样的,49M左右,分辨率为0.25x0.25,361x281个数据,假设文件名为ec_old.bin,用wgrib -V ec_old.bin还可以理解,解码如下:
rec 1:153480:date 2015011400 T kpds5=130 kpds6=100 kpds7=100 levels=(0,100) grid=255 100 mb 12hr fcst:
  T=Temperature [K]
  timerange 0 P1 12 P2 0 TimeU 1  nx 361 ny 281 GDS grid 0 num_in_ave 0 missing 0
  center 98 subcenter 0 process 144 Table 128 scan: WE:NS winds(N/S)
  latlon: lat 60.000000 to -10.000000 by 0.250000  nxny 101441
          long 60.000000 to 150.000000 by 0.250000, (361 x 281)
scan 0 mode 128 bdsgrid 1
  min/max data 184.643 229.439  num bits 12  BDS_Ref 184.643  DecScale 0 BinScale -6
rec 2:305760:date 2015011400 FAL kpds5=243 kpds6=1 kpds7=0 levels=(0,0) grid=255 sfc 12hr fcst:
  FAL=Forecast albedo [(0 - 1)]
  timerange 0 P1 12 P2 0 TimeU 1  nx 361 ny 281 GDS grid 0 num_in_ave 0 missing 0
  center 98 subcenter 0 process 144 Table 128 scan: WE:NS winds(N/S)
  latlon: lat  60.000000 to -10.000000 by 0.250000  nxny 101441
          long 60.000000 to 150.000000 by 0.250000, (361 x 281)
scan 0 mode 128 bdsgrid 1
  min/max data 0.06 0.864688  num bits 8  BDS_Ref 0.06  DecScale 0 BinScale -8
.......
.
但最近国家局下发的格式变了,每个时次的文件大小不一致了,但文件命名方式没有改变,假设文件名为ec_new.bin,用wgrib -V ec_new.bin解码如下:
rec 1:178560:date 2015011412 W kpds5=135 kpds6=100 kpds7=20 levels=(0,20) grid=255 20 mb 27hr fcst:
  W=Vertical velocity [Pa s**-1]
  timerange 0 P1 27 P2 0 TimeU 1  nx 78915 ny 1 GDS grid 0 num_in_ave 0 missing 0
  center 98 subcenter 0 process 144 Table 128 scan: WE:NS winds(N/S)
  latlon: lat  60.000000 to -10.000000 by 0.250000  nxny 78915
          long 60.000000 to 150.000000 by 0.250000, (78915 x 1)
scan 0 mode 128 bdsgrid 1
  min/max data -0.158023 -0.0330269  num bits 15  BDS_Ref -0.158023  DecScale 0 BinScale -18

rec 2:326640:date 2015011412 W kpds5=135 kpds6=100 kpds7=200 levels=(0,200) grid=255 200 mb 27hr fcst:
  W=Vertical velocity [Pa s**-1]
  timerange 0 P1 27 P2 0 TimeU 1  nx 78654 ny 1 GDS grid 0 num_in_ave 0 missing 0
  center 98 subcenter 0 process 144 Table 128 scan: WE:NS winds(N/S)
  latlon: lat  60.000000 to -10.000000 by 0.250000  nxny 78654
          long 60.000000 to 150.000000 by 0.250000, (78654 x 1) scan 0 mode 128 bdsgrid 1
  min/max data -3.42821 4.57167  num bits 16  BDS_Ref -3.42821  DecScale 0 BinScale -13

rec 12:2703960:date 2015011412 TCW kpds5=136 kpds6=1 kpds7=0 levels=(0,0) grid=255 sfc 27hr fcst:
  TCW=Total column water [kg m**-2]
  timerange 0 P1 27 P2 0 TimeU 1  nx 1414042 ny 1 GDS grid 0 num_in_ave 0 missing 0
  center 98 subcenter 0 process 144 Table 128 scan: WE:NS winds(N/S)
  latlon: lat  90.000000 to -90.000000 by 0.125000  nxny 1414042
          long 0.000000 to -0.125000 by 0.125000, (1414042 x 1)
scan 0 mode 128 bdsgrid 1
  min/max data 0.230094 128.199  num bits 12  BDS_Ref 0.230094  DecScale 0 BinScale -5

解码显示,还是lat  60.000000 to -10.000000 by 0.250000 long 60.000000 to 150.000000 by 0.250000,但格点数有时 78915,有时78654,反正所有的要素都不一样,而且地面的解码lat  90.000000 to -90.000000 by 0.125000  long 0.000000 to -0.125000 by 0.125000,
请教各位高手,请问这到底是什么意思呢?

密码修改失败请联系微信:mofangbao
 楼主| 发表于 2015-1-21 10:22:40 | 显示全部楼层
就是说,即使取出78915个数据,但无法对应到 361 x 281个格点上啊?因为它说是:
lat 60.000000 to -10.000000 by 0.250000  nxny 101441
long 60.000000 to 150.000000 by 0.250000,
密码修改失败请联系微信:mofangbao
发表于 2015-1-21 10:38:09 | 显示全部楼层
我用以下命令:wgrib W_NAFP_C_ECMF_20150120054435_P_C1D01200000012000001.bin -V -d all -bin -nh -o  001.dat > 001.txt解码没有问题:
rec 11:13668372:date 2015011412 CAPE kpds5=59 kpds6=1 kpds7=0 levels=(0,0) grid=255 sfc 6hr fcst:
  CAPE=Convective available potential energy [J kg**-1]
  timerange 0 P1 6 P2 0 TimeU 1  nx 2880 ny 1441 GDS grid 0 num_in_ave 0 missing 0
  center 98 subcenter 0 process 144 Table 128 scan: WE:NS winds(N/S)
  latlon: lat  90.000000 to -90.000000 by 0.125000  nxny 4150080
          long 0.000000 to -0.125000 by 0.125000, (2880 x 1441) scan 0 mode 128 bdsgrid 1
  min/max data 0 11464.8  num bits 16  BDS_Ref 0  DecScale 0 BinScale -2
也许是你的命令不对,也许你的wgrib不对。地面 long 0.000000 to -0.125000 by 0.125000表示经度范围是0度到359.875(360-0.125)度。
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2015-1-21 11:24:26 | 显示全部楼层
我刚才又试以一下,还是原来的情况,就是
rec 2:326640:date 2015011412 W kpds5=135 kpds6=100 kpds7=200 levels=(0,200) grid=255 200 mb 27hr fcst:
  W=Vertical velocity [Pa s**-1]
  timerange 0 P1 27 P2 0 TimeU 1  nx 78654 ny 1 GDS grid 0 num_in_ave 0 missing 0
  center 98 subcenter 0 process 144 Table 128 scan: WE:NS winds(N/S)
  latlon: lat  60.000000 to -10.000000 by 0.250000  nxny 78654
          long 60.000000 to 150.000000 by 0.250000, (78654 x 1)
scan 0 mode 128 bdsgrid 1
  min/max data -3.42821 4.57167  num bits 16  BDS_Ref -3.42821  DecScale 0 BinScale -13

78654个格点和 lat 60.000000 to -10.000000 by 0.250000,long 60.000000 to 150.000000 by 0.250000对应不上,南北271个格点,东西361个数据,一共应该是271x361=101441个才对啊?
那请问您的wgrib版本是多少,我的是在http://www.cpc.ncep.noaa.gov/products/wesley/wgrib.html下载的,不过是编译好的版本,不是源代码的,v1.0.8.9m1 (8-22-05),另外,您的ec文件所有的文件都是一样大小吗?我这里得到的每个预报时次都不一样,有的90多M,有的100多M
密码修改失败请联系微信:mofangbao
发表于 2015-1-21 11:46:55 | 显示全部楼层
本帖最后由 tornadoarps 于 2015-1-21 15:44 编辑

我装了windows版本的grads,安装文件名是grads-2.0.a9.oga.1-win32_superpack.exe,装完之后wgrib就可以用了。
你说的100M左右的文件大小,说明你拿到的ec资料是复杂压缩格式,需要转换成简单压缩格式才能被wgrib正确处理。简单压缩格式大小在200M左右。
采用复杂压缩格式下发是为了减小文件大小,节省传输时间和带宽。
密码修改失败请联系微信:mofangbao
发表于 2015-1-21 17:19:12 | 显示全部楼层
楼上正确,就是变成了复杂压缩格式。
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2015-1-21 18:38:06 | 显示全部楼层
非常感谢楼上两位的回答,我的文件是93M,我已经上传到百度网盘http://pan.baidu.com/s/1mgA7jDY,能不能麻烦给看看是不是您说的复杂压缩格式,如果是,那该怎么转换成简单压缩格式呢?不胜感谢!
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2015-1-21 20:32:02 | 显示全部楼层
另外,我还用了openGrads里面的wgrib,就是D:\Program  Files\OpenGrADS\Contents\Cygwin\Versions\2.0.a9.oga.1\i686里的wgrib,版本应该和楼上的grads-2.0.a9.oga.1-win32_superpack.exe一致,用wgrib直接查看版本信息见图,可是解码出来的东西就不是那样了,或许我是拿到的源文件有问题?

我用wgrib shnew.bin -V -d all -bin -nh -o 001.dat >001.txt
结果如图,
001.txt里的内容是:
rec 1:178560:date 2015011412 W kpds5=135 kpds6=100 kpds7=20 levels=(0,20) grid=255 20 mb 27hr fcst:
  W=Vertical velocity [Pa s**-1]
  timerange 0 P1 27 P2 0 TimeU 1  nx 65535 ny 1 GDS grid 0 num_in_ave 0 missing 0
  center 98 subcenter 0 process 144 Table 128 scan: WE:NS winds(N/S)
  latlon: lat  60.000000 to -10.000000 by 0.250000  nxny 65535
          long 60.000000 to 150.000000 by 0.250000, (65535 x 1) scan 0 mode 128 bdsgrid 1

内容只有这些,不是内其中的一部分
wgribVersion.png
process.png
密码修改失败请联系微信:mofangbao
发表于 2015-1-21 21:06:12 | 显示全部楼层
本帖最后由 tornadoarps 于 2015-1-21 21:26 编辑

如果文件只有93M那肯定是复杂压缩格式了。如果你是省级气象部门的工作人员,那你可以从负责资料接收处理的同事那里要到国家气象信息中心下发的“欧洲精细化预报数据格式转换软件安装、使用手册”,里面有详细的复杂压缩格式转简单格式的方法。
如果要不到这个文件,我就简单说一下转换步骤:
1、转换步骤需在linux下实现;
2、安装netcdf
3、安装grib api
4、利用grib api进行转换

netcdf安装:
  > gunzip netcdf-4.3.0.tar.gz
  > tar xf netcdf-4.3.0.tar
  > mkdir /usr/local/netcdf
  > cd netcdf-4.3.0   
  > ./configure --prefix=/usr/local/netcdf/ --disable-netcdf-4s
   > make
  > make check
  > make install

grib api安装:
  > gunzip grib_api-1.12.3.tar.gz
  > tar xf grib_api-1.12.3.tar
  > mkdir /usr/local/grib_api
  > cd grib_api-1.12.3
  > ./configure --prefix=/usr/local/grib_api --with-netcdf=/usr/local/netcdf --disable-jpeg
   > make
  > make check
  > make install

用以下命令进行转换:/usr/local/grib_api/bin/grib_set -r -s packingType=grid_simple $grib_name1  $grib_name2
其中$grib_name1是复杂压缩格式文件名,$grib_name2是简单压缩格式文件名

密码修改失败请联系微信:mofangbao
发表于 2015-1-21 23:14:16 | 显示全部楼层
wheelar 发表于 2015-1-21 18:38
非常感谢楼上两位的回答,我的文件是93M,我已经上传到百度网盘http://pan.baidu.com/s/1mgA7jDY,能不能麻 ...

我也试了一下你提供的数据,目前的MeteoInfo版本无法正常读取数据。刚下载了netCDF Java最新的库4.5,初步测试能够正常打开该文件并生产数据图层。
Image00108.png
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表