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