【问题标题】:How to iterate over latitude longitude values of a grib2 file?如何迭代 grib2 文件的纬度经度值?
【发布时间】:2016-10-03 08:21:50
【问题描述】:

我正在尝试获取 grib2 文件中所有 lat,lng 的 uvIndex。 这是我从中获取文件的link。问题是我无法理解文件的结构,因此我无法获取数据。我正在使用pygrib 来读取文件。

这是我尝试过的代码:

grbs = pygrib.open('uv.t12z.grbf01.grib2')
grb = grbs.select(name='UV index')[0]
print grb.data(23.5,55.5)

我想要实现的是遍历所有 lat long 并打印相应的 uvIndex 值,或者输入 lat long 并获取相应的值。阅读pygrib 的文档,但找不到任何合适的命令来满足我的目的。请帮忙。

【问题讨论】:

    标签: python numpy weather grib noaa


    【解决方案1】:

    您必须遍历 GRIB 文件并找到所需的记录,然后获取数据,如下所示:

    for g in grbs:
        print g.shortName, g.typeOfLevel, g.level # print info about all GRIB records and check names 
        if (g.shortName == shortName and g.typeOfLevel == typeOfLevel and g.level == level):
            tmp = np.array(g.values)
            # now work with tmp as numpy array
    

    要获取 lat 和 lon 数组,请使用:lt, ln = g.latlons()g - grbs 的元素。

    https://software.ecmwf.int/wiki/display/GRIB/GRIB+API+examples 阅读 Python 部分中的示例(pygrib 使用此库来读取 GRIB)。

    从大型 GRIB 文件中获取数据的最快方法是创建索引:

    # use attributes what you want to build index
    indx = pygrib.index(gribfile,'typeOfLevel','level','parameterName') 
    
    # important: msg is an array and may have more then one record
    # get U wind component on 10 m above ground
    msg = indx.select(level = 10, typeOfLevel = "heightAboveGround",
     parameterName = "U U-component of wind m s**-1")
    u10 = np.array(msg[0].values)
    # get V wind component on 10 m above ground
    msg = indx.select(level = 10, typeOfLevel = "heightAboveGround",
     parameterName = "V V-component of wind m s**-1")
    v10 = np.array(msg[0].values)
    

    【讨论】:

      猜你喜欢
      • 2011-11-14
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 2013-09-09
      • 1970-01-01
      • 1970-01-01
      • 2016-01-12
      • 1970-01-01
      相关资源
      最近更新 更多