Geospatial API 总览与核心能力
Geospatial API 是什么
ARCore Geospatial API(地理空间 API)是 Google 在 ARCore 体系中推出的"把 AR 内容锚定到真实世界坐标"的能力。与普通 Anchor(锚定到 SLAM 检测到的平面/特征点)不同,Geospatial Anchor 直接锚定到经纬度(WGS84 坐标)和海拔高度——你可以在 Google Street View 覆盖的任何位置放置 AR 内容,用户走到这个位置就能看到。
核心优势:不需要预先建图。传统 AR 共享(如 Cloud Anchors)需要用户先走到某个位置"建立锚点",其他设备再去"解析"。Geospatial API 借助 Google 街景的全球覆盖,让开发者直接把内容关联到任意经纬度,路过的人只需要打开应用就能看到——不需要任何人先做本地扫描。
Geospatial API 的三层架构
设备侧(手机) 云端(Google) 真实世界
─────────────────────────────────────────────────────────
GPS + IMU + 摄像头 → VPS 匹配 → 经纬度 + 海拔
↓
Geospatial Anchor(你的 AR 内容)
| 层 | 职责 | 技术 |
|---|---|---|
| 设备侧 | 采集 GPS、传感器、摄像头画面 | Android/iOS 原生 |
| 云端 VPS | 把摄像头画面匹配到 Google 街景的 3D 点云,计算精确位置 | Google Vision Positioning System |
| Anchor 层 | 在计算出的精确位置上创建 Anchor | WGS84 坐标 + Streetscape 数据 |
核心能力清单
| 能力 | 说明 | 适用场景 |
|---|---|---|
| VPS 全球定位 | 比 GPS 精确得多的视觉定位(亚米级 vs GPS 10-50 米) | 室外精确定位 |
| Geospatial Anchor | 直接在经纬度+海拔创建 Anchor | 把 AR 内容钉在地球上某个点 |
| Streetscape Geometry | 获取周围建筑和地形的几何数据 | 遮挡渲染、碰撞检测 |
| Geospatial Depth | 结合 Streetscape 和本地深度传感器的精确深度 | 比 Depth API 更精确的室外深度 |
| Cloud Anchors 与 VPS 结合 | 在 VPS 定位到的位置上托管/解析 Cloud Anchors | 多人共享但不需要预先本地扫描 |
覆盖范围与限制
已覆盖国家/地区
Geospatial API 覆盖 Google Street View 已经拍摄过的区域——这意味着全球超过 100 个国家和地区的主要城市和道路都能用。但以下情况有例外:
- 室内:VPS 无法定位(街景不进室内)
- 偏远地区/乡村:街景覆盖稀疏,VPS 定位可能不准或失败
- 极偏远地区:完全没有街景数据,VPS 无法工作
- 地下/地铁/隧道:GPS 和 VPS 都失效
精度对比
| 定位方式 | 典型精度 | 适用场景 |
|---|---|---|
| GPS | 10 ~ 50 米(室外) | 大致定位、城市范围 |
| VPS | 亚米级 ~ 5 米 | 精确到某栋建筑/某个橱窗 |
| SLAM(本地) | 厘米级(扫描过的区域) | 室内或局部区域 |
设备要求
Geospatial API 支持大部分 ARCore 支持的 Android 设备和 iOS 12+。少数老设备或某些低端机型不支持——可以用代码检测:
val geospatialSupported = session.isGeospatialModeSupported(
Session.Config.GeospatialMode.ENABLED
)
网络要求
Geospatial API 必须有网络连接——VPS 定位需要把摄像头画面发送到 Google 云端匹配街景数据。没有网络时 Geospatial API 会完全无法工作,需要降级到本地 SLAM + 普通 Anchor。
Session 配置启用 Geospatial
val session = Session(context)
// 检查设备支持
if (session.isGeospatialModeSupported(Session.Config.GeospatialMode.ENABLED)) {
session.configure(
Session.Config(context).apply {
setGeospatialMode(Session.Config.GeospatialMode.ENABLED)
}
)
}
// 在 iOS 上还需要配置 API Key 和隐私声明
iOS 上的额外配置
iOS 上使用 Geospatial API(或任何需要上传数据到 Google 云端的 API)需要在 Info.plist 中声明:
NSLocationWhenInUseUsageDescription(使用地理位置)NSCameraUsageDescription(使用摄像头)NSMicrophoneUsageDescription(某些场景可能需要)
开发入口
Google 提供了所有主流开发环境的 Geospatial API 支持:
| 环境 | 指南链接 | 说明 |
|---|---|---|
| Android (Kotlin/Java) | 官方 quickstart | 原生 API |
| Android NDK (C) | 官方 quickstart | 底层 C API |
| Unity (AR Foundation) | 官方 guide | Unity 封装 |
| iOS | 官方 quickstart | Swift/Objective-C |
| Unreal Engine | 官方文档 | Blueprint / C++ |
典型应用场景
| 场景 | 举例 | Geospatial 价值 |
|---|---|---|
| 地点导航 | AR 箭头引导用户找车、找商店、找入口 | GPS 精度不够(会跳),VPS 保证箭头稳定 |
| 城市级 AR 游戏 | 在公园放虚拟球靶让玩家打,Pocket Garden 在小区撒虚拟种子 | 多人共享但不需要预先建图,基于 VPS 对齐所有人的视图 |
| 品牌营销 | 在某个地点(如演唱会场地、商业街橱窗)放限时 AR 内容 | 任何人走到该地点就能看到,无需用户预先扫描 |
| 街景增强 | 让用户对着街景拍照的位置叠加 AR 注释 | 精准锚定历史位置,配合 Streetscape Geometry 做遮挡 |
| 建筑可视化 | 让用户站在空地上看到规划中的建筑 | 在真实地形上叠加 3D 模型,用 Streetscape 做遮挡 |