# `Sidereon.ErrorMetrics`
[🔗](https://github.com/neilberkman/sidereon-ex/blob/main/lib/sidereon/error_metrics.ex#L1)

Position error metrics derived from supplied covariance matrices.

Covariances are in square metres. ENU axes are east, north, up. ECEF
covariances are rotated at the supplied WGS84 geodetic reference before
metrics are computed.

# `covariance3`

```elixir
@type covariance3() :: [[number()]]
```

# `error_reason`

```elixir
@type error_reason() ::
  :non_finite
  | :not_positive_semidefinite
  | :invalid_probability
  | :rotation
  | term()
```

# `geodetic_radians_m`

```elixir
@type geodetic_radians_m() :: {number(), number(), number()}
```

# `error_ellipse_from_enu_covariance`

```elixir
@spec error_ellipse_from_enu_covariance(covariance3()) ::
  {:ok, Sidereon.ErrorMetrics.ErrorEllipse.t()} | {:error, error_reason()}
```

Compute the horizontal one-sigma error ellipse from an ENU covariance matrix.

# `from_ecef_covariance`

```elixir
@spec from_ecef_covariance(covariance3(), geodetic_radians_m()) ::
  {:ok, Sidereon.ErrorMetrics.PositionErrorMetrics.t()}
  | {:error, error_reason()}
```

Compute position error metrics from an ECEF covariance matrix in square metres.

The receiver is `{lat_rad, lon_rad, height_m}`.

# `from_enu_covariance`

```elixir
@spec from_enu_covariance(covariance3()) ::
  {:ok, Sidereon.ErrorMetrics.PositionErrorMetrics.t()}
  | {:error, error_reason()}
```

Compute position error metrics from an ENU covariance matrix in square metres.

# `from_kinematic_solution`

```elixir
@spec from_kinematic_solution(map()) ::
  {:ok, Sidereon.ErrorMetrics.PositionErrorMetrics.t()}
  | {:error, error_reason()}
```

Compute position error metrics from a kinematic solution-like map or struct.

The value must provide `:position_m` and `:position_covariance_m2`.

# `from_position_covariance`

```elixir
@spec from_position_covariance(Sidereon.ErrorMetrics.PositionCovariance.t() | map()) ::
  {:ok, Sidereon.ErrorMetrics.PositionErrorMetrics.t()}
  | {:error, error_reason()}
```

Compute position error metrics from a position covariance value.

# `horizontal_radius_at`

```elixir
@spec horizontal_radius_at(covariance3(), number()) ::
  {:ok, Sidereon.ErrorMetrics.PercentileRadius.t()} | {:error, error_reason()}
```

Compute a horizontal percentile circle radius from an ENU covariance matrix.

# `spherical_radius_at`

```elixir
@spec spherical_radius_at(covariance3(), number()) ::
  {:ok, Sidereon.ErrorMetrics.PercentileRadius.t()} | {:error, error_reason()}
```

Compute a three-dimensional percentile sphere radius from an ENU covariance matrix.

# `vertical_radius_at`

```elixir
@spec vertical_radius_at(number(), number()) ::
  {:ok, float()} | {:error, error_reason()}
```

Compute a vertical percentile radius from an up variance in square metres.

---

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