Получите геопространственную позу камеры устройства.

После того как вы настроили параметры своего приложения для использования Geospatial API, вы можете вызвать ArEarth_getCameraGeospatialPose , чтобы получить ArGeospatialPose , который описывает геопространственное положение устройства для камеры в последнем кадре. Эта поза, управляемая в объекте ArEarth , содержит следующую информацию:

  • Местоположение, выраженное в широте и долготе
  • Высота
  • Ориентация, приблизительно соответствующая направлению, в котором смотрит пользователь в системе координат EUS, где X+ указывает на восток, Y+ указывает вверх, а Z+ указывает на юг.

Проверьте состояние отслеживания

Геопространственные значения действительны только в том случае, если ArEarth.ArTrackingState имеет ArTrackingState.AR_TRACKING_STATE_TRACKING и ArEarth.ArEarthState имеет значение AR_EARTH_STATE_ENABLED . Обязательно оберните все вызовы Geospatial API в блок управления ArEarth.ArTrackingState .

if (ar_earth != NULL) {
  ArTrackingState earth_tracking_state = AR_TRACKING_STATE_STOPPED;
  ArTrackable_getTrackingState(ar_session, (ArTrackable*)ar_earth,
                               &earth_tracking_state);
  if (earth_tracking_state == AR_TRACKING_STATE_TRACKING) {
    ArGeospatialPose* camera_geospatial_pose = NULL;
    ArGeospatialPose_create(ar_session, &camera_geospatial_pose);
    ArEarth_getCameraGeospatialPose(ar_session, ar_earth,
                                    camera_geospatial_pose);
    // camera_geospatial_pose contains geodetic location, rotation, and
    // confidences values.
    ArGeospatialPose_destroy(camera_geospatial_pose);
  }
}

Если ArEarth.ArTrackingState не становится ArTrackingState.AR_TRACKING_STATE_TRACKING , ArEarth.ArTrackingState может быть AR_TRACKING_STATE_PAUSED или AR_TRACKING_STATE_STOPPED . Если ни одно из этих условий не верно, проверьте ArEarth.ArEarthState , который показывает другие состояния ошибок, которые могут препятствовать отслеживанию объекта ArEarth .

Отрегулируйте позу для точности

Когда устройство находится в вертикальном положении в ориентации по умолчанию, углы наклона (X+) и крена (Z+) имеют тенденцию быть точными благодаря естественному выравниванию с отслеживанием AR. Однако углы отклонения (Y+) могут варьироваться в зависимости от доступности данных VPS и временных условий в месте расположения. Возможно, вашему приложению придется внести коррективы для обеспечения точности.

ArGeospatialPose_getOrientationYawAccuracy() предоставляет оценку точности углов отклонения (Y+) для определенного ArGeospatialPose . Точность отклонения от курса ориентации — это число, которое описывает радиус в градусах уровня достоверности 68-го процентиля вокруг углов отклонения от курса, возвращаемых из ArGeospatialPose_getEastUpSouthQuaternion() . Другими словами, существует 68% вероятность того, что истинный угол отклонения ArGeospatialPose является точным.

Большие значения указывают на меньшую точность. Например, если расчетный угол отклонения от курса составляет 60 градусов, а точность отклонения от курса составляет 10 градусов, то существует 68% вероятность того, что истинный угол отклонения от курса составляет от 50 до 70 градусов.

Что дальше

,

После того как вы настроили параметры своего приложения для использования Geospatial API, вы можете вызвать ArEarth_getCameraGeospatialPose , чтобы получить ArGeospatialPose , который описывает геопространственное положение устройства для камеры в последнем кадре. Эта поза, управляемая в объекте ArEarth , содержит следующую информацию:

  • Местоположение, выраженное в широте и долготе
  • Высота
  • Ориентация, приблизительно соответствующая направлению, в котором смотрит пользователь в системе координат EUS, где X+ указывает на восток, Y+ указывает вверх, а Z+ указывает на юг.

Проверьте состояние отслеживания

Геопространственные значения действительны только в том случае, если ArEarth.ArTrackingState имеет ArTrackingState.AR_TRACKING_STATE_TRACKING и ArEarth.ArEarthState имеет значение AR_EARTH_STATE_ENABLED . Обязательно оберните все вызовы Geospatial API в блок управления ArEarth.ArTrackingState .

if (ar_earth != NULL) {
  ArTrackingState earth_tracking_state = AR_TRACKING_STATE_STOPPED;
  ArTrackable_getTrackingState(ar_session, (ArTrackable*)ar_earth,
                               &earth_tracking_state);
  if (earth_tracking_state == AR_TRACKING_STATE_TRACKING) {
    ArGeospatialPose* camera_geospatial_pose = NULL;
    ArGeospatialPose_create(ar_session, &camera_geospatial_pose);
    ArEarth_getCameraGeospatialPose(ar_session, ar_earth,
                                    camera_geospatial_pose);
    // camera_geospatial_pose contains geodetic location, rotation, and
    // confidences values.
    ArGeospatialPose_destroy(camera_geospatial_pose);
  }
}

Если ArEarth.ArTrackingState не становится ArTrackingState.AR_TRACKING_STATE_TRACKING , ArEarth.ArTrackingState может быть AR_TRACKING_STATE_PAUSED или AR_TRACKING_STATE_STOPPED . Если ни одно из этих условий не верно, проверьте ArEarth.ArEarthState , который показывает другие состояния ошибок, которые могут препятствовать отслеживанию объекта ArEarth .

Отрегулируйте позу для точности

Когда устройство находится в вертикальном положении в ориентации по умолчанию, углы наклона (X+) и крена (Z+) имеют тенденцию быть точными благодаря естественному выравниванию с отслеживанием AR. Однако углы отклонения (Y+) могут варьироваться в зависимости от доступности данных VPS и временных условий в месте расположения. Возможно, вашему приложению придется внести коррективы для обеспечения точности.

ArGeospatialPose_getOrientationYawAccuracy() предоставляет оценку точности углов отклонения (Y+) для определенного ArGeospatialPose . Точность отклонения от курса ориентации — это число, которое описывает радиус в градусах уровня достоверности 68-го процентиля вокруг углов отклонения от курса, возвращаемых из ArGeospatialPose_getEastUpSouthQuaternion() . Другими словами, существует 68% вероятность того, что истинный угол отклонения ArGeospatialPose является точным.

Большие значения указывают на меньшую точность. Например, если расчетный угол отклонения от курса составляет 60 градусов, а точность отклонения от курса составляет 10 градусов, то существует 68% вероятность того, что истинный угол отклонения от курса составляет от 50 до 70 градусов.

Что дальше