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 API testowania kolizji. 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 dotyczące włączania 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, które kończą się płaskim szczytem. 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 wielokątna siatka 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 uderzenie. 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 uwzględnić rastrową geometrię Streetscape, a nie tylko lokalnie obserwowaną głębię. Może to poprawić dokładność wykrywania póz przy użyciu Depth.