11 releases
0.6.5 | Apr 27, 2024 |
---|---|
0.6.1 | Mar 12, 2023 |
0.5.0 | Dec 3, 2021 |
0.4.5 | Nov 25, 2021 |
0.1.8 | Jul 31, 2016 |
#463 in Algorithms
592 downloads per month
19KB
311 lines
FFI Bindings for the rust-polyline Crate
A Python implementation using these bindings is available at pypolyline
A Note on Coordinate Order
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.
decode_polyline_ffi
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.
drop_float_array
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
.
encode_coordinates_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.
drop_cstring
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
.
Binaries
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 manylinux1 (CentOS 5.11) Docker image, and is widely compatible.
Both Linux and OSX binaries have been built with rpath
support.
License
Dependencies
~0.7–2.2MB
~36K SLoC