The flexpolyline R package provides a binding to the C++ implementation of the flexible polyline encoding by HERE. The flexible polyline encoding is a lossy compressed representation of a list of coordinate pairs or coordinate triples. The encoding is achieved by: (1) Reducing the decimal digits of each value; (2) encoding only the offset from the previous point; (3) using variable length for each coordinate delta; and (4) using 64 URL-safe characters to display the result. The flexible polyline encoding is a variant of the Encoded Polyline Algorithm Format by Google.

Note:

  • The order of the coordinates (lng, lat) does not correspond to the original C++ implementation (lat, lng). This enables direct conversion to sf objects, without reordering the columns.
  • The encoding is lossy, this means the encoding process could reduce the precision of your data.

Installation

Install the released version of flexpolyline from CRAN:

install.packages("flexpolyline")

To install the development version from GitHub:

remotes::install_github("munterfi/flexpolyline")

C++ binding

Encoding and decoding in R is straight forward by using encode() and decode(). These functions are binding to the flexpolyline C++ implementation and reflect the arguments and return values of their counterparts (hf::flexpolyline::polyline_encode and hf::flexpolyline::polyline_decode):

line <- matrix(
  c(8.69821, 50.10228, 10,
    8.69567, 50.10201, 20,
    8.69150, 50.10063, 30,
    8.68752, 50.09878, 40),
  ncol = 3, byrow = TRUE
)

encode(line)

decode("BlBoz5xJ67i1BU1B7PUzIhaUxL7YU")

Simple feature support

The flexpolyline package integrates with the popular sf package for working with spatial data in R, which is built on the concept of simple features. The package provides additional functions for encoding and decoding sf objects directly:

sfg <- sf::st_linestring(line, dim = "XYZ")

encode_sf(sfg)

decode_sf("BlBoz5xJ67i1BU1B7PUzIhaUxL7YU")

Contributing

  • Contributions to this package are welcome, issues and pull requests are the preferred ways to share them. Please see the Contribution Guidelines.
  • This project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.

License

The flexpolyline R package is licensed under GNU GPL v3.0. The C++ implementation by HERE Europe B.V. is licensed under MIT.