GRIB数据处理相关指令

GRIB

数据格式简介

GRIB(General Regularly distributed Information in Binary form),是由世界气象组织(WMO)设计和维护的一种用于存储和传输网格数据的标准数据格式,它是一种自描述的二进制压缩格式,通常具有扩展名.grib,.grb或.gb。

世界气象组织一共发布了3各版本的GRIB标准:

  • GRIB 版本 0: 已淘汰,无技术支持,目前几乎不再使用。
  • GRIB 版本 1: 版本1是GRIB的历史遗留版本,已停止开发。由于它已在国际民航组织(ICAO)的世界范围预报系统中使用,因此仍得到WMO的认可。
  • GRIB 版本 2: 版本2格式是GRIB标准的扩展和强化,它与版本1相比在压缩比等性能上有更优异的表现。一些国家的数值天气预报机构(尤其是美国和欧洲)正在逐步采用此版本,版本2不能与版本1兼容。

想了解更多GRIB1和GRIB2的信息,请参考:Introduction to GRIB Edition1 and GRIB Edition 2

GRIB数据格式是以一个被称为“报文”(Message)的数据结构为基本单元的集合体。每个“报文”中会存储一套经纬度、变量数组以及所有描述性的属性信息,而每个GRIB文件里会按顺序排列存储多个“报文”。

处理工具及方法

ecCodes

ecCodes是一个由ECMWF开发的程序包,它可以提供用于解码和编码GRIB格式的API和工具。我们可以使用conda来安装:$ conda install -c conda-forge eccodes

ecCodes提供了一套处理grib数据的命令行工具,你可以使用 grib_dump , grib_ls 和 grib_get 来查看文件内容,也可以使用 grib_set 和 grib_filter 去修改内容,还可以用 grib_copy 去把部分内容复制出来,或者使用 grib_get_data 从文件中把经纬度和变量值提取出来。 grib_compare 还可以按照键去对不同GRIB文件进行对比。

grib_ls

grib_ls 命令行主要用于查看GIRB文件的内容信息

  1. 查看GRIB文件所有报文的所有参数
$ grib_ls ERA5_20191231.grib
ERA5_20191231.grib
edition      centre       typeOfLevel  level        dataDate     stepRange    dataType       shortName    packingType  gridType
1            ecmf         surface      0            20191231     0            an             10u          grid_simple  regular_ll
1            ecmf         surface      0            20191231     0            an             10v          grid_simple  regular_ll
1            ecmf         surface      0            20191231     0            an             2d           grid_simple  regular_ll
...
384 of 384 messages in ERA5_20191231.grib384 of 384 total messages in 1 files

🔹 每列字段含义

字段名含义
editionGRIB 的版本,这里是 1,即 GRIB1 格式
centre数据提供中心,ecmf 表示 ECMWF(欧洲中期天气预报中心)
typeOfLevel层类型,这里是 surface,表示地表或接近地表
level层高度/层次值,对 surface0
dataDate数据日期,这里是 20100601(即 2010 年 6 月 1 日)或 20100602
stepRange预报步长,0 表示分析场(analysis,即即时状态,不是预报)
dataType数据类型,an 表示 analysis(分析场)
shortName变量短名称

 

2.仅查看报文信息中的shortName和dataType参数

$ grib_ls -p shortName,dataType ERA5_20191231.grib
ERA5_20191231.grib
shortName   dataType
10u         an
10v         an
2d          an
...
384 of 384 messages in ERA5_20191231.grib384 of 384 total messages in 1 files

3.筛选参数shortName为tp的报文信息

$ grib_ls -w shortName=tp ERA5_20191231.grib
ERA5_20191231.grib
edition      centre       typeOfLevel  level        dataDate     stepRange    dataType     shortName    packingType  gridType
1            ecmf         surface      0            20191230     5-6          fc           tp           grid_simple  regular_ll
1            ecmf         surface      0            20191230     6-7          fc           tp           grid_simple  regular_ll
1            ecmf         surface      0            20191230     7-8          fc           tp           grid_simple  regular_ll
...
384 of 384 messages in ERA5_20191231.grib384 of 384 total messages in 1 files

4.查看距离(25°N,100°E)最近点的paramId,name和值

$ grib_ls -l 25,100,1 -p paramId,name ERA5_20191231.grib
ERA5_20191231.grib
paramId     name         value
165         10 metre U wind component  -0.229126
166         10 metre V wind component  -0.69986
168         2 metre dewpoint temperature  272.847
...
384 of 384 total messages in 1 files
Input Point: latitude=25.00  longitude=100.00
Grid Point chosen #2 index=39460 latitude=25.00 longitude=100.00 distance=0.00 (Km)
Other grid Points
- 1 - index=39461 latitude=25.00 longitude=100.25 distance=25.18 (Km)
- 2 - index=39460 latitude=25.00 longitude=100.00 distance=0.00 (Km)
- 3 - index=39180 latitude=25.25 longitude=100.25 distance=37.48 (Km)
- 4 - index=39179 latitude=25.25 longitude=100.00 distance=27.78 (Km)

更多详细的参数说明及使用方法可以执行 grib_ls -h 查看帮助文档或阅读ECMWF官方文档: GRIB tools

CDO

conda install -c conda-forge cdo

Python

cfgrib & xarray

conda install -c conda-forge eccodes cfgrib xarray

pygrib

安装: conda install -c conda-forge pygrib

使用方法

In [1]: import pygribIn [2]: msgs = pygrib.open('./20180930-fc-sfc.grib')In [3]: msg1 = msgs[1]In [4]: msg1
Out[4]: 1:Surface pressure:Pa (instant):regular_ll:surface:level 0:fcst time 0 hrs:from 201809301200In [5]: msg1.keys()    # 查看所有关键字,此处列出的关键字都可以作为select的过滤条件
Out[5]:
['globalDomain','GRIBEditionNumber','eps',...'section5Length','analDate','validDate']In [6]: msg1.shortName   # 查看shortName
Out[6]: 'sp'In [10]: msg1.name    # 查看name
Out[10]: 'Surface pressure'In [17]: lats, lons = msg1.latlons()   # 提取经纬坐标In [21]: array = msg1.values    # 提取变量值In [23]: tps = msgs.select(shortName='tp')   # 选出所有shortName为tp的报文

警告

在pygrib中,打开的grib文件无法自动回收内存,因此在使用完毕grib数据以后,一定要执行 .close() 操作,否则如果打开的grib文件太多,会造成内存溢出。

iris

conda install -c conda-forge iris

pynio

conda install -c conda-forge pynio

NCL

conda install -c conda-forge ncl

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/89575.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/89575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务学习(六)之分布式事务

微服务学习(六)之分布式事务一、认识Seata二、部署TC服务1、准备数据库表2、准备配置文件3、docker部署三、微服务集成seata1、引入依赖2、改造配置3、添加数据库表4、测试四、XA模式1、两阶段提交2、seata的XA模型3、优缺点4、实现步骤五、AT模式1、Sea…

Go实现用户登录小程序

写一个用户登录注册的小程序 运行程序,给出提示1. 注册输入用户名、密码、年龄、性别 {"用户名": "root", "passwd": "123456", "age": 18, "sex": "男"}注册前要判断是否存在此用户2. 登录…

鸿蒙蓝牙通信

https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-bluetooth-low-energy 蓝牙权限 module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.ACCESS_BLUETOOTH","reason": "…

Java:Map

文章目录Map常用方法Map遍历的三种方法先获取Map集合的全部键,再通过遍历来找值Entry对象forEach结合lambda表达式Map 案例分析需求我的代码(不好)老师的代码(好)好在哪里另外集合分为Collection和MapMap常用方法 代码…

fastjson2 下划线字段转驼峰对象

在对接第三方或查询数据库时,返回的字段是下划线分隔的,而在业务中需要转成java对象,java对象的字段是驼峰的,使用fastjson2时,有两种方法可以实现: 比如数据格式是: {"item_id": &q…

【硬件】蓝牙音频协议

1. 无线音频传输的工作原理 在无线传输的过程中,音源设备首先将MP3、FLAC等音频文件还原为PCM格式。通过蓝牙音频编码转为蓝牙无线传输的文件,发送到音频设备段。将蓝牙无线传输的文件再次还原为PCM格式,之后转为模拟信号并放大,通…

【宇树科技:未来1-3年,机器人可流水线打螺丝】

在第三届中国国际供应链促进博览会上,宇树科技工作人员表示,未来1到3年内,机器人产品有望从单一工业化产品,发展至复合化工业场景,如机器人搬完箱子后,换个 “手” 就能在流水线上打螺丝。在3到10年内&…

Spring AI 1.0版本 + 千问大模型之 文本记忆对话

上篇文章,主要是简单讲解了一下文本对话的功能。由于模型不具备上下文记忆功能,只能一问一答。因此我们需要实现记忆对话功能,这样大模型回答信息才能够更加准确。 1、pom依赖 项目构建就不详细说了,大家可以参考上篇 文本对话 文…

测试学习之——Pytest Day2

一、Pytest配置框架Pytest的配置旨在改变其默认行为,以适应不同的测试需求和项目结构。理解其配置层级和常用参数,是高效使用Pytest的基础。1. 配置的意义与层级配置的本质在于提供一种机制,允许用户根据项目特点、团队规范或特定测试场景&am…

Go-Redis × RediSearch 全流程实践

1. 连接 Redis ctx : context.Background()rdb : redis.NewClient(&redis.Options{Addr: "localhost:6379",Password: "",DB: 0,Protocol: 2, // 推荐 RESP2// UnstableResp3: true, // 若要体验 RESP3 Raw* })2. 准备示例数据 u…

深入理解指针(指针篇2)

在指针篇1我们已经了解了整型指针,当然还有很多其他类型的指针,像字符指针、数组指针、函数指针等,他们都有他们的特别之处,让我们接着学习。1. 指针类型介绍和应用1.1 字符指针变量字符指针变量类型为char*,一般这样使…

Python+Selenium自动化爬取携程动态加载游记

1. 引言 在旅游行业数据分析、舆情监测或竞品研究中&#xff0c;获取携程等平台的游记数据具有重要价值。然而&#xff0c;携程的游记页面通常采用动态加载&#xff08;Ajax、JavaScript渲染&#xff09;&#xff0c;传统的**<font style"color:rgb(64, 64, 64);backg…

ESP8266服务器建立TCP连接失败AT+CIPSTART=“TCP“,“192.168.124.1“,8080 ERROR CLOSED

1.检查服务器端口8081是否开启监听2.检查路由项是否被防火墙拦截方法 1&#xff1a;使用 netsh查看防火墙规则​netsh advfirewall firewall show rule nameall dirout | findstr "8081"如果无输出&#xff0c;说明防火墙未针对该端口设置规则&#xff08;可能默认拦…

Linux 内存管理(2):了解内存回收机制

目录一、透明大页1.1 原理1.2 透明大页的三大优势1.3 透明大页控制接口详解1.4 使用场景与最佳实践1.5 问题排查与监控1.6 与传统大页的对比二、Linux伙伴系统水位机制详解2.1 三种核心水位详解2.2 水位在伙伴系统中的实现2.3 水位触发机制的实际行为2.4 水位关键操作接口2.5 水…

前端学习7:CSS过渡与动画--补间动画 (Transition) vs 关键帧动画 (Animation)

一、补间动画&#xff08;Tween Animation&#xff09;vs 关键帧动画&#xff08;Keyframe Animation&#xff09;概念对比表&#xff1a;补间动画 (Transition)关键帧动画 (Animation)定义元素从初始状态到结束状态的过渡效果通过定义多个关键帧控制动画的中间状态触发方式需要…

PyTorch 损失函数详解:从理论到实践

目录 一、损失函数的基本概念 二、常用损失函数及实现 1. 均方误差损失&#xff08;MSELoss&#xff09; 2. 平均绝对误差损失&#xff08;L1Loss/MAELoss&#xff09; 3. 交叉熵损失&#xff08;CrossEntropyLoss&#xff09; 4. 二元交叉熵损失&#xff08;BCELoss&…

MinIO深度解析:从核心特性到Spring Boot实战集成

在当今数据爆炸的时代&#xff0c;海量非结构化数据的存储与管理成为企业级应用的关键挑战。传统文件系统在TB级数据面前捉襟见肘&#xff0c;而昂贵的云存储服务又让中小企业望而却步。MinIO作为一款开源高性能对象存储解决方案&#xff0c;正以其独特的技术优势成为开发者的首…

腾讯云服务上下载docker以及使用Rabbitmq的流程

执行以下命令&#xff0c;添加 Docker 软件源并配置为腾讯云源。sudo yum-config-manager --add-repohttps://mirrors.cloud.tencent.com/docker-ce/linux/centos/docker-ce.repo sudo sed -i "s/download.docker.com/mirrors.tencentyun.com\/docker-ce/g" /etc/yu…

UE5 一些关于过场动画sequencer,轨道track的一些Python操作

删除多余的轨道 import unreal def execute():movie_scene_actors []sequence_assets []data 0.0# 获取编辑器实用工具库lib unreal.EditorUtilityLibrary()selected_assets lib.get_selected_assets()for asset in selected_assets:if asset.get_class() unreal.LevelS…

前端性能优化“核武器”:新一代图片格式(AVIF/WebP)与自动化优化流程实战

前端性能优化“核武器”&#xff1a;新一代图片格式(AVIF/WebP)与自动化优化流程实战 当你的页面加载时间超过3秒时&#xff0c;用户的跳出率会飙升到40%以上。而在所有的前端性能优化手段中&#xff0c;图片优化无疑是投入产出比最高的一环。一张未经优化的巨大图片&#xff0…