|
@@ -0,0 +1,49 @@
|
|
|
+/*
|
|
|
+ * Extends L.Polyline to retrieve measured distance.
|
|
|
+ *
|
|
|
+ * https://github.com/danimt/Leaflet.PolylineMeasuredDistance
|
|
|
+ */
|
|
|
+
|
|
|
+L.Polyline.prototype.measuredDistance = function (options) {
|
|
|
+ // Default options
|
|
|
+ this.defaults = {
|
|
|
+ metric: true
|
|
|
+ };
|
|
|
+ // Extend options
|
|
|
+ this.options = L.extend(this.defaults, options);
|
|
|
+
|
|
|
+ var distance = 0, coords = null, coordsArray = this._latlngs;
|
|
|
+
|
|
|
+ for (i = 0; i < coordsArray.length - 1; i++) {
|
|
|
+ coords = coordsArray[i];
|
|
|
+ distance += coords.distanceTo(coordsArray[i + 1]);
|
|
|
+ }
|
|
|
+
|
|
|
+ // Return formatted distance
|
|
|
+ return L.PolylineUtil.readableDistance(distance, this.options.metric);
|
|
|
+};
|
|
|
+
|
|
|
+L.PolylineUtil = {
|
|
|
+ readableDistance: function (distance, isMetric) {
|
|
|
+ var distanceStr;
|
|
|
+
|
|
|
+ if (isMetric) {
|
|
|
+ // show metres when distance is < 1km, then show km
|
|
|
+ if (distance > 1000) {
|
|
|
+ distanceStr = (distance / 1000).toFixed(2) + ' km';
|
|
|
+ } else {
|
|
|
+ distanceStr = Math.ceil(distance) + ' m';
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ distance *= 1.09361;
|
|
|
+
|
|
|
+ if (distance > 1760) {
|
|
|
+ distanceStr = (distance / 1760).toFixed(2) + ' miles';
|
|
|
+ } else {
|
|
|
+ distanceStr = Math.ceil(distance) + ' yd';
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return distanceStr;
|
|
|
+ }
|
|
|
+};
|