Skip to content

Latest commit

 

History

History
92 lines (73 loc) · 2.56 KB

README.md

File metadata and controls

92 lines (73 loc) · 2.56 KB

Support encoded polylines in Leaflet


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.

Provided methods

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 L.Polyline from a string, with optional options object.
L.Polyline.encodePath()Return an encoded string for the current Polyline.
Extensions for L.Polygon
L.Polygon.fromEncoded(encoded [, options]) Construct a L.Polygon from a string, with optional options object.
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);

//prints "_p~iF~cn~U_ulLn{vA_mqNvxq`@" to the console
console.log(polyline.encodePath());

Decoding

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(PolylineUtil.decode(encoded, 6));

// prints an array of 3 LatLng objects.
console.log(polyline.getLatLngs());

Node package

You can use encode() and decode() in your Nodejs scripts:

npm install polyline-encoded

var polylineEncoded = require('polyline-encoded');

var encoded = "_p~iF~cn~U_ulLn{vA_mqNvxq`@";
var latlngs = polylineEncoded.decode(encoded);