将应用的设置配置为使用 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
对象跟踪的其他错误状态。
调整姿势以提高准确性
当设备处于默认屏幕方向且竖立时,由于与 AR 跟踪自然对齐,俯仰角 (X+) 和滚动角 (Z+) 通常是精确的。但是,偏摆 (Y+) 角度可能因位置处的 VPS 数据可用性和时间条件而异。您的应用可能需要进行调整,以确保准确性。
ArGeospatialPose_getOrientationYawAccuracy()
会为特定 ArGeospatialPose
的偏航角 (Y+) 提供精度估算值。方向偏摆精度是一个数字,用于描述 ArGeospatialPose_getEastUpSouthQuaternion()
返回的偏摆角度周围第 68 个百分位数置信度的半径(以度为单位)。也就是说,ArGeospatialPose
的真实偏摆角准确的可能性有 68%。
值越大表示准确率越低。例如,如果估算偏摆角度为 60 度,偏摆精度为 10 度,则真实偏摆角度在 50 度到 70 度之间的概率为 68%。
后续步骤
- 通过获取锚点的地理空间姿势来放置地理空间锚点。