Wenn Sie für Elemente auf einer 3D-Karte eine Höhe angeben, z. B. für Linien, Polygone, Modelle oder Markierungen, können mehrere Faktoren ihre Platzierung beeinflussen – sowohl innerhalb der Szene als auch in Bezug darauf, wie die Darstellung der Szene mit diesem Element interagiert. In diesem Dokument wird die Verwendung von „AltitudeMode“ auf einer 3D-Karte und die Verwaltung der Höhe für Elemente behandelt.
So können Sie AltitudeMode mit verschiedenen Elementtypen verwenden:
Markierungen: Marker3DElement, Marker3DInteractiveElement
Geben Sie eine Höhe für den Standort und auch eine Extrusion an.
Modelle: Model3DElement, Model3DInteractiveElement
Geben Sie eine Höhe für den Ankerpunkt des Modells an, die zusammen mit seiner Ausrichtung für die korrekte Positionierung in der Szene verwendet werden sollte.
Polylinien: Polyline3DElement, Polyline3DInteractiveElement
Geben Sie an, wie die Höhe auf die Positionspunkte entlang einer Polylinie angewendet wird.
Polygone:Polygon3DElement, Polygon3DInteractiveElement
Geben Sie an, wie die Höhe auf die Positionspunkte entlang eines Polygons angewendet wird.
Verwendung der Höhe in 3D-Umgebungen
Wenn Sie Punkte in einer 3D-Szene platzieren, wird ihre endgültige Position durch das Vorhandensein von erfassten 3D-Gebäuden oder -Objekten wie Bäumen beeinflusst. Es ist wichtig, zwei Schlüsselkonzepte zu verstehen:
- Digitales Geländemodell (Digital Terrain Model, DTM): Stellt die Höhe des „unbebauten Geländes“ dar. Stellen Sie sich das als die natürliche Form des Geländes ohne Gebäude, Bäume oder andere Strukturen vor. Alle Bereiche werden unterlegt von dem DTM, das die Grundlage für die Höhe des Globus bildet (berechnet mit EGM96).
- Digitales Oberflächenmodell (Digital Surface Model, DSM): Stellt die Höhe der „Oberfläche“ dar, einschließlich Gebäuden, Bäumen und anderen Strukturen. In Bereichen, in denen Elemente erfasst wurden (insbesondere in städtischen Umgebungen, in denen Gebäude die Ansicht dominieren), erscheint die sichtbare Oberfläche höher als das Basisgelände.
Die Unterscheidung zwischen DTM und DSM ist wichtig, um zu verstehen, wie verschiedene Höhenmodi mit diesen digitalen Höhenmodellen (Digital Elevation Models, DEMs) interagieren, da die Platzierung von Elementen durch das Oberflächenmodell verdeckt oder beeinflusst werden kann. Die Unterschiede sind im folgenden Diagramm zu sehen:

Wenn für Elemente keine Höhendaten vorhanden sind
Wenn Sie Daten ohne Höhenmessung verwenden oder Daten aus einem anderen Google-Dienst wie Google Routen oder Google Places, ist in der zurückgegebenen Geometrie oft keine Höhe angegeben. In solchen Fällen müssen Sie sorgfältig einen AltitudeMode auswählen, um das Element in der Szene zu platzieren:
- Am Boden befestigen: Der einfachste Ansatz, bei dem sich das Element automatisch an das Gelände anpasst. In diesem Modus wird das DTM-Modell verwendet.
- Beliebige Höhe + relativer Modus: Sie können eine beliebige Höhe zuweisen und dann RELATIVE_TO_GROUND (Elemente werden relativ zum DTM-Modell platziert) oder RELATIVE_TO_MESH (Elemente werden über dem DSM-Modell platziert) verwenden.
- Höhe über einen anderen Dienst abrufen: Für eine genaue DTM-Höhe am Standort des Elements können Sie einen Dienst wie die Google Maps Platform Elevation API verwenden. Wenn es sich um eine Linie oder ein Polygon handelt, müssen Sie dies für jeden Punkt tun, aus dem die Linie oder das Polygon besteht.
Was bedeuten die AltitudeMode-Optionen und wann sollten sie verwendet werden?
Beim Definieren eines Elements können Sie vier AltitudeMode-Optionen angeben:
ABSOLUTE
Stellen Sie sich ein Flugzeug vor, das in einer bestimmten Höhe über dem Meeresspiegel fliegt,z. B. 3.000 Meter. Seine Höhe ist festgelegt, unabhängig davon, ob es über einen Berg oder ein Tal fliegt.
Verwendung: Die Höhe des Objekts wird relativ zum durchschnittlichen mittleren Meeresspiegel ausgedrückt (berechnet mit EGM96). Die Höhenkoordinate des Elements wird als genaue Höhe über dem mittleren Meeresspiegel interpretiert.
Verwendungszweck: Für Elemente mit bekannten, genauen Höhen, z. B. Flug routen, untergetauchte Objekte mit genauer Tiefe oder wissenschaftliche Instrumente mit festem Standort.
CLAMP_TO_GROUND
Stellen Sie sich vor, Sie legen eine Picknickdecke direkt auf einen Hang. Unabhängig davon, wie steil oder flach der Hang ist, liegt die Decke immer flach auf der sichtbaren Oberfläche.
Verwendung: Die Höhe des Objekts wird als direkt auf dem Boden platziert ausgedrückt. Sie bleiben auf Bodenhöhe und folgen dem Gelände, unabhängig von einem angegebenen Höhenwert. Die Höhenkoordinate des Elements wird ignoriert und direkt auf die Geländeoberfläche (DTM) projiziert.
Verwendungszweck: Für Elemente, die sich immer an das Gelände anpassen sollen, z. B. Straßen, Zäune, Wege, Grundstücksgrenzen oder die Basis von Gebäuden.
RELATIVE_TO_GROUND
Stellen Sie sich einen Heißluftballon vor, der sich immer 100 Meter über der natürlichen Bodenhöhe (DTM) befindet. Wenn der Boden ansteigt, steigt auch der Ballon mit an und hält den Abstand von 100 Metern zum „unbebauten Gelände“ ein.
Verwendung: Die Höhe des Objekts wird relativ zur Bodenoberfläche (DTM) ausgedrückt. Die Höhenkoordinate des Elements wird als Offset von der Geländehöhe an seiner horizontalen Position interpretiert.
Verwendungszweck: Für Objekte, die eine konstante Höhe über dem natürlichen Gelände einhalten müssen, z. B. Kommunikationstürme oder Überlandleitungen in ländlichen Gebieten.
RELATIVE_TO_MESH
Stellen Sie sich eine Drohne vor, die in einer festen Höhe über dem fliegt, was sich darunter befindet, unabhängig davon, ob es sich um den Boden, ein Gebäudedach oder die Spitze eines Baumes handelt. Sie passt sich an die höchste sichtbare Oberfläche (DSM) an.
Verwendung: Die Höhe des Objekts wird relativ zur höchsten Boden-, Gebäude- und Wasseroberfläche (DSM) ausgedrückt. Die Höhenkoordinate des Elements wird als Offset von der DSM-Höhe interpretiert.
Verwendungszweck: Für Objekte, die in einer bestimmten Höhe über allem schweben müssen, was physisch vorhanden ist (DTM, Gebäude, Wasser). Das ist nützlich für Markierungen auf Dächern oder Elemente, die sich dynamisch an die sichtbare Szene anpassen.
Weitere Informationen finden Sie in der Dokumentation zu den AltitudeMode-Konstanten.
Visuelle Beispiele und praktische Anwendungen
In diesen Beispielen wird ein bestimmter Ort, Stonehenge, verwendet, um zu veranschaulichen, wie sich verschiedene AltitudeMode-Optionen auf die Platzierung von Elementen auswirken. Zuerst wird die Positionierung von Markierungen behandelt, dann von Linien und Bereichen, bei denen einige andere Aspekte zu berücksichtigen sind.
Markierungen positionieren
Stellen Sie sich eine Stecknadelmarkierung vor, die wie folgt platziert wird:
const markerLocation = { lat: 51.1789, lng: -1.8262, altitude: 102.23 };
Sie sehen sie als weiße Stecknadel in der Szene unten:

Auf dem Bild unten sind Stecknadeln in verschiedenen Farben zu sehen, die mit den verschiedenen Höhenmodi positioniert wurden.

Sehen wir uns an, wie sich die verschiedenen AltitudeMode-Optionen auf die Positionierung der Markierung auswirken, in aufsteigender Reihenfolge der Höhe.
CLAMP_TO_GROUND (lila Stecknadel)
Diese Stecknadel ignoriert den Höhenwert und wird an der nächstgelegenen Bodenhöhe befestigt. Sie sehen sie direkt unter der weißen Stecknadel, effektiv „am Gelände befestigt“.
Technisch gesehen ignoriert dieser Modus die tatsächliche Höhe und befestigt die Stecknadel an der nächstgelegenen DTM-Höhe.
ABSOLUTE (weiße Stecknadel)
Diese Stecknadel verwendet den genauen Höhenwert (102,23 m), um die Markierung in dieser Höhe über dem Meeresspiegel (EGM96) zu platzieren.Sie erscheint auf einem der Steine von Stonehenge, wie durch die angegebene Höhe festgelegt.
Technisch gesehen verwendet dieser Modus den tatsächlich angegebenen Höhenwert, um die Stecknadel in der angegebenen Höhe über dem Meeresspiegel zu platzieren. In diesem Beispiel ist das der Standort von Stonehenge, aber auf einem der Steine.
RELATIVE_TO_GROUND (orange Stecknadel)
Diese Stecknadel verwendet den Boden (DTM) als Basis und platziert sich 102,23 m über dieser Bodenhöhe.Sie scheint über dem natürlichen Boden zu schweben, der sich unter dem Stein im Steinkreis befindet.
Technisch gesehen wird in diesem Modus die Basis auf die Höhe des tatsächlichen DTM auf dem Boden festgelegt und die Stecknadel dann 102, 23 m darüber platziert.
RELATIVE_TO_MESH (blaue Stecknadel)
Diese Stecknadel verwendet die sichtbare Oberfläche (DSM) als Basis und platziert sich 102,23 m über dieser Oberfläche. In diesem Modus wird die Höhe des Steins in die Messung einbezogen, sodass er etwas höher als die orange Stecknadel liegt.
Technisch gesehen verwendet dieser Modus das Mesh (DSM) als Basis und platziert den Standort in der angegebenen Höhe darüber. Da sich das DSM oben auf dem stehenden Stein befindet, wird diese zusätzliche Höhe bei der Bestimmung der relativen Höhe dieser Stecknadel berücksichtigt, sodass sie etwas höher als die RELATIVE_TO_GROUND-Stecknadel liegt.
Linien und Bereiche positionieren
Bei Linien und Bereichen sind sowohl die Höhe der Punkte innerhalb des Elements (ob angegeben oder nicht) als auch der verwendete AltitudeMode entscheidend. Sehen wir uns eine Linie entlang von Stonehenge mit den folgenden angegebenen Höhen an:
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 }
];
Diese Linie ist im Bild unten in Weiß dargestellt und verwendet die absolute Positionierung.

Auch hier zeigt das Bild unten die Linien mit verschiedenen Höhenmodi. Sehen wir uns jeden einzeln an, von der niedrigsten bis zur höchsten Höhe.

CLAMP_TO_GROUND (lila Linie)
Diese Linie ignoriert die für jeden Punkt angegebene Höhe und wird stattdessen direkt über dem darunterliegenden Boden (DTM) „aufgelegt“. Sie folgt dem Gelände und ignoriert alle Elemente wie Gebäude oder Steine darüber.
Technisch gesehen ignoriert dieser Modus die tatsächlichen Höhenwerte und legt die Linie über das DTM, wobei das darunterliegende Gelände berücksichtigt und das Mesh der Elemente darüber ignoriert wird.
ABSOLUTE (weiße Linie)
Diese Linie verwendet die genaue Höhe für jeden Punkt, sodass die Linie über einige der Steine verläuft. Sie wird durch gerade Linien zwischen den einzelnen Punkten verbunden. Dadurch kann es manchmal so aussehen, als würde sie durch Objekte verlaufen, wenn die Punkte nicht häufig genug sind.
Technisch gesehen folgt dieser Modus der angegebenen Höhe für jeden Punkt und verbindet sie mit geraden Linien. Das bedeutet, dass er durch das Mesh (z. B. Steine) verlaufen kann, wenn die Höhenwerte das vorgeben. Dieses Szenario wird in einem späteren Abschnitt behandelt.
RELATIVE_TO_GROUND (orange Linie)
Diese Linie verwendet den natürlichen Boden (DTM) als Basis und platziert jeden Punkt in der angegebenen Höhe über dieser Bodenhöhe.
Technisch gesehen verwendet dieser Modus das DTM als Basis und platziert die Linienstandorte in der angegebenen Höhe relativ dazu.
RELATIVE_TO_MESH (blaue Linie)
Diese Linie verwendet die sichtbare Oberfläche, einschließlich Gebäude und Steine, als Basis. Anschließend wird jeder Punkt in der angegebenen Höhe über diesem Mesh platziert, wodurch die Form der Linie in Bezug auf die sichtbare Landschaft nachgebildet wird.
Technisch gesehen verwendet dieser Modus das Mesh (DSM) als Basis und platziert die Standorte in der angegebenen Höhe darüber. Je nach Mesh kann sich die Linie aufgrund der verschiedenen Elemente auf dem Boden ändern.
Wenn für Linien keine Höhe angegeben ist
Sehen wir uns nun dieselben Linienkoordinaten an, aber ohne Angabe einer Höhe:
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 diesem Szenario, in dem keine Höhe angegeben ist, befinden sich die Linien oft an ähnlichen Stellen. Die weißen, orangen und lila Linien können zu einer einzigen Linie zusammengeführt werden (orange, da sie normalerweise zuletzt gezeichnet wird), weil sie alle standardmäßig an einer ähnlichen Position auf Bodenhöhe platziert werden. Das ist unten zu sehen:

Die blaue Linie (RELATIVE_TO_MESH) verwendet wieder das Mesh (DSM) als Basis. Da keine Höhe angegeben ist, werden die Punkte einfach direkt über dem Mesh platziert. Es ist wichtig zu beachten, dass die Linie nicht auf dem Mesh-Netzwerk liegt, sondern die angegebenen Punkte auf dem Mesh-Netzwerk mit geraden Linien verbindet. Das mag in einigen Beispielen akzeptabel aussehen, kann aber zu Problemen bei der Sichtbarkeit führen, wenn sie von anderen Elementen verdeckt wird. Dieses Problem wird im nächsten Abschnitt behandelt.
Interaktion von Meshes und Linien Sehen wir uns nun eine weitere Polylinie an. Dieses Bild zeigt denselben Bereich, aber mit einer größeren Bodenabdeckung (oder mehr Details zum DSM über dem 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 },
];
Wenn wir die Darstellung mit denselben Methoden (und Farben) wie zuvor sehen, erhalten wir diese Ansicht:

Lila steht für CLAMP_TO_GROUND, die Linie verläuft entlang des Bodens. Weiß steht für ABSOLUTE. Sie sehen, dass gerade Linien die Punkte verbinden, die absolut im Raum positioniert sind. Orange und Blau sind relative Versionen, entweder in Bezug auf die OBERFLÄCHE (DTM) oder das MESH (DSM). Die blaue Linie hat aufgrund der Höhe der darunterliegenden Elemente eine etwas andere Form.
Auch hier sehen wir, dass die Linie durch das Mesh verläuft, da die Punkte durch gerade Linien verbunden sind. Dieses Szenario kann zu Problemen bei der Sichtbarkeit der Linien führen. Sie können drawsOccludedSegments auf true setzen, damit die Linie durch die Bäume sichtbar ist. Das ist im folgenden Bild genauer zu sehen, wo die Linien, die durch das Mesh verlaufen, weiterhin sichtbar sind.

Aufgrund der Positionierung im Raum können die Punkte innerhalb des Mesh liegen und auch die Linien, die die Punkte verbinden, können in das Mesh fallen, was möglicherweise zu visuellen Artefakten führt. Im folgenden Abschnitt sehen wir, wie solche Artefakte nach Möglichkeit verbessert werden können.
Probleme bei der Interaktion zwischen Linien und Gelände beheben
In einem anderen Beispiel im selben Bereich sehen wir einige andere Artefakte, die bei der Verwendung bestimmter Höhenmodi auftreten können.
Hier haben wir einen relativ flachen Bereich, der sich hauptsächlich auf der Höhe des DTM befindet, mit nur wenigen zusätzlichen Details im Mesh darüber. Dieses Szenario würde auch in einem Bereich auftreten, der keine 3D-Abdeckung über dem Geländemodell hat. Sehen wir uns den folgenden Standort an, wie unten angegeben:
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 },
];
Und im Bild sind die Linien mit derselben Farbdarstellung wie zuvor zu sehen: (Weiß : ABSOLUTE, Blau : RELATIVE_TO_MESH, Lila : CLAMP_TO_GROUND, Orange: RELATIVE_TO_GROUND).

Hier sehen wir eine Reihe von Artefakten. Erstens befinden sich die orangen (RELATIVE_TO_GROUND) und blauen (RELATIVE_TO_MESH) Linien aufgrund der fehlenden Oberflächenabdeckung (meistens) an derselben Stelle (wobei die blaue Linie angezeigt wird, da sie zuletzt gezeichnet wird).
Wir sehen auch, dass die lila Linie (CLAMP_TO_GROUND) dem Boden folgt und auf dem Hügel zu sehen ist, während die weiße Linie (ABSOLUTE) im Hügel verschwindet, da nur die Punkte verbunden sind und die geraden Linien durch den Boden verlaufen.
Das ist auf diesem Bild besonders gut zu sehen, wenn die lila Linie ausgeblendet wurde.

Das kann zu seltsamen visuellen Artefakten führen, bei denen die Linie unter dem Boden (oder sogar durch das Mesh) verschwindet, da die Linie zwischen den Punkten einfach einem geraden Pfad folgt. Sie können die visuelle Darstellung einer solchen Linie verbessern, indem Sie mithilfe einer Interpolationsmethode weitere Punkte zwischen den Linien hinzufügen. Wie sich das auf die Darstellung auswirkt, hängt wieder von der verwendeten Methode ab:
- Für relative Messungen (RELATIVE_TO_GROUND oder RELATIVE_TO_MESH): Wenn Sie relative Höhenwerte verwenden, können Sie das Element auf einer geeigneteren Höhe platzieren, indem Sie mehr Punkte entlang einer Linie oder eines Polygons erstellen. So passt es besser zum Höhenprofil. Wenn diese Zwischenpunkte in Ihren Daten nicht vorhanden sind, können Sie sie mit einer Interpolationsfunktion hinzufügen, z. B. mit der Funktion „Interpolate“ in der Google Maps Platform Geometry Library. Diesen neuen Punkten können dann relative Werte zugewiesen werden, die über dem entsprechenden Höhenprofil platziert werden. Die Länge jeder Linie, die die Punkte verbindet, wird begrenzt und die visuelle Darstellung verbessert.
- Für absolute Elemente (ABSOLUTE): Für ABSOLUTE-Elemente müssen mehr Punkte tatsächliche Höhenwerte haben. Durch die Interpolation zwischen vorhandenen absoluten Werten wird kein Punkt erzeugt, der einen Wert über dem Mesh genau widerspiegelt, da es sich lediglich um einen Durchschnitt zwischen Punkt A und Punkt B handelt.
Zusammenfassung
Dieses Dokument bietet hoffentlich einen umfassenden Überblick über die AltitudeMode-Optionen in fotorealistischen 3D-Karten und beschreibt, wie sich ABSOLUTE, CLAMP_TO_GROUND, RELATIVE_TO_GROUND und RELATIVE_TO_MESH auf die Platzierung und Darstellung verschiedener Elemente wie Markierungen, Linien und Polygone auswirken.
Es ist wichtig zu verstehen, wie diese Modi mit dem zugrunde liegenden digitalen Geländemodell (DTM) und digitalen Oberflächenmodell (DSM) zusammenarbeiten, um genaue und visuell ansprechende 3D-Kartendarstellungen mit möglichst wenigen visuellen Artefakten zu erstellen.
Wir hoffen, dass Sie mit diesen Höhenmodi in Ihren eigenen Projekten experimentieren, um das volle Potenzial der 3D-Kartierung zu nutzen und ansprechende, immersive Erlebnisse für Ihre Nutzer zu schaffen. Wir freuen uns auf Ihr Feedback.
Beitragende
Matt Toon | Solutions Engineer, Geo Developer