Les API Streetscape Geometry fournissent la géométrie du terrain, des bâtiments ou d'autres structures d'une scène. La géométrie peut être utilisée pour l'occlusion, le rendu ou le placement de contenu RA via des API de test de collision. 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 des géométries de paysage urbain.
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 la géométrie de paysage urbain
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 de paysage urbain 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()
Indique si StreetscapeGeometry est un terrain ou un bâtiment. -
StreetscapeGeometry.getMesh()
Obtenez un polygoneMesh
correspondant à ce terrain ou à ce bâtiment. -
StreetscapeGeometry.getMeshPose()
décrit l'origine de la géométrie. Tous les points deMesh
doivent être transformés parStreetscapeGeometry.getMeshPose()
. -
StreetscapeGeometry.getQuality()
Indique la qualité des données de maillage. Les niveaux de détail sont décrits dans la norme CityGML 2.0.
Niveau de détail 1 du bâtiment
StreetscapeGeometry.Quality.BUILDING_LOD_1
se compose de surfaces au sol de bâtiments extrudées vers le haut jusqu'à un sommet plat. Les hauteurs des bâtiments peuvent être inexactes.
Niveau de détail 2 du bâtiment
StreetscapeGeometry.Quality.BUILDING_LOD_2
aura une géométrie plus fidèle. Les murs et les toits en réseau maillé correspondent plus précisément à 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 surface de la géométrie du paysage urbain.
Chaque Mesh
inclut un tampon de sommets et un tampon d'indices:
Mesh.getVertexListSize()
Récupère le nombre de sommets de ce maillage.Mesh.getVertexList()
Obtient les positions concatenantes 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()
Obtenez les indices des sommets qui constituent une face.
Joindre du contenu RA à un StreetscapeGeometry
Il existe deux façons d'associer du contenu RA à Streetscape Geometry:
- Activez Geospatial Depth et utilisez un test de collision 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
. Cet ancrage 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 un test de positionnement sur la géométrie du paysage urbain. Si des intersections sont détectées, HitResult
contient des informations sur la pose concernant l'emplacement de la collision, ainsi qu'une référence à l'élément StreetscapeGeometry
qui a été touché. Cette géométrie Streetscape peut être transmise à Trackable.createAnchor()
pour créer un ancrage qui y est associé.
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 combine Streetscape Geometry avec l'entrée des capteurs locaux pour améliorer les données de profondeur. Lorsque Geospatial Depth est activé, la profondeur de sortie et les images de profondeur brutes sont modifiées pour inclure la géométrie du paysage urbain échantillonnée en plus de la profondeur observée localement. Cela peut améliorer la précision des poses avec la profondeur.