From 48aa88489e1e9f07a29746014412d98cff4313c5 Mon Sep 17 00:00:00 2001 From: vcoppe Date: Fri, 19 Jul 2024 13:17:23 +0200 Subject: [PATCH] refactor elevation queries --- website/src/lib/components/gpx-layer/GPXLayer.ts | 4 ++-- .../src/lib/components/toolbar/tools/routing/Routing.ts | 6 +++++- website/src/lib/db.ts | 8 +++++++- website/src/lib/utils.ts | 7 +++++++ 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/website/src/lib/components/gpx-layer/GPXLayer.ts b/website/src/lib/components/gpx-layer/GPXLayer.ts index e530d7ba..b67cbf64 100644 --- a/website/src/lib/components/gpx-layer/GPXLayer.ts +++ b/website/src/lib/components/gpx-layer/GPXLayer.ts @@ -6,7 +6,7 @@ import { currentPopupWaypoint, deleteWaypoint, waypointPopup } from "./WaypointP import { addSelectItem, selectItem, selection } from "$lib/components/file-list/Selection"; import { ListTrackSegmentItem, ListWaypointItem, ListWaypointsItem, ListTrackItem, ListFileItem, ListRootItem } from "$lib/components/file-list/FileList"; import type { Waypoint } from "gpx"; -import { resetCursor, setCursor, setGrabbingCursor, setPointerCursor } from "$lib/utils"; +import { getElevation, resetCursor, setCursor, setGrabbingCursor, setPointerCursor } from "$lib/utils"; import { font } from "$lib/assets/layers"; import { selectedWaypoint } from "$lib/components/toolbar/tools/Waypoint.svelte"; import { MapPin } from "lucide-static"; @@ -250,7 +250,7 @@ export class GPXLayer { lat: latLng.lat, lon: latLng.lng }); - wpt.ele = this.map.queryTerrainElevation([latLng.lng, latLng.lat], { exaggerated: false }) ?? 0; + wpt.ele = getElevation(this.map, wpt.getCoordinates()); }); dragEndTimestamp = Date.now() }); diff --git a/website/src/lib/components/toolbar/tools/routing/Routing.ts b/website/src/lib/components/toolbar/tools/routing/Routing.ts index 42ee72fb..b3ff1f1c 100644 --- a/website/src/lib/components/toolbar/tools/routing/Routing.ts +++ b/website/src/lib/components/toolbar/tools/routing/Routing.ts @@ -4,6 +4,7 @@ import { derived, get, writable } from "svelte/store"; import { settings } from "$lib/db"; import { _, isLoading, locale } from "svelte-i18n"; import { map } from "$lib/stores"; +import { getElevation } from "$lib/utils"; const { routing, routingProfile, privateRoads } = settings; @@ -123,9 +124,12 @@ function getIntermediatePoints(points: Coordinates[]): Promise { } })); + let m = get(map); route.forEach((point) => { point.setSurface("unknown"); - point.ele = get(map)?.queryTerrainElevation(point.getCoordinates(), { exaggerated: false }) ?? undefined; + if (m) { + point.ele = getElevation(m, point.getCoordinates()); + } }); return new Promise((resolve) => resolve(route)); diff --git a/website/src/lib/db.ts b/website/src/lib/db.ts index a55c3872..6bbf08aa 100644 --- a/website/src/lib/db.ts +++ b/website/src/lib/db.ts @@ -8,6 +8,8 @@ import { applyToOrderedItemsFromFile, applyToOrderedSelectedItemsFromFile, selec import { ListFileItem, ListItem, ListTrackItem, ListLevel, ListTrackSegmentItem, ListWaypointItem, ListRootItem } from '$lib/components/file-list/FileList'; import { updateAnchorPoints } from '$lib/components/toolbar/tools/routing/Simplify'; import { SplitType } from '$lib/components/toolbar/tools/Scissors.svelte'; +import { getElevation } from '$lib/utils'; + enableMapSet(); enablePatches(); @@ -894,7 +896,11 @@ export const dbUtils = { }); }, addOrUpdateWaypoint: (waypoint: WaypointType, item?: ListWaypointItem) => { - let ele = get(map)?.queryTerrainElevation([waypoint.attributes.lon, waypoint.attributes.lat], { exaggerated: false }) ?? 0; + let m = get(map); + if (m === null) { + return; + } + let ele = getElevation(m, waypoint.attributes); if (item) { dbUtils.applyToFile(item.getFileId(), (file) => { let wpt = file.wpt[item.getWaypointIndex()]; diff --git a/website/src/lib/utils.ts b/website/src/lib/utils.ts index b6142dd8..348c6abe 100644 --- a/website/src/lib/utils.ts +++ b/website/src/lib/utils.ts @@ -8,6 +8,8 @@ import { base } from "$app/paths"; import { browser } from "$app/environment"; import { languages } from "$lib/languages"; import { locale } from "svelte-i18n"; +import type Coordinates from "gpx"; +import type mapboxgl from "mapbox-gl"; export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)); @@ -67,6 +69,11 @@ export const flyAndScale = ( }; }; +export function getElevation(map: mapboxgl.Map, coordinates: Coordinates): number { + let elevation = map.queryTerrainElevation(coordinates, { exaggerated: false }); + return elevation === null ? 0 : elevation; +} + let previousCursors: string[] = []; export function setCursor(cursor: string) { let m = get(map);