From 24a5daaf9ae8b0e0dbc4e94d3b32f44b4bb898fb Mon Sep 17 00:00:00 2001 From: vcoppe Date: Fri, 12 Jul 2024 18:08:27 +0200 Subject: [PATCH] finished embedding --- website/src/lib/components/Map.svelte | 26 ++--- .../src/lib/components/docs/DocsLoader.svelte | 5 + .../src/lib/components/docs/DocsNote.svelte | 7 ++ .../lib/components/embedding/Embedding.svelte | 95 +++++++++++++------ .../src/lib/components/embedding/Embedding.ts | 11 ++- .../embedding/EmbeddingPlayground.svelte | 88 +++++++++++++++-- .../lib/components/embedding/OpenIn.svelte | 2 +- website/src/lib/docs/en/integration.mdx | 12 ++- website/src/lib/docs/en/map-controls.mdx | 2 +- website/src/lib/docs/en/menu/file.mdx | 2 +- website/src/lib/docs/en/toolbar/extract.mdx | 2 +- website/src/locales/en.json | 2 +- .../routes/[...language]/embed/+page.svelte | 2 +- 13 files changed, 194 insertions(+), 62 deletions(-) diff --git a/website/src/lib/components/Map.svelte b/website/src/lib/components/Map.svelte index bf1c3a20..cf146cfa 100644 --- a/website/src/lib/components/Map.svelte +++ b/website/src/lib/components/Map.svelte @@ -14,7 +14,9 @@ import { PUBLIC_MAPBOX_TOKEN } from '$env/static/public'; export let accessToken = PUBLIC_MAPBOX_TOKEN; + export let geolocate = true; export let geocoder = true; + export let hash = true; mapboxgl.accessToken = accessToken; @@ -35,7 +37,7 @@ container: 'map', style: { version: 8, sources: {}, layers: [] }, projection: { name: 'mercator' }, - hash: true, + hash: hash, language: get(locale), attributionControl: false, logoPosition: 'bottom-right', @@ -66,16 +68,18 @@ ); } - newMap.addControl( - new mapboxgl.GeolocateControl({ - positionOptions: { - enableHighAccuracy: true - }, - fitBoundsOptions, - trackUserLocation: true, - showUserHeading: true - }) - ); + if (geolocate) { + newMap.addControl( + new mapboxgl.GeolocateControl({ + positionOptions: { + enableHighAccuracy: true + }, + fitBoundsOptions, + trackUserLocation: true, + showUserHeading: true + }) + ); + } newMap.addControl(scaleControl); diff --git a/website/src/lib/components/docs/DocsLoader.svelte b/website/src/lib/components/docs/DocsLoader.svelte index 0de35137..8a26e6c2 100644 --- a/website/src/lib/components/docs/DocsLoader.svelte +++ b/website/src/lib/components/docs/DocsLoader.svelte @@ -74,6 +74,11 @@ @apply hover:underline; } + :global(.markdown li > a) { + @apply text-blue-500; + @apply hover:underline; + } + :global(.markdown kbd) { @apply p-1; @apply rounded-md; diff --git a/website/src/lib/components/docs/DocsNote.svelte b/website/src/lib/components/docs/DocsNote.svelte index 830902d6..617e8c10 100644 --- a/website/src/lib/components/docs/DocsNote.svelte +++ b/website/src/lib/components/docs/DocsNote.svelte @@ -9,3 +9,10 @@ > + + diff --git a/website/src/lib/components/embedding/Embedding.svelte b/website/src/lib/components/embedding/Embedding.svelte index 7c148a12..456c6837 100644 --- a/website/src/lib/components/embedding/Embedding.svelte +++ b/website/src/lib/components/embedding/Embedding.svelte @@ -18,14 +18,25 @@ $embedding = true; - const { currentBasemap, distanceUnits, velocityUnits, temperatureUnits, fileOrder } = settings; + const { + currentBasemap, + distanceUnits, + velocityUnits, + temperatureUnits, + fileOrder, + distanceMarkers, + directionMarkers + } = settings; export let options: EmbeddingOptions; + export let hash: string; - let prevUnits = { - distance: '', - velocity: '', - temperature: '' + let prevSettings = { + distanceMarkers: false, + directionMarkers: false, + distanceUnits: 'metric', + velocityUnits: 'speed', + temperatureUnits: 'celsius' }; function applyOptions() { @@ -97,29 +108,39 @@ return $selection; }); - map.subscribe(($map) => { - if ($map) { - $map.fitBounds( - [ - bounds.southWest.lon, - bounds.southWest.lat, - bounds.northEast.lon, - bounds.northEast.lat - ], - { - padding: 80, - linear: true, - easing: () => 1 - } - ); - } - }); + if (hash.length === 0) { + map.subscribe(($map) => { + if ($map) { + $map.fitBounds( + [ + bounds.southWest.lon, + bounds.southWest.lat, + bounds.northEast.lon, + bounds.northEast.lat + ], + { + padding: 80, + linear: true, + easing: () => 1 + } + ); + } + }); + } }); if (options.basemap !== $currentBasemap && allowedEmbeddingBasemaps.includes(options.basemap)) { $currentBasemap = options.basemap; } + if (options.distanceMarkers !== $distanceMarkers) { + $distanceMarkers = options.distanceMarkers; + } + + if (options.directionMarkers !== $directionMarkers) { + $directionMarkers = options.directionMarkers; + } + if (options.distanceUnits !== $distanceUnits) { $distanceUnits = options.distanceUnits; } @@ -134,9 +155,11 @@ } onMount(() => { - prevUnits.distance = $distanceUnits; - prevUnits.velocity = $velocityUnits; - prevUnits.temperature = $temperatureUnits; + prevSettings.distanceMarkers = $distanceMarkers; + prevSettings.directionMarkers = $directionMarkers; + prevSettings.distanceUnits = $distanceUnits; + prevSettings.velocityUnits = $velocityUnits; + prevSettings.temperatureUnits = $temperatureUnits; }); $: if (options) { @@ -144,16 +167,24 @@ } onDestroy(() => { - if ($distanceUnits !== prevUnits.distance) { - $distanceUnits = prevUnits.distance; + if ($distanceMarkers !== prevSettings.distanceMarkers) { + $distanceMarkers = prevSettings.distanceMarkers; } - if ($velocityUnits !== prevUnits.velocity) { - $velocityUnits = prevUnits.velocity; + if ($directionMarkers !== prevSettings.directionMarkers) { + $directionMarkers = prevSettings.directionMarkers; } - if ($temperatureUnits !== prevUnits.temperature) { - $temperatureUnits = prevUnits.temperature; + if ($distanceUnits !== prevSettings.distanceUnits) { + $distanceUnits = prevSettings.distanceUnits; + } + + if ($velocityUnits !== prevSettings.velocityUnits) { + $velocityUnits = prevSettings.velocityUnits; + } + + if ($temperatureUnits !== prevSettings.temperatureUnits) { + $temperatureUnits = prevSettings.temperatureUnits; } $fileOrder = $fileOrder.filter((id) => !id.includes('embed')); @@ -166,6 +197,8 @@ class="h-full {$fileObservers.size > 1 ? 'horizontal' : ''}" accessToken={options.token} geocoder={false} + geolocate={false} + hash={false} /> diff --git a/website/src/lib/components/embedding/Embedding.ts b/website/src/lib/components/embedding/Embedding.ts index 30084c0e..76c0cd81 100644 --- a/website/src/lib/components/embedding/Embedding.ts +++ b/website/src/lib/components/embedding/Embedding.ts @@ -1,3 +1,5 @@ +import { basemaps } from "$lib/assets/layers"; + export type EmbeddingOptions = { token: string; files: string[]; @@ -13,6 +15,8 @@ export type EmbeddingOptions = { temp: boolean, power: boolean, }, + distanceMarkers: boolean, + directionMarkers: boolean, distanceUnits: 'metric' | 'imperial', velocityUnits: 'speed' | 'pace', temperatureUnits: 'celsius' | 'fahrenheit', @@ -33,6 +37,8 @@ export const defaultEmbeddingOptions = { temp: false, power: false, }, + distanceMarkers: false, + directionMarkers: false, distanceUnits: 'metric', velocityUnits: 'speed', temperatureUnits: 'celsius', @@ -57,7 +63,4 @@ export function getCleanedEmbeddingOptions(options: any, defaultOptions: any = d return cleanedOptions; } -export const allowedEmbeddingBasemaps = [ - 'mapboxOutdoors', - 'mapboxSatellite', -]; \ No newline at end of file +export const allowedEmbeddingBasemaps = Object.keys(basemaps).filter(basemap => !['ordnanceSurvey'].includes(basemap)); \ No newline at end of file diff --git a/website/src/lib/components/embedding/EmbeddingPlayground.svelte b/website/src/lib/components/embedding/EmbeddingPlayground.svelte index 64221991..7b42fcc2 100644 --- a/website/src/lib/components/embedding/EmbeddingPlayground.svelte +++ b/website/src/lib/components/embedding/EmbeddingPlayground.svelte @@ -5,7 +5,16 @@ import * as Select from '$lib/components/ui/select'; import { Checkbox } from '$lib/components/ui/checkbox'; import * as RadioGroup from '$lib/components/ui/radio-group'; - import { Zap, HeartPulse, Orbit, Thermometer, SquareActivity } from 'lucide-svelte'; + import { + Zap, + HeartPulse, + Orbit, + Thermometer, + SquareActivity, + Coins, + Milestone, + Video + } from 'lucide-svelte'; import { _ } from 'svelte-i18n'; import { allowedEmbeddingBasemaps, @@ -35,11 +44,11 @@ let manualCamera = false; - let zoom = 0; - let lat = 0; - let lon = 0; - let bearing = 0; - let pitch = 0; + let zoom = '0'; + let lat = '0'; + let lon = '0'; + let bearing = '0'; + let pitch = '0'; $: hash = manualCamera ? `#${zoom}/${lat}/${lon}/${bearing}/${pitch}` : ''; @@ -58,6 +67,21 @@ $: if (options.elevation.height || options.elevation.show) { resizeMap(); } + + function updateCamera() { + if ($map) { + let center = $map.getCenter(); + lat = center.lat.toFixed(4); + lon = center.lng.toFixed(4); + zoom = $map.getZoom().toFixed(2); + bearing = $map.getBearing().toFixed(1); + pitch = $map.getPitch().toFixed(0); + } + } + + $: if ($map) { + $map.on('moveend', updateCamera); + } @@ -164,6 +188,20 @@ {/if} +
+ + +
+
+ + +
+
+
+ + +
+

+ {$_('embedding.manual_camera_description')} +

+
+ + + + + +
+
- +
                 
-                    {`