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）信息，适合于传输产品。What is GRIB? .

网格数据包装
在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节，可在多个模板中选用其一，这里模板的含义是：“对一组数据实体的标准化格局的描述”Introduction to GRIB Edition1 and GRIB Edition 2 .。在GRIB2中，第2节到第7节、第3节到第7节或第4节到第7节，可以重复出现，从而允许在一个报文中出现多个网格数据。

软件
现有使用GRIB文件的一些应用软件包，其范围从命令行实用程序到图形可视化包。
 ecCodes，是ECMWF开发的开源的C、Fortran90库和Python模块，可调用解码和编码GRIB和GRIB2数据的API，软件包还包括一组有用的命令行工具。它演化自GRIB API，向用户提供了以键/值方式访问元数据的一组函数。ECMWF还提供绘图包MagicsMagics和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 
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 

Category:氣象數據和網絡
Category:地球科学数据格式