# Earth Gravitational Model (EGM2008) The coordinate system used by GPS is [WGS 84](https://en.wikipedia.org/wiki/World_Geodetic_System#WGS_84), which expresses altitudes as a "height above ellipsoid". Because this ellipsoid is a mathematical simplification, the height given by GPS does not necessarily reflect the height above the actual ground beneath. The [Earth Gravitational Models](https://en.wikipedia.org/wiki/Earth_Gravitational_Model) published by the National Geospatial Intelligence Agency are a way to approximate how high an altitude given in WGS 84 coordinates truly is above the ground. This library includes data derived from [EGM 2008](https://earth-info.nga.mil/index.php?dir=wgs84&action=wgs84) along with an interpolation function. Together, these allow for an approximate offset to be obtained for arbitrary points on the globe. The `geoid.rs` file containing terrain data is [generated using the Fortran program](./tools/README.md) provided by NGA. ## Updating `geoid.rs` The `src/geoid.rs` file is generated by a Python script (`generate.py`) that runs NGA's Fortran interpolation program. In order to run the script, you'll need to download the EGM model data from the NGA's website. You will also need to install `gfortran`. There are a few ways to do this: - On macOS, through [Homebrew](https://brew.sh) with `brew install gfortran`. - Use the included [Nix](https://nix.dev) dev shell with `nix develop`. For convenience, you can run `generate_geoid.sh` which will download and verify the model data from NGA, compile the interpolation program, and update `src/geoid.rs`.