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. Geometria może służyć do zasłonięcia, renderowania lub umieszczania treści AR za pomocą interfejsów hit-test API. Dane geometryczne dotyczące ulicy są uzyskiwane na podstawie zdjęć Google Street View.

Wypróbuj przykład

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

Konfigurowanie interfejsu Geospatial API

Aby korzystać z geometrii Streetscape, musisz skonfigurować interfejs Geospatial API w projekcie. Aby skonfigurować interfejs Geospatial API, wykonaj instrukcje Włączanie interfejsu Geospatial API.

Włączanie geometrii 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
  }
)

Pobieranie geometrii Streetscape w sesji ARCore

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

Java

session.getAllTrackables(StreetscapeGeometry.class);

Kotlin

session.getAllTrackables(StreetscapeGeometry::class.java)

StreetscapeGeometry

StreetscapeGeometry zawiera informacje o budynku:

Budynek LOD 1

StreetscapeGeometry.Quality.BUILDING_LOD_1 składa się z wypukłych rzutów poziomych budynku. Wysokość budynków może być niedokładna.

Budynek LOD 2

StreetscapeGeometry.Quality.BUILDING_LOD_2 będzie mieć geometrię o wyższej jakości. Siatka na ścianach i dachach będzie lepiej dopasowana do kształtu budynku. Mniejsze elementy, takie jak kominy czy otwory wentylacyjne w dachu, mogą wystawać poza siatkę.

Mesh

Mesh to siatka wielokątów reprezentująca odtworzenie powierzchni geometrii ulicy. Każdy element Mesh zawiera bufor wierzchołków i bufor indeksów:

Załączanie treści AR do StreetscapeGeometry

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

Przeprowadź test trafień w przypadku 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 uderzone. Geometrię ulicy można przekazać do Trackable.createAnchor(), aby utworzyć do niej dołączoną 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łączanie głębi danych geograficznych

Głębia geoprzestrzenna łączy geometrię Streetscape z danymi z lokalnych czujników, aby poprawić dane o głębi. Gdy włączona jest opcja Głębia geoprzestrzenna, obrazy głębi wyjściowej i surowej głębi są modyfikowane, aby zawierały rastrową geometrię Streetscape, a nie tylko lokalnie obserwowaną głębię. Może to poprawić dokładność wykrywania póz przy użyciu Depth.