This Leaflet plugin extends Leaflet with functions to encode to and decode from Google maps polyline encoding.
- Works with Leaflet v0.7.7 and v1.0.0-rc.1
- Algorithm described in the Google maps API Documentation.
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.
-
L.PolylineUtil.encode(latlngs [, precision])Encode an array of
L.LatLngobjects, or an array of arrays. -
L.PolylineUtil.decode(encoded [, precision])Decode the string
encodedto an array of[lat, lng]-arrays.
-
L.Polyline.fromEncoded(encoded [, options])Construct a new
L.Polylinefrom a string, with optionaloptionsobject. Backslashes in strings should be properly escaped. -
L.Polyline.encodePath()Return an encoded string for the current Polyline.
-
L.Polygon.fromEncoded(encoded [, options])Construct a new
L.Polygonfrom a string, with optionaloptionsobject. Backslashes in strings should be properly escaped. -
L.Polygon.encodePath()Return an encoded string for the current Polygon.
After loading leaflet.js, src/Polyline.encoded.js should be included.
var latlngs = [
[38.5, -120.5],
[40.7, -120.95],
[43.252, -126.453]
];
var polyline = L.polyline(latlngs);
// prints "_p~iF~cn~U_ulLn{vA_mqNvxq`@" to the console
console.log(polyline.encodePath());var encoded = "_p~iF~cn~U_ulLn{vA_mqNvxq`@";
var polyline = L.Polyline.fromEncoded(encoded);
// prints an array of 3 LatLng objects.
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));
// prints an array of 3 LatLng objects.
console.log(polyline.getLatLngs());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);