GRIB

GRIB（GRIdded Binary或通用定期发布的二进制形式信息）是通常用在气象学中存储历史的和预报的天气数据的简明数据格式。它由世界气象组织的基本系统委员会于1985年标准化，描述于WMO编码手册（出版物No.306），最初编号为FM 92-VIII Ext. GRIB。第一版GRIB被世界范围内的多数气象中心业务化使用，用于数值天气预报（NWP）输出。第二版是2003年发表的GRIB2，最新编号为FM 92–XIV GRIB，气象数据发布逐渐的变更到这个格式。

## 概述

GRIB是国际公用的二进制格式，用来有效的存储气象/海洋的物理量场和描述它们的元数据。GRIB数据文件典型的由记录的搜集组成，即多个GRIB记录可以串联在一起形成一个单一数据集。GRIB记录是自描述数据对象，每个记录都不只包含数据，而且包含描述空间网格、有效时间、垂直层次的元数据，故而把它们合并成数据文件的次序是任意的。每个GRIB记录典型的包含特定时间和垂直层次的一个2-D经纬度坐标的数据网格，4-D GRIB数据集一般展开为时间或垂直层次不同的一组2-D记录。GRIB2相比于GRIB，有着更加复杂的头部字段集合用于元数据，还提供了可以更加显著缩小文件大小的数据压缩；GRIB2记录还可以包含集合（ensemble）信息，适合于传输集合预报产品。

## 网格数据包装

在WMO的GRIB2指南文档中举实例说明GRIB2报文（message）格式，选用了假想的500 hPa的位势高度5 X 5网格，这25个高度值的范围是从极小值5340位势米（gpm）到极大值5460 gpm。演示了采用简单包装方案的编码过程：

- 第一步，数值的单位位势米（gpm）已经是SI单位，不需要转换，否则需要转换。
- 第二步，采用计算“字”位长度的方法，要求精度值D为1，即精确到小数点后1位，把所有值都缩放10D并取整为整数，结果范围从53400到54600。
- 第三步，取参照值R为53400，所有网格值都减去这个参照值，余值范围是从0至1200。
- 第四步，确定要表示极大余值1200需要的二进制位数，这里是11位。
- 第五步，所有的余值都包装入11位长的“字”中，25个值总共需要275位长，等价于34字节加上3位，再用0填充5位最终形成35字节。

解码过程通过参照值R和精度值D把包装后的值恢复为最初的值。这种从浮点数转换成定点数的包装方法可以初步缩减数据大小，也可称为是一种数据压缩；GRIB2支持在此基础上的PNG和JPEG2000压缩。

## 文件格式

一个GRIB文件中可以有多个GRIB报文，每个报文开始于文字“GRIB”结束于文字“7777”，二者之间都是二进制的元数据和数据。GRIB报文结构与大多数气象报文比如GRID（FM 47）一样，划分为多个节（section）：

GRIB1｜GRIB2

SECTION 0 指示符节｜SECTION 0 指示符节

SECTION 1 产品定义节｜SECTION 1 标识节

SECTION 2 局部使用节（可选）

SECTION 2 网格描述节（可选）｜SECTION 3 网格定义节

SECTION 4 产品定义节SECTION 5 数据表示节

SECTION 3 位图节（可选）｜SECTION 6 位图节

SECTION 4 二进制数据节｜SECTION 7 数据节

SECTION 5 结束节｜SECTION 8 结束节

GRIB1的第2节，GRIB2的第1、3、4、5、7节，可在多个模板中选用其一，这里模板的含义是：“对一组数据实体的标准化格局的描述”。在GRIB2中，第2节到第7节、第3节到第7节或第4节到第7节，可以重复出现，从而允许在一个报文中出现多个网格数据。

## 软件

现有使用GRIB文件的一些应用软件包，其范围从命令行实用程序到图形可视化包。

- ecCodes，是ECMWF开发的开源的C、Fortran90库和Python模块，可调用解码和编码GRIB和GRIB2数据的API，软件包还包括一组有用的命令行工具。它演化自GRIB API，向用户提供了以键/值方式访问元数据的一组函数。ECMWF还提供绘图包Magics和Metview工作站/批处理系统，可处理和可视化GRIB和GRIB2文件。
- NCEP GRIB1 codes，开源的Fortran90库w3lib，用于解码和编码GRIB格式的数据。
- NCEP GRIB2 codes，开源的Fortran90库g2lib和C库g2clib，用于解码和编码GRIB2格式的数据。
- WGRIB，基于命令行的实用工具，用来操纵、列清单和解码GRIB文件。
- wgrib2，基于命令行的实用工具，不只是升级wgrib可读取GRIB2文件，还可将其分片或分块。
- 网格分析和显示系统（GrADS），开源的基于命令行的桌面应用，直接处理GRIB和GRIB2文件。
- NCAR命令语言，可以读取、分析和可视化GRIB和GRIB2数据，并转换它成为其他网格数据格式。
- CDO（气候数据算子），是地球科学数据分析工具，支持GRIB和GRIB2。
- Picogrib，自由的C语言（FORTRAN可调用）GRIB解码包，一定程度上兼容于ECMWF GRIBEX例程。
- JGrib，开源库用来在Java中读取GRIB文件。
- NetCDF-Java通用数据模型，是可以读取GRIB和GRIB2文件的Java库。
- PyNIO，是Python编程语言模块，允许读写访问各种数据格式，使用了建模在netCDF上的接口。
- PyGrib，python语言扩展模块，允许读写GRIB和GRIB2格式。
- Meteosatlib，自由软件C++库和一组工具，在各种格式间转换卫星图像；它可以读写GRIB数据，并且它的GRIB编码/解码器可以单独使用。
- 地理数据抽象库（GDAL），流行的开源地理数据读写库。
- Xconv/Convsh，Xconv是一个图形工具，用来显示和转换各种网格数据，并可在Linux和OS X操作系统上获得。Convsh是它的命令行等价者。
- IDV，面向地球科学的平台无关的应用程序，可用来可视化和分析NetCDF、GRIB和GRIB2文件。
- degrib（曾叫做NDFD GRIB2解码器），可读取GRIB和GRIB2文件。
- zyGrib，是在Linux、Mac OS X和Windows上开源的图形软件，用来下载和显示GRIB和GRIB2文件。
- XyGrib，是对zyGrib继续开发的开源软件，是GRIB和GRIB2文件阅读器并可视化气象数据提供离线分析能力。
- glgrib，这个应用使用OpenGL来显示GRIB2场。具有光栅、等值线、向量、色条、比例尺、海岸线、边界线、经纬度、兰伯托投影、高斯网格。可以交互的（移动、缩放等）查看场。已经使用它来显示高解析率的场（2.5km和1.25km全球）。

此外，一些天气预报软件和导航软件及手机app支持GRIB或GRIB2，如ATMOGRAPH ModelVis、Expedition、PolarView、OpenCPN、GribAE、qtVlm和Weather4D；PredictWind Offshore App、PocketGrib、WeatherTrack、mazu、SailGrib、iGrib。

## 标准文献

- Guide to WMO Binary Code Form GRIB 1
- Guide to FM92 GRIB edition 2
- NCEP Office Note 388 GRIB1
- NCEP WMO GRIB2 Documentation
- ECMWF ecCodes keys
- GRIB Parameter database

## 外部链接

- WMO manual on Codes No 306
- Tables extracted from the Manual on Codes, Volume I.2
- ecCodes and Magics available under Windows
- WMO Essential
- ECMWF Public Datasets
- NCEP Products Inventory

## 基本资料

- 日语原文：General Regularly-distributed Information in Binary form
- 所有者：世界气象组织
- 最新版本：master table version number 29
- 最新版本：2022年5月15日
- 类型：科学数据格式
- 免费在线档案：Yes
- 网站： Manual on Codes - International Codes, Volume I.2