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 struktur w scenie. Geometrii można używać do przesłonięcia, renderowania i umieszczania treści AR za pomocą interfejsów API do testów trafień. Dane geometryczne Streetscape uzyskuje się ze zdjęć Google Street View.

Zobacz fragment

Przykładowa aplikacja geospatial_java pokazuje, jak uzyskać i wyrenderować geometrię Streetscape.

Konfigurowanie interfejsu Geospatial API

Aby korzystać z funkcji Streetscape Geometry, musisz skonfigurować w projekcie interfejs Geospatial API. Aby skonfigurować interfejs Geospatial API, postępuj zgodnie z instrukcjami włączania interfejsu Geospatial API.

Włącz geometrię Streetscape

Interfejs Geospatial API uzyskuje dane geometrii Streetscape, gdy parametr GeospatialMode ma wartość GeospatialMode.ENABLED, a parametr StreetscapeGeometryMode ma wartość StreetscapeGeometryMode.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 geometrii Streetscape w sesji ARCore

Użyj Session.getAllTrackables() i StreetscapeGeometry.class, aby filtrować wyniki.

Java

session.getAllTrackables(StreetscapeGeometry.class);

Kotlin

session.getAllTrackables(StreetscapeGeometry::class.java)

Informacje o StreetscapeGeometry

StreetscapeGeometry zawiera informacje o budynku:

Budynek – LOD 1

StreetscapeGeometry.Quality.BUILDING_LOD_1 składa się z podstaw budynków rozciągniętych w górę do płaskiego blatu. Wysokość budynków może być niedokładna.

Budynek LOD 2

StreetscapeGeometry.Quality.BUILDING_LOD_2 będzie mieć wyższą dokładność geometrii. Ściany z siatki i dachy będą lepiej dopasowane do kształtu budynku. Mniejsze elementy, takie jak kominy czy otwory dachowe, mogą nadal pojawiać się na zewnątrz siatki.

Informacje o Mesh

Mesh to wielokątna siatka reprezentująca odtworzenie powierzchni geometrii ulicy. Każdy obiekt Mesh zawiera bufor wierzchołkowy i bufor indeksu:

Załączanie treści AR do StreetscapeGeometry

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

Przeprowadź test trafień na StreetscapeGeometry

Frame.hitTest() można użyć do przetestowania dopasowania do geometrii Streetscape. Jeśli znaleziono punkty przecięcia, HitResult zawiera informacje o miejscu uderzenia oraz odniesienie do StreetscapeGeometry, które zostało uderzenie. Tę geometrię Streetscape można przekazać do obiektu Trackable.createAnchor(), aby utworzyć dołączoną do niej 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łębię geoprzestrzenną

Głębia geoprzestrzenna łączy geometrię Streetscape z danymi z lokalnych czujników, aby poprawić dane o głębi. Gdy włączona jest funkcja Głębokość geoprzestrzenna, Obrazy głębi wyjściowej i nieprzetworzonej głębi są modyfikowane tak, by oprócz lokalnie obserwowanej głębi uwzględnić zrasteryzowaną geometrię Streetscape. Może to poprawić dokładność pozycji z wykorzystaniem głębi.