Usa edificios y terrenos a tu alrededor en el SDK de Android (Kotlin/Java)

Las APIs de Streetscape Geometry proporcionan la geometría del terreno, los edificios y otras estructuras en una escena. La geometría se puede usar para la oclusión, la renderización o la colocación de contenido de RA a través de APIs de prueba de colisiones. Los datos de geometría del paisaje urbano se obtienen a través de las imágenes de Google Street View.

Prueba la muestra

En la app de ejemplo geospatial_java, se muestra cómo obtener y renderizar geometrías de paisaje urbano.

Configura la API de Geospatial

Para usar Streetscape Geometry, deberás configurar la API de Geospatial en tu proyecto. Sigue las instrucciones para habilitar la API de Geospatial para configurarla.

Habilita la geometría del paisaje urbano

La API de Geospatial obtiene datos de Streetscape Geometry cuando GeospatialMode se establece en GeospatialMode.ENABLED y StreetscapeGeometryMode se establece en 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
  }
)

Obtén la geometría del paisaje urbano en una sesión de ARCore

Usa Session.getAllTrackables() y StreetscapeGeometry.class para filtrar los resultados.

Java

session.getAllTrackables(StreetscapeGeometry.class);

Kotlin

session.getAllTrackables(StreetscapeGeometry::class.java)

Comprende StreetscapeGeometry

StreetscapeGeometry contiene información sobre un edificio:

Edificio LOD 1

StreetscapeGeometry.Quality.BUILDING_LOD_1 consiste en situaciones de edificios extruidas hacia arriba hasta una superficie plana. Es posible que las alturas de los edificios no sean precisas.

Edificio LOD 2

StreetscapeGeometry.Quality.BUILDING_LOD_2 tendrá una geometría de mayor fidelidad. Las paredes y los techos de malla se ajustarán mejor a la forma del edificio. Es posible que los elementos más pequeños, como las chimeneas o los respiraderos del techo, sobresalgan de la malla.

Información sobre Mesh

Mesh es una malla de polígonos que representa una reconstrucción de superficie de la geometría del paisaje urbano. Cada Mesh incluye un búfer de vértices y un búfer de índice:

Cómo adjuntar contenido de RA a un StreetscapeGeometry

Existen dos maneras de adjuntar contenido de RA a Streetscape Geometry:

Realiza una prueba de posicionamiento en StreetscapeGeometry.

Frame.hitTest() se puede usar para realizar pruebas de posicionamiento con la geometría del paisaje urbano. Si se encuentran intersecciones, HitResult contiene información de pose sobre la ubicación del hit, así como una referencia al StreetscapeGeometry que se golpeó. Esta geometría del paisaje urbano se puede pasar a Trackable.createAnchor() para crear un ancla adjunta.

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

Habilita la profundidad geoespacial

La profundidad geoespacial combina la geometría del paisaje urbano con la entrada de un sensor local para mejorar los datos de profundidad. Cuando se habilita la profundidad geoespacial, se modifican la profundidad de salida y las imágenes de profundidad sin procesar para incluir la geometría del paisaje urbano rasterizada, además de la profundidad observada localmente. Esto puede mejorar la precisión de las poses con la función Profundidad.