Polyline (polyline v1.4.0)

Encode and decode Polylines to and from List of {lon, lat} tuples.

The encode functions accept a precision parameter that defines the number of significant digits to retain when encoding. The same precision must be supplied to the decode or the resulting linestring will be incorrect. The default is 5, which correlates to approximately 1 meter of precision.

examples

Examples

iex> Polyline.encode([{-120.2, 38.5}, {-120.95, 40.7}, {-126.453, 43.252}])
"_p~iF~ps|U_ulLnnqC_mqNvxq`@"

iex> Polyline.decode("_p~iF~ps|U_ulLnnqC_mqNvxq`@")
[{-120.2, 38.5}, {-120.95, 40.7}, {-126.453, 43.252}]

Link to this section Summary

Functions

Decode a polyline String into a List of {lon, lat} tuples.

Encode a List of coordinate tuples into a Polyline String. Also works with Geo.LineString structs (see https://hex.pm/packages/geo).

Link to this section Functions

Link to this function

decode(str, precision \\ 5)

Decode a polyline String into a List of {lon, lat} tuples.

examples

Examples

iex> Polyline.decode("_p~iF~ps|U_ulLnnqC_mqNvxq`@")
[{-120.2, 38.5}, {-120.95, 40.7}, {-126.453, 43.252}]

iex> Polyline.decode("_izlhA~rlgdF_{geC~ywl@_kwzCn`{nI", 6)
[{-120.2, 38.5}, {-120.95, 40.7}, {-126.453, 43.252}]
Link to this function

encode(coordinates, precision \\ 5)

Encode a List of coordinate tuples into a Polyline String. Also works with Geo.LineString structs (see https://hex.pm/packages/geo).

examples

Examples

iex> Polyline.encode([{-120.2, 38.5}, {-120.95, 40.7}, {-126.453, 43.252}])
"_p~iF~ps|U_ulLnnqC_mqNvxq`@"

iex> Polyline.encode([{-120.2, 38.5}, {-120.95, 40.7}, {-126.453, 43.252}], 6)
"_izlhA~rlgdF_{geC~ywl@_kwzCn`{nI"

iex> "LINESTRING(-120.2 38.5, -120.95 40.7, -126.453 43.252)"
...> |> Geo.WKT.decode!
...> |> Map.get(:coordinates)
...> |> Polyline.encode
"_p~iF~ps|U_ulLnnqC_mqNvxq`@"