Ancrez du contenu à des emplacements réels

Appareils XR concernés
Ces conseils vous aideront à créer des expériences pour ces types d'appareils XR.
Lunettes XR filaires

Les ancres géospatiales sont un type d'ancre qui vous permet de placer du contenu 3D avec des coordonnées géographiques à l'aide de l'API Geospatial.

Les ancres géospatiales utilisent une latitude et une longitude pour déterminer leur positionnement. La latitude et la longitude sont définies par la spécification WGS84, qui correspond aux mêmes coordonnées que celles affichées dans un système GPS standard.

Déterminer la latitude et la longitude d'un lieu

Si vous avez un point d'intérêt spécifique en tête, utilisez Google Maps pour déterminer sa latitude et sa longitude :

  1. Accédez à Google Maps sur un ordinateur de bureau.
  2. Accédez à Calques > Plus.

    Bouton "Calques" dans Google Maps

    Bouton "Plus" sur Google Maps

  3. Définissez le Type de carte sur Satellite et décochez la case Vue Globe en bas à gauche de l'écran.

    Options de type de carte sur Google Maps

    Cela force une perspective 2D et élimine les erreurs possibles pouvant provenir d'une vue 3D inclinée.

  4. Sur la carte, effectuez un clic droit sur l'emplacement, puis sélectionnez la longitude et la latitude pour les copier dans votre presse-papiers.

Convertir une position dans la zone de l'utilisateur en ancrage géospatial

Si vous pouvez vous rendre au point d'intérêt, vous pouvez déterminer la latitude, la longitude et l'altitude à partir d'une lecture locale en convertissant une pose locale de l'appareil en pose géospatiale.

Positionner du contenu au niveau d'un ancrage géospatial

Les ancres géospatiales nécessitent une valeur d'altitude, qui est relative à l'ellipsoïde WGS84, au terrain ou au toit.

  • Pour les valeurs d'altitude par rapport à l'ellipsoïde WGS84, utilisez Geospatial.createAnchor :

    val createAnchorResult = geospatial.createAnchor(
        latitude,
        longitude,
        altitude,
        Quaternion.Identity,
    )

  • Pour les valeurs d'altitude relatives au terrain ou à un toit, utilisez Geospatial.createAnchorOnSurface, en utilisant respectivement GeospatialSurface.TERRAIN et GeospatialSurface.ROOFTOP pour spécifier comment l'altitude finale doit être interprétée :

    val createAnchorResult = geospatial.createAnchorOnSurface(
        latitude,
        longitude,
        altitude,
        Quaternion.Identity,
        GeospatialSurface.TERRAIN,
    )

    Lorsque vous utilisez GeospatialSurface.ROOFTOP, l'altitude par défaut correspond à l'altitude du terrain lorsqu'elle n'est pas placée sur un bâtiment.

Vérifiez ensuite le résultat de l'appel de création :

when (createAnchorResult) {
    is AnchorCreateSuccess -> {
        // Use anchorCreateResult.anchor to render content at the result.
    }

    else -> {
        // Anchor create failed.
        // See AnchorCreateResult for possible failure reasons.
    }
}

Enfin, utilisez l'ancrage pour positionner le contenu 3D :

Compose XR

Subspace(FollowTarget.anchor(anchorCreateResult.anchor)) {
    SpatialPanel {
        GeospatialContent()
    }
}

SceneCore

val anchorSpace = AnchorSpace.create(session, anchorCreateResult.anchor)
val contentEntity = createGeospatialContentEntity(context, session)
anchorSpace.addChild(contentEntity)