# Proj.Geodesic (proj v0.2.3)

Provides functions to solve problems involving geodesic lines.

Common problems this can solve:

Finding the distance between two locations

Finding the bearings between two locations

Finding the resulting location after moving

`x`

metres forwards facing a certain bearing from a given locationPlotting a set of points in a line between two locations

# Link to this section Summary

## Functions

Calculates the resultant coordinates and bearing after travelling a given distance forwards along a geodesic line through a given starting point and azimuth (bearing).

Calculates the distance in metres between two points.

Creates a new `Proj.Geodesic`

specification for the planet's ellipsoid
parameters, where `a`

represents the equatorial radius in metres, and `f`

represents the flattening.

Calculates the length of the geodesic line between two points and the bearing of the line at each point.

Gets the equatorial radius in metres and flattening of a given `Proj.Geodesic`

ellipsoid specification.

Calculates the resulting position after travelling `distance`

metres forwards
from `coords`

facing a bearing of `azimuth`

.

Returns a `Proj.Geodesic`

specification for the Earth's ellipsoid parameters
as specified by WGS84.

# Link to this section Functions

# direct(geod, coords, azimuth, distance)

Calculates the resultant coordinates and bearing after travelling a given distance forwards along a geodesic line through a given starting point and azimuth (bearing).

Return value is in the format `{{lat, lng}, bearing}`

.

All coordinates and bearings are given in degrees. `distance`

is in metres.

```
iex> wgs84 = Proj.Geodesic.wgs84
iex> Proj.Geodesic.direct(wgs84, {51.501476, -0.140634}, 60, 100)
{{51.50192539979596, -0.1393868003258145}, 60.00097609168357}
```

# distance(coords_a, coords_b)

Calculates the distance in metres between two points.

This is a convenience wrapper around `Proj.Geodesic.inverse/3`

which uses the
WGS84 ellipsoid and only returns the resulting distance.

All coordinates are given in degrees.

```
iex> Proj.Geodesic.distance({51.501476, -0.140634}, {48.8584, 2.2945})
341549.6819692767
```

# init(a, f)

Creates a new `Proj.Geodesic`

specification for the planet's ellipsoid
parameters, where `a`

represents the equatorial radius in metres, and `f`

represents the flattening.

```
iex> Proj.Geodesic.init(6378137, 1 / 298.257223563)
#Proj.Geodesic<6378137.0, 0.0033528106647474805>
```

# inverse(geod, coords_a, coords_b)

Calculates the length of the geodesic line between two points and the bearing of the line at each point.

Return value is in the format `{distance, bearing_a, bearing_b}`

.

All coordinates and bearings are given in degrees. `distance`

is in metres.

```
iex> wgs84 = Proj.Geodesic.wgs84
iex> Proj.Geodesic.inverse(wgs84, {51.501476, -0.140634}, {48.8584, 2.2945})
{341549.6819692767, 148.44884919324866, 150.31979086555856}
```

# load()

# params(geod)

Gets the equatorial radius in metres and flattening of a given `Proj.Geodesic`

ellipsoid specification.

Return value is in the format `{equatorial_radius, flattening}`

```
iex> wgs84 = Proj.Geodesic.wgs84
iex> Proj.Geodesic.params(wgs84)
{6378137.0, 0.0033528106647474805}
```

# travel(coords, azimuth, distance)

Calculates the resulting position after travelling `distance`

metres forwards
from `coords`

facing a bearing of `azimuth`

.

This is a convenience wrapper around `Proj.Geodesic.direct/4`

which uses the
WGS84 ellipsoid and only returns the resulting coordinates.

Return value is in the format `{lat, lng}`

.

All coordinates and bearings are given in degrees.

```
iex> Proj.Geodesic.travel({51.501476, -0.140634}, 60, 100)
{51.50192539979596, -0.1393868003258145}
```

# wgs84()

Returns a `Proj.Geodesic`

specification for the Earth's ellipsoid parameters
as specified by WGS84.