Un GeospatialPose descrive una posizione nello spazio rispetto alla Terra. È composta dai seguenti componenti:
- Latitudine e longitudine, specificate in gradi come definito dalla specifica WGS84.
- Altitudine, specificata in metri sopra l'ellissoide WGS84 o approssimativamente equivalente ai metri sopra il livello del mare.
- Orientamento, che approssima la direzione della posa nel sistema di coordinate EUS. Il sistema di coordinate EUS ha X+ che punta a est, Y+ che punta verso l'alto e Z+ che punta a sud.
L'API Geospatial fornisce l'accesso alla posa geospaziale del dispositivo e fornisce conversioni tra pose geospaziali e pose locali del dispositivo.
Prerequisiti
Per ottenere e convertire le pose geospaziali, la tua app deve essere configurata per utilizzare l'API Geospatial. Le pose geospaziali possono essere ottenute solo quando l'API Geospatial ha uno stato RUNNING.
Converti una posa locale del dispositivo in una posa Geospatial
Un Pose locale del dispositivo può essere convertito in un GeospatialPose, ad esempio per determinare la posizione del dispositivo dell'utente rispetto alla Terra. In questo modo puoi:
- Crea contenuti AR persistenti, in cui un oggetto virtuale posizionato da un utente viene ancorato con precisione a una posizione globale per un recupero successivo.
- Attiva esperienze basate sulla posizione aggiornando continuamente la posizione dell'utente su una mappa per consentire la navigazione in tempo reale o il gameplay con geofencing.
- Determinare il contesto reale preciso dell'utente per attivare la logica dell'applicazione pertinente alla posizione.
Il seguente esempio di codice mostra come convertire un Pose in un GeospatialPose utilizzando 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 } }
Converti una posa geospaziale in una posa locale del dispositivo
Puoi anche convertire un GeospatialPose in un Pose locale del dispositivo. Questa trasformazione prende le informazioni definite dalle coordinate del mondo reale, come la posizione di un punto di riferimento, un percorso di navigazione o contenuti AR persistenti, e le converte nello spazio visivo preciso del dispositivo dell'utente.
Il seguente esempio di codice mostra come utilizzare
Geospatial.createPoseFromGeospatialPose()
per convertire una posa Geospatial in una posa locale del dispositivo.
// 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 } }