Escenas, marcadores y recorridos
Una escena es todo el estado del mapa en un único objeto simple: dónde está la cámara, qué se muestra, cómo están las segmentaciones y los filtros, qué está seleccionado y qué mapa base está activo. Captúrela, guárdela donde quiera y devuelva el mapa exactamente a ese punto más tarde.
Es el mismo estado que guarda uno de los marcadores del autor, más sus filtros, la selección y el mapa base.
Capturar y restaurar
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"
}
Las escenas sobreviven a una nueva publicación. Si desde entonces el autor ha quitado una capa o una segmentación, esa parte de la escena se omite y se indica en skipped (por ejemplo, "layer:old-depots"); todo lo demás se restaura. Nada falla.
Capture solo lo que quiera conservar:
const viewOnly = await map.captureScene({ include: ["camera", "visibility"] });
Devuelva todo a lo que publicó el autor con map.resetScene().
Empezar desde una escena
Pase una escena al montar el mapa y el lector nunca verá primero la vista predeterminada:
embed(el, { publishId, scene: JSON.parse(localStorage.getItem("last-view")) });
Compartir una escena como vínculo
sceneToUrl convierte una escena en un vínculo que abre el mapa exactamente ahí, sin necesidad de código en la página que lo abre:
const { sceneToUrl } = IconMapEmbed;
const scene = await map.captureScene();
const link = sceneToUrl("https://embed.iconmap.ai/v/pub_...", { scene });
La escena viaja en el fragmento de la URL (#s=...), que los navegadores nunca envían a un servidor, por lo que no aparece en los registros de acceso. Consulte Vínculos profundos.
Si prefiere guardar una cadena opaca en lugar de un objeto, pídala; applyScene acepta cualquiera de las dos:
const { state } = await map.captureScene({ opaque: true });
await map.applyScene({ scene: { state } });
Marcadores
Los marcadores son vistas que guardó el autor del mapa. Enumérelos y aplique uno: pasa por la misma ruta que la barra de marcadores del propio mapa, así que ambos nunca discrepan.
El autor decide si se ofrecen marcadores: getBookmarks() devuelve una lista vacía a menos que se marcara Show a bookmarks control in the viewer al publicar el mapa.
const bookmarks = await map.getBookmarks(); // [{ id, name, description? }]
await map.applyBookmark({ bookmarkId: bookmarks[0].id, animate: true });
map.on("bookmarkApplied", ({ bookmarkId }) => highlightMyTab(bookmarkId));
Cree su propia navegación por marcadores y oculte la del mapa:
await map.setChrome({ bookmarksBar: false });
Para abrir el mapa en un marcador, pase bookmarkId al montarlo.
Recorridos
Un recorrido es una secuencia de vistas que grabó el autor.
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" */ });
Mientras se reproduce un recorrido, los eventos viewChanged llevan reason: "tour", de modo que un controlador de sincronización de vista que solo actúa con "user" permanece inactivo.
Qué usar
| Quiere | Use |
|---|---|
| Recordar dónde dejó cada usuario el mapa | captureScene en viewChanged (reason user), scene al montar |
| Ofrecer vistas con nombre diseñadas por el autor | getBookmarks + applyBookmark |
| "Copiar vínculo a esta vista" | captureScene + sceneToUrl |
| Abrir un mapa en un estado concreto desde un correo electrónico o un informe | Un vínculo profundo |
| Mover solo la cámara | setView / flyTo: una escena es más de lo que necesita |