You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ARCore中模拟地理位置?GeospatialPose模拟方案咨询

解决ARCore Geospatial API不识别系统模拟定位的问题

ARCore的Geospatial API不会直接读取系统LocationManager的模拟位置——它内部是融合GPS、视觉SLAM等多源数据计算GeospatialPose的,系统级模拟定位会被其内部逻辑忽略。要模拟GeospatialPose,有两种可行方案:

方案一:使用ARCore官方模拟接口(推荐)

ARCore 1.30及以上版本提供了直接模拟GeospatialPose的API,通过Session.setMockGeospatialPose()可以强制设置模拟的地理空间姿态。

代码示例:

// 初始化ARSession并启用Geospatial功能
val session = Session(context)
val config = Config(session).apply {
    geospatialMode = Config.GeospatialMode.ENABLED
}
session.configure(config)

// 构造模拟的GeospatialPose参数
val mockPose = GeospatialPose(
    latitude = 39.9042,    // 目标模拟纬度
    longitude = 116.4074,  // 目标模拟经度
    altitude = 50.0,       // 目标模拟海拔
    heading = 90.0,        // 目标模拟朝向(正北为0,顺时针计算)
    headingAccuracy = 1.0,
    horizontalAccuracy = 0.5,
    verticalAccuracy = 0.5
)

// 应用模拟姿态
session.setMockGeospatialPose(mockPose)

注意事项:

  • 调用前必须确保Geospatial功能已启用
  • 开启模拟后,ARCore将不再依赖真实传感器和定位数据

方案二:拦截GeospatialPose获取逻辑

如果你的ARCore版本不支持官方模拟接口,可以在业务代码中封装GeospatialPose的获取逻辑,开发环境下返回模拟数据。

代码示例:

// 封装GeospatialPose获取方法
fun getTargetGeospatialPose(earth: Earth?): GeospatialPose {
    // 开发环境返回模拟数据,生产环境返回真实数据
    if (BuildConfig.DEBUG) {
        return GeospatialPose(
            latitude = 39.9042,
            longitude = 116.4074,
            altitude = 50.0,
            heading = 90.0,
            headingAccuracy = 1.0,
            horizontalAccuracy = 0.5,
            verticalAccuracy = 0.5
        )
    } else {
        return earth?.geospatialPose ?: throw IllegalStateException("Earth服务未就绪")
    }
}

// 业务代码中调用封装方法替代直接获取
val currentPose = getTargetGeospatialPose(earth)

额外配置要求

  1. 确保应用已申请ACCESS_FINE_LOCATION权限
  2. 在设备开发者选项中,将你的应用设置为允许模拟位置的应用
  3. 测试时建议关闭设备真实GPS,避免真实数据干扰模拟效果

内容的提问来源于stack exchange,提问作者Florian Schlueter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 15:12:50