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 的第 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 （頁面存檔備份，存於網際網路檔案館）
* 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 （頁面存檔備份，存於網際網路檔案館）