diff --git a/website/package-lock.json b/website/package-lock.json index 9701457d..6fc955e2 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -18,6 +18,7 @@ "dexie": "^4.0.7", "gpx": "file:../gpx", "immer": "^10.1.1", + "lucide-static": "^0.408.0", "lucide-svelte": "^0.395.0", "mapbox-gl": "^3.4.0", "mapillary-js": "^4.1.2", @@ -4371,6 +4372,11 @@ "es5-ext": "~0.10.2" } }, + "node_modules/lucide-static": { + "version": "0.408.0", + "resolved": "https://registry.npmjs.org/lucide-static/-/lucide-static-0.408.0.tgz", + "integrity": "sha512-XJioz3vKagiyA6qMDWkYqU1RUS/bMjqio0/TCOItievnV/C4wwgJZGAbk6eVDe6Wv+d0e9NbhS7Y8yMEpGkElQ==" + }, "node_modules/lucide-svelte": { "version": "0.395.0", "resolved": "https://registry.npmjs.org/lucide-svelte/-/lucide-svelte-0.395.0.tgz", diff --git a/website/package.json b/website/package.json index c74219fc..15093849 100644 --- a/website/package.json +++ b/website/package.json @@ -56,6 +56,7 @@ "dexie": "^4.0.7", "gpx": "file:../gpx", "immer": "^10.1.1", + "lucide-static": "^0.408.0", "lucide-svelte": "^0.395.0", "mapbox-gl": "^3.4.0", "mapillary-js": "^4.1.2", diff --git a/website/src/lib/assets/layers.ts b/website/src/lib/assets/layers.ts index e8a9734b..fb0f2459 100644 --- a/website/src/lib/assets/layers.ts +++ b/website/src/lib/assets/layers.ts @@ -1,4 +1,5 @@ import { PUBLIC_MAPBOX_TOKEN } from '$env/static/public'; +import { TramFront } from 'lucide-static'; import { type AnySourceData, type Style } from 'mapbox-gl'; export const basemaps: { [key: string]: string | Style; } = { @@ -540,6 +541,15 @@ export const overlayTree: LayerTreeType = { }, } +// Hierachy containing all Overpass layers +export const overpassTree: LayerTreeType = { + points_of_interest: { + transport: { + tram: true, + }, + }, +}; + // Default basemap used export const defaultBasemap = 'mapboxOutdoors'; @@ -585,6 +595,15 @@ export const defaultOverlays = { }, }; +// Default Overpass queries used (none) +export const defaultOverpassQueries: LayerTreeType = { + points_of_interest: { + transport: { + tram: false, + }, + }, +}; + // Default basemaps shown in the layer menu export const defaultBasemapTree: LayerTreeType = { basemaps: { @@ -680,6 +699,15 @@ export const defaultOverlayTree: LayerTreeType = { } } +// Default Overpass queries shown in the layer menu +export const defaultOverpassTree: LayerTreeType = { + points_of_interest: { + transport: { + tram: true, + }, + }, +}; + export type CustomLayer = { id: string, name: string, @@ -690,6 +718,21 @@ export type CustomLayer = { value: string | {}, }; +type OverpassQuery = Record; + +export const overpassQueries: Record = { + tram: { + railway: 'tram_stop', + }, +}; + +export const overpassIcons: Record = { + tram: { + svg: TramFront, + color: '#000000', + } +}; + export const stravaHeatmapServers = ['https://heatmap-external-a.strava.com/tiles-auth', 'https://heatmap-external-b.strava.com/tiles-auth', 'https://heatmap-external-c.strava.com/tiles-auth']; export const stravaHeatmapActivityIds: { [key: string]: string } = { stravaHeatmapRun: 'sport_Run', diff --git a/website/src/lib/components/layer-control/LayerControl.svelte b/website/src/lib/components/layer-control/LayerControl.svelte index 54c3e33d..4c2bc810 100644 --- a/website/src/lib/components/layer-control/LayerControl.svelte +++ b/website/src/lib/components/layer-control/LayerControl.svelte @@ -21,8 +21,10 @@ currentBasemap, previousBasemap, currentOverlays, + currentOverpassQueries, selectedBasemapTree, selectedOverlayTree, + selectedOverpassTree, customLayers, opacities } = settings; @@ -167,6 +169,17 @@ /> {/if} + +
+ {#if $currentOverpassQueries} + + {/if} +
diff --git a/website/src/lib/components/layer-control/LayerControlSettings.svelte b/website/src/lib/components/layer-control/LayerControlSettings.svelte index 99f02c36..57611669 100644 --- a/website/src/lib/components/layer-control/LayerControlSettings.svelte +++ b/website/src/lib/components/layer-control/LayerControlSettings.svelte @@ -9,7 +9,7 @@ import * as Select from '$lib/components/ui/select'; import { Slider } from '$lib/components/ui/slider'; - import { basemapTree, overlays, overlayTree } from '$lib/assets/layers'; + import { basemapTree, overlays, overlayTree, overpassTree } from '$lib/assets/layers'; import { isSelected } from '$lib/components/layer-control/utils'; import { settings } from '$lib/db'; @@ -22,6 +22,7 @@ const { selectedBasemapTree, selectedOverlayTree, + selectedOverpassTree, stravaHeatmapColor, currentOverlays, customLayers, @@ -29,6 +30,7 @@ } = settings; export let open: boolean; + let accordionValue = 'layer-selection'; let selectedOverlay = writable(undefined); let overlayOpacity = writable([1]); @@ -113,115 +115,126 @@ {$_('layers.settings')} - - {$_('layers.settings_help')} - - - - {$_('layers.selection')} - - - - - - - - - - - - {$_('layers.opacity')} - -
- - - - - - - {#each Object.keys(overlays) as id} - {#if isSelected($selectedOverlayTree, id)} - {$_(`layers.label.${id}`)} - {/if} - {/each} - {#each Object.entries($customLayers) as [id, layer]} - {#if layer.layerType === 'overlay'} - {layer.name} - {/if} - {/each} - - -
-