# `Sidereon.GNSS.SBAS`
[🔗](https://github.com/neilberkman/sidereon-ex/blob/main/lib/sidereon/gnss/sbas.ex#L1)

Satellite-based augmentation corrections.

The correction store, SBAS message decoding, corrected broadcast ephemeris
source, and corrected SPP solve all delegate to the core SBAS implementation.

# `epoch`

```elixir
@type epoch() :: NaiveDateTime.t() | tuple() | number()
```

# `error`

```elixir
@type error() :: :not_found | :invalid_input | String.t()
```

# `t`

```elixir
@type t() :: %Sidereon.GNSS.SBAS{handle: reference()}
```

# `corrected_position`

Evaluate an SBAS-corrected broadcast satellite state.

# `corrected_position!`

# `decode`

```elixir
@spec decode(binary(), atom() | String.t()) ::
  {:ok, Sidereon.GNSS.SBAS.Message.t()} | {:error, error()}
```

Decode one 250-bit framed or 226-bit body SBAS message.

# `decode!`

```elixir
@spec decode!(binary(), atom() | String.t()) :: Sidereon.GNSS.SBAS.Message.t()
```

Decode one 250-bit framed or 226-bit body SBAS message or raise.

# `fast`

# `fast!`

# `geo_nav`

# `geo_nav!`

# `iono_grid`

# `iono_grid!`

# `long_term`

# `long_term!`

# `new`

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

Create an empty correction store.

# `parse_ems`

```elixir
@spec parse_ems(String.t()) :: {:ok, [Sidereon.GNSS.SBAS.LogBlock.t()]}
```

Parse ESA EMS-style SBAS log lines.

# `parse_ems!`

```elixir
@spec parse_ems!(String.t()) :: [Sidereon.GNSS.SBAS.LogBlock.t()]
```

Parse ESA EMS-style SBAS log lines or raise.

# `parse_rtklib`

```elixir
@spec parse_rtklib(String.t()) :: {:ok, [Sidereon.GNSS.SBAS.LogBlock.t()]}
```

Parse RTKLIB SBAS log lines.

# `parse_rtklib!`

```elixir
@spec parse_rtklib!(String.t()) :: [Sidereon.GNSS.SBAS.LogBlock.t()]
```

Parse RTKLIB SBAS log lines or raise.

# `ready_geos`

Return ready SBAS GEO ids for an epoch.

# `ready_geos!`

# `sample`

Sample an SBAS-corrected broadcast source over a grid.

# `sample!`

# `sbas_protection_levels`

```elixir
@spec sbas_protection_levels(
  Sidereon.GNSS.SBAS.ProtectionGeometry.t(),
  Sidereon.GNSS.SBAS.SbasErrorModel.t(),
  Sidereon.GNSS.SBAS.SbasKMultipliers.t()
) ::
  {:ok, Sidereon.GNSS.SBAS.SbasProtection.t()}
  | {:error, Sidereon.GNSS.SBAS.SbasPlError.t()}
```

Compute SBAS horizontal and vertical protection levels.

The error model supplies one range-error budget per geometry row. Returned
values are meters except `:d_en_m2`, which is square meters.

# `solve_broadcast`

Run SPP against an SBAS-corrected broadcast source.

# `solve_broadcast!`

# `store_from_ems`

Build a correction store from EMS log text.

# `store_from_ems!`

# `store_from_messages`

Build a correction store from decoded message tuples.

# `store_from_messages!`

# `store_from_rtklib`

Build a correction store from RTKLIB SBAS log text.

# `store_from_rtklib!`

---

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