Utiliser les bâtiments et le relief qui vous entourent dans le SDK Android (Kotlin/Java)

Les API Streetscape Geometry fournissent la géométrie du relief, des bâtiments ou d'autres structures dans une scène. La géométrie peut être utilisée pour l'occlusion, l'affichage ou le placement de contenu en RA via des API de test de positionnement. Les données Streetscape Geometry sont obtenues grâce aux 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. Suivez les instructions de la section Activer l'API Geospatial pour configurer l'API Geospatial.

Activer Streetscape Geometry

L'API Geospatial obtient des données Streetscape Geometry lorsque GeospatialMode est défini sur GeospatialMode.ENABLED et StreetscapeGeometryMode est défini 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 Streetscape Geometry dans une session ARCore

Utilisez Session.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:

Bâtiment LOD 1

Le StreetscapeGeometry.Quality.BUILDING_LOD_1 consiste en une empreinte de pas de bâtiment extrudée vers le haut vers une surface plane. La hauteur des bâtiments peut être inexacte.

Le LOD du bâtiment 2

StreetscapeGeometry.Quality.BUILDING_LOD_2 aura une géométrie de plus grande fidélité. Les murs et les toits recouverts de maillages correspondront mieux à la forme du bâtiment. Les éléments de petite taille, comme les cheminées ou les ouvertures de toit, peuvent toujours apparaître à l'extérieur de la grille.

Comprendre Mesh

Mesh est un maillage polygonal représentant une reconstitution de surface de la géométrie du paysage urbain. Chaque Mesh inclut un tampon de sommet et un tampon d'index:

Joindre du contenu RA à un StreetscapeGeometry

Il existe deux façons d'associer du contenu RA à Streetscape Geometry:

Effectuer un test de positionnement sur StreetscapeGeometry

Frame.hitTest() permet d'effectuer des tests sur Streetscape Geometry. Si des intersections sont détectées, HitResult contient des informations sur l'emplacement de l'appel, ainsi qu'une référence au StreetscapeGeometry qui a été appelé. Cette géométrie de paysage Streetscape peut être transmise à Trackable.createAnchor() pour créer une ancre.

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

La fonctionnalité Geospatial Depth combine la géométrie du paysage urbain avec les données d'entrée des capteurs locaux pour améliorer les données de profondeur. Lorsque Geospatial Depth est activé, les images de profondeur de sortie et de profondeur brutes sont modifiées pour inclure la géométrie du paysage urbain rastérisée en plus de la profondeur observée localement. Cela peut améliorer la précision des postures en utilisant la profondeur.