In diesem Leitfaden werden die Webkomponenten von 3D Maps und die Überlegungen bei der Einbindung in Ihre Anwendung ausführlich beschrieben.
Hinweise zur Leistung
Damit die Interaktivität und die visuellen Elemente reibungslos und schnell reagieren, sollten Sie die folgenden Ansätze in Betracht ziehen.
Karte laden
Die anfängliche Lade- und Rendering-Einrichtung von 3D Maps kombiniert Techniken zur Browserkonfiguration und Best Practices für die Benutzeroberfläche, um eine optimale Nutzerfreundlichkeit zu erzielen.
- API-Last: Verwenden Sie das asynchrone dynamische Laden von 3D Maps, um die Maps JavaScript API beim ersten Seitenaufbau zu laden.
- Bibliotheken: Laden Sie Bibliotheken bei Bedarf programmatisch, z. B.
google.maps.importLibrary("maps3d"). Wenn Sie Web Komponenten wie<gmp-map-3d>direkt auf Ihrer HTML-Seite mit direktem Skript Laden, verwenden, werden die Bibliotheken automatisch zum richtigen Zeitpunkt geladen. - Basiskartenfunktionen verwalten:Verwenden Sie eine benutzerdefinierte mapId, um POIs der Basiskarte zu filtern (HYBRID-Modus) und ihre Dichte zu steuern, insbesondere wenn die Anwendung eigene benutzerdefinierte Elemente wie Markierungen oder Polylinien enthält. So vermeiden Sie visuelle Unordnung und potenzielle Überschneidungen. Alternativ können Sie Vektorkacheln der Basiskarte wie POIs, Polylinien für Straßen, Straßennamen und Adressen deaktivieren (SATELLITE-Modus).
- Ereignisse: Warten Sie auf die Ereignisse gmp-steadystate oder gmp-error , um die nachfolgende Logik zu erstellen, z. B. zum Laden von Markierungen oder Animieren der Kamera.
Nutzerinteraktion: Warten Sie auf das gmp-steadystate Ereignis, bevor Sie Änderungen am Karteninhalt vornehmen. Wenn ein Nutzer mit der Karte interagiert (schwenken, zoomen), bevor das erste Ereignis gmp-steadystate ausgelöst wird, wird das Ereignis erst ausgelöst, nachdem der Nutzer die Interaktion beendet hat. Vermeiden Sie die Anzeige oder Aktualisierung von Overlay-Inhalten (z. B. Markierungen oder Polygone) während der Nutzer die Karte schwenkt oder zoomt. Vermeiden Sie die Anzeige oder Aktualisierung von Overlay Inhalten (z. B. Markierungen oder Polygone), indem Sie auf gmp-centerchange, gmp-headingchange gmp-rangechange gmp-rollchange gmp-tiltchange warten.
Verwenden Sie
requestAnimationFrame()(rAF) für kontinuierliche Aktualisierungen und trennen Sie rechenintensive Vorgänge strikt von Zeichenaufrufen.- rAF verwenden: Synchronisiert Aktualisierungen mit der Bildwiederholrate des Browsers für flüssige Animationen mit 60 FPS und einen geringeren Energieverbrauch.
- Rechenintensive Zeichenvorgänge vermeiden: Führen Sie während der letzten Aktualisierung keine rechenintensiven Aufgaben aus, die nicht mit dem Zeichnen zusammenhängen.
- Logik trennen: Führen Sie alle rechenintensiven Logikvorgänge vor minimalen Webkomponenten-Aktualisierungsaufrufen in der rAF-Schleife aus.
Anfängliche Szeneneinstellungen:
<gmp-map-3d>Kameraeinstellungen wie „Tilt“ wirken sich auf die Ladegeschwindigkeit aus. Je stärker die Szene gezoomt oder geneigt ist, desto detailliertere Polygone werden angezeigt und müssen geladen werden. Der Detaillierungsgrad hängt auch vom Standort ab (z.B. Stadt mit vielen Gebäuden im Vergleich zu ländlicher Umgebung mit nur natürlichen Merkmalen).- Bevorzugen Sie weniger gezoomte (hohe Höhe), niedrige oder nicht geneigte Ansichten.
- Fügen Sie der Karte Begrenzungen (Beispiel) hinzu, damit sich Nutzer auf einen bestimmten Bereich konzentrieren und die Kacheln vollständig geladen werden können.
Visueller Preloader: Während
<gmp-map-3d>extrem schnell geladen wird, kann es einige Zeit dauern, bis es für Nutzer mit Geräten der unteren Preisklasse (niedrige GPU) oder geringer Bandbreite (langsames 4G) in voller Auflösung angezeigt wird. In diesem Fall können Sie einen Preloader mit Bild, Animation oder Text erstellen, während die 3D-Szene im Hintergrund geladen wird. Siehe Schlüsselereignis zur Verwendung unten:
// create the map in the background and wait for gmp-steadystate event async function initMap() { await google.maps.importLibrary("maps3d"); const map = document.querySelector('gmp-map-3d'); const div = document.querySelector('div'); // preloader " map.addEventListener('gmp-steadystate', ({isSteady}) => { if (isSteady) { div.style.display = 'none'; } }); } initMap();
- 2D-Karte:
- Diesen Nutzern kann eine alternative 2D-Karte (SATELLITE) bereitgestellt werden, die weiterhin Ihre geografischen Daten wie Markierungen enthält.
- Alternativ kann für Nutzer eine ergänzende statische 2D-Karte im SATELLITE-Modus angezeigt werden, damit sie sich während des Ladens einen bestimmten Ort ansehen können.
Leistung und Verwaltung visueller Elemente
3D Maps bietet verschiedene Möglichkeiten, visuelle Elemente wie Markierungen, Polylinien und 3D-Modelle mit optimaler Leistung und minimaler Rendering-Zeit anzuzeigen, auch bei einer größeren Anzahl von visuellen Elementen.
Markierungen
- PinElement: Verwenden Sie für grundlegende Änderungen an Markierungen (Farbe, Skalierung, Rahmen, Text
symbol) das
<gmp-pin>Element oder diePinElementKlasse. Dies ist die leistungsstärkste Anpassungsmethode. - HTMLImageElement- oder SVGElement-Markierungen sparsam verwenden: Verwenden Sie diese für weitere
Anpassungen, z. B. zum Hinzufügen von Transparenz oder zum Einfügen eines Bildes wie eines
Symbols in ein SVGElement (erfordert Base64
Codierung). Sie werden beim Laden gerastert und verursachen Leistungseinbußen. HTMLImageElement
und SVGElement müssen in ein
<template>-Element eingeschlossen werden, bevor sie dem Standardslot von Marker3DElement zugewiesen werden. - Das Hinzufügen von einfachem HTML oder CSS ist derzeit nicht möglich.
Polygone und Polylinien
- Geometrie vereinfachen: Wenden Sie vor dem Rendern einen Vereinfachungsalgorithmus auf Ihre Pfaddaten an. Dadurch wird die Anzahl der Eckpunkte reduziert, während die allgemeine Form beibehalten wird. Die Rendering-Geschwindigkeit wird dadurch erheblich verbessert, insbesondere bei komplexen Grenzen oder Routen.
- Dezimierung nach Zoomstufe: Bei sehr großen Datensätzen sollten Sie Geometrien mit höherer Detailgenauigkeit nur laden, wenn der Nutzer in den Bereich hineingezoomt hat. Bei einer niedrigen Zoomstufe ist nur eine stark vereinfachte Version der Polylinie oder des Polygons erforderlich.
- Vorab berechnen für extrudierte Polygone: Wenn Ihre Polygone extrudiert
(
extruded: true), definieren die Pfaddaten ein 3D-Volumen (ein Mesh). Die Verarbeitung komplexer Polygone mit vielen Eckpunkten ist rechenintensiv. Achten Sie darauf, dass die Quelldaten für Ihre Polygone so einfach wie möglich sind. - Leistung von Polylinien und Polygonen testen:Wenn Sie zahlreiche oder komplexe Polylinien/Polygone hinzufügen, insbesondere wenn sie für 3D extrudiert werden, prüfen Sie, ob sie zu einer Verringerung der Bildrate führen. Begrenzen Sie gegebenenfalls die Anzahl der Eckpunkte oder verwenden Sie Vereinfachungsalgorithmen.
- Wenn Sie eine Form aktualisieren, ändern Sie das gesamte Pfad-Array in einem einzigen Vorgang, anstatt einzelne Elemente in einer Schleife zu ändern. Ein einzelner Zuweisungsvorgang (z.B. polyline.path = newPathArray;) ist viel effizienter als mehrere iterative Aktualisierungen.
- Extrudierte Polylinien vermeiden (wenn möglich): Polylinien können zwar einen Höhenwert verwenden, um im 3D-Raum platziert zu werden, aber das Extrudieren einer Polylinie (z.B. durch Festlegen einer Strichstärke und eines großen Höhenbereichs) kann grafisch aufwendig sein. Verwenden Sie nach Möglichkeit 2D-Polylinien auf dem Boden (RELATIVE_TO_GROUND) oder eine minimale Strichstärke, um die Leistung zu verbessern.
- Verwenden Sie drawsOccludedSegments nur für kritische Routing-Elemente. Bei Hintergrund- oder Kontextformen können sie auf natürliche Weise durch die 3D-Geometrie der Karte verdeckt werden. Das Anzeigen nicht kritischer, verdeckter Geometrie erhöht die Rendering-Komplexität unnötig.
3D-Modelle
Das Rendern von 3D-Modellen im .glb-Format und die Interaktivität wie das Ereignis gmp-click sind in <gmp-map-3d> sehr schnell.
- Dateigröße mit Komprimierung minimieren: Damit das Laden schnell erfolgt, insbesondere in Mobilfunknetzen, sollten komplexe .glb-Modelldateien unter 5 MB groß sein (idealerweise weniger). Die wichtigste Methode hierfür ist die Anwendung von Draco Komprimierung auf die Mesh-Daten in Ihren .glb-Dateien. Dadurch kann die Dateigröße erheblich reduziert werden (oft um mehr als 50%) ohne wesentlichen Verlust der visuellen Qualität.
- Modellursprung zentrieren:Achten Sie darauf, dass die 3D-Modellierungssoftware das Modell so exportiert, dass der Ursprung (Punkt 0, 0, 0) in der Mitte der Basis des Modells liegt. Dadurch wird die Positionierung und Drehung auf der Karte vereinfacht und das Modell wird korrekt an den Breiten- und Längengradkoordinaten verankert.
- CORS verwalten: Wenn Ihre Modelldateien auf einer anderen Domain oder einem anderen CDN als Ihre Webanwendung gehostet werden, müssen Sie den Hostserver so konfigurieren, dass er die erforderlichen CORS-Header (Cross-Origin Resource Sharing) enthält (z.B. Access-Control-Allow-Origin: *). Andernfalls kann die Karte das Modell nicht laden.