如何从Grib1/.grb文件中提取值
我在想,有没有办法从grib1文件中提取数值?我的最终目标是找到特定经纬度的值,或者至少是某个网格点的值。我是在一个Linux系统上操作的。Wgrib似乎除了读取消息的元数据,或者重建消息之外,没什么其他用处。
我对Python有一点了解,所以我可以使用pygrib,但我不知道怎么提取特定经纬度的值。
这里有一些.grb文件,大家可以随便玩玩。 http://nomads.ncdc.noaa.gov/data/gfs-avn-hi/201402/20140218/
谢谢大家的回答,
2 个回答
你可以使用grib工具,特别是grib_ls和grib_get这两个工具,从指定的经纬度获取一个或四个最近的网格点的数值。这样,你可以用最近邻插值、双线性插值或者其他你喜欢的方法来获取你需要的数值。
可以看看这个演示文稿,grib_ls的内容从第31页开始:
http://nwmstest.ecmwf.int/services/computing/training/material/grib_api/grib_api_tools.pdf
当你安装grib工具时,会得到几个工具,帮助你处理GRIB文件。
如果你对NOMADS的数据感兴趣,我建议你使用他们的THREDDS数据服务器,这样你可以通过指定经纬度来获取数据,如果需要的话,还可以把数据下载为csv文件。首先,访问NOMADS TDS网站:
http://nomads.ncdc.noaa.gov/thredds/catalog/catalog.html
你提到的示例数据文件可以在这里找到:
http://nomads.ncdc.noaa.gov/thredds/catalog/gfs-003/201402/20140218/catalog.html
找到你感兴趣的网格,比如18Z运行分析字段:
点击“NetcdfService”的链接:
在页面的顶部,点击“作为点数据集”:
然后勾选你感兴趣的参数,比如经纬度(系统会选择离这个经纬度最近的网格点),以及输出格式类型。
这个网页界面基本上会生成一个访问链接,如果我想要科罗拉多州博尔德的温度数据,并以csv格式返回,链接看起来是这样的:
从上面的链接可以看出,你可以很容易地生成这些链接,并且可以直接请求数据,而不需要经过上面所有的步骤。
这种访问方法(NetcdfSubsetService)可以很方便地与Python结合使用。想看示例的话,可以查看这个ipython笔记本:
http://nbviewer.ipython.org/github/Unidata/tds-python-workshop/blob/master/ncss.ipynb
特别是笔记本中的第一和第二个单元。
注意,你可以获取最近的GFS数据,其中整个模型运行都包含在一个grib文件中,地址是:
http://thredds.ucar.edu/thredds/idd/modelsNcep.html
这将允许你像上面那样发出请求,但可以一次请求多个时间的数据。
祝好,
Sean