Wenn Sie die Höhe für Elemente auf einer 3D-Karte angeben, z. B. für Linien, Polygone, Modelle oder Markierungen, gibt es mehrere Faktoren, die sich auf ihre Platzierung auswirken können, sowohl innerhalb der Szene als auch darauf, wie das Rendern der Szene mit dem Element interagiert. In diesem Dokument wird die Verwendung von AltitudeMode auf einer 3D-Karte und die Verwaltung der Höhe für Elemente beschrieben.
So können Sie AltitudeMode
mit verschiedenen Funktionstypen verwenden:
Marker:Marker3DElement, Marker3DInteractiveElement
Geben Sie eine Höhe für den Ort und auch eine Extrusion an.
Modelle:Model3DElement, Model3DInteractiveElement
Geben Sie eine Höhe für den Ankerpunkt des Modells an, die zusammen mit der Ausrichtung für die richtige Positionierung in der Szene verwendet werden soll.
Polylinien:Polyline3DElement, Polyline3DInteractiveElement
Geben Sie an, wie die Höhe auf Positionspunkte entlang einer Polylinie angewendet wird.
Polygone:Polygon3DElement, Polygon3DInteractiveElement
Geben Sie an, wie die Höhe auf Positionspunkte entlang eines Polygons angewendet wird.
Verwendung von Höhe in 3D-Umgebungen
Wenn Sie Punkte in einer 3D-Szene platzieren, wird ihre endgültige Position durch die Anwesenheit von erfassten 3D-Gebäuden oder ‑Objekten wie Bäumen beeinflusst. Es ist wichtig, zwei Schlüsselkonzepte zu verstehen:
- Digitales Geländemodell (DGM): Dies stellt die Höhe des „unbewachsenen Bodens“ dar. Stellen Sie sich die natürliche Form des Geländes ohne Gebäude, Bäume oder andere Strukturen vor. Alle Bereiche basieren auf dem DTM, der die Grundlage für die Höhe des Globus bildet (berechnet mit EGM96).
- Digitales Oberflächenmodell (DOM): Dieses Modell stellt die Höhe der „Oberfläche“ dar, einschließlich Gebäuden, Bäumen und anderen Strukturen. In Gebieten, in denen Objekte erfasst wurden (insbesondere in städtischen Umgebungen, in denen Gebäude das Bild dominieren), ist 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 (DEMs) interagieren, da die Platzierung von Features durch das Oberflächenmodell verdeckt oder beeinflusst werden kann. Die Unterschiede sind im Diagramm unten dargestellt:
Wenn für Funktionen keine Höhendaten verfügbar sind
Wenn Sie Daten ohne Höhenmessung oder Daten aus einem anderen Google-Dienst wie dem Routen- oder dem Ortsdienst verwenden, ist in der zurückgegebenen Geometrie oft keine Höhe angegeben. In solchen Fällen müssen Sie beim Platzieren des Elements in der Szene AltitudeMode
sorgfältig auswählen:
- Am Boden fixieren: Die einfachste Methode, bei der 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 (die Elemente relativ zum DTM-Modell platziert) oder RELATIVE_TO_MESH (die Elemente über dem DSM-Modell platziert) verwenden.
- Anderen Dienst zum Abrufen der Höhe verwenden: Für eine genaue DTM-Höhe am Standort des Features können Sie einen Dienst wie die Elevation API der Google Maps Platform verwenden. Wenn es sich um eine Linie oder ein Polygon handelt, müssen Sie dies für jeden der Punkte tun, aus denen die Linie oder das Polygon besteht.
Was bedeuten die AltitudeMode
-Optionen und wann sollten sie verwendet werden?
Es gibt vier AltitudeMode
-Optionen, die Sie beim Definieren eines Features angeben können:
ABSOLUT
Stellen Sie sich ein Flugzeug vor, das in einer bestimmten Höhe über dem Meeresspiegel fliegt,z. B. 3.000 Meter. Die Höhe ist immer gleich, egal ob das Flugzeug über einen Berg oder ein Tal fliegt.
Verwendung: Die Höhe eines Objekts wird relativ zum durchschnittlichen mittleren Meeresspiegel (berechnet mit EGM96) angegeben. Die Höhenkoordinate des Features wird als genaue Höhe über dem mittleren Meeresspiegel interpretiert.
Wann sollte es verwendet werden? Für Funktionen mit bekannten, präzisen Höhen, z. B. Flugrouten, untergetauchte Objekte mit genauer Tiefe oder wissenschaftliche Instrumente mit festen Punkten.
CLAMP_TO_GROUND
Stellen Sie sich vor, Sie legen eine Picknickdecke direkt auf einen Hang. Egal, wie steil oder flach der Hügel ist, die Decke liegt immer flach auf der sichtbaren Oberfläche.
Verwendung: Die Höhe des Objekts wird so angegeben, als ob es direkt auf dem Boden platziert wäre. Sie bleiben auf Bodenhöhe und folgen dem Gelände, unabhängig von einem angegebenen Höhenwert. Die Höhenkoordinate des Features wird ignoriert. Es wird direkt auf die Geländeoberfläche (DTM) projiziert.
Wann verwenden? Für Elemente, die immer dem Gelände entsprechen sollten, 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 immer 100 Meter über der natürlichen Bodenhöhe (digitales Geländemodell) schwebt. Wenn das Gelände ansteigt, steigt auch der Ballon mit an und hält den Abstand von 100 Metern zum „Erdboden“ ein.
Verwendung: Die Höhe des Objekts wird relativ zur Bodenoberfläche (digitales Geländemodell) angegeben. Die Höhenkoordinate des Features wird als Versatz von der Geländehöhe an seiner horizontalen Position interpretiert.
Wann verwenden? Für Objekte, die eine gleichbleibende Höhe über dem natürlichen Gelände haben müssen, z. B. Funktürme oder Freileitungen in ländlichen Gebieten.
RELATIVE_TO_MESH
Das ist so, als würde eine Drohne in einer bestimmten Höhe über dem fliegen, was auch immer sich darunter befindet, sei es der nackte Boden, ein Gebäudedach oder die Spitze eines Baumes. Es wird an die höchste sichtbare Oberfläche (DSM) angepasst.
Verwendung: Die Höhe von Objekten wird relativ zur höchsten Boden-, Gebäude- und Wasseroberfläche (DSM) angegeben. Die Höhenkoordinate des Merkmals wird als Versatz von der DSM-Höhe interpretiert.
Wann verwenden? Für Objekte, die in einer bestimmten Höhe über dem physisch vorhandenen Objekt (DGM, Gebäude, Wasser) schweben müssen. 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. In diesen Beispielen werden zuerst Positionsmarkierungen und dann Linien und Flächen behandelt, für die einige unterschiedliche Aspekte zu berücksichtigen sind.
Positionsmarkierungen
Stellen Sie sich eine Markierung vor, die so platziert ist:
const markerLocation = { lat: 51.1789, lng: -1.8262, altitude: 102.23 };
Das ist die weiße Markierung in der Szene unten:
Sehen Sie sich nun das Bild unten an, auf dem Pins in verschiedenen Farben zu sehen sind, die mit den verschiedenen Höhenmodi positioniert wurden.
Sehen wir uns an, wie sich die verschiedenen AltitudeMode
auf die Positionierung der Markierung in aufsteigender Reihenfolge der Höhe auswirken.
CLAMP_TO_GROUND (Purple Pin)
Bei dieser Markierung wird der Höhenwert ignoriert und sie wird an der nächstgelegenen Bodenhöhe angebracht. Sie sehen ihn direkt unter der weißen Markierung, wo er sich sozusagen an das Gelände „klammern“ würde.
Technisch gesehen wird in diesem Modus die tatsächliche Höhe ignoriert und die Markierung auf die nächstgelegene DTM-Höhe gesetzt.
ABSOLUTE (weiße Markierung)
Für diese Markierung wird der genaue Höhenwert (102,23 m) verwendet, um die Markierung in dieser Höhe über dem Meeresspiegel (EGM96) zu platzieren.Sie wird auf einem der Stonehenge-Steine angezeigt, wie durch die angegebene Höhe festgelegt.
In diesem Modus wird der tatsächliche angegebene Höhenwert verwendet, um die Markierung auf der angegebenen Höhe über dem Meeresspiegel zu platzieren. Im Beispiel ist das die Position von Stonehenge, aber auf der Spitze eines der Steine.
RELATIVE_TO_GROUND (Oranger Pin)
Dieser Pin basiert auf dem Boden (DTM) und befindet sich 102,23 m über dem Boden.Er scheint über dem natürlichen Boden zu schweben, der sich unter dem Stein im Henge befindet.
Technisch gesehen wird in diesem Modus die Höhe des tatsächlichen DTM auf dem Boden als Basis festgelegt und die Markierung dann 102, 23 m darüber platziert.
RELATIVE_TO_MESH (Blauer Pin)
Diese Markierung basiert auf der sichtbaren Oberfläche (DSM) und befindet 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 orangefarbene Markierung ausgerichtet wird.
Technisch gesehen wird in diesem Modus das Mesh (DSM) als Grundlage verwendet und die Position in der angegebenen Höhe darüber platziert. Da sich der DSM oben auf dem stehenden Stein befindet, wird diese zusätzliche Höhe bei der Bestimmung der relativen Höhe dieses Pins berücksichtigt. Er liegt also etwas höher als der RELATIVE_TO_GROUND-Pin.
Linien und Bereiche positionieren
Bei Linien und Flächen sind sowohl die Höhe der Punkte innerhalb des Features (unabhängig davon, ob sie angegeben ist) als auch die 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 weiß dargestellt und verwendet die absolute Positionierung.
Das Bild unten zeigt noch einmal die Linien in verschiedenen Höhenmodi. Sehen wir uns die einzelnen Stufen der Reihe nach an, von der niedrigsten bis zur höchsten.
CLAMP_TO_GROUND (lila Linie)
Bei dieser Linie wird die angegebene Höhe für jeden Punkt ignoriert und die Linie wird stattdessen direkt über das zugrunde liegende Geländemodell gelegt. Es folgt dem Gelände und ignoriert alle Objekte wie Gebäude oder Steine, die sich darüber befinden.
In diesem Modus werden die tatsächlichen Höhenwerte ignoriert und die Linie wird über das DTM gelegt. Dabei wird das zugrunde liegende Gelände berücksichtigt und das Mesh der darüber liegenden Elemente ignoriert.
ABSOLUTE (White Line)
Bei dieser Linie wird die genaue Höhe für jeden Punkt verwendet, sodass die Linie über einige der Steine verläuft. Die Linie wird durch gerade Linien zwischen den einzelnen Punkten verbunden. Wenn die Punkte nicht häufig genug sind, kann es manchmal so aussehen, als würde die Linie durch Objekte verlaufen.
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 dies vorgeben. Dieses Szenario wird in einem späteren Abschnitt behandelt.
RELATIVE_TO_GROUND (Orange Line)
Diese Linie basiert auf dem natürlichen Boden (DTM) und platziert jeden Punkt in der angegebenen Höhe über diesem Boden.
Technisch gesehen wird in diesem Modus das DTM als Grundlage verwendet und die Linienpositionen werden in der angegebenen Höhe relativ dazu platziert.
RELATIVE_TO_MESH (Blaue Linie)
Diese Linie basiert auf der sichtbaren Oberfläche, die Gebäude und Steine umfasst. Anschließend wird jeder Punkt in der angegebenen Höhe über diesem Mesh platziert. So wird die Form der Linie in Bezug auf die sichtbare Landschaft effektiv nachgebildet.
Technisch gesehen wird in diesem Modus das Mesh (DSM) als Grundlage verwendet und die Standorte werden in der angegebenen Höhe darüber platziert. Je nach Mesh kann sich die Linie aufgrund der unterschiedlichen Merkmale 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 Fall, in dem keine Höhe angegeben wird, befinden sich die Linien oft an ähnlichen Stellen. Die weißen, orangen und violetten Linien können zu einer einzigen Linie (orange, da sie normalerweise zuletzt gezeichnet wird) zusammenlaufen, da sie alle standardmäßig auf einer ähnlichen Höhe über dem Boden positioniert sind. Unten sehen Sie ein Beispiel:
Die blaue Linie (RELATIVE_TO_MESH) verwendet wieder das Mesh (DSM) als Grundlage. Da keine Höhe angegeben ist, werden die Punkte einfach direkt auf das Mesh gelegt. Wichtig: Die Linie wird nicht auf dem Mesh platziert, sondern die angegebenen Punkte auf dem Mesh werden durch gerade Linien verbunden. In einigen Fällen mag das akzeptabel sein, aber wenn die Anzeige durch andere Elemente verdeckt wird, kann es zu Problemen mit der Sichtbarkeit kommen. Dieses Problem wird im nächsten Abschnitt behandelt.
Die Interaktion von Maschen und Linien: Sehen wir uns nun eine weitere Polylinie an. Dieses Bild zeigt denselben Bereich, aber mit einer größeren Bodenabdeckung (oder mehr Details im 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 ist CLAMP_TO_GROUND, was Sie entlang des Bodens sehen können. Weiß ist ABSOLUT. Die Punkte sind absolut im Raum positioniert und werden durch gerade Linien verbunden. Da Orange und Blau relative Versionen entweder der OBERFLÄCHE (DTM) oder des MESH (DSM) sind, ist die blaue Linie aufgrund der Höhe der darunter liegenden Elemente etwas anders geformt.
Auch hier sehen wir, dass die Linie durch das Mesh verläuft, da die Punkte durch gerade Linien verbunden sind. In diesem Fall kann es zu Problemen mit der Sichtbarkeit der Linien kommen. Sie können drawsOccludedSegments auf true setzen, damit die Linie durch die Bäume hindurch sichtbar ist. Das folgende Bild zeigt dies im Detail. Die Linien, die durch das Mesh verlaufen, sind weiterhin zu sehen.
Aufgrund der Positionierung im Raum können die Punkte und die Linien, die die Punkte verbinden, innerhalb des Mesh liegen, was möglicherweise zu visuellen Artefakten führt. Im folgenden Abschnitt sehen wir uns an, 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 wir bei der Verwendung bestimmter Höhenmodi beachten müssen.
Hier sehen wir ein relativ flaches Gebiet, das sich hauptsächlich auf der Höhe des DTM befindet. Im Mesh sind nur wenige zusätzliche Details zu sehen. Das wäre auch in einem Gebiet der Fall, in dem es keine 3D-Erfassung über dem Geländemodell gibt. Sehen wir uns den folgenden Standort an:
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 },
];
Wie im Bild zu sehen, haben die Linien dieselbe Farbdarstellung wie zuvor: (weiß : ABSOLUTE, blau : RELATIVE_TO_MESH, lila : CLAMP_TO_GROUND, orange: RELATIVE_TO_GROUND).
Hier sehen wir eine Reihe von Artefakten. Das erste ist, dass die orangefarbenen (RELATIVE_TO_GROUND) und blauen (RELATIVE_TO_MESH) Linien aufgrund der fehlenden Oberflächenabdeckung (größtenteils) an derselben Stelle verlaufen. Die blaue Linie wird angezeigt, da sie zuletzt gezeichnet wurde.
Außerdem sehen wir, dass die violette Linie (CLAMP_TO_GROUND) dem Boden folgt und auf dem Hügel zu sehen ist, während die weiße Linie (ABSOLUTE) in den Hügel hineinläuft, da nur die Punkte verbunden sind und die geraden Linien durch den Boden verlaufen.
Das ist in diesem Bild gut zu sehen, wenn die lila Linie ausgeblendet wurde.
Dies kann daher zu einigen 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 dies auf die Darstellung auswirkt, hängt wiederum 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 durch das Erstellen von mehr Punkten entlang einer Linie oder eines Polygons die Funktion auf einer angemesseneren Höhe platzieren, sodass sie besser dem Höhenprofil entspricht. Wenn diese Zwischenpunkte nicht in Ihren Daten vorhanden sind, können Sie sie mit einer Interpolationsfunktion hinzufügen, z. B. mit der Funktion „Interpolate“ in der Geometry-Bibliothek der Google Maps Platform. Diesen neuen Punkten können dann relative Werte zugewiesen werden, die über dem entsprechenden Höhenprofil platziert werden. Außerdem wird die Länge jeder Linie, die die Punkte verbindet, begrenzt und die visuelle Darstellung verbessert.
- Für absolute Features (ABSOLUTE): Für ABSOLUTE-Features müssen mehr Punkte tatsächliche Höhenwerte haben. Durch Interpolieren zwischen vorhandenen absoluten Werten wird kein Punkt ermittelt, der einen Wert über dem Mesh genau widerspiegelt, da es sich lediglich um einen Durchschnitt zwischen Punkt A und Punkt B handelt.
Zusammenfassung
Wir hoffen, dass Sie in diesem Dokument einen umfassenden Überblick über die AltitudeMode
-Optionen in fotorealistischen 3D-Karten erhalten haben und erfahren haben, wie sich ABSOLUTE, CLAMP_TO_GROUND, RELATIVE_TO_GROUND und RELATIVE_TO_MESH auf die Platzierung und das Rendern verschiedener Elemente wie Markierungen, Linien und Polygone auswirken.
Es ist wichtig zu verstehen, wie diese Modi mit dem zugrunde liegenden digitalen Geländemodell (Digital Terrain Model, DTM) und dem digitalen Oberflächenmodell (Digital Surface Model, DSM) zusammenarbeiten, um genaue und visuell ansprechende 3D-Karten mit möglichst wenigen visuellen Artefakten zu erstellen.
Wir hoffen, dass Sie diese Höhenmodi in Ihren eigenen Projekten ausprobieren, um das volle Potenzial von 3D-Karten 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