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

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 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 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.

Streetscape-Geometrie 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
  }
)

Streetscape-Geometrie in einer ARCore-Sitzung abrufen

Verwenden Sie Session.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:

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. Gitterwände und -dächer passen sich der Form des Gebäudes besser an. Kleinere Elemente wie Schornsteine oder Dachlüfter führen möglicherweise noch außerhalb des Netzes.

Informationen zu Mesh

Mesh ist ein Polygonnetz, das eine Rekonstruktion der Oberfläche der Streetscape-Geometrie darstellt. Jedes Mesh enthält einen Scheitelpunktzwischenspeicher und einen Indexzwischenspeicher:

AR-Inhalte an ein StreetscapeGeometry anhängen

Es gibt zwei Möglichkeiten, AR-Inhalte an Streetscape Geometry anzuhängen:

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 „Raumbezogene Tiefe“ aktiviert ist, Die Ausgabetiefe und die unformatierten Tiefenbilder werden so modifiziert, dass sie zusätzlich zur lokal erfassten Tiefe auch eine gerasterte Streetscape-Geometrie enthalten. Dadurch kann die Genauigkeit von Posen mit „Tiefe“ verbessert werden.