Modalità e funzionalità di altitudine in Maps 3D

Quando specifichi l'altitudine per gli elementi 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 sul modo in cui il rendering della scena interagisce con l'elemento. Questo documento illustra l'utilizzo di "AltitudeMode" su una mappa 3D e come gestire l'altitudine degli elementi.

Ecco come puoi utilizzare AltitudeMode con diversi tipi di elementi:

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 sopra. Tutte le aree sono supportate da il DTM, che costituisce la base per l'elevazione del globo (calcolata utilizzando EGM96).
  • Modello digitale della superficie (DSM): rappresenta l'elevazione della "superficie superiore" , inclusi edifici, alberi e altre strutture. Nelle aree in cui sono stati acquisiti elementi (in particolare gli ambienti urbani in cui gli edifici dominano la visualizzazione), la superficie visibile apparirà più alta del terreno di base.

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

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

Quando gli elementi non hanno dati di altitudine

Se hai dati che non hanno una misurazione dell'altitudine o quando 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 posizionare l'elemento nella scena devi scegliere con attenzione un AltitudeMode:

  • Fissalo al terreno: l'approccio più semplice, in cui l'elemento 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 gli elementi rispetto al modello DTM) o RELATIVE_TO_MESH (che li fa fluttuare sopra il modello DSM).
  • Utilizza un altro servizio per ottenere l'altitudine: per un'altitudine DTM precisa nella posizione dell'elemento, 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 AltitudeMode che puoi specificare quando definisci un elemento:

ABSOLUTE

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 stia volando sopra una montagna o una valle.

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

Quando utilizzarla: per gli elementi con altitudini note e precise, come le rotte di volo , gli oggetti sommersi con una profondità esatta o gli strumenti scientifici a punto fisso.

CLAMP_TO_GROUND

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

Come utilizzarla: l'altitudine dell'oggetto è espressa come se fosse posizionata direttamente sul terreno. Rimarranno a livello del suolo, seguendo il terreno, indipendentemente dal valore di altitudine fornito. La coordinata di altitudine dell'elemento viene ignorata; viene proiettata direttamente sulla superficie del terreno (DTM).

Quando utilizzarla: per gli elementi che devono sempre adattarsi 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, la mongolfiera sale con esso, mantenendo una distanza di 100 metri dal "terreno nudo".

Come utilizzarla: l'altitudine dell'oggetto è espressa rispetto alla superficie del terreno (DTM). La coordinata di altitudine dell'elemento viene interpretata come un offset dall'elevazione del terreno nella sua posizione orizzontale.

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

RELATIVE_TO_MESH

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

Come utilizzarla: l'altitudine dell'oggetto è espressa rispetto alla superficie più alta del terreno + edificio + superficie dell'acqua (DSM). La coordinata di altitudine dell'elemento viene interpretata come un offset dall'elevazione DSM.

Quando utilizzarla: per gli oggetti che devono fluttuare a una certa altezza sopra qualsiasi cosa sia fisicamente presente (DTM, edifici, acqua), utile per gli indicatori sui tetti o per gli elementi che si adattano dinamicamente alla scena visibile.

Per maggiori dettagli, consulta la documentazione relativa alle costanti AltitudeMode.

Esempi visivi e applicazioni pratiche

Questi esempi utilizzano una località specifica, Stonehenge, per illustrare in che modo le diverse opzioni AltitudeMode influiscono sul posizionamento degli elementi. Questi esempi riguardano innanzitutto il posizionamento degli indicatori, poi delle linee e delle aree, che presentano alcune considerazioni diverse.

Posizionare gli indicatori

Considera un indicatore a forma di puntina posizionato come segue:

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

Puoi vederlo come la puntina bianca 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 di seguito che mostra le puntine di vari colori posizionate utilizzando le diverse modalità di altitudine.

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

Diamo un'occhiata a come le diverse AltitudeMode influiscono sul posizionamento dell'indicatore in ordine crescente di elevazione.

CLAMP_TO_GROUND (puntina viola)

Questa puntina ignora il valore di altitudine e si attacca all'elevazione del terreno più vicina. Puoi vederla appena sotto la puntina bianca, che si "fissa" al terreno.

Tecnicamente, questa modalità ignora l'altitudine effettiva e fissa la puntina all'altezza DTM più vicina.

ABSOLUTE (puntina bianca)

Questa puntina utilizza il valore di altitudine esatto (102,23 m) per posizionare l'indicatore 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 effettivo fornito per posizionare la puntina 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)

Questa puntina prende come base il terreno (DTM) e si posiziona a 102,23 m sopra il livello del terreno, apparendo come se fluttuasse sopra il terreno naturale sotto la pietra nel cerchio di pietre.

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

RELATIVE_TO_MESH (puntina blu)

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

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

Posizionare linee e aree

Per le linee e le aree, sono fondamentali sia l'altitudine dei punti all'interno dell'elemento (specificata o meno) sia la AltitudeMode utilizzata. 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 nell'immagine di seguito in bianco, 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 di seguito mostra le linee che utilizzano diverse modalità di altitudine. Esaminiamole una alla volta, dalla più bassa alla più alta.

Una mappa 3D che mostra più linee colorate (viola, bianca, 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 "avvolge" la linea direttamente sul terreno sottostante (DTM). Segue il terreno, ignorando la presenza di elementi come edifici o pietre sopra.

Tecnicamente, questa modalità ignora i valori di altitudine effettivi e avvolge la linea sul DTM, seguendo il terreno sottostante e ignorando la mesh degli elementi sopra.

ABSOLUTE (linea bianca)

Questa linea utilizza l'altitudine esatta per ogni punto, facendo sì che la linea passi sopra alcune delle pietre. È collegata da linee rette tra ogni punto, il che a volte può far sembrare che passi 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 le pietre) se i valori di altitudine lo impongono. Questo scenario è trattato in una sezione successiva.

RELATIVE_TO_GROUND (linea arancione)

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

Tecnicamente, questa modalità utilizza il DTM come base e posiziona le località della linea all'altitudine indicata rispetto a essa.

RELATIVE_TO_MESH (linea blu)

Questa linea utilizza come base la superficie visibile, che include edifici e pietre. Poi posiziona ogni punto all'altitudine specificata sopra la mesh, replicando efficacemente la forma della linea in relazione 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 ai diversi elementi sul 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, poiché in genere viene disegnata per ultima) perché tutte utilizzano per impostazione predefinita un posizionamento simile a livello del terreno. Puoi vederlo 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, sovrappone semplicemente i punti direttamente sopra la mesh. È importante notare che non posiziona la linea sulla mesh, ma collega i punti specificati sulla mesh con connessioni rette. Anche se in alcuni esempi potrebbe sembrare accettabile, può causare problemi di visibilità quando è coperta da altri elementi. 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 viola è CLAMP_TO_GROUND, che puoi vedere che segue il terreno. Il bianco è ABSOLUTE, che puoi vedere che le linee rette collegano i punti posizionati in modo assoluto nello spazio. Con le versioni relative arancione e blu relative alla SUPERFICIE (DTM) o alla MESH (DSM), nota che la linea blu ha una forma leggermente diversa a causa dell'altezza degli elementi sottostanti.

Anche in questo caso, possiamo notare che la natura della creazione delle linee fa sì 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 collegano i punti possano rientrare nella mesh, causando potenzialmente artefatti visivi. Nella sezione di seguito vedremo come questi artefatti possono essere migliorati, se possibile.

Risolvere i 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 pianeggiante 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 località, 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 },
];

E può essere visto nell'immagine, con le linee che hanno la stessa rappresentazione dei colori di prima: (bianco : ABSOLUTE, blu : RELATIVE_TO_MESH, viola : CLAMP_TO_GROUND, arancione: RELATIVE_TO_GROUND).

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 visualizzata per ultima).

Possiamo anche vedere che la linea viola (CLAMP_TO_GROUND) segue il terreno e può essere vista sulla collina, mentre la linea bianca (ABSOLUTE) sembra scomparire nella collina poiché solo i punti sono collegati e le linee rette attraversano il terreno.

Puoi vedere questo aspetto in modo specifico 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 il terreno (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 visivo 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 l'elemento a un livello più appropriato, adattandosi meglio al profilo di elevazione. Se questi punti intermedi non sono presenti nei tuoi dati, puoi utilizzare una funzione di interpolazione, come 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 elevazione pertinente e quindi la lunghezza di qualsiasi linea che unisce i punti verrà limitata e la rappresentazione visiva migliorata.
  • Per gli elementi assoluti (ABSOLUTE): per gli elementi ABSOLUTE, è necessario che più punti abbiano valori di altitudine effettivi. L'interpolazione tra i valori assoluti esistenti non fornirà un punto che rifletta con precisione qualsiasi valore sopra la mesh, poiché 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 che modo ABSOLUTE, CLAMP_TO_GROUND, RELATIVE_TO_GROUND e RELATIVE_TO_MESH influiscono sul posizionamento e sul rendering di vari elementi come indicatori, linee e poligoni.

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

Ci auguriamo che sperimenterai queste modalità di altitudine nei tuoi progetti per sbloccare 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