From b9fdf58ed8c3f87856b000966b961f826e355a04 Mon Sep 17 00:00:00 2001 From: oleg Date: Thu, 1 Mar 2018 19:25:58 +0200 Subject: [PATCH] Fix:Doesn't paint lines for the first and last points properly. --- Leaflet.MultiOptionsPolyline.js | 22 ++++++++++------------ Leaflet.MultiOptionsPolyline.min.js | 5 +++-- demo/index.html | 4 ++-- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/Leaflet.MultiOptionsPolyline.js b/Leaflet.MultiOptionsPolyline.js index 01f3644..7a09671 100644 --- a/Leaflet.MultiOptionsPolyline.js +++ b/Leaflet.MultiOptionsPolyline.js @@ -54,8 +54,8 @@ var MultiOptionsPolyline = L.FeatureGroup.extend({ multiOptions = this._options.multiOptions, optionIdxFn = multiOptions.optionIdxFn, fnContext = multiOptions.fnContext || this, - prevOptionIdx, optionIdx, - segmentLatlngs; + nextOptionsIdx, optionIdx, + segmentLatlngs = []; this._originalLatlngs = latlngs; @@ -63,27 +63,25 @@ var MultiOptionsPolyline = L.FeatureGroup.extend({ this.removeLayer(layer); }, this); - for (i = 1; i < len; ++i) { - optionIdx = optionIdxFn.call( - fnContext, latlngs[i], latlngs[i - 1], i, latlngs); + for (i = 0; i < len; ++i) { - if (i === 1) { - segmentLatlngs = [latlngs[0]]; - prevOptionIdx = optionIdxFn.call(fnContext, latlngs[0], latlngs[0], 0, latlngs); + // If there is next point + if (latlngs[i + 1]) { + nextOptionsIdx = optionIdxFn.call(fnContext, latlngs[i + 1], latlngs[i], i + 1, latlngs); } + optionIdx = optionIdxFn.call(fnContext, latlngs[i], latlngs[i - 1] || latlngs[i], i, latlngs); segmentLatlngs.push(latlngs[i]); // is there a change in options or is it the last point? - if (prevOptionIdx !== optionIdx || i === len - 1) { + if (optionIdx !== nextOptionsIdx || i === len - 1) { // Check if options is a function or an array if (typeof multiOptions.options === "function") { - this.addLayer(L.polyline(segmentLatlngs, multiOptions.options(prevOptionIdx))); + this.addLayer(L.polyline(segmentLatlngs, multiOptions.options(optionIdx))); } else { - this.addLayer(L.polyline(segmentLatlngs, multiOptions.options[prevOptionIdx])); + this.addLayer(L.polyline(segmentLatlngs, multiOptions.options[optionIdx])); } - prevOptionIdx = optionIdx; segmentLatlngs = [latlngs[i]]; } } diff --git a/Leaflet.MultiOptionsPolyline.min.js b/Leaflet.MultiOptionsPolyline.min.js index cfc727a..5c6f02d 100644 --- a/Leaflet.MultiOptionsPolyline.min.js +++ b/Leaflet.MultiOptionsPolyline.min.js @@ -1,2 +1,3 @@ -/*! Leaflet.MultiOptionsPolyline v1.0.0 26-11-2016 */ -!function(a,b){"function"==typeof define&&define.amd?define(["leaflet"],b):b("object"==typeof module&&module.exports?require("leaflet"):a.L)}(this,function(a){"use strict";var b=a.FeatureGroup.extend({initialize:function(a,b){var c=b.multiOptions.copyBaseOptions;this._layers={},this._options=b,(void 0===c||c)&&this._copyBaseOptions(),this.setLatLngs(a)},_copyBaseOptions:function(){var b,c,d=this._options.multiOptions,e=d.options,f=e.length;for(b=a.extend({},this._options),delete b.multiOptions,c=0;c Leaflet.MultiOptionsPolyline Demo - - + +