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

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:

AR-Inhalte an StreetscapeGeometry anhängen

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

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.