Как работать с геопространственными позами

Поддерживаемые XR-устройства
Это руководство поможет вам создавать продукты для таких XR-устройств.
Проводные XR-очки
Аудио- и
видеоочки

GeospatialPose описывает положение в пространстве относительно Земли. Он состоит из следующих компонентов:

  • Широта и долгота, указанные в градусах в соответствии со спецификацией WGS84.
  • Высота над уровнем моря, которая указывается в метрах над эллипсоидом WGS84 или примерно соответствует высоте над уровнем моря.
  • Ориентация, которая приблизительно указывает направление позы в системе координат EUS. В системе координат EUS ось X+ направлена на восток, Y+ – вверх, а Z+ – на юг.

Geospatial API предоставляет доступ к пространственному положению устройства и позволяет преобразовывать пространственные положения в локальные положения устройства.

Требования

Чтобы получать и преобразовывать геопространственные позы, ваше приложение должно быть настроено для использования Geospatial API. Геопространственные позы можно получить, только когда Geospatial API находится в состоянии RUNNING.

Преобразование локальной позы устройства в геопространственную позу

Локальную систему координат Pose можно преобразовать в GeospatialPose, например чтобы определить положение устройства пользователя относительно Земли. Это поможет вам:

  • Создавайте постоянный контент дополненной реальности, в котором размещенный пользователем виртуальный объект точно привязан к глобальному местоположению для последующего извлечения.
  • Постоянно обновляйте местоположение пользователя на карте, чтобы обеспечить навигацию в реальном времени или игровой процесс с геозонированием.
  • Определять точное местоположение пользователя, чтобы активировать логику приложения, связанную с местоположением.

В приведенном ниже примере кода показано, как преобразовать Pose в GeospatialPose с помощью 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
    }
}

Как преобразовать геопространственную позу в локальную позу устройства

Вы также можете преобразовать GeospatialPose в локальный Pose. Это преобразование берет информацию, определяемую реальными координатами, например местоположение ориентира, путь навигации или постоянный контент дополненной реальности, и преобразует ее в точное визуальное пространство устройства пользователя.

В примере кода ниже показано, как использовать Geospatial.createPoseFromGeospatialPose(), чтобы преобразовать геопространственную позу в локальную позу устройства.

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