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.x
- 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.LatLng
objects, or an array of arrays. -
L.PolylineUtil.decode(encoded [, precision])
Decode the string
encoded
to an array of[lat, lng]
-arrays.
-
L.Polyline.fromEncoded(encoded [, options])
Construct a new
L.Polyline
from a string, with optionaloptions
object. 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.Polygon
from a string, with optionaloptions
object. 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);