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）信息，适合于传输Ensemble forecasting产品。

**网格数据包装**
在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的第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。

**参见**
 通用数据格式 (CDF)- 层级数据格式 (HDF)- NetCDF- BUFR（气象数据表示的二进制普遍形式）- PP-format- GrADS

**引用**

**标准文献**
 Guide to WMO Binary Code Form GRIB 1 date=20201013231547 - Guide to FM92 GRIB edition 2 date=20201213173506 - NCEP Office Note 388 GRIB1 date=20201016170312 - NCEP WMO GRIB2 Documentation date=20201104001649 - ECMWF ecCodes keys date=20190617040100 - GRIB Parameter database date=20210101010340 

**外部链接**
 WMO manual on Codes No 306 date=20201016160206 - Tables extracted from the Manual on Codes, Volume I.2 date=20190824211858 - ecCodes and Magics available under Windows date=20200810062315 - WMO Essential date=20201024112741 - ECMWF Public Datasets date=20201216032507 - NCEP Products Inventory date=20201123164854