Support encoded polylines in Leaflet
This Leaflet plugin extends Leaflet with functions to encode to and decode from Google maps polyline encoding.
Escaping backslashes
Make sure to always escape the backslashes in encoded strings! Not doing so will result in the backslash to be interpreted as an escape character, yielding wrong results.
API
Utility methods
-
L.PolylineUtil.encode(latlngs [, precision])
Encode an array of L.LatLng
objects, or an array of arrays.
-
L.PolylineUtil.decode(encoded [, precision])
Decode the string encoded
to an array of [lat, lng]
-arrays.
Extensions for L.Polyline
-
L.Polyline.fromEncoded(encoded [, options])
Construct a new L.Polyline
from a string, with optional options
object. Backslashes in strings should be properly escaped.
-
L.Polyline.encodePath()
Return an encoded string for the current Polyline.
Extensions for L.Polygon
-
L.Polygon.fromEncoded(encoded [, options])
Construct a new L.Polygon
from a string, with optional options
object. Backslashes in strings should be properly escaped.
-
L.Polygon.encodePath()
Return an encoded string for the current Polygon.
Code examples
After loading leaflet.js
, src/Polyline.encoded.js
should be included.
Encoding
var latlngs = [
[38.5, -120.5],
[40.7, -120.95],
[43.252, -126.453]
];
var polyline = L.polyline(latlngs);
console.log(polyline.encodePath());
Decoding
var encoded = "_p~iF~cn~U_ulLn{vA_mqNvxq`@";
var polyline = L.Polyline.fromEncoded(encoded);
console.log(polyline.getLatLngs());
Use a decoding precision of 5 to decode OSRM Routing Engine geometries
var encoded = "_izlhA~pvydF_{geC~{mZ_kwzCn`{nI";
var polyline = L.polyline(L.PolylineUtil.decode(encoded, 5));
console.log(polyline.getLatLngs());
Node package
You can use encode()
and decode()
in your Nodejs scripts:
npm install polyline-encoded
var polyUtil = require('polyline-encoded');
var encoded = "_p~iF~cn~U_ulLn{vA_mqNvxq`@";
var latlngs = polyUtil.decode(encoded);