# GRIB

GRIB (GRIdded Binary or General Regularly-distributed Information in Binary form) is a concise data format commonly used in meteorology to store historical and forecast weather data. It is standardized by the World Meteorological Organization's Commission for Basic Systems, known under number GRIB FM 92-IX, described in WMO Manual on Codes No.306. Currently there are three versions of GRIB. Version 0 was used to a limited extent by projects such as TOGA, and is no longer in operational use. The first edition (current sub-version is 2) is used operationally worldwide by most meteorological centers, for Numerical Weather Prediction output (NWP). A newer generation has been introduced, known as GRIB second edition, and data is slowly changing over to this format. Some of the second-generation GRIB is used for derived products distributed in the Eumetcast of Meteosat Second Generation. Another example is the NAM (North American Mesoscale) model.

## Format

GRIB files are a collection of self-contained records of 2D data, and the individual records stand alone as meaningful data, with no references to other records or to an overall schema. So collections of GRIB records can be appended to each other or the records separated.
Each GRIB record has two components - the part that describes the record (the header), and the actual binary data itself. The data in GRIB-1 are typically converted to integers using scale and offset, and then bit-packed. GRIB-2 also has the possibility of compression.

### GRIB History

GRIB superseded the Aeronautical Data Format (ADF).
The World Meteorological Organization (WMO) Commission for Basic Systems (CBS) met in 1985 to create the GRIB (GRIdded Binary) format. The Working Group on Data Management (WGDM) in February 1994, after major changes, approved revision 1 of the GRIB format. GRIB Edition 2 format was approved in 2003 at Geneva.

### Problems with GRIB

Source:
There is no way in GRIB to describe a collection of GRIB records
* Each record is independent, with no way to reference the GRIB writer's intended schema
* No foolproof way to combine records into the multidimensional arrays from which they were derived.
* The use of external tables to describe the meaning of the data.
* No authoritative place for centers to publish their local tables.
* Inconsistent and incorrect methods of versioning local tables.
* No machine-readable versions of the WMO tables (now available for GRIB-2, but not GRIB-1)

### GRIB 1 Header

There are 2 parts of the GRIB 1 header - one mandatory (Product Definition Section - PDS) and one optional (Grid Description Section - GDS). The PDS describes who created the data (the research / operation center), the involved numerical model / process (can be NWP or GCM), the data that is actually stored (such as wind, temperature, ozone concentration etc.), units of the data (meters, pressure etc.), vertical system of the data (constant height, constant pressure, constant potential temperature), and the time stamp.
If a description of the spatial organization of the data is needed, the GDS must be included as well. This information includes spectral (harmonics of divergence and vorticity) vs gridded data (Gaussian, X-Y grid), horizontal resolution, and the location of the origin.

## Software
### Applications

A number of application software packages have been written which make use of GRIB files. These range from command line utilities to graphical visualisation packages.
* ATMOGRAPH ModelVis Commercial numerical weather model data visualization software capable of decoding and displaying both GRIB 1 and GRIB 2 data formats
* ArcGIS is the market leading GIS software
* Expedition – Expedition is the Sailing navigation and weather application. Grib display and download from many sources is free.
* cfGrib is a State-Of-the-Art grib parsing tool for python based on ecCodes from ECMWF.
* Panoply is a cross-platform application that plots geo-referenced and other arrays from netCDF, HDF, GRIB, and other datasets.
* WGRIB Command line based program to manipulate, inventory and decode GRIB1 files
* GrADS, free command line based desktop application that directly handles GRIB1 and GRIB2 files
* Picogrib GRIB 1 C-language (FORTRAN callable) free decoding package compatible to some extent with ECMWF GRIBEX routine
* NCEP codes free software (C and FORTRAN library) for decoding and encoding data in GRIB 1 format
* NCEP codes free software (C and FORTRAN library) for decoding and encoding data in GRIB 2 format (some template only)
* JGrib - Jgrib is a free library for reading GRIB files in Java.
* Meteosatlib - Meteosatlib is a free software C++ library and set of tools to convert satellite images between various formats; it can read and write GRIB data, and its GRIB encoding/decoding library can be used standalone.
* Mathematica, a general mathematical, statistical, and presentation application directly handles GRIB files and can map them with many projections
* The NCAR Command Language can be used to read, analyze and visualize GRIB data, as well convert it to other gridded data formats.
* PyNIO is a Python programming language module that allows read and/or write access to a variety of data formats using an interface modelled on netCDF.
* degrib (AKA NDFD GRIB2 Decoder) is a reader for GRIB 1 and GRIB 2 files.
* wgrib2 is a reader for GRIB 2 files.
* GRIB API Archived 2017-10-04 at the Wayback Machine is an API developed at ECMWF to decode and encode GRIB edition 1 and 2 data. Note: this package has now been replaced by ecCodes which is a superset of GRIB API. A useful set of command line tools Archived 2017-08-27 at the Wayback Machine is also included. ECMWF also offers the plotting package Magics Archived 2019-10-16 at the Wayback Machine and the Metview workstation/batch system to handle/visualise GRIB files.
* QGIS - QGIS is a graphical open source software that can visualise GRIB files.
* Ugrib – Ugrib is a no cost graphical GRIB viewer designed for reading GRIB 1 files. The website GRIB.US also aims to provide education on the prudent and safe use of GRIB data for forecasting weather. This link is not working as of 20 May 2017.
* SmartMet - SmartMet is a Windows tool that reads, writes and visualises GRIB data.
* Xconv/Convsh Archived 2006-10-09 at the Wayback Machine – Xconv is a graphical tool for displaying and converting gridded data, and is available for most operating systems. Convsh is the command-line equivalent.
* The NetCDF-Java Common Data Model is a Java library that can read GRIB 1 and GRIB 2 files.
* zyGrib a graphical software for Linux, Mac OS X and Windows (GPL3, Qt) to download and display GRIB 1 and GRIB 2 (since v8.0) files.
* XyGrib started as a fork of zyGirb 8.0.1. It is a multiplatform software also.
* GDAL, a popular open source reading and writing library for geospatial data
* PredictWind Offshore App A multi platform app designed for boats heading offshore with a need to download forecast GRIB data on a Satellite or SSB connection .
* LuckGrib an app available on macOS, iOS and iPadOS, designed for sailors and other weather enthusiasts. LuckGrib provides easy access to many GRIB weather models. In addition, several ocean current and wave models are provided. Data can be downloaded via the internet, satellite or email.
* PyGrib A python language extension module which allows one to read and write GRIB 1 and GRIB 2 formats.
* PolarView A navigation application that includes a GRIB viewer, supporting both GRIB 1 and GRIB 2. PolarView includes a GRIB download service for GFS (wind/atmospheric pressure), NWW3 (wave height/direction) and RTOFS (Atlantic currents) data from NOAA. Available for Linux, Mac and Windows.
* OpenCPN Open Source Chart Plotter / Marine Navigator. For day to day cruising or advance route planning. (NOTE: GRIB support is available since version 1.3.5 beta)
* CDO (Climate Data Operators) is an analysis tool for geoscientific data with GRIB support
* IDV is a meteorologically oriented, platform-independent application for visualization and analysis of GRIB1, GRIB2 and NetCDF files.
* SoftwareOnBoard A marine navigation application for Windows that includes GRIB overlays on the chart.
* GribAE A freeware Windows interface for WGRIB.
* qtVlm a free software for linux, windows, mac, android, raspberryPi and iOS, with an interface with GPS and routing functions (+ an interface with virtual sailing game VLM)
* PyNDFD an open source Python module for retrieving real-time forecast data from the US National Weather Service. GRIB formatted data is cached and parsed to give the developer access to dozens of up-to-date weather forecast variables. Data is available for the next 7 days for any coordinate within the United States.
* Weather4D This application processes GRIB files (about 35 weather/wave/current models available) to create weather forecasts which can be animated in 3D HD. The "Routing" version provides also weather routing capabilities based on selected models and polar data, location management. The "Routing & Navigation" version adds navigation features such as NMEA interface, AIS, nautical charts, instrument panels, track recording.
* glgrib This application displays GRIB2 fields with OpenGL. Raster, contour, vector, colorbar, mapscale, coastlines, borders. Lat/lon, lambert, gaussian grid. It is possible to look at fields interactively (move, zoom, etc.). High resolution fields (2.5 km and 1.25 km global) have been displayed using glgrib.

### Mobile Apps
#### iOS

Several iOS Apps support the GRIB format, including:
* iGrib (currently defunct)
* PocketGrib
* WeatherTrack
* Weather4D
* PredictWind Offshore App
* LuckGrib
* qtVlm
* mazu

#### Android

Several Android Apps support the GRIB format, including:
* PocketGrib
* qtVlm
* SailGrib
* Weather4D
* PredictWind Offshore App