Trabaja con poses geoespaciales

Dispositivos de realidad extendida correspondientes
Esta guía te ayuda a crear experiencias para estos tipos de dispositivos de realidad extendida.
Lentes de realidad extendida con cable
Lentes con audio y
pantalla

Un GeospatialPose describe una posición en el espacio en relación con la Tierra. Se compone de los siguientes elementos:

  • La latitud y la longitud, que se especifican en grados según lo define la especificación WGS84.
  • Altitud, que se especifica en metros sobre el elipsoide WGS84 o, aproximadamente, en metros sobre el nivel del mar.
  • La orientación, que se aproxima a la dirección hacia la que se dirige la pose en el sistema de coordenadas de EUS. En el sistema de coordenadas EUS, X+ apunta al este, Y+ apunta hacia arriba y Z+ apunta al sur.

La API de Geospatial proporciona acceso a la pose geoespacial del dispositivo y proporciona conversiones entre poses geoespaciales y poses locales del dispositivo.

Requisitos previos

Para obtener y convertir poses geoespaciales, tu app debe estar configurada para usar la API de Geospatial. Las poses geoespaciales solo se pueden obtener cuando la API de Geospatial tiene un estado RUNNING.

Cómo convertir una pose local del dispositivo en una pose geoespacial

Un Pose local del dispositivo se puede convertir en un GeospatialPose, por ejemplo, para determinar la posición del dispositivo del usuario en relación con la Tierra. Esto puede ayudarte a hacer lo siguiente:

  • Crea contenido de RA persistente, en el que el objeto virtual que coloca un usuario se ancla con precisión a una ubicación global para su posterior recuperación.
  • Activa experiencias basadas en la ubicación actualizando continuamente la posición del usuario en un mapa para habilitar la navegación en tiempo real o el juego con geovallado.
  • Determinar el contexto preciso del usuario en el mundo real para activar la lógica de la aplicación relevante para la ubicación

En la siguiente muestra de código, se indica cómo convertir un Pose en un GeospatialPose con 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
    }
}

Cómo convertir una posición geoespacial en una posición local del dispositivo

También puedes convertir un GeospatialPose en un Pose local del dispositivo. Esta transformación toma información definida por coordenadas del mundo real, como la ubicación de un punto de referencia, una ruta de navegación o contenido de RA persistente, y la convierte en el espacio visual preciso del dispositivo del usuario.

En la siguiente muestra de código, se indica cómo usar Geospatial.createPoseFromGeospatialPose() para convertir una pose geoespacial en una pose local 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
    }
}