# `Sidereon.Terrain.MmapTerrain.OrthometricHeightM`
[🔗](https://github.com/neilberkman/sidereon-ex/blob/main/lib/sidereon/terrain/mmap_terrain.ex#L67)

Orthometric terrain height `H` in metres above the EGM96 mean sea level geoid.

# `t`

```elixir
@type t() :: %Sidereon.Terrain.MmapTerrain.OrthometricHeightM{value_m: float()}
```

Orthometric height `H` in metres.

# `metres`

```elixir
@spec metres(t()) :: float()
```

Return the orthometric height `H` in metres.

# `new`

```elixir
@spec new(number()) :: t()
```

Build an orthometric height `H` in metres.

# `to_ellipsoidal_height_deg`

```elixir
@spec to_ellipsoidal_height_deg(
  t(),
  number(),
  number(),
  Sidereon.Terrain.MmapTerrain.TerrainGeoidModel.t() | :egm96_one_degree
) ::
  {:ok, Sidereon.Terrain.MmapTerrain.EllipsoidalHeightM.t()}
  | {:error, Sidereon.Terrain.MmapTerrain.TerrainDatumError.t() | term()}
```

Convert this orthometric height to WGS84 ellipsoidal height with degree coordinates.

Coordinates are geoid order `(latitude_deg, longitude_deg)`. The default
geoid model is the embedded EGM96 1-degree grid. To use the EGM96
15-minute grid, pass `TerrainGeoidModel.egm96_fifteen_minute/1` with a
loaded `Egm96FifteenMinuteGeoid`.

# `to_ellipsoidal_height_rad`

```elixir
@spec to_ellipsoidal_height_rad(
  t(),
  number(),
  number(),
  Sidereon.Terrain.MmapTerrain.TerrainGeoidModel.t() | :egm96_one_degree
) ::
  {:ok, Sidereon.Terrain.MmapTerrain.EllipsoidalHeightM.t()}
  | {:error, Sidereon.Terrain.MmapTerrain.TerrainDatumError.t() | term()}
```

Convert this orthometric height to WGS84 ellipsoidal height with radian coordinates.

Coordinates are geoid order `(latitude_rad, longitude_rad)`. The default
geoid model is the embedded EGM96 1-degree grid.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
