Informazioni sulle modalità e sulle funzionalità di altitudine in Maps 3D

Quando specifichi l'altitudine per le funzionalità di una mappa 3D, ad esempio linee, poligoni, modelli o indicatori, ci sono diversi fattori che possono influire sul loro posizionamento, sia all'interno della scena sia nel modo in cui il rendering della scena interagisce con quella funzionalità. Questo documento descrive l'utilizzo di "AltitudeMode" su una mappa 3D e come gestire l'altitudine per le funzionalità.

Ecco come puoi utilizzare AltitudeMode con diversi tipi di funzionalità:

Come viene utilizzata l'altitudine negli ambienti 3D

Quando posizioni i punti all'interno di una scena 3D, la loro posizione finale è influenzata dalla presenza di edifici o oggetti 3D acquisiti come gli alberi. È fondamentale comprendere due concetti chiave:

  • Modello digitale del terreno (DTM): rappresenta l'elevazione del "terreno nudo". Pensa alla forma naturale del terreno senza edifici, alberi o altre strutture. Tutte le aree sono supportate dal DTM, che costituisce la base per l'elevazione del globo (calcolata utilizzando EGM96).
  • Modello digitale di superficie (DSM): rappresenta l'elevazione della "superficie superiore", inclusi edifici, alberi e altre strutture. Nelle aree in cui sono state acquisite le caratteristiche (in particolare gli ambienti urbani in cui gli edifici dominano la visuale), la superficie visibile apparirà più alta del terreno di base.

La distinzione tra DTM e DSM è fondamentale per capire come i diversi modalità di altitudine interagiscono con questi modelli digitali di elevazione (DEM), poiché il posizionamento delle funzionalità potrebbe essere oscurato o influenzato dal modello di superficie. Puoi vedere le differenze nel diagramma seguente:

Una mappa 3D che mostra la distinzione tra il modello digitale del terreno (DTM) e il modello digitale di superficie (DSM).

Quando le funzionalità non dispongono di dati sull'altitudine

Se disponi di dati privi di misurazione dell'altitudine o se utilizzi dati di un altro servizio Google, come i servizi Routes o Places, spesso non avrai alcuna altitudine fornita nella geometria restituita. In questi casi, per inserire la funzionalità nella scena devi scegliere un AltitudeMode con attenzione:

  • Fissalo al terreno: l'approccio più semplice, in cui la funzionalità si adatta automaticamente al terreno. Questa modalità utilizza il modello DTM.
  • Assegna un'altitudine arbitraria + modalità relativa: puoi assegnare un'altitudine scelta e poi utilizzare RELATIVE_TO_GROUND (che posiziona le funzionalità rispetto al modello DTM) o RELATIVE_TO_MESH (che le posiziona sopra il modello DSM).
  • Utilizza un altro servizio per ottenere l'altitudine: per un'altitudine DTM precisa nella posizione della funzionalità, puoi utilizzare un servizio come l'API Elevation di Google Maps Platform. Se si tratta di una linea o di un poligono, dovrai farlo per ciascuno dei punti che compongono la linea o il poligono.

Che cosa significano le opzioni AltitudeMode e quando utilizzarle?

Esistono quattro opzioni di AltitudeMode che puoi specificare quando definisci una funzionalità:

ASSOLUTO

Immagina un aereo che vola a un'altitudine specifica sopra il livello del mare, ad esempio 3000 metri. La sua altezza è fissa, indipendentemente dal fatto che voli sopra una montagna o una valle.

Come utilizzarlo: l'altitudine dell'oggetto è espressa rispetto al livello medio del mare (calcolato utilizzando EGM96). La coordinata di altitudine della funzionalità viene interpretata come un'elevazione precisa sopra il livello medio del mare.

Quando utilizzarlo: per funzionalità con altitudini note e precise, come traiettorie di volo, oggetti sommersi con profondità esatta o strumenti scientifici a punto fisso.

CLAMP_TO_GROUND

Immagina di posizionare una coperta da picnic direttamente su una collina. Indipendentemente dalla pendenza della collina, la coperta rimane sempre piatta sulla superficie visibile.

Come utilizzarlo: l'altitudine dell'oggetto viene espressa come se fosse posizionato direttamente a terra. Rimarranno a livello del suolo, seguendo il terreno, indipendentemente da qualsiasi valore di altitudine fornito. La coordinata di altitudine della funzionalità viene ignorata e proiettata direttamente sulla superficie del terreno (DTM).

Quando utilizzarlo: per le funzionalità che devono sempre conformarsi al terreno, come strade, recinzioni, sentieri, confini di proprietà o la base degli edifici.

RELATIVE_TO_GROUND

Immagina una mongolfiera che rimane a 100 metri sopra l'elevazione naturale del terreno (DTM) sottostante. Se il terreno sale, anche il pallone sale mantenendo la distanza di 100 metri dal "terreno nudo".

Come utilizzarlo: l'altitudine dell'oggetto è espressa rispetto alla superficie del terreno (DTM). La coordinata di altitudine della funzionalità viene interpretata come un offset rispetto all'elevazione del terreno nella sua posizione orizzontale.

Quando utilizzarlo: per gli oggetti che devono mantenere un'altezza costante sopra il terreno naturale, come le torri di comunicazione o le linee aeree nelle zone rurali.

RELATIVE_TO_MESH

È come se un drone volasse a un'altezza fissa sopra qualsiasi cosa stia sorvolando, che si tratti di un terreno nudo, del tetto di un edificio o della cima di un albero. Si adatta alla superficie visibile più alta (DSM).

Come utilizzarlo: l'altitudine dell'oggetto è espressa rispetto alla più alta delle superfici di terreno, edificio e acqua (DSM). La coordinata di altitudine della funzionalità viene interpretata come offset dall'elevazione del DSM.

Quando utilizzarlo: per gli oggetti che devono fluttuare a una certa altezza sopra qualsiasi cosa sia fisicamente presente (DTM, edifici, acqua), utile per i marcatori sui tetti o per le funzionalità che si adattano dinamicamente alla scena visibile.

Per maggiori dettagli, consulta la documentazione sulle costanti AltitudeMode.

Esempi visivi e applicazioni pratiche

Questi esempi utilizzano una località specifica, Stonehenge, per illustrare in che modo le diverse opzioni di AltitudeMode influiscono sul posizionamento delle funzionalità. Questi esempi riguardano prima i marcatori di posizione, poi le linee e le aree, che presentano alcune considerazioni diverse.

Indicatori di posizione

Considera un indicatore del segnaposto posizionato come segue:

const markerLocation = { lat: 51.1789, lng: -1.8262, altitude: 102.23 };

Puoi vedere questo elemento come il segnaposto bianco nella scena di seguito:

Una scena di mappa 3D con un indicatore bianco, che illustra il posizionamento predefinito di un indicatore.

Ora guarda l'immagine seguente che mostra i segnaposto di vari colori posizionati utilizzando le diverse modalità di altitudine.

Una scena della mappa 3D che mostra più segnaposto (bianchi, viola, arancioni, blu) posizionati utilizzando diverse modalità di altitudine, tutti centrati su Stonehenge.

Vediamo come le diverse AltitudeModeinfluenzano il posizionamento del segnaposto in ordine crescente di elevazione.

CLAMP_TO_GROUND (puntina viola)

Questo segnaposto ignora il valore dell'altitudine e si attacca all'elevazione del terreno più vicina. Puoi vederlo appena sotto il segnaposto bianco, che si "aggancia" al terreno.

Tecnicamente, questa modalità ignora l'altitudine effettiva e blocca il segnaposto all'altezza DTM più vicina.

ASSOLUTO (segnaposto bianco)

Questo segnaposto utilizza il valore esatto dell'altitudine (102,23 m) per posizionare il marcatore a questa altezza sopra il livello del mare (EGM96), che appare sopra una delle pietre di Stonehenge, come specificato dall'altitudine fornita.

Tecnicamente, questa modalità utilizza il valore di altitudine fornito per posizionare il segnaposto all'altezza specificata sopra il livello del mare, che in questo esempio è la posizione di Stonehenge, ma in cima a una delle pietre.

RELATIVE_TO_GROUND (puntina arancione)

Questo segnaposto prende come base il modello digitale del terreno (DTM) e si posiziona a 102,23 m sopra il livello del terreno, apparendo sospeso sopra il terreno naturale che si trova sotto la pietra del complesso megalitico.

Tecnicamente, questa modalità imposta la base al livello del DTM effettivo sul terreno e poi posiziona il segnaposto a 102,23 m sopra.

RELATIVE_TO_MESH (puntina blu)

Questo segnaposto utilizza come base la superficie visibile (DSM) e si trova a 102,23 m sopra questa superficie. Questa modalità include l'altezza della pietra nella misurazione, allineandola leggermente più in alto rispetto al segnaposto arancione.

Tecnicamente, questa modalità utilizza la mesh (DSM) come base e posiziona la posizione all'altitudine indicata sopra. Poiché il DSM si trova in cima alla stele, questo segnaposto include questa altezza aggiuntiva nella sua misurazione quando determina la sua altezza relativa, allineandolo leggermente più in alto rispetto al segnaposto RELATIVE_TO_GROUND.

Linee e aree di posizione

Per le linee e le aree, sono fondamentali sia l'altitudine dei punti all'interno della funzionalità (specificata o meno) sia il AltitudeMode utilizzato. Esaminiamo una linea lungo Stonehenge con le seguenti altitudini specificate:

const lineCoords = [
   { lat: 51.1786, lng : -1.8266, altitude: 101.36 },
   { lat: 51.1787, lng : -1.8264, altitude: 101.18 },
   { lat: 51.178778, lng : -1.826354, altitude: 104.89 },
   { lat: 51.178815, lng : -1.826275, altitude: 107.55 },
   { lat: 51.178923, lng : -1.825980, altitude: 105.53 },
   { lat: 51.1791, lng : -1.8258, altitude: 100.29 },
   { lat: 51.1792, lng : -1.8257, altitude: 100.29 }
];

Puoi vedere questa linea rappresentata in bianco nell'immagine di seguito, utilizzando il posizionamento assoluto.

Una mappa 3D che mostra una linea bianca posizionata intorno a Stonehenge utilizzando il posizionamento assoluto.

Ancora una volta, l'immagine seguente mostra le linee utilizzando diverse modalità di altitudine. Esaminiamoli uno alla volta, dal più basso al più alto.

Una mappa 3D che mostra più linee colorate (viola, bianco, arancione, blu) posizionate intorno a Stonehenge utilizzando diverse modalità di altitudine.

CLAMP_TO_GROUND (linea viola)

Questa linea ignora l'altitudine specificata per ogni punto e invece "copre" la linea direttamente sul terreno sottostante (DTM). Segue il terreno, ignorando la presenza di elementi come edifici o pietre sopra di esso.

Tecnicamente, questa modalità ignora i valori di altitudine effettivi e sovrappone la linea al DTM, seguendo il terreno sottostante e ignorando la mesh delle caratteristiche sopra di essa.

ASSOLUTO (linea bianca)

Questa linea utilizza l'altitudine esatta per ogni punto, quindi passa sopra alcune pietre. È collegato da linee rette tra ogni punto, il che a volte può farlo sembrare passare attraverso gli oggetti se i punti non sono abbastanza frequenti.

Tecnicamente, questa modalità segue l'altitudine specificata per ogni punto, collegandoli con linee rette, il che significa che può passare attraverso la mesh (ad esempio: pietre) se i valori di altitudine lo impongono. Questo scenario è trattato in una sezione successiva.

RELATIVE_TO_GROUND (linea arancione)

Questa linea utilizza il terreno naturale (DTM) come base e posiziona ogni punto all'altitudine specificata sopra il livello del terreno.

Tecnicamente, questa modalità utilizza il DTM come base e posiziona le posizioni delle linee all'altitudine elencata rispetto a esso.

RELATIVE_TO_MESH (linea blu)

Questa linea utilizza come base la superficie visibile, che include edifici e pietre. Quindi posiziona ogni punto all'altitudine specificata sopra la mesh, replicando in modo efficace la forma della linea rispetto al paesaggio visibile.

Tecnicamente, questa modalità utilizza la mesh (DSM) come base e posiziona le località all'altitudine specificata sopra, a seconda della mesh la linea potrebbe variare in base alle diverse caratteristiche del terreno.

Quando l'altitudine non è specificata per le linee

Ora consideriamo le stesse coordinate della linea, ma senza alcuna altitudine specificata:

const lineCoords = [
   { lat: 51.1786, lng : -1.8266 },
   { lat: 51.1787, lng : -1.8264 },
   { lat: 51.178778, lng : -1.826354 },
   { lat: 51.178815, lng : -1.826275 },
   { lat: 51.178923, lng : -1.825980 },
   { lat: 51.1791, lng : -1.8258 },
   { lat: 51.1792, lng : -1.8257 }
];

In questo scenario, in cui non viene fornita alcuna altitudine, le linee spesso appaiono in posizioni simili. Le linee bianca, arancione e viola potrebbero unirsi in un'unica linea (arancione, in quanto in genere viene disegnata per ultima) perché tutte sono impostate per impostazione predefinita su un posizionamento simile a livello del suolo. Puoi vedere questo di seguito:

Una mappa 3D che mostra più linee colorate (arancione, blu) intorno a Stonehenge, con le linee bianche e viola che si uniscono a causa della mancanza di dati sull'altitudine.

La linea blu (RELATIVE_TO_MESH) utilizza di nuovo la mesh (DSM) come base. Poiché non è specificata alcuna altitudine, i punti vengono sovrapposti direttamente alla mesh. È importante notare che non traccia la linea sulla mesh, ma collega i punti specificati sulla mesh con connessioni rette. Anche se questo potrebbe sembrare accettabile in alcuni esempi, può causare problemi di visibilità quando è coperto da altre funzionalità. Questo problema è trattato nella sezione successiva.

L'interazione di mesh e linee. Ora possiamo esaminare un'altra polilinea. Questa immagine si trova nella stessa area, ma con una maggiore copertura del terreno (o maggiori dettagli sul DSM sopra il DTM).

const lineCoords = [
    { lat: 51.188404, lng: -1.779059, altitude: 70.69 },
    { lat: 51.187955, lng: -1.780143, altitude: 77.25 },
    { lat: 51.187658, lng: -1.781552, altitude: 68.97 },
    { lat: 51.187376, lng: -1.782447, altitude: 99.02 },
    { lat: 51.186912, lng: -1.783692, altitude: 104.35 },
    { lat: 51.185855, lng: -1.788368, altitude: 86.91 },
];

Quando vediamo la rappresentazione utilizzando gli stessi metodi (e colori) di prima, otteniamo questa visualizzazione:

Una mappa 3D che mostra più linee colorate (viola, bianco, arancione, blu) su un terreno con alberi e altitudini variabili.

Il colore viola indica CLAMP_TO_GROUND, che puoi vedere lungo il terreno. Il bianco è ASSOLUTO, come puoi vedere dalle linee rette che collegano i punti posizionati in modo assoluto nello spazio. Poiché l'arancione e il blu sono versioni relative della SUPERFICIE (DTM) o della MESH (DSM), nota che la linea blu è leggermente diversa nella forma a causa dell'altezza delle caratteristiche sottostanti.

Ancora una volta, possiamo notare che la natura della creazione della linea implica che la linea passi attraverso la mesh, poiché i punti sono collegati tra loro da linee rette. Questo scenario potrebbe causare problemi di visualizzazione delle linee, quindi puoi impostare drawsOccludedSegments su true per assicurarti che la linea sia visibile attraverso gli alberi, come mostrato in modo più dettagliato nell'immagine seguente, dove le linee che passano attraverso la mesh sono ancora visibili.

Una mappa 3D che mostra linee che passano attraverso gli alberi, con segmenti occlusi resi visibili per illustrare l'occlusione dei segmenti: true.

La natura del posizionamento nello spazio fa sì che i punti possano rientrare nella mesh e anche le linee che li collegano, causando potenzialmente artefatti visivi. Nella sezione seguente vedremo come questi artefatti possono essere migliorati, ove possibile.

Risoluzione dei problemi nell'interazione tra linee e terreno

In un altro esempio, nella stessa area, possiamo vedere altri artefatti di cui dobbiamo essere consapevoli quando utilizziamo modalità di altitudine specifiche.

Qui abbiamo un'area relativamente piatta che si trova principalmente a livello del DTM, con dettagli aggiuntivi limitati sopra nella mesh. Questo scenario si verificherebbe anche in un'area senza copertura 3D sopra il modello del terreno. Diamo un'occhiata alla seguente posizione, come specificato di seguito:

const lineCoords = [
   { lat: 51.194642, lng: -1.782636, altitude: 99.10 },
   { lat: 51.193974, lng: -1.783952, altitude: 99.86 },
   { lat: 51.192203, lng: -1.787175, altitude: 96.14 },
   { lat: 51.190024, lng: -1.790250, altitude: 105.92 },
   { lat: 51.187491, lng: -1.793580, altitude: 102.60 },
   { lat: 51.183690, lng: -1.798745, altitude: 95.69 },
];

Come si può vedere nell'immagine, le linee hanno la stessa rappresentazione del colore di prima: (bianco : ASSOLUTO, blu : RELATIVO_ALLA_MESH, viola : BLOCCATO_A_TERRA, arancione: RELATIVO_A_TERRA).

Una mappa 3D che mostra varie linee colorate (bianche, blu, viola, arancioni) su un terreno relativamente pianeggiante, evidenziando artefatti visivi in cui le linee scompaiono nel terreno.

Qui possiamo vedere una serie di artefatti, il primo dei quali è che, a causa della mancanza di copertura della superficie, le linee arancione (RELATIVE_TO_GROUND) e blu (RELATIVE_TO_MESH) si trovano (per lo più) nella stessa posizione (con la linea blu mostrata per ultima).

Possiamo anche notare che la linea viola (CLAMP_TO_GROUND) segue il terreno e si vede sulla collina, mentre la linea bianca (ABSOLUTE) sembra sparire nella collina perché sono collegati solo i punti e le linee rette attraversano il terreno.

Puoi vedere questo aspetto in particolare in questa immagine quando la linea viola è stata nascosta.

Una mappa 3D che mostra linee bianche e blu che scompaiono in una collina, con la linea viola nascosta, che illustra gli artefatti visivi delle linee assolute e relative alla mesh.

Ciò può quindi portare ad alcuni strani artefatti visivi, in cui la linea può scomparire sotto terra (o anche attraverso la mesh) poiché la linea tra i punti segue semplicemente un percorso rettilineo. Potresti essere in grado di migliorare la visualizzazione di una linea di questo tipo aggiungendo più punti tra le linee utilizzando un metodo di interpolazione. L'effetto sulla visualizzazione dipenderà ancora una volta dal metodo utilizzato:

  • Per le misurazioni relative (RELATIVE_TO_GROUND o RELATIVE_TO_MESH): quando utilizzi valori di altitudine relativi, la creazione di più punti lungo una linea o un poligono consentirà di posizionare la funzionalità a un livello più appropriato, in modo da adattarsi meglio al profilo altimetrico. Se questi punti intermedi non sono presenti nei tuoi dati, puoi utilizzare una funzione di interpolazione, ad esempio la funzione Interpolate nella libreria Geometry di Google Maps Platform, per aggiungerli. A questi nuovi punti possono essere assegnati valori relativi che verranno posizionati sopra il profilo altimetrico pertinente e la lunghezza di qualsiasi linea che unisce i punti verrà limitata e la rappresentazione visiva migliorata.
  • Per le funzionalità assolute (ABSOLUTE): per le funzionalità ABSOLUTE, più punti dovranno avere valori di altitudine effettivi. L'interpolazione tra i valori assoluti esistenti non darà un punto che rifletta con precisione qualsiasi valore sopra la mesh, in quanto sarebbe semplicemente una media tra il punto A e il punto B.

Riepilogo

Ci auguriamo che questo documento ti abbia fornito una panoramica completa delle opzioni AltitudeMode nelle mappe 3D fotorealistiche, illustrando in dettaglio in che modo ABSOLUTE, CLAMP_TO_GROUND, RELATIVE_TO_GROUND e RELATIVE_TO_MESH influiscono sul posizionamento e sul rendering di varie funzionalità come indicatori, linee e poligoni.

Comprendere il funzionamento di queste modalità insieme al modello digitale del terreno (DTM) e al modello digitale di superficie (DSM) sottostanti è fondamentale per creare rappresentazioni 3D accurate e visivamente accattivanti della mappa con il minimo di artefatti visivi.

Speriamo che sperimenterai queste modalità di altitudine nei tuoi progetti per sfruttare tutto il potenziale della mappatura 3D e creare esperienze coinvolgenti e immersive per i tuoi utenti e fornire feedback.

Collaboratori

Matt Toon | Solutions Engineer, Geo Developer