Links diretos
Alguns lugares conseguem exibir um iframe, mas não executam o seu JavaScript: uma página do SharePoint, uma macro do Confluence, um link em um e-mail. Nesses casos, a URL do mapa pode levar o estado em que ele deve abrir. Nenhum SDK é envolvido.
<iframe src="https://embed.iconmap.ai/v/pub_...?bookmark=bm-north&f.region=EMEA&lang=de"
style="width: 100%; height: 600px; border: 0"></iframe>
O que um link pode levar
| Na URL | Efeito |
|---|---|
?bookmark=<id> |
Abre em um dos indicadores do autor |
?f.<name>=<value> |
Define um filtro declarado. Repita para vários filtros |
?lang=<code> |
Idioma do leitor, por exemplo fr ou de-DE |
#s=<scene> |
Restaura uma cena capturada inteira: câmera, visibilidade, segmentações, filtros, seleção, mapa base |
Quando vários estão presentes, eles são aplicados nessa ordem, então a cena tem a palavra final.
Valores de filtro
Um valor simples é tratado como texto. Qualquer outro é escrito como JSON e codificado para URL:
?f.region=EMEA
?f.region=%5B%22EMEA%22%2C%22APAC%22%5D ["EMEA","APAC"]
?f.period=%7B%22operator%22%3A%22inLast%22%2C%22count%22%3A30%2C%22unit%22%3A%22days%22%7D
Um nome que o autor não declarou é ignorado, exatamente como seria rejeitado pela API: um link nunca consegue filtrar por uma coluna que o autor não ofereceu.
Por que a cena fica no fragmento
Tudo o que vem depois de # permanece no navegador: não é enviado ao servidor, portanto nunca aparece em logs de acesso, proxies ou ferramentas de análise. Uma cena pode conter uma seleção e valores de filtro, o que já é motivo suficiente para mantê-la fora deles.
Como criar links
Na caixa de diálogo de publicação
Depois de publicar, a caixa de diálogo oferece Copy link to this view ao lado da URL de incorporação. Esse recurso captura a câmera atual do editor, a visibilidade das camadas e as seleções das segmentações como uma cena e copia um link que abre o mapa publicado exatamente ali.
Na sua página
const { sceneToUrl } = IconMapEmbed;
const scene = await map.captureScene();
const link = sceneToUrl("https://embed.iconmap.ai/v/pub_...", {
scene,
bookmarkId: "bm-north",
filters: { region: ["EMEA"] },
language: "de",
});
Todas as partes são opcionais. deepLinkFromUrl(url) faz o inverso, se você quiser ler um link de volta:
const { deepLinkFromUrl } = IconMapEmbed;
const { scene, bookmarkId, filters, language } = deepLinkFromUrl(location.href);
Manualmente
Uma cena é um JSON codificado em base64url, então um link pode ser produzido por qualquer coisa capaz de fazer isso: um servidor, um relatório, um script:
const scene = { v: 1, camera: { center: [-3.18, 51.48], zoom: 12, bearing: 0, pitch: 0 } };
const s = btoa(JSON.stringify(scene)).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
const link = `https://embed.iconmap.ai/v/pub_...#s=${s}`;
v e camera são obrigatórios; todo o resto em uma cena é opcional.
Bom saber
- Os links sobrevivem a uma nova publicação das mesmas camadas. IDs que o mapa não tem mais são ignorados; o restante é aplicado. Uma nova publicação gera um novo ID de publicação, então os links para a publicação antiga continuam abrindo a antiga até que o autor a revogue.
- Um link direto não precisa de origem permitida. As origens permitidas determinam quem pode controlar um mapa por script. Um link apenas define o estado em que o mapa abre, usando coisas que qualquer leitor poderia fazer manualmente.
- Comprimento. Uma cena com uma seleção grande gera uma URL longa. Os navegadores suportam vários milhares de caracteres, mas algumas ferramentas de chat e de e-mail truncam. Capture só o que você precisa:
captureScene({ include: ["camera", "visibility"] }). - Também com o SDK. Se a sua página usa o SDK, prefira as opções
scene,bookmarkId,filterselanguage: elas fazem a mesma coisa e são tipadas.