Die Streetscape Geometry APIs stellen die Geometrie von Gelände, Gebäuden oder anderen Strukturen in einer Szene zur Verfügung. Die Geometrie kann zum Verdecken, Rendern oder Platzieren von AR-Inhalten über Hit-Test-APIs verwendet werden. Die Daten zur Straßenraumgeometrie werden aus Google Street View-Bildern gewonnen.
Beispiel ausprobieren
Die Beispiel-App geospatial_java zeigt, wie Streetscape-Geometrien abgerufen und gerendert werden.
Geospatial API einrichten
Wenn Sie Streetscape Geometry verwenden möchten, müssen Sie die Geospatial API in Ihrem Projekt einrichten. Folgen Sie der Anleitung unter Geospatial API aktivieren, um die Geospatial API einzurichten.
Geometrie für Straßenzüge aktivieren
Die Geospatial API ruft Streetscape Geometry-Daten 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 } )
Street View-Geometrie in einer ARCore-Sitzung abrufen
Verwenden SieSession.getAllTrackables()
und StreetscapeGeometry.class
, um die Ergebnisse zu filtern.
Java
session.getAllTrackables(StreetscapeGeometry.class);
Kotlin
session.getAllTrackables(StreetscapeGeometry::class.java)
Informationen zu StreetscapeGeometry
StreetscapeGeometry
enthält Informationen zu einem Gebäude:
-
StreetscapeGeometry.getType()
Kennzeichnet die StreetscapeGeometry entweder als Gelände oder als Gebäude. -
StreetscapeGeometry.getMesh()
Ermitteln Sie ein PolygonMesh
, das diesem Gelände oder Gebäude entspricht. -
StreetscapeGeometry.getMeshPose()
Beschreibt den Ursprung der Geometrie. Alle Punkte imMesh
sollten durchStreetscapeGeometry.getMeshPose()
transformiert werden. -
StreetscapeGeometry.getQuality()
Liefert die Qualität der Mesh-Daten. Detailebenen werden im CityGML 2.0-Standard beschrieben.
LOD 1 wird erstellt
StreetscapeGeometry.Quality.BUILDING_LOD_1
besteht aus Gebäudegrundrissen, die nach oben zu einer flachen Oberseite extrudiert sind. Die Gebäudehöhen können ungenau sein.
LOD 2 wird erstellt
StreetscapeGeometry.Quality.BUILDING_LOD_2
hat eine höhere Geometrie. Mesh-Wände und -Dächer entsprechen der Form des Gebäudes besser. Kleinere Elemente wie Schornsteine oder Dachlüftungsöffnungen können noch über das Mesh hinausragen.
Informationen zu Mesh
Mesh
ist ein Polygon-Mesh, das eine Oberflächenrekonstruktion der Straßengeometrie darstellt.
Jede Mesh
enthält einen Vertex- und einen Index-Buffer:
Mesh.getVertexListSize()
Ruft die Anzahl der Eckpunkte in diesem Mesh-Netzwerk ab.Mesh.getVertexList()
Die zusammenhängenden Positionen der Mesh-Eckpunkte in Koordinaten relativ zuStreetscapeGeometry.getMeshPose()
abrufen.Mesh.getIndexListSize()
Ruft die Anzahl der Indexe in diesem Mesh ab.Mesh.getIndexList()
Ermitteln Sie die Indexe der Eckpunkte, aus denen eine Fläche besteht.
AR-Inhalte an StreetscapeGeometry
anhängen
Es gibt zwei Möglichkeiten, AR-Inhalte an Street View-Geometrie anzuhängen:
- Aktivieren Sie die räumliche Tiefe und führen Sie einen Tiefentest aus. Dies ist die empfohlene und einfachere Methode.
- Mit
Trackable.createAnchor()
können Sie einen Anker in einer bestimmten Pose erstellen, die mit einemStreetscapeGeometry
verbunden ist. Dieser Anker übernimmt seinen Tracking-Status vom übergeordneten ElementStreetscapeGeometry
.
Treffertest für StreetscapeGeometry
durchführen
Frame.hitTest()
kann für Treffertests für die Streetscape-Geometrie verwendet werden. Wenn Kreuzungen gefunden werden, enthält HitResult
Positionsinformationen zur Trefferposition sowie einen Verweis auf das StreetscapeGeometry
-Element, das getroffen wurde. Diese Streetscape-Geometrie kann an Trackable.createAnchor()
übergeben werden, um einen Anker zu erstellen.
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
Räumlich-geografische Tiefe kombiniert Streetscape-Geometrie mit lokalen Sensoreingaben, um die Tiefendaten zu verbessern. Wenn die raumbezogene Tiefe aktiviert ist, werden die Ausgabetiefe und die Rohtiefebilder so geändert, dass sie zusätzlich zur lokal beobachteten Tiefe eine gerasterte Streetscape-Geometrie enthalten. Dies kann die Genauigkeit von Posen mithilfe von Depth verbessern.