commit 830b92712c76430c4224cf92e519e5c25b7777c0
parent 929451ea531f01fbe2e20195a5e52e60b88c888f
Author: Sergej Orlov <wladimirych@gmail.com>
Date: Thu, 19 May 2022 23:46:05 +0200
tracks: add command to create new track by joining existing tracks
Diffstat:
1 file changed, 36 insertions(+), 2 deletions(-)
diff --git a/src/lib/leaflet.control.track-list/track-list.js b/src/lib/leaflet.control.track-list/track-list.js
@@ -185,7 +185,11 @@ L.Control.TrackList = L.Control.extend({
L.DomEvent.addListener(map.getContainer(), 'dragover', this.onFileDraging, this);
this.menu = new Contextmenu([
{text: 'Copy link for all tracks', callback: this.copyAllTracksToClipboard.bind(this)},
- {text: 'Copy link for visible tracks', callback: this.copyVisibleTracks.bind(this)},
+ {text: 'Copy link for visible tracks', callback: this.copyVisibleTracksToClipboard.bind(this)},
+ {
+ text: 'Create new track from all visible tracks',
+ callback: this.createNewTrackFromVisibleTracks.bind(this)
+ },
'-',
{text: 'Delete all tracks', callback: this.deleteAllTracks.bind(this)},
{text: 'Delete hidden tracks', callback: this.deleteHiddenTracks.bind(this)}
@@ -1345,11 +1349,41 @@ L.Control.TrackList = L.Control.extend({
this.copyTracksLinkToClipboard(this.tracks(), mouseEvent);
},
- copyVisibleTracks: function(mouseEvent) {
+ copyVisibleTracksToClipboard: function(mouseEvent) {
const tracks = this.tracks().filter((track) => track.visible());
this.copyTracksLinkToClipboard(tracks, mouseEvent);
},
+ createNewTrackFromVisibleTracks: function() {
+ const tracks = this.tracks().filter((track) => track.visible());
+ if (tracks.length === 0) {
+ return;
+ }
+ let newTrackName = tracks[0].name();
+ newTrackName = query('New track name', newTrackName);
+ if (newTrackName === null) {
+ return;
+ }
+
+ const newTrackSegments = [];
+ const newTrackPoints = [];
+
+ for (const track of tracks) {
+ for (let segment of this.getTrackPolylines(track)) {
+ const points = segment.getFixedLatLngs().map(({lat, lng}) => ({lat, lng}));
+ newTrackSegments.push(points);
+ }
+ const points = this.getTrackPoints(track).map((point) => ({
+ lat: point.latlng.lat,
+ lng: point.latlng.lng,
+ name: point.label
+ }));
+ newTrackPoints.push(...points);
+ }
+
+ this.addTrack({name: newTrackName, tracks: newTrackSegments, points: newTrackPoints});
+ },
+
exportTracks: function(minTicksIntervalMeters) {
var that = this;
/* eslint-disable max-nested-callbacks */