Rolyrine (rolyrine v0.1.3)

Copy Markdown

Fast polyline encoding/decoding using Rust NIFs.

Implements Google's Polyline Algorithm Format with flexible coordinate formats.

Supported Coordinate Formats

FormatExample
{lon, lat} tuples[{-120.2, 38.5}, ...]
%{longitude:, latitude:}[%{longitude: -120.2, latitude: 38.5}, ...]
%{lon:, lat:}[%{lon: -120.2, lat: 38.5}, ...]
%{lng:, lat:}[%{lng: -120.2, lat: 38.5}, ...]
%{x:, y:}[%{x: -120.2, y: 38.5}, ...]

Examples

iex> Rolyrine.encode([{-120.2, 38.5}, {-120.95, 40.7}])
"_p~iF~ps|U_ulLnnqC"

iex> Rolyrine.decode("_p~iF~ps|U_ulLnnqC")
[{-120.2, 38.5}, {-120.95, 40.7}]

iex> Rolyrine.decode("_p~iF~ps|U_ulLnnqC", format: :longitude_latitude)
[%{longitude: -120.2, latitude: 38.5}, %{longitude: -120.95, latitude: 40.7}]

Summary

Functions

Decode a polyline string into a list of coordinates.

Encode a list of coordinates into a polyline string.

Functions

decode(polyline, opts \\ [])

Decode a polyline string into a list of coordinates.

Options

  • :precision - decimal precision (default: 5)
  • :format - output format (default: :tuple)
    • :tuple - [{lon, lat}, ...]
    • :tuple_reversed - [{lat, lon}, ...]
    • :longitude_latitude - [%{longitude: lon, latitude: lat}, ...]
    • :lon_lat - [%{lon: lon, lat: lat}, ...]
    • :lng_lat - [%{lng: lon, lat: lat}, ...]
    • :xy - [%{x: lon, y: lat}, ...]

Examples

iex> Rolyrine.decode("_p~iF~ps|U_ulLnnqC")
[{-120.2, 38.5}, {-120.95, 40.7}]

iex> Rolyrine.decode("_p~iF~ps|U_ulLnnqC", format: :lon_lat)
[%{lon: -120.2, lat: 38.5}, %{lon: -120.95, lat: 40.7}]

iex> Rolyrine.decode("_izlhA~rlgdF_{geC~ywl@", precision: 6)
[{-120.2, 38.5}, {-120.95, 40.7}]

encode(coords, opts \\ [])

Encode a list of coordinates into a polyline string.

Accepts multiple coordinate formats - auto-detected from first element.

Options

  • :precision - decimal precision (default: 5)

Examples

iex> Rolyrine.encode([{-120.2, 38.5}, {-120.95, 40.7}])
"_p~iF~ps|U_ulLnnqC"

iex> Rolyrine.encode([%{longitude: -120.2, latitude: 38.5}, %{longitude: -120.95, latitude: 40.7}])
"_p~iF~ps|U_ulLnnqC"

iex> Rolyrine.encode([{-120.2, 38.5}, {-120.95, 40.7}], precision: 6)
"_izlhA~rlgdF_{geC~ywl@"