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