Table of Contents

Multi-map-Nutzungsleitfaden und Best Practices

In der Entwicklung von Mega-Anwendungen ist die Frage, ob mehrere maps (Block) zu einer localization library hinzugefügt werden sollten, sehr häufig. Falsche Verwendung von multi-map erhöht die Fähigkeiten der Anwendung nicht, sondern kann zu Leistungseinbußen und positioning jumps führen.

Diese Anleitung hilft Ihnen, die multi-map-Funktion korrekt zu verstehen und zu verwenden sowie typische Missverständnisse zu vermeiden.

Warum sollten mehrere maps vermieden werden?

Kernprinzip: Fügen Sie keine mehreren maps hinzu, um "die Abdeckung zu erweitern".

In den meisten Fällen sollte eine localization library nur eine einzelne Mega Block map für einen einzelnen Ort enthalten. Nachfolgend sind einige häufige falsche Verwendungen aufgeführt, die vermieden werden müssen:

  • Fehlerszenario A: multi-region

    • Idee: Für die miteinander verbundenen Bereiche "Bereich A", "Bereich B" und "Bereich C" eines Scenic Spots jeweils eigene maps erstellen und diese drei maps dann auf einmal in die library der Anwendung aufnehmen, in der Hoffnung, dass Benutzer beim Bewegen nahtlos wechseln können.
    • Problem: Zwischen diesen drei so erstellten maps gibt es keine mathematische Beziehung in spatial coordinates; sie sind voneinander unabhängig. Wegen der Inkonsistenz der jeweiligen coordinate systems ist ein seamless switching während der Bewegung nicht möglich, sodass an Bereichsgrenzen positioning jumps auftreten.
    • Lösung: Für solche Szenarien ist es am besten, "Bereich A", "Bereich B" und "Bereich C" gemäß der Datenerfassungsmethode für sehr große Räume zu erfassen und genügend overlap zwischen ihnen sicherzustellen. Führen Sie die map construction gemäß der large-scale fusion task aus. Dadurch entsteht eine single Block map mit einheitlichem coordinate system, die alle genannten Bereiche enthält, und diese map kann zur localization library hinzugefügt werden.
  • Fehlerszenario B: multi-location

    • Idee: Für ein Einkaufszentrum an einem Ort eine map erstellen und für ein gleichnamiges Einkaufszentrum an einem anderen Ort eine weitere map erstellen, in der Hoffnung, beide in einer Anwendung gleichzeitig zu nutzen.
    • Problem: Dies verlangsamt positioning erheblich. Beim positioning muss das Gerät gleichzeitig alle map-Daten in der library vergleichen, wodurch der Rechenaufwand stark steigt und die initialization länger dauert. Ein Benutzer kann sich zu einem Zeitpunkt nur in einem Einkaufszentrum befinden, daher ist das Laden der map eines anderen Einkaufszentrums Ressourcenverschwendung. Wenn ein Einkaufszentrum viele requests hat, verlangsamt dies auch die Antwortzeit des anderen Einkaufszentrums.
    • Lösung: Erstellen Sie unterschiedliche localization libraries für Einkaufszentren an verschiedenen Orten, wobei jede library nur eine map enthält. Greifen Sie in der Anwendung basierend auf dem aktuellen Standort des Benutzers dynamisch auf die entsprechende localization library zu.
  • Fehlerszenario C: cross-time

    • Idee: Am selben Ort tagsüber erfassen und map construction durchführen, nachts ebenfalls erfassen und map construction durchführen und anschließend Tages- und Nacht-map zur library hinzufügen, um Benutzern am selben Ort zu unterschiedlichen Zeiten ein konsistentes Erlebnis zu bieten.
    • Problem: Dieses Szenario ähnelt Fehlerszenario A; die spatial position relationship zwischen getrennten map construction-Ergebnissen kann nicht garantiert werden.
    • Lösung: Führen Sie Tages- und Nachtaufnahmen gemäß der large-scale fusion task gemeinsam für fusion map construction zusammen. Fügen Sie die endgültige single Block map zur localization library hinzu.
  • Fehlerszenario D: cross-version

    • Idee: Für denselben Ort wurde bereits eine map Version A erstellt und verwendet. Im späteren Betrieb wird eine neuere map Version B erstellt und zur ursprünglichen localization library hinzugefügt, damit die neue map ohne erneute Veröffentlichung der Anwendung genutzt werden kann.
    • Problem: Da es sich um unterschiedliche map-Versionen desselben Ortes handelt, können positioning-Ergebnisse zwischen zwei verschiedenen Datenversionen springen.
    • Lösung: Aktualisieren Sie die alte map construction gemäß lossless full update, sodass die map-Datenversion aktualisiert wird und das coordinate system unverändert bleibt. Nach dem Hinzufügen der aktualisierten map muss die alte map-Version unbedingt aus der localization library entfernt werden.
  • Fehlerszenario E: supplementary update

    • Idee: Für denselben Ort wurde bereits eine map Version A erstellt und verwendet. Im späteren Betrieb ändert sich ein lokaler Bereich oder ein kleiner Bereich muss nacherfasst werden; dafür wird eine neue map B erstellt und der ursprünglichen localization library hinzugefügt, damit die neue map ohne erneute Veröffentlichung der Anwendung genutzt werden kann.
    • Problem: Die neu erfasste kleine Bereichs-map B hat keine spatial coordinate correlation mit der ursprünglichen map A; das Erlebnis zwischen alten und neuen Daten wird positioning jumps aufweisen.
    • Lösung: Führen Sie für die alte map construction ein supplementary update durch, damit der neu erfasste kleine Bereich dasselbe coordinate system wie die alte map beibehält. Nach dem Hinzufügen der aktualisierten map muss die alte map-Version unbedingt aus der localization library entfernt werden.

Zusammenfassung: Der Versuch, mehrere kleine maps zu einer großen Welt zusammenzusetzen, passt nicht zu den hochpräzisen maps von Mega. Megas Designphilosophie ist eine räumlich kontinuierliche, koordinateneinheitliche und raumzeitlich konsistente hochpräzise 3D-Repräsentation.

Szenarien, die wirklich multi-map benötigen

Wann müssen also wirklich mehrere maps (Block) in einer library hinzugefügt werden? Die Hauptszenarien sind "parallel tasks" oder "multi-space selection", nicht "spatial stitching".

  • Szenario 1: multi-space selection

    • Beschreibung: Ihre Anwendung bedient mehrere völlig unterschiedliche Bereiche an demselben Ort. Aufgrund der Gebäudestruktur oder von Problemen in der Erfassungspraxis können diese Bereiche jedoch in den Daten nicht vollständig verbunden werden, und Benutzer müssen möglicherweise zuerst ihren aktuellen Bereich auswählen. Beispiel: verschiedene Etagen eines großen Krankenhauses.
    • Implementierung: Nach der Bereichsauswahl durch den Benutzer nutzen Sie diese prior information, um die entsprechende single map dieses Ortes dynamisch zu aktivieren. Zu jedem Zeitpunkt nimmt in der localization library weiterhin nur eine map an der Berechnung teil. Wenn der Benutzer in einen neuen Bereich wechselt, muss die Bereichsauswahl erneut bestätigt werden.
  • Szenario 2: parallel tasks

    • Beschreibung: Ihre Anwendung muss zwei oder mehr unabhängige, bekannte object tracking-Aufgaben gleichzeitig verarbeiten; diese Objekte befinden sich am selben Ort, sind aber nicht miteinander verbunden und unterscheiden sich stark in ihren Features. Beispiel: mehrere Ausstellungsstücke in einem Museum.
    • Implementierung: In einem solchen fortgeschrittenen Szenario kann für jedes Objekt eine unabhängige map erstellt werden, und diese "object maps" können zu einer localization library hinzugefügt werden. Beachten Sie jedoch, dass die positioning performance von der Anzahl der in der localization library hinzugefügten Objekte abhängt. Bei sehr vielen Objekten müssen Sie möglicherweise zwischen positioning performance und Anzahl der localization libraries abwägen, indem Sie Objekte gruppieren und mehrere localization libraries getrennt erstellen.

Rendering-Verhalten bei Verwendung von multi-map

Beachten Sie, dass beim multi-map positioning das 3D rendering-Verhalten je nach Plattform und Version unterschiedlich ist.

Best-Practice-Empfehlungen

Wenn Ihr Fall tatsächlich zu den in Szenarien, die wirklich multi-map benötigen beschriebenen Szenarien gehört oder multi-map zwingend verwendet werden muss, beachten Sie folgende Grundsätze:

  1. Nach Bedarf aktivieren: Wenn der Benutzer eine Auswahl trifft oder einen bestimmten Bereich betritt, geben Sie beim Senden des positioning request die entsprechende prior information an und laden nur die passenden 3D-Inhalte.
  2. Dynamisches Umschalten: Stellen Sie eine klare UI bereit, mit der Benutzer die scene auswählen. Bevor 3D-Inhalte der neuen map geladen werden, entladen Sie zuerst die 3D-Inhalte der alten map, um memory freizugeben.
  3. State management: Verwalten Sie im Code ausdrücklich die aktuell aktive map und überwachen Sie die Block ID in den positioning-Ergebnissen, um positioning feedback verschiedener maps zu unterscheiden.
  4. Performance monitoring: Achten Sie bei multi-map genau auf memory usage, positioning latency und Stromverbrauch des Geräts, damit die Anwendung auf dem target device flüssig läuft.

Kurz gesagt: Für die meisten Anwendungen ist das Festhalten am Prinzip "eine scene, eine map" die beste Wahl, um Mega positioning performance und Stabilität sicherzustellen.