Questa guida fornisce uno sguardo dettagliato ai componenti web di Maps 3D e alle considerazioni da fare durante l'integrazione con la tua applicazione.
Considerazioni sulle prestazioni
Per garantire un'esperienza fluida e reattiva per l'interattività e gli elementi visivi, prendi in considerazione i seguenti approcci.
Caricare la mappa
La configurazione iniziale di caricamento e rendering di Maps 3D combina tecniche di configurazione del browser e best practice dell'interfaccia utente per un'esperienza utente ottimale.
- Caricamento dell'API: utilizza il caricamento dinamico asincrono di Maps 3D per caricare l'API Maps JavaScript al caricamento iniziale della pagina.
- Librerie: carica le librerie a livello di programmazione quando necessario, ad esempio
google.maps.importLibrary("maps3d"). In alternativa, se utilizzi componenti web come<gmp-map-3d>direttamente nella pagina HTML con caricamento diretto degli script, le librerie verranno caricate automaticamente al momento opportuno. - Gestire le funzionalità della mappa base:utilizza un mapId personalizzato per filtrare i PDI della mappa base (modalità IBRIDA) e controllarne la densità, soprattutto se l'applicazione ha il proprio set di elementi personalizzati come indicatori o polilinee. In questo modo si evitano il disordine visivo e la potenziale sovrapposizione. In alternativa, puoi disattivare le funzionalità dei riquadri vettoriali della mappa base, come PDI, polilinee stradali, nomi di strade, nomi di vie (modalità SATELLITE).
- Eventi: ascolta gli eventi gmp-steadystate o gmp-error per creare la logica successiva, ad esempio caricare gli indicatori e animare la videocamera.
Interazione utente:attendi l'evento gmp-steadystate prima di apportare modifiche ai contenuti della mappa. Se un utente inizia a interagire (panoramica, zoom) con la mappa prima dell'evento gmp-steadystate iniziale, l'evento verrà attivato solo dopo che l'utente smette di interagire. Evita di visualizzare o aggiornare i contenuti di overlay (come indicatori o poligoni) mentre l'utente esegue la panoramica o lo zoom della mappa, evitando di visualizzare o aggiornare i contenuti di overlay contenuti (come indicatori o poligoni) ascoltando gmp-centerchange, gmp-headingchange gmp-rangechange gmp-rollchange gmp-tiltchange.
Utilizza
requestAnimationFrame()(rAF) per gli aggiornamenti continui e separa rigorosamente i calcoli intensivi dalle chiamate di disegno.- Utilizza rAF: sincronizza gli aggiornamenti con la frequenza di visualizzazione del browser per un'animazione fluida a 60 FPS e un consumo energetico ridotto.
- Evita un lavoro di disegno intensivo: non eseguire attività pesanti e non di disegno durante l'aggiornamento finale.
- Logica separata: esegui tutta la logica intensiva prima delle chiamate di aggiornamento dei componenti web minimi all'interno del loop rAF.
Impostazioni della scena iniziale:
<gmp-map-3d>le impostazioni della videocamera, come l'inclinazione, influiscono sulla velocità di caricamento. Più la scena viene ingrandita o inclinata, più poligoni dettagliati verranno visualizzati e richiederanno il caricamento. Il livello di dettaglio dipenderà anche dalla località (ad es. città con molti edifici rispetto alla campagna con solo elementi naturali).Visualizzazione del precaricatore: anche se
<gmp-map-3d>viene caricato molto rapidamente, potrebbe essere necessario un po' di tempo per visualizzarlo in piena risoluzione per gli utenti con dispositivi di fascia bassa (GPU bassa) o larghezza di banda (4G lento). In questo caso, puoi creare un precaricatore con immagine, animazione o testo con la scena 3D caricata in background. Di seguito sono riportati gli eventi chiave da utilizzare:
// create the map in the background and wait for gmp-steadystate event async function initMap() { await google.maps.importLibrary("maps3d"); const map = document.querySelector('gmp-map-3d'); const div = document.querySelector('div'); // preloader " map.addEventListener('gmp-steadystate', ({isSteady}) => { if (isSteady) { div.style.display = 'none'; } }); } initMap();
- Mappa 2D:
- Una mappa 2D alternativa (SATELLITE) può essere fornita a questi utenti includendo comunque i dati geografici, ad esempio gli indicatori.
- In alternativa, è possibile visualizzare una mappa statica 2D complementare in modalità SATELLITE per consentire agli utenti di visualizzare un determinato luogo durante il caricamento.
Prestazioni e gestione degli elementi visivi
Maps 3D offre diversi modi per visualizzare elementi visivi come indicatori, polilinee, poligoni e modelli 3D con prestazioni ottimali e tempi di rendering minimi, anche per immagini di volume più elevato.
Indicatori
- PinElement: per le modifiche di base degli indicatori (colore, scala, bordo, glifo di testo
), utilizza l'elemento
<gmp-pin>o la classePinElement. Questo è il metodo di personalizzazione più efficiente. - Utilizza con parsimonia gli indicatori HTMLImageElement o SVGElement:utilizzali per una maggiore
personalizzazione, ad esempio per aggiungere trasparenza o inserire un'immagine come un'
icona in un SVGElement (richiede la codifica base64
). Verranno rasterizzati al caricamento e comporteranno un overhead delle prestazioni. HTMLImageElement
e SVGElement devono essere racchiusi nell'elemento
<template>prima di essere assegnati allo slot predefinito di Marker3DElement. - Per il momento non è possibile aggiungere HTML o CSS semplici.
Poligoni e polilinee
- Semplificare la geometria: prima del rendering, applica un algoritmo di semplificazione a i dati del percorso. In questo modo si riduce il numero di vertici mantenendo la forma generale, migliorando drasticamente la velocità di rendering, soprattutto per i confini o i percorsi complessi.
- Decimazione per livello di zoom: per set di dati molto grandi, valuta la possibilità di caricare la geometria con dettagli più elevati solo quando l'utente esegue lo zoom sull'area. A un livello di zoom basso, è necessaria solo una versione molto semplificata della polilinea o del poligono.
- Precalcola i poligoni estrusi: se i poligoni sono estrusi
(
extruded: true), i dati del percorso definiscono un volume 3D (una mesh). L'elaborazione di poligoni complessi con un numero elevato di vertici è costosa dal punto di vista computazionale. Assicurati che i dati di origine dei poligoni siano il più semplici possibile. - Testare le prestazioni di polilinee e poligoni:quando aggiungi numerose polilinee/poligoni complessi, soprattutto se estrusi per il 3D, assicurati che non causino cali di frequenza fotogrammi. Se necessario, limita il numero di vertici o utilizza algoritmi di semplificazione.
- Quando aggiorni una forma, modifica l'intero array del percorso in un'unica operazione anziché eseguire un loop e modificare i singoli elementi. Una singola operazione di assegnazione (ad es. polyline.path = newPathArray;) è molto più efficiente di più aggiornamenti iterativi.
- Evita le polilinee estruse (ove possibile): anche se le polilinee possono utilizzare un valore di altitudine per essere posizionate nello spazio 3D, l'estrusione di una polilinea (ad es. assegnandole stroke-width e un ampio intervallo di altitudine) può essere intensiva dal punto di vista grafico. Quando possibile, utilizza polilinee 2D a terra (RELATIVE_TO_GROUND) o una stroke-width minima per prestazioni migliori.
- Utilizza drawsOccludedSegments solo per gli elementi di routing critici. Per le forme di sfondo o contestuali, consenti loro di essere occluse naturalmente dalla geometria 3D della mappa. La visualizzazione della geometria nascosta non critica aggiunge una complessità di rendering non necessaria.
Modelli 3D
Il rendering e l'interattività dei modelli 3D .glb, come l'evento gmp-click, sono molto veloci in <gmp-map-3d>.
- Riduci al minimo le dimensioni dei file con la compressione: per garantire un caricamento rapido, soprattutto sulle reti mobili, mantieni i file di modelli .glb complessi sotto i 5 MB (idealmente meno). Il metodo principale per raggiungere questo obiettivo è applicare la compressione Draco ai dati della mesh all'interno dei file .glb, che può ridurre significativamente le dimensioni dei file (spesso di oltre il 50%) con una perdita minima di qualità visiva.
- Centra l'origine del modello:assicurati che il software di modellazione 3D esporti il modello con l'origine (punto 0, 0, 0) centrata alla base del modello. In questo modo si semplificano il posizionamento e la rotazione sulla mappa, assicurando che il modello si ancori correttamente alle coordinate di latitudine e longitudine.
- Gestisci CORS: se i file del modello sono ospitati su un dominio o una CDN diversi da quelli dell'applicazione web, devi configurare il server di hosting in modo che includa le intestazioni CORS (Cross-Origin Resource Sharing) necessarie (ad es. Access-Control-Allow-Origin: *). In caso contrario, la mappa non può caricare il modello.