From ff1499c62b9e5061636a6cdc155459ba36bc07ae Mon Sep 17 00:00:00 2001 From: Unknown Date: Wed, 2 Oct 2019 16:16:29 +0200 Subject: [PATCH] If a track contains waypoints, they are set to the router --- js/index.js | 2 +- js/plugin/TracksLoader.js | 28 ++++++++++++++++++++++++---- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/js/index.js b/js/index.js index a0bd628..21c9b6a 100644 --- a/js/index.js +++ b/js/index.js @@ -271,7 +271,7 @@ BR.stravaSegments(map, layersControl); } - BR.tracksLoader(map, layersControl); + BR.tracksLoader(map, layersControl, routing); map.addControl( new BR.OpacitySliderControl({ diff --git a/js/plugin/TracksLoader.js b/js/plugin/TracksLoader.js index b95c042..7998c1a 100644 --- a/js/plugin/TracksLoader.js +++ b/js/plugin/TracksLoader.js @@ -1,4 +1,4 @@ -BR.tracksLoader = function(map, layersControl) { +BR.tracksLoader = function(map, layersControl, routing) { TracksLoader = L.Control.FileLayerLoad.extend({ options: { layer: L.geoJson, @@ -49,9 +49,29 @@ BR.tracksLoader = function(map, layersControl) { tracksLoaderControl.addTo(map); tracksLoaderControl.loader.on('data:loaded', function(event) { - var layer = event.layer; - layersControl.addOverlay(layer, event.filename); - layer.addTo(map); + var eventLayer = event.layer; + let routingMarkers = []; + for (let layerIdx = 0; layerIdx < eventLayer.getLayers().length; layerIdx++) { + const layer = eventLayer.getLayers()[layerIdx]; + if (layer.feature && layer.feature.properties && layer.feature.properties.type) { + const layerType = layer.feature.properties.type; + if (layerType === 'from' || layerType === 'via' || layerType === 'to') { + routingMarkers.push(layer.getLatLng()); + } + } + } + if (routingMarkers.length > 0) { + routing.setWaypoints(routingMarkers, function(event) { + var err = event.error; + BR.message.showError( + i18next.t('warning.tracks-load-error', { + error: err && err.message ? err.message : err + }) + ); + }); + } + layersControl.addOverlay(eventLayer, event.filename); + eventLayer.addTo(map); }); tracksLoaderControl.loader.on('data:error', function(event) {