如何从Grib1/.grb文件中提取值

1 投票
2 回答
1547 浏览
提问于 2025-04-18 12:57

我在想,有没有办法从grib1文件中提取数值?我的最终目标是找到特定经纬度的值,或者至少是某个网格点的值。我是在一个Linux系统上操作的。Wgrib似乎除了读取消息的元数据,或者重建消息之外,没什么其他用处。

我对Python有一点了解,所以我可以使用pygrib,但我不知道怎么提取特定经纬度的值。

这里有一些.grb文件,大家可以随便玩玩。 http://nomads.ncdc.noaa.gov/data/gfs-avn-hi/201402/20140218/

谢谢大家的回答,

2 个回答

0

你可以使用grib工具,特别是grib_ls和grib_get这两个工具,从指定的经纬度获取一个或四个最近的网格点的数值。这样,你可以用最近邻插值、双线性插值或者其他你喜欢的方法来获取你需要的数值。

可以看看这个演示文稿,grib_ls的内容从第31页开始:

http://nwmstest.ecmwf.int/services/computing/training/material/grib_api/grib_api_tools.pdf

当你安装grib工具时,会得到几个工具,帮助你处理GRIB文件。

4

如果你对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运行分析字段:

http://nomads.ncdc.noaa.gov/thredds/catalog/gfs-003/201402/20140218/catalog.html?dataset=gfs-003/201402/20140218/gfs_3_20140218_1800_000.grb

点击“NetcdfService”的链接:

http://nomads.ncdc.noaa.gov/thredds/ncss/grid/gfs-003/201402/20140218/gfs_3_20140218_1800_000.grb/dataset.html

在页面的顶部,点击“作为点数据集”:

http://nomads.ncdc.noaa.gov/thredds/ncss/grid/gfs-003/201402/20140218/gfs_3_20140218_1800_000.grb/pointDataset.html

然后勾选你感兴趣的参数,比如经纬度(系统会选择离这个经纬度最近的网格点),以及输出格式类型。

这个网页界面基本上会生成一个访问链接,如果我想要科罗拉多州博尔德的温度数据,并以csv格式返回,链接看起来是这样的:

http://nomads.ncdc.noaa.gov/thredds/ncss/grid/gfs-003/201402/20140218/gfs_3_20140218_1800_000.grb?var=Temperature_surface&latitude=40&longitude=-105&temporal=all&accept=csv&point=true

从上面的链接可以看出,你可以很容易地生成这些链接,并且可以直接请求数据,而不需要经过上面所有的步骤。

这种访问方法(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

撰写回答