Python 如何使用pygrib从lat、lon值中检索

Python 如何使用pygrib从lat、lon值中检索,python,grib,pygrib,Python,Grib,Pygrib,我开始学习python编程,我想制作一个小脚本,显示“在地势以上2m高度诊断的当地温度”、“在10m高度诊断的东西向水平风的纬向分量”和“在10m高度诊断的水平风的子午线分量”的数据作为经度和纬度的函数 为此,我从Meteofrance的开放数据站点下载了一个文件,方法是选择: 域:“法国-0.01°”,子包:“SP1-当前表面参数”,截止日期组“0h”和运行日期“2020-02-10 00 UTC” 所以我有一个grib2格式的文件,我正试图用pygrib库处理它 简单来说,我只是想得到给定点

我开始学习python编程,我想制作一个小脚本,显示“在地势以上2m高度诊断的当地温度”、“在10m高度诊断的东西向水平风的纬向分量”和“在10m高度诊断的水平风的子午线分量”的数据作为经度和纬度的函数

为此,我从Meteofrance的开放数据站点下载了一个文件,方法是选择:

域:“法国-0.01°”,子包:“SP1-当前表面参数”,截止日期组“0h”和运行日期“2020-02-10 00 UTC”

所以我有一个grib2格式的文件,我正试图用pygrib库处理它

简单来说,我只是想得到给定点的温度(经度=0.25,纬度=49.21)

我创建了一个索引来读取文件(看起来它是最快的)

我选择与温度相对应的记录,并恢复值:

msg = indx.select(level=2, typeOfLevel="heightAboveGround", name="2 metre temperature")
temp2m = msg[0].values
问题是,从这里开始,我摸索着找不到如何从这个变量(numpy.ma.core.MaskedArray)中检索对应于我的经度=0.25和纬度=49.21的值

如果有人有主意,我很感兴趣

import pygrib
indx = pygrib.index('./AROME_0.01_SP1_00H_2020021000.grib2', 'typeOfLevel', 'level', 'name') 
msg = indx.select(level=2, typeOfLevel="heightAboveGround", name="2 metre temperature")
temp2m = msg[0].values

您应该能够通过使用所选变量(而不是值)中的
.latlons()
获取lat和lon。从那里你可以得到与你的点对应的索引

import pygrib
indx = pygrib.index('./AROME_0.01_SP1_00H_2020021000.grib2', 'typeOfLevel', 'level', 'name') 
msg = indx.select(level=2, typeOfLevel="heightAboveGround", name="2 metre temperature")

lat,lon = msg.latlons()

temp2m = msg[0].values

可以使用pygrib.data()方法在lat/lon周围创建一个边界框,然后取该框中值的平均值。只需调整公差即可控制长方体的大小

lat, lon, tolerence = 49.21, 0.25, 0.1
data, lats, lons = grb.data(lat1=lat-tolerence,lat2=lat+tolerence,
                            lon1=lon-tolerence,lon2=lon+tolerence)
data.mean()

可能有帮助:即
temp2m.data
的输出是什么?使用cfgrib。它是最先进的,更容易使用。
lat, lon, tolerence = 49.21, 0.25, 0.1
data, lats, lons = grb.data(lat1=lat-tolerence,lat2=lat+tolerence,
                            lon1=lon-tolerence,lon2=lon+tolerence)
data.mean()