Die Streetscape Geometry APIs liefern die Geometrie von Gelände, Gebäuden oder anderen Strukturen in einer Szene. Die Geometrie kann zum Verdecken, Rendern oder Platzieren von AR-Inhalten über Treffertest-APIs verwendet werden. Die Geometriedaten für Streetscape werden über Google Street View-Bilder abgerufen.
Beispiel ausprobieren
Die Beispiel-App geospatial_java zeigt, wie Streetscape-Geometrien abgerufen und gerendert werden.
Geospatial API einrichten
Wenn Sie Streetscape-Geometrie verwenden möchten, müssen Sie die Geospatial API in Ihrem Projekt einrichten. Folgen Sie der Anleitung unter Geospatial API aktivieren, um sie einzurichten.
Streetscape-Geometrie aktivieren
Die Geospatial API ruft Streetscape-Geometriedaten ab, wenn GeospatialMode
auf GeospatialMode.ENABLED
und StreetscapeGeometryMode
auf StreetscapeGeometryMode.ENABLED
gesetzt ist.
Java
Config config = session.getConfig(); // Streetscape Geometry requires the Geospatial API to be enabled. config.setGeospatialMode(Config.GeospatialMode.ENABLED); // Enable Streetscape Geometry. config.setStreetscapeGeometryMode(Config.StreetscapeGeometryMode.ENABLED); session.configure(config);
Kotlin
session.configure( session.config.apply { // Streetscape Geometry requires the Geospatial API to be enabled. geospatialMode = Config.GeospatialMode.ENABLED // Enable Streetscape Geometry. streetscapeGeometryMode = Config.StreetscapeGeometryMode.ENABLED } )
Streetscape-Geometrie in einer ARCore-Sitzung abrufen
Verwenden SieSession.getAllTrackables()
und StreetscapeGeometry.class
, um Ergebnisse zu filtern.
Java
session.getAllTrackables(StreetscapeGeometry.class);
Kotlin
session.getAllTrackables(StreetscapeGeometry::class.java)
StreetscapeGeometry
verstehen
StreetscapeGeometry
enthält Informationen zu einem Gebäude:
-
StreetscapeGeometry.getType()
Identifiziert StreetscapeGeometry entweder als Gelände oder als Gebäude. -
StreetscapeGeometry.getMesh()
Fordern Sie ein PolygonMesh
an, das dem Gelände oder Gebäude entspricht. -
StreetscapeGeometry.getMeshPose()
Beschreibt den Ursprung der Geometrie. Alle Punkte imMesh
sollten durchStreetscapeGeometry.getMeshPose()
umgewandelt werden. -
StreetscapeGeometry.getQuality()
Stellt die Qualität der Mesh-Daten bereit. Die Detailebenen werden im CityGML 2.0-Standard beschrieben.
LOD 1 erstellen
StreetscapeGeometry.Quality.BUILDING_LOD_1
besteht aus Gebäuden, die nach oben auf eine flache Oberfläche extrudiert werden. Gebäudehöhen können ungenau sein.
LOD 2 erstellen
StreetscapeGeometry.Quality.BUILDING_LOD_2
weist eine höhere Geometrie auf. Gitterwände und Dächer passen sich besser an die Form des Gebäudes an. Auch kleinere Elemente wie Schornsteine oder Lüftungsöffnungen können aus dem Gitter herausragen.
Mesh
verstehen
Mesh
ist ein Polygonnetz, das eine Oberflächenrekonstruktion der Streetscape-Geometrie darstellt.
Jedes Mesh
enthält einen Vertex-Zwischenspeicher und einen Indexzwischenspeicher:
Mesh.getVertexListSize()
Ruft die Anzahl der Eckpunkte in diesem Mesh-Netzwerk ab.Mesh.getVertexList()
Rufen Sie die verketteten Positionen von Netzeckpunkten in Koordinaten relativ zuStreetscapeGeometry.getMeshPose()
ab.Mesh.getIndexListSize()
Ruft die Anzahl der Indexe in diesem Mesh-Netzwerk ab.Mesh.getIndexList()
Indexe der Eckpunkte abrufen, aus denen ein Gesicht besteht.
AR-Inhalte an StreetscapeGeometry
anhängen
Es gibt zwei Möglichkeiten, AR-Inhalte an Streetscape-Geometrie anzuhängen:
- Aktivieren Sie Raumbezogene Tiefe und führen Sie einen Tiefentest aus. Dies ist die empfohlene und einfachere Methode.
- Mit
Trackable.createAnchor()
können Sie einen Anker bei einer bestimmten Pose erstellen, der mit einemStreetscapeGeometry
-Element verknüpft ist. Dieser Anker übernimmt den Tracking-Status vom übergeordnetenStreetscapeGeometry
.
Treffertest für StreetscapeGeometry
durchführen
Frame.hitTest()
kann für Treffertests mit Streetscape-Geometriedaten verwendet werden. Wenn Kreuzungen gefunden werden, enthält HitResult
Poseninformationen zur Trefferposition sowie einen Verweis auf das StreetscapeGeometry
, für das der Treffer getroffen wurde. Diese Streetscape-Geometrie kann an Trackable.createAnchor()
übergeben werden, um einen Anker hinzuzufügen.
Java
for (HitResult hit : frame.hitTest(singleTapEvent)) { if (hit.getTrackable() instanceof StreetscapeGeometry) { Pose hitPose = hit.getHitPose(); hit.getTrackable().createAnchor(hitPose); } }
Kotlin
for (hit in frame.hitTest(singleTapEvent)) { if (hit.trackable is StreetscapeGeometry) { val hitPose = hit.hitPose hit.trackable.createAnchor(hitPose) } }
Raumbezogene Tiefe aktivieren
Bei der raumbezogenen Tiefe wird die Streetscape-Geometrie mit lokalen Sensoreingaben kombiniert, um Tiefendaten zu verbessern. Wenn die raumbezogene Tiefe aktiviert ist, werden die ausgegebenen Bilder mit Tiefentiefe und Rohtiefe so geändert, dass zusätzlich zur lokal beobachteten Tiefe auch die gerasterte Streetscape-Geometrie enthalten ist. Dadurch kann die Genauigkeit von Posen mithilfe der Tiefe verbessert werden.