获取设备相机的地理空间姿势

将应用设置配置为使用 Geospatial API 后,您可以调用 ArEarth_getCameraGeospatialPose 来获取 ArGeospatialPose,该对象描述设备在最新帧中的相机地理空间定位。此姿势在 ArEarth 对象中管理,包含以下信息:

  • 位置,以纬度和经度表示
  • 海拔高度
  • EUS 坐标系中与用户所面向的方向近似的方向,X+ 指向东,Y+ 指向上方,Z+ 指向南

检查跟踪状态

仅当 ArEarth.ArTrackingStateArTrackingState.AR_TRACKING_STATE_TRACKINGArEarth.ArEarthStateAR_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_PAUSEDAR_TRACKING_STATE_STOPPED。如果以上两个条件都不满足,请检查 ArEarth.ArEarthState,其中会显示可能会阻止 ArEarth 对象跟踪的其他错误状态。

调整姿势以提高准确度

当设备在默认屏幕方向下处于竖直状态时,由于与 AR 跟踪自然对齐,倾斜度 (X+) 和旋转角度 (Z+) 往往很精确。但是,偏摆 (Y+) 角度可能因 VPS 数据可用性和位置的时间条件而异。您的应用可能需要进行调整,以确保准确性。

ArGeospatialPose_getOrientationYawAccuracy() 提供某个 ArGeospatialPose 的偏摆 (Y+) 角度的精确度估算值。方向偏航精度是一个数字,用于描述从 ArGeospatialPose_getEastUpSouthQuaternion() 返回的偏摆角周围第 68 个百分位置信度的半径(以度为单位)。也就是说,ArGeospatialPose 的真实偏摆角准确的可能性有 68%。

值越大表示准确率越低。例如,如果估算偏摆角度为 60 度,偏摆精度为 10 度,则真实偏摆角度在 50 度到 70 度之间的概率为 68%。

后续步骤