From 353e52b0f6767463219e91075012f3cf1476fd81 Mon Sep 17 00:00:00 2001 From: Christian Beutel <> Date: Sun, 20 Jul 2025 13:40:18 +0200 Subject: [PATCH] fixes split gpx function --- web/src/lib/stores/valhalla_store.svelte.ts | 10 ++++++---- .../maplibre-layer-manager.ts | 2 +- web/src/routes/trail/edit/[id]/+page.svelte | 19 ++++++++++++------- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/web/src/lib/stores/valhalla_store.svelte.ts b/web/src/lib/stores/valhalla_store.svelte.ts index 0f827c8f..82e43045 100644 --- a/web/src/lib/stores/valhalla_store.svelte.ts +++ b/web/src/lib/stores/valhalla_store.svelte.ts @@ -178,14 +178,16 @@ export async function splitSegment(index: number, pos: LngLat) { if (dist < minDistance) { bestSplitIndex = i + minDistance = dist } } - const firstSegmentPoints = [...points.slice(0, index)]; - const secondSegmentPoints = [...points.slice(index)]; + const intersectionPoint = new Waypoint({ $: { lat: pos.lat, lon: pos.lng}, ele: points[bestSplitIndex].ele }); + const firstSegmentPoints = [...points.slice(0, bestSplitIndex), intersectionPoint]; + const secondSegmentPoints = [intersectionPoint, ...points.slice(bestSplitIndex)]; - seg.trkpt = firstSegmentPoints; - insertIntoRoute(secondSegmentPoints, index) + editRoute(index, firstSegmentPoints) + insertIntoRoute(secondSegmentPoints, index + 1) } export function normalizeRouteTime() { diff --git a/web/src/lib/vendor/maplibre-layer-manager/maplibre-layer-manager.ts b/web/src/lib/vendor/maplibre-layer-manager/maplibre-layer-manager.ts index b78c70ba..87dedb2d 100644 --- a/web/src/lib/vendor/maplibre-layer-manager/maplibre-layer-manager.ts +++ b/web/src/lib/vendor/maplibre-layer-manager/maplibre-layer-manager.ts @@ -75,7 +75,7 @@ export class LayerManager { private async updateOverpassLayer(newState: MapState) { const overpassLayer = this.layers.overpass; - if (overpassLayer) { + if (overpassLayer && this.map.getSource('overpass')) { const castedOverpassLayer = overpassLayer as OverpassLayer; overpassLayer.filter = await castedOverpassLayer.updateLayerIfNeeded(newState, this.map.getBounds()); (this.map.getSource('overpass') as M.GeoJSONSource).setData(castedOverpassLayer.data); diff --git a/web/src/routes/trail/edit/[id]/+page.svelte b/web/src/routes/trail/edit/[id]/+page.svelte index 11043baa..304eaf5e 100644 --- a/web/src/routes/trail/edit/[id]/+page.svelte +++ b/web/src/routes/trail/edit/[id]/+page.svelte @@ -429,7 +429,7 @@ id: "crop-start-marker", icon: "fa-regular fa-circle", fontSize: "xs", - style: "z-10 w-6", + style: "w-6", width: 4, backgroundColor: "bg-primary", fontColor: "white", @@ -441,7 +441,7 @@ id: "crop-end-marker", icon: "fa fa-flag-checkered", fontSize: "xs", - style: "z-10 w-6", + style: "w-6", width: 4, backgroundColor: "bg-primary", fontColor: "white", @@ -731,12 +731,16 @@ if (!drawingActive) { return; } - const position = marker.getLngLat(); - anchor.lat = position.lat; - anchor.lon = position.lng; - await recalculateRoute( - valhallaStore.anchors.findIndex((a) => a.id == anchor.id), + const anchorIndex = valhallaStore.anchors.findIndex( + (a) => a.id == anchor.id, ); + const thisAnchor = valhallaStore.anchors[anchorIndex]; + const position = marker.getLngLat(); + thisAnchor.lat = position.lat; + thisAnchor.lon = position.lng; + + await recalculateRoute(anchorIndex); + draggingMarker = false; }, ); @@ -943,6 +947,7 @@ splitSegment(data.segment, data.event.lngLat); updateFollowingAnchors(data.segment); + updateTrailWithRouteData(); } function reverseTrail() {