nakarte

Source code of https://map.sikmir.ru (fork)
git clone git://git.sikmir.ru/nakarte
Log | Files | Refs | LICENSE

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:
Msrc/lib/leaflet.control.track-list/track-list.js | 38++++++++++++++++++++++++++++++++++++--
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 */