Les API Streetscape Geometry fournissent la géométrie du relief, des bâtiments ou d'autres structures d'une scène. La géométrie peut être utilisée pour l'occlusion, l'affichage ou le placement de contenu RA via des API de test de positionnement. Les données de géométrie du paysage urbain sont obtenues à partir des images Google Street View.
Essayer l'exemple
L'application exemple geospatial_java montre comment obtenir et afficher les géométries Streetscape Geometries.
Configurer l'API Geospatial
Pour utiliser Streetscape Geometry, vous devez configurer l'API Geospatial dans votre projet. Pour configurer l'API Geospatial, suivez les instructions de la section Activer l'API Geospatial.
Activer Streetscape Geometry
L'API Geospatial obtient les données Streetscape Geometry lorsque GeospatialMode
est défini sur GeospatialMode.ENABLED
et StreetscapeGeometryMode
sur 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 } )
Obtenir une géométrie Streetscape dans une session ARCore
UtilisezSession.getAllTrackables()
et StreetscapeGeometry.class
pour filtrer les résultats.
Java
session.getAllTrackables(StreetscapeGeometry.class);
Kotlin
session.getAllTrackables(StreetscapeGeometry::class.java)
Comprendre StreetscapeGeometry
StreetscapeGeometry
contient des informations sur un bâtiment:
-
StreetscapeGeometry.getType()
Identifie l'élément StreetscapeGeometry en tant que relief ou bâtiment. -
StreetscapeGeometry.getMesh()
Obtenez un polygoneMesh
correspondant à ce relief ou bâtiment. -
StreetscapeGeometry.getMeshPose()
Décrit l'origine de la géométrie. Tous les points duMesh
doivent être transformés parStreetscapeGeometry.getMeshPose()
. -
StreetscapeGeometry.getQuality()
Fournit la qualité des données du réseau maillé. Les niveaux de détail sont décrits dans la norme CityGML 2.0.
Bâtiment LOD 1
StreetscapeGeometry.Quality.BUILDING_LOD_1
correspond à l'empreinte de bâtiment extrudée vers le haut sur une surface plane. La hauteur des bâtiments peut être inexacte.
Bâtiment LOD 2
StreetscapeGeometry.Quality.BUILDING_LOD_2
présente une géométrie plus fidèle. Les murs et les toits en maille se rapprochent de la forme du bâtiment. Les éléments plus petits, comme les cheminées ou les bouches d'aération du toit, peuvent toujours dépasser du maillage.
Comprendre Mesh
Mesh
est un maillage polygonal représentant une reconstruction de la surface de la géométrie Streetscape.
Chaque Mesh
comprend un tampon de sommets et un tampon d'index:
Mesh.getVertexListSize()
Récupère le nombre de sommets dans ce maillage.Mesh.getVertexList()
Obtenir les positions concaténées des sommets du maillage, en coordonnées par rapport àStreetscapeGeometry.getMeshPose()
Mesh.getIndexListSize()
Récupère le nombre d'indices dans ce maillage.Mesh.getIndexList()
Permet d'obtenir les index des sommets qui composent une face.
Joindre du contenu en RA à un StreetscapeGeometry
Il existe deux façons d'associer du contenu RA à Streetscape Geometry:
- Activez Geospatial Depth et utilisez un test de positionnement de profondeur. Il s'agit de la méthode recommandée et la plus simple.
- Utilisez
Trackable.createAnchor()
pour créer un ancrage à une pose donnée associé à unStreetscapeGeometry
. Cette ancre héritera de son état de suivi de l'élément parentStreetscapeGeometry
.
Effectuer un test de positionnement sur StreetscapeGeometry
Frame.hitTest()
peut être utilisé pour effectuer des tests de positionnement par rapport à la géométrie Streetscape. Si des intersections sont détectées, HitResult
contient des informations de pose sur le lieu de l'appel, ainsi qu'une référence à la StreetscapeGeometry
qui a été appelée. Cette géométrie de paysage Streetscape peut être transmise à Trackable.createAnchor()
pour créer une ancre associée.
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) } }
Activer Geospatial Depth
Geospatial Depth (Profondeur géospatiale) combine la géométrie Streetscape avec l'entrée d'un capteur local pour améliorer les données de profondeur. Lorsque la profondeur géospatiale est activée, les images de profondeur de sortie et de profondeur brutes sont modifiées pour inclure la géométrie Streetscape rastérisée en plus de la profondeur observée localement. Cela peut améliorer la précision des postures en utilisant la profondeur.