Korzystanie z okolicznych budynków i terenu w pakiecie Android SDK (Kotlin/Java)

Interfejsy API Streetscape Geometry udostępniają geometrię terenu, budynków i innych obiektów w scenie. Ta geometria może służyć do zasłaniania, renderowania lub umieszczania treści AR za pomocą interfejsów API testów trafień. Dane geometryczne Street View są uzyskiwane ze zdjęć Google Street View.

Skorzystaj z przykładu

Przykładowa aplikacja geospatial_java pokazuje, jak uzyskiwać i renderować geometrie Streetscape.

Konfigurowanie interfejsu Geospatial API

Aby używać Streetscape Geometry, musisz skonfigurować interfejs Geospatial API w swoim projekcie. Aby skonfigurować interfejs Geospatial API, wykonaj instrukcje włączania interfejsu Geospatial API.

Włącz geometrię Streetscape

Interfejs Geospatial API uzyskuje dane ze Streetscape Geometry, gdy element GeospatialMode ma wartość GeospatialMode.ENABLED, a StreetscapeGeometryModeStreetscapeGeometryMode.ENABLED.

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

Uzyskiwanie danych geometrycznych ze Streetscape w sesji ARCore

Aby filtrować wyniki, użyj funkcji Session.getAllTrackables() i StreetscapeGeometry.class.

Java

session.getAllTrackables(StreetscapeGeometry.class);

Kotlin

session.getAllTrackables(StreetscapeGeometry::class.java)

Informacje o StreetscapeGeometry

StreetscapeGeometry zawiera informacje o budynku:

Budynek – poziom działania 1

StreetscapeGeometry.Quality.BUILDING_LOD_1 to podstawy budynków wystające w górę na płaski dach. Wysokości budynków mogą być niedokładne.

Budynek – poziom działania 2

StreetscapeGeometry.Quality.BUILDING_LOD_2 będzie mieć większą dokładność geometrii. Ściany z siatki i dachy lepiej dopasują się do kształtu budynku. Mniejsze elementy, takie jak kominy czy otwory dachowe, mogą nadal wystawiać się poza siatkę.

Informacje o Mesh

Mesh to siatka wielokątów przedstawiająca rekonstrukcję geometrii Streetscape. Każdy element Mesh zawiera bufor wierzchołków i bufor indeksu:

Dołączanie treści AR do obiektu StreetscapeGeometry

Treści AR można dołączać do geometrii Streetscape na 2 sposoby:

Wykonaj test trafień pod adresem StreetscapeGeometry

Narzędzia Frame.hitTest() można używać do testów z użyciem geometrii Streetscape. Jeśli zostaną znalezione skrzyżowania, HitResult zawiera informacje o pozycji o lokalizacji działania, a także odwołanie do elementu StreetscapeGeometry, który został trafiony. Tę geometrię Streetscape możesz przekazać do Trackable.createAnchor(), by utworzyć do niej zakotwiczoną kotwicę.

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

Włącz głębokość geoprzestrzenną

Funkcja Głębokość geoprzestrzenna łączy geometrię Streetscape z danymi z lokalnego czujnika w celu ulepszenia danych o głębi. Po włączeniu Głębokości geoprzestrzennej dane wyjściowe i nieprzetworzona głębokość są modyfikowane tak, aby oprócz lokalnie obserwowanej głębi uwzględniały zrastrowane geometrię Streetscape. Może to poprawić dokładność póz z użyciem głębi.