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

WGS84 geodesic direct and inverse solves.

Angles are degrees and distances are metres at this boundary. The underlying
solver is Karney's WGS84 geodesic implementation from `sidereon-core`.

# `direct_result`

```elixir
@type direct_result() :: %{lat2_deg: float(), lon2_deg: float(), azi2_deg: float()}
```

Direct geodesic result.

# `inverse_result`

```elixir
@type inverse_result() :: %{s12_m: float(), azi1_deg: float(), azi2_deg: float()}
```

Inverse geodesic result.

# `direct`

```elixir
@spec direct(number(), number(), number(), number()) ::
  {:ok, direct_result()} | {:error, Sidereon.Geodesic.GeodesicError.t()}
```

Solve the WGS84 direct geodesic problem.

Inputs are point 1 latitude, longitude, forward azimuth, and geodesic distance.
Returns point 2 latitude, longitude, and forward azimuth.

# `inverse`

```elixir
@spec inverse(number(), number(), number(), number()) ::
  {:ok, inverse_result()} | {:error, Sidereon.Geodesic.GeodesicError.t()}
```

Solve the WGS84 inverse geodesic problem.

Inputs are point 1 latitude and longitude followed by point 2 latitude and
longitude, all in degrees. Returns geodesic distance and forward azimuths.

---

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