diff --git a/web/src/lib/components/summit_log/summit_log_modal.svelte b/web/src/lib/components/summit_log/summit_log_modal.svelte index a66a047b..166b568d 100644 --- a/web/src/lib/components/summit_log/summit_log_modal.svelte +++ b/web/src/lib/components/summit_log/summit_log_modal.svelte @@ -90,9 +90,13 @@ return; } const gpxObject = GPX.parse(trailData); - - const totals = gpxObject.features; + try { + await gpxObject.correctElevation(); + } catch (e) { + console.warn("Unable to correct elevation: " + e); + } + const totals = gpxObject.features; $data.duration = totals.duration / 1000; $data.elevation_gain = totals.elevationGain; $data.elevation_loss = totals.elevationLoss; diff --git a/web/src/lib/components/summit_log/summit_log_table.svelte b/web/src/lib/components/summit_log/summit_log_table.svelte index f8c8c918..ae4fbfd3 100644 --- a/web/src/lib/components/summit_log/summit_log_table.svelte +++ b/web/src/lib/components/summit_log/summit_log_table.svelte @@ -58,7 +58,7 @@ }; } - trail = gpx2trail(log.expand.gpx_data!).trail; + trail = (await gpx2trail(log.expand.gpx_data!)).trail; trail.id = log.id; trail.expand!.gpx_data = log.expand.gpx_data; diff --git a/web/src/lib/models/gpx/gpx.ts b/web/src/lib/models/gpx/gpx.ts index 33b1fad3..ed364e5d 100644 --- a/web/src/lib/models/gpx/gpx.ts +++ b/web/src/lib/models/gpx/gpx.ts @@ -10,9 +10,7 @@ import geohash from "ngeohash" import { encodePolyline } from '$lib/util/polyline_util'; import { APIError } from '$lib/util/api_util'; import type { ValhallaHeightResponse } from '../valhalla'; -import { bbox, splitMultiLineStringToLineStrings } from '$lib/util/geojson_util'; -import { browser } from '$app/environment'; -import xmldom from 'xmldom'; +import { bbox } from '$lib/util/geojson_util'; const defaultAttributes = { version: '1.1', diff --git a/web/src/lib/util/gpx_util.ts b/web/src/lib/util/gpx_util.ts index 242bb27a..9d19a374 100644 --- a/web/src/lib/util/gpx_util.ts +++ b/web/src/lib/util/gpx_util.ts @@ -18,18 +18,21 @@ import { handleFromRecordWithIRI } from "./activitypub_util"; import { Waypoint } from "$lib/models/waypoint"; -export function gpx2trail(gpxString: string, fallbackName?: string, f: (url: RequestInfo | URL, config?: RequestInit) => Promise = fetch) { +export async function gpx2trail(gpxString: string, fallbackName?: string, correctElevation: boolean = false, f: (url: RequestInfo | URL, config?: RequestInit) => Promise = fetch) { const gpx = GPX.parse(gpxString); if (gpx instanceof Error) { throw gpx; } - // try { - // await gpx.correctElevation(f) - // } catch(e) { - // console.warn("Unable to correct elevation: " + e) - // } + if (correctElevation) { + try { + await gpx.correctElevation(f) + } catch (e) { + console.warn("Unable to correct elevation: " + e) + } + } + const trail = new Trail(""); diff --git a/web/src/routes/api/v1/trail/upload/+server.ts b/web/src/routes/api/v1/trail/upload/+server.ts index 13364d71..9e53d295 100644 --- a/web/src/routes/api/v1/trail/upload/+server.ts +++ b/web/src/routes/api/v1/trail/upload/+server.ts @@ -21,7 +21,7 @@ export async function PUT(event: RequestEvent) { } let parseResult: { trail: Trail, gpx: GPX }; try { - parseResult = gpx2trail(gpxData, data.get("name") as string | undefined, event.fetch); + parseResult = await gpx2trail(gpxData, data.get("name") as string | undefined, true, event.fetch); } catch (e: any) { console.error(e) throw new ClientResponseError({ status: 400, response: { message: "Invalid file" } }) diff --git a/web/src/routes/trail/edit/[id]/+page.svelte b/web/src/routes/trail/edit/[id]/+page.svelte index 2ccb814c..7f1a3625 100644 --- a/web/src/routes/trail/edit/[id]/+page.svelte +++ b/web/src/routes/trail/edit/[id]/+page.svelte @@ -319,7 +319,7 @@ try { const prevId = $formData.id; - const parseResult = gpx2trail(gpxData, selectedFile.name); + const parseResult = await gpx2trail(gpxData, selectedFile.name); setFields(parseResult.trail); $formData.id = prevId ?? cryptoRandomString({ length: 15 }); $formData.expand!.gpx_data = gpxData;