Utilizzo delle pose geospaziali

Dispositivi XR applicabili
Queste indicazioni ti aiutano a creare esperienze per questi tipi di dispositivi XR.
Occhiali XR con cavo
Audio e
occhiali con display

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
    }
}