Modalità e funzionalità di altitudine in Maps 3D

Quando specifichi l'altitudine per gli elementi su una mappa 3D, come linee, poligoni, modelli o indicatori, esistono diversi fattori che possono influire sul loro posizionamento, sia all'interno della scena sia nel 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 per le caratteristiche.

Ecco come puoi utilizzare AltitudeMode con una serie di tipi di caratteristiche:

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 in 3D o oggetti 3D acquisiti, come gli alberi. È fondamentale comprendere due concetti chiave:

  • Modello digitale del terreno (DTM): rappresenta l'elevazione della "terra nuda". Immagina la forma naturale del terreno senza edifici, alberi o altre strutture. Tutte le aree sono supportate dal DTM, che costituisce la base per l'altitudine 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 state acquisite caratteristiche (in particolare gli ambienti urbani in cui gli edifici dominano la vista), la superficie visibile apparirà più alta del terreno di base.

La distinzione tra DTM e DSM è fondamentale per comprendere in che modo 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 seguente:

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

Quando le caratteristiche non contengono dati sull'altitudine

Se i tuoi dati non contengono una misurazione dell'altitudine o se utilizzi dati di un altro servizio Google, come i servizi Routes o Places, spesso non avrai un'altitudine fornita nella geometria restituita. In questi casi, per posizionare l'elemento nella scena devi scegliere con attenzione un AltitudeMode:

  • Fissalo al suolo: 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 in base al modello DTM) o RELATIVE_TO_MESH (che li posiziona sopra il modello DSM).
  • Utilizza un altro servizio per ottenere l'altitudine: per un'altitudine DTM precisa nella posizione della caratteristica, 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.

Cosa significano le opzioni di AltitudeMode e quando utilizzarle?

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

ABSOLUTE

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

Come utilizzarlo: l'altitudine dell'oggetto è espressa in relazione al livello medio del mare (calcolato utilizzando EGM96). La coordinata di altitudine della caratteristica viene interpretata come un'elevazione precisa sul livello medio del mare.

Quando utilizzarla: per elementi 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 stendere una coperta da picnic direttamente su un pendio. Indipendentemente dalla pendenza della collina, la coperta è sempre piatta sulla superficie visibile.

Come utilizzarlo: l'altitudine dell'oggetto viene espressa come se fosse posizionato 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 essere conformi al terreno, come strade, recinzioni, sentieri, confini di proprietà o la base degli edifici.

RELATIVE_TO_GROUND

Immagina una mongolfiera che rimane 100 metri sopra l'elevazione naturale del terreno (DTM) sottostante. Se il terreno sale, il pallone sale con lui, mantenendo la distanza di 100 metri dalla "terra nuda".

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

Quando utilizzarlo: per gli oggetti che devono mantenere un'altezza costante rispetto al 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 sorvolando, 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 utilizzarlo: l'altitudine dell'oggetto è espressa in relazione alla superficie più alta tra terreno, edificio e superficie dell'acqua (DSM). La coordinata di altitudine della caratteristica viene interpretata come un offset rispetto all'elevazione del DSM.

Quando utilizzarla: per gli oggetti che devono fluttuare a una certa altezza sopra qualsiasi elemento fisico (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 prima il posizionamento degli indicatori, poi le linee e le aree, che presentano alcune considerazioni diverse.

Indicatori di posizione

Considera un indicatore di posizione posizionato come segue:

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

Puoi vederlo come il segnaposto bianco nella scena seguente:

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

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

Una scena di mappa 3D che mostra più segnaposto (bianco, viola, arancione, blu) posizionati utilizzando diverse modalità di altitudine, tutti centrati intorno a Stonehenge.

Vediamo come i diversi AltitudeMode influiscono sul posizionamento dell'indicatore in ordine crescente di altitudine.

CLAMP_TO_GROUND (segnaposto viola)

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

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

ABSOLUTE (White Pin)

Questo segnaposto utilizza il valore esatto dell'altitudine (102,23 m) per posizionare l'indicatore a quell'altezza sul livello del mare (EGM96), apparendo sopra una delle pietre di Stonehenge come specificato dall'altitudine fornita.

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

RELATIVE_TO_GROUND (segnaposto arancione)

Questo segnaposto prende il terreno (DTM) come base e si posiziona a 102,23 m sopra il livello del suolo, sembrando fluttuare sopra il terreno naturale che si trova sotto la pietra nell'henge.

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

RELATIVE_TO_MESH (segnaposto blu)

Questo segnaposto utilizza la superficie visibile (DSM) come base e si posiziona a 102,23 m sopra la 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 località all'altitudine specificata sopra. Poiché il DSM si trova nella parte superiore del menhir, questo segnaposto include questa altezza aggiuntiva nella misurazione quando determina l'altezza relativa, allineandola leggermente più in alto rispetto al segnaposto RELATIVE_TO_GROUND.

Linee e aree di posizione

Per linee e aree, sono fondamentali sia l'altitudine dei punti all'interno della caratteristica (specificata o meno) sia l'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 seguente, 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 che utilizzano 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 "drappeggia" 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 adatta la linea al DTM, seguendo il terreno sottostante e ignorando la mesh degli elementi sopra di esso.

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ò 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, pietre) se i valori di altitudine lo richiedono. 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 suolo.

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

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 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 cambiare date le diverse caratteristiche del terreno.

Quando l'altitudine non è specificata per le linee

Ora consideriamo le stesse coordinate della linea, ma senza specificare l'altitudine:

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 l'altitudine, le linee spesso appaiono in posizioni simili. Le linee bianca, arancione e viola potrebbero fondersi in un'unica linea (arancione, poiché in genere viene disegnata per ultima) perché tutte hanno per impostazione predefinita un posizionamento simile a livello del suolo. 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 nuovamente la mesh (DSM) come base. Poiché non è specificata un'altitudine, i punti vengono sovrapposti direttamente sulla mesh. È importante notare che non traccia la linea sulla mesh, ma collega i punti specificati sulla mesh con connessioni dirette. Anche se questo potrebbe sembrare accettabile in alcuni esempi, può causare problemi di visibilità se coperto da altre funzionalità. Questo problema è trattato nella prossima sezione.

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 suolo (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 },
];

Se osserviamo 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 lungo il terreno. Il bianco è ASSOLUTO, come puoi vedere dalle linee rette che collegano i punti posizionati in modo assoluto nello spazio. Con l'arancione e il blu che sono versioni relative alla SUPERFICIE (DTM) o alla RETE (DSM), tieni presente che la linea blu ha una forma leggermente diversa a causa dell'altezza degli elementi sottostanti.

Ancora una volta, possiamo notare che la natura della creazione della linea fa sì che questa passi attraverso la mesh, poiché i punti sono collegati tra loro da linee rette. Questo scenario potrebbe causare problemi nella visualizzazione delle linee, quindi puoi impostare drawsOccludedSegments su true per assicurarti che la linea sia visibile attraverso gli alberi, come mostrato in maggiore dettaglio nell'immagine seguente, dove le linee che passano attraverso la mesh possono ancora essere visualizzate.

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

La natura del posizionamento nello spazio implica che i punti potrebbero rientrare nella mesh e anche le linee che collegano i punti potrebbero rientrare nella mesh, 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 al livello del DTM, con dettagli aggiuntivi limitati sopra la 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 },
];

Come si può vedere nell'immagine, le linee 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 (bianco, blu, viola, arancione) su un terreno relativamente pianeggiante, evidenziando gli 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 perché è stata disegnata 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 vederlo chiaramente in questa immagine, in cui 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ò essere vista scomparire sotto il terreno (o anche attraverso la mesh) poiché la linea tra i punti segue semplicemente un percorso dritto. Potresti riuscire a migliorare la visualizzazione di una linea di questo tipo aggiungendo altri punti tra le linee utilizzando un metodo di interpolazione. L'impatto 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 consente di posizionare l'elemento a un livello più appropriato, in modo che si adatti meglio al profilo elevazione. Se questi punti intermedi non sono presenti nei tuoi dati, puoi utilizzare una funzione di interpolazione, come la funzione Interpolate della libreria Geometry di Google Maps Platform, per aggiungerli. A questi nuovi punti possono poi essere assegnati valori relativi che verranno posizionati sopra il profilo elevazione pertinente, dopodiché la lunghezza di qualsiasi linea che unisce i punti verrà limitata e la rappresentazione visiva migliorata.
  • Per le caratteristiche assolute (ABSOLUTE): per le caratteristiche ABSOLUTE, un numero maggiore di punti dovrà avere valori di altitudine effettivi. L'interpolazione tra i valori assoluti esistenti non fornirà un punto che rifletta accuratamente un 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 in Photorealistic 3D Maps, illustrando in dettaglio l'impatto di ABSOLUTE, CLAMP_TO_GROUND, RELATIVE_TO_GROUND e RELATIVE_TO_MESH sul posizionamento e sul rendering di varie caratteristiche 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