Szenen, Lesezeichen und Touren

Eine Szene ist der gesamte Zustand der Karte als ein einfaches Objekt: wo die Kamera steht, was angezeigt wird, worauf Datenschnitte und Filter gesetzt sind, was ausgewählt ist und welche Grundkarte aktiv ist. Erfassen Sie sie, bewahren Sie sie auf, wo Sie möchten, und versetzen Sie die Karte später genau dorthin zurück.

Es ist derselbe Zustand, den ein Lesezeichen des Autors enthält, plus Ihre Filter, die Auswahl und die Grundkarte.

Erfassen und wiederherstellen

const scene = await map.captureScene();
localStorage.setItem("last-view", JSON.stringify(scene));

// ... later, even after the map has been re-published
const { skipped } = await map.applyScene({ scene: JSON.parse(localStorage.getItem("last-view")), animate: true });
// EmbedScene
{
  v: 1,
  camera: { center: [lng, lat], zoom, bearing, pitch },
  visibility: { layers: { ... }, labels, hillshade, terminator, features: { ... }, visuals: { ... } },
  slicers: { "slicer-region": { ... } },
  filters: { region: ["EMEA"] },
  selection: { assets: ["41B"] },
  basemapId: "slate"
}

Szenen überstehen eine erneute Veröffentlichung. Hat der Autor inzwischen eine Ebene oder einen Datenschnitt entfernt, wird dieser Teil der Szene übersprungen und in skipped genannt (zum Beispiel "layer:old-depots"); alles andere wird wiederhergestellt. Nichts schlägt fehl.

Erfassen Sie nur, was Sie mitnehmen möchten:

const viewOnly = await map.captureScene({ include: ["camera", "visibility"] });

Mit map.resetScene() setzen Sie alles auf den Stand zurück, den der Autor veröffentlicht hat.

Mit einer Szene starten

Übergeben Sie beim Einbinden eine Szene, dann sieht der Betrachter nie zuerst die Standardansicht:

embed(el, { publishId, scene: JSON.parse(localStorage.getItem("last-view")) });

sceneToUrl macht aus einer Szene einen Link, der die Karte genau dort öffnet. Auf der Seite, die ihn öffnet, ist kein Code nötig:

const { sceneToUrl } = IconMapEmbed;

const scene = await map.captureScene();
const link = sceneToUrl("https://embed.iconmap.ai/v/pub_...", { scene });

Die Szene steht im Fragment der URL (#s=...), das Browser nie an einen Server senden. Sie erscheint daher nicht in Zugriffsprotokollen. Siehe Deep Links.

Wenn Sie lieber eine undurchsichtige Zeichenfolge als ein Objekt speichern, fordern Sie eine an. applyScene akzeptiert beides:

const { state } = await map.captureScene({ opaque: true });
await map.applyScene({ scene: { state } });

Lesezeichen

Lesezeichen sind Ansichten, die der Autor der Karte gespeichert hat. Listen Sie sie auf und wenden Sie eines an. Das geschieht auf demselben Weg wie über die Lesezeichenleiste der Karte, sodass beide nie voneinander abweichen.

Der Autor entscheidet, ob Lesezeichen angeboten werden: getBookmarks() liefert eine leere Liste, sofern beim Veröffentlichen der Karte nicht Show a bookmarks control in the viewer aktiviert wurde.

const bookmarks = await map.getBookmarks();      // [{ id, name, description? }]
await map.applyBookmark({ bookmarkId: bookmarks[0].id, animate: true });

map.on("bookmarkApplied", ({ bookmarkId }) => highlightMyTab(bookmarkId));

Bauen Sie Ihre eigene Lesezeichen-Navigation und blenden Sie die der Karte aus:

await map.setChrome({ bookmarksBar: false });

Um mit einem Lesezeichen zu öffnen, übergeben Sie beim Einbinden bookmarkId.

Touren

Eine Tour ist eine Abfolge von Ansichten, die der Autor aufgezeichnet hat.

const tours = await map.getTours();              // [{ id, name }]
await map.playTour({ tourId: tours[0].id });
await map.stopTour();

map.on("tourStateChanged", ({ tourId, state }) => { /* "started" | "keyframe" | "ended" */ });

Während eine Tour läuft, enthalten viewChanged-Ereignisse reason: "tour". Ein Handler zur Synchronisierung der Ansicht, der nur auf "user" reagiert, bleibt also still.

Was wofür

Sie möchten Verwenden Sie
Sich merken, wo jeder Benutzer die Karte verlassen hat captureScene bei viewChanged (reason user), scene beim Einbinden
Benannte Ansichten anbieten, die der Autor gestaltet hat getBookmarks + applyBookmark
„Link zu dieser Ansicht kopieren“ captureScene + sceneToUrl
Eine Karte aus einer E-Mail oder einem Bericht in einem bestimmten Zustand öffnen Einen Deep Link
Nur die Kamera bewegen setView / flyTo: Eine Szene ist mehr, als Sie brauchen