Utiliser des poses géospatiales

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

Un GeospatialPose décrit une position dans l'espace par rapport à la Terre. Elle se compose des éléments suivants :

  • Latitude et longitude, spécifiées en degrés, telles que définies par la spécification WGS84.
  • L'altitude, qui est spécifiée en mètres au-dessus de l'ellipsoïde WGS84, ou approximativement équivalente à des mètres au-dessus du niveau de la mer.
  • L'orientation, qui correspond approximativement à la direction vers laquelle la pose est orientée dans le système de coordonnées EUS. Dans le système de coordonnées EUS, X+ pointe vers l'est, Y+ vers le haut et Z+ vers le sud.

L'API Geospatial permet d'accéder à la pose géospatiale de l'appareil et de convertir les poses géospatiales en poses locales de l'appareil.

Prérequis

Pour obtenir et convertir des poses géospatiales, votre application doit être configurée pour utiliser l'API Geospatial. Les poses géospatiales ne peuvent être obtenues que lorsque l'API Geospatial est à l'état RUNNING.

Convertir une pose locale de l'appareil en pose géospatiale

Un Pose local à l'appareil peut être converti en GeospatialPose, par exemple pour déterminer la position de l'appareil de l'utilisateur par rapport à la Terre. Cela peut vous aider à :

  • Créez du contenu de RA persistant, où un objet virtuel placé par un utilisateur est ancré avec précision à un emplacement global pour une récupération ultérieure.
  • Déclenchez des expériences basées sur la position en mettant à jour en continu la position de l'utilisateur sur une carte pour permettre la navigation en temps réel ou le gameplay géorepéré.
  • Déterminez le contexte réel précis de l'utilisateur pour déclencher une logique d'application pertinente en fonction de la position.

L'exemple de code suivant montre comment convertir un Pose en GeospatialPose à l'aide de Geospatial.createGeospatialPoseFromPose().

val devicePose = ArDevice.getInstance(session).state.value.devicePose

// Convert the device Pose into a GeospatialPose.
when (val result = geospatial.createGeospatialPoseFromPose(devicePose)) {
    is CreateGeospatialPoseFromPoseSuccess -> {
        val geoPose = result.pose
        val lat = geoPose.latitude
        val lon = geoPose.longitude
        val alt = geoPose.altitude
        // Orientation is in the EUS (East-Up-South) coordinate system.
        val orientation = geoPose.eastUpSouthQuaternion
    }
    is CreateGeospatialPoseFromPoseNotTracking -> {
        // Geospatial is not currently tracking.
    }

    else -> {
        // A newer exception was added, but your app is using an old version of the library
    }
}

Convertir une pose géospatiale en pose locale de l'appareil

Vous pouvez également convertir un GeospatialPose en Pose local de l'appareil. Cette transformation prend les informations définies par des coordonnées réelles, telles que l'emplacement d'un point de repère, un itinéraire de navigation ou un contenu de RA persistant, et les convertit dans l'espace visuel précis de l'appareil de l'utilisateur.

L'exemple de code suivant montre comment utiliser Geospatial.createPoseFromGeospatialPose() pour convertir une position géospatiale en position locale de l'appareil.

// Convert a GeospatialPose (lat/long/alt) back to a device-space Pose.
when (val result = geospatial.createPoseFromGeospatialPose(geoPose)) {
    is CreatePoseFromGeospatialPoseSuccess -> {
        val devicePose: Pose = result.pose
        // devicePose is now ready to be used relative to the tracking origin.
    }
    is CreatePoseFromGeospatialPoseNotTracking -> {
        // Geospatial is not currently tracking.
    }
    is CreatePoseFromGeospatialPoseInternalError -> {
        // An internal error occurred.
    }
    else -> {
        // A newer exception was added, but your app is using an old version of the library
    }
}