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

2024-05-13 08:26:26 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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

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

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

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

问题是,从这里开始,我摸索着找不到如何从这个变量(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

Tags: 文件name高度水平msg温度level分量
2条回答

可以使用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()

您应该能够从您选择的变量(而不是值)中使用.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

相关问题 更多 >