Gebäude und Gelände in der Umgebung mit dem Android SDK (Kotlin/Java) verwenden

Die Streetscape Geometry APIs liefern die Geometrie von Gelände, Gebäuden oder anderen Strukturen in einer Szene. Die Geometrie kann für die Okklusion, das Rendering oder das Platzieren von AR-Inhalten über Hit-Test-APIs verwendet werden. Die Daten zur Straßenraumgeometrie werden aus Google Street View-Bildern gewonnen.

Beispiel testen

In der Beispielanwendung „geospatial_java“ wird gezeigt, wie Sie Straßenansichten-Geometrien abrufen und rendern.

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 die Geospatial API einzurichten.

Geometrie für Straßenzüge aktivieren

Die Geospatial API ruft Daten zur Straßengeometrie ab, wenn GeospatialMode auf GeospatialMode.ENABLED und StreetscapeGeometryMode auf StreetscapeGeometryMode.ENABLED festgelegt 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 Sie Session.getAllTrackables() und StreetscapeGeometry.class, um Ergebnisse zu filtern.

Java

session.getAllTrackables(StreetscapeGeometry.class);

Kotlin

session.getAllTrackables(StreetscapeGeometry::class.java)

StreetscapeGeometry

StreetscapeGeometry enthält Informationen zu einem Gebäude:

Gebäude – LOD 1

StreetscapeGeometry.Quality.BUILDING_LOD_1 besteht aus Gebäudegrundrissen, die nach oben zu einer flachen Oberseite extrudiert wurden. Gebäudehöhen können ungenau sein.

Gebäude-LOD 2

StreetscapeGeometry.Quality.BUILDING_LOD_2 hat eine höhere Geometrietreue. Mesh-Wände und -Dächer entsprechen der Form des Gebäudes besser. Kleinere Elemente wie Schornsteine oder Dachlüftungsöffnungen ragen möglicherweise noch über das Mesh hinaus.

Mesh

Mesh ist ein Polygon-Mesh, das eine Oberflächenrekonstruktion der Straßengeometrie darstellt. Jede Mesh enthält einen Vertex- und einen Index-Buffer:

AR-Inhalte an eine StreetscapeGeometry anhängen

Es gibt zwei Möglichkeiten, AR-Inhalte an Street View-Geometrie anzuhängen:

Führen Sie einen Treffertest für StreetscapeGeometry durch.

Frame.hitTest() kann für einen Treffertest mit der Straßenraumgeometrie verwendet werden. Wenn Überschneidungen gefunden werden, enthält HitResult Informationen zur Pose am Auftreffpunkt sowie einen Verweis auf die StreetscapeGeometry, die getroffen wurde. Diese Straßenansichtsgeometrie kann an Trackable.createAnchor() übergeben werden, um einen daran angehängten 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)
  }
}

Geospatial Depth aktivieren

Geospatial Depth kombiniert die Geometrie der Straßenansicht mit lokalen Sensordaten, 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.