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