FFI Bindings for the rust-polyline Crate
A Python implementation using these bindings is available at pypolyline
This crate uses Coordinate
and LineString
types from the geo-types
crate, which encodes coordinates in (x, y)
order. The Polyline algorithm and first-party documentation assumes the opposite coordinate order. It is thus advisable to pay careful attention to the order of the coordinates you use for encoding and decoding.
Convert a Polyline into an array of coordinates.
Callers must pass two arguments:
- a pointer to a
NUL
-terminated character array (char*
) - an unsigned 32-bit
int
for precision (5
for Google Polylines,6
for OSRM and Valhalla Polylines)
Returns an Array
struct with two fields:
data
, a void pointer to a nested double-precision float array: e.g.[[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]
len
, an integer of typesize_t
, denoting the array length, e.g.3
Callers must then call drop_float_array
to free the memory allocated by this function.
Free memory pointed to by Array
, which Rust has allocated across the FFI boundary.
Callers must pass the same Array
struct that was received from decode_polyline_ffi
.
Convert coordinates into a Polyline.
Callers must pass a struct, with two members:
data
, a void pointer to a nested double-precision float array: e.g.[[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]
len
, the array length, e.g.3
Returns a pointer to a C character array (char*
).
Callers must then call drop_cstring
to free the memory allocated by this function.
Free memory pointed to by char*
, which Rust has allocated across the FFI boundary.
Callers must pass the same char*
they receive from encode_coordinates_ffi
.
Compressed binaries are available for Linux (64-bit), OSX (64-bit), and Windows (32-bit and 64-bit), from the releases page.
The Linux binary has been built using the manylinux2014 Docker image, and is widely compatible.
Both Linux and OSX binaries have been built with rpath
support.