Las APIs de Streetscape Geometry proporcionan la geometría del terreno, los edificios y otras estructuras de 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 de geospatial_java, se muestra cómo obtener y renderizar las geometrías de Streetscape.
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.
Habilitar la geometría del paisaje urbano
La API de Geospatial obtiene los 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
UsaSession.getAllTrackables()
y StreetscapeGeometry.class
para filtrar los resultados.
Java
session.getAllTrackables(StreetscapeGeometry.class);
Kotlin
session.getAllTrackables(StreetscapeGeometry::class.java)
Información sobre StreetscapeGeometry
StreetscapeGeometry
contiene información sobre un edificio:
-
StreetscapeGeometry.getType()
Identifica StreetscapeGeometry como terreno o edificio. -
StreetscapeGeometry.getMesh()
Obtén un polígonoMesh
que corresponda a este terreno o edificio. -
StreetscapeGeometry.getMeshPose()
Describe el origen de la geometría. Todos los puntos deMesh
deben transformarse porStreetscapeGeometry.getMeshPose()
. -
StreetscapeGeometry.getQuality()
Proporciona la calidad de los datos de malla. Los niveles de detalle se describen en el estándar CityGML 2.0.
Nivel de detalle 1 del edificio
StreetscapeGeometry.Quality.BUILDING_LOD_1
consiste en situaciones de edificios extruidas hacia arriba hasta una superficie plana. La altura del edificio puede no ser precisa.
Nivel de detalle 2 del edificio
StreetscapeGeometry.Quality.BUILDING_LOD_2
tendrá una geometría de mayor fidelidad. Las paredes y los techos de malla coincidirán mejor con la forma del edificio. Es posible que las funciones más pequeñas, como chimeneas o respiraderos del techo, sobresalgan fuera de la malla.
Información sobre Mesh
Mesh
es una malla de polígonos que representa una reconstrucción de la superficie de la geometría del paisaje urbano.
Cada Mesh
incluye un búfer de vértices y un búfer de índices:
Mesh.getVertexListSize()
Recupera la cantidad de vértices en esta malla.Mesh.getVertexList()
Obtén las posiciones concatenadas de los vértices de la malla, en coordenadas relativas aStreetscapeGeometry.getMeshPose()
Mesh.getIndexListSize()
Recupera la cantidad de índices de esta malla.Mesh.getIndexList()
Obtén los índices de los vértices que conforman un rostro.
Cómo adjuntar contenido de RA a un StreetscapeGeometry
Existen dos maneras de conectar contenido de RA a Streetscape Geometry:
- Habilita la Profundidad geoespacial y usa una Prueba de posicionamiento de profundidad. Este es el método recomendado y más sencillo.
- Usa
Trackable.createAnchor()
para crear un ancla en una pose determinada unida a unaStreetscapeGeometry
. Este ancla heredará su estado de seguimiento del elemento superiorStreetscapeGeometry
.
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) } }
Cómo habilitar la profundidad geoespacial
La profundidad geoespacial combina la geometría del paisaje urbano. con entradas de sensores locales para mejorar los datos de profundidad. Cuando la profundidad geoespacial está habilitada, Las imágenes de profundidad y profundidad sin procesar de salida se modifican para incluir la geometría del paisaje urbano rasterizado además de la profundidad observada a nivel local. Esto puede mejorar la precisión de las poses con la profundidad.