This Leaflet plugin extends the Leaflet API with functions to encode en decode Google maps polyline encoding. It is just a convenient way to use the algorithm from http://facstaff.unca.edu/mcmcclur/GoogleMaps/EncodePolyline/ in Leaflet.
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 6 to decode OSRM Routing Engine geometries
var encoded = "_izlhA~pvydF_{geC~{mZ_kwzCn`{nI";
var polyline = new L.Polyline(L.PolylineUtil.decode(encoded, 6));
// 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);