3

我开始使用python编程,我想制作一个小脚本,显示“在浮雕上方2m高度诊断的局部温度”,“在10m高度诊断的东西向水平风的纬向分量”和“在 10 m 高度诊断的水平风的子午分量”作为经度和纬度的函数。

为此,我从 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
4

2 回答 2

2

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

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()
于 2020-11-03T12:26:25.127 回答
1

您应该能够通过使用.latlons()您选择的变量(而不是值)来获得纬度和经度。从那里您可以获得与您的观点相对应的索引。

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
于 2020-05-08T15:51:57.807 回答