在现实世界位置锚定内容

适用的 XR 设备
本指南可帮助您为以下类型的 XR 设备打造优质体验。
有线扩展现实眼镜

地理空间锚点是一种锚点,可让您使用 Geospatial API 放置具有地理坐标的 3D 内容。

地理空间锚点使用纬度和经度来确定其位置。纬度和经度由 WGS84 规范定义,与典型 GPS 系统中显示的坐标相同。

确定某个位置的纬度和经度

如果您有特定的地图注点,请使用 Google 地图确定其经纬度:

  1. 在桌面设备上访问 Google 地图。
  2. 依次前往图层 > 更多。

    Google 地图上的“图层”按钮

    Google 地图上的“更多”按钮

  3. 将地图类型更改为卫星,然后清除屏幕左下角的地球视图复选框。

    Google 地图上的地图类型选项

    这会强制采用 2D 透视,并消除可能因 3D 角度视图而产生的错误。

  4. 在地图上,右键点击相应位置,然后选择经纬度,将其复制到剪贴板。

将用户所在区域中的位置转换为地理空间锚点

如果您可以前往地图注点,则可以通过将设备本地姿态转换为地理空间姿态,根据本地读数确定纬度、经度和海拔。

在地理空间锚点处放置内容

地理空间锚点需要一个海拔高度值,该值相对于 WGS84 椭球体或相对于地形或屋顶。

  • 对于相对于 WGS84 椭球体的高度值,请使用 Geospatial.createAnchor:

    val createAnchorResult = geospatial.createAnchor(
        latitude,
        longitude,
        altitude,
        Quaternion.Identity,
    )

  • 对于相对于地形或屋顶的高度值,请使用 Geospatial.createAnchorOnSurface,并分别使用 GeospatialSurface.TERRAIN 和 GeospatialSurface.ROOFTOP 来指定应如何解读最终高度:

    val createAnchorResult = geospatial.createAnchorOnSurface(
        latitude,
        longitude,
        altitude,
        Quaternion.Identity,
        GeospatialSurface.TERRAIN,
    )

    使用 GeospatialSurface.ROOFTOP 时,如果未放置在建筑物上,海拔高度默认为地形海拔高度。

然后,检查创建调用的结果:

when (createAnchorResult) {
    is AnchorCreateSuccess -> {
        // Use anchorCreateResult.anchor to render content at the result.
    }

    else -> {
        // Anchor create failed.
        // See AnchorCreateResult for possible failure reasons.
    }
}

最后,使用锚点定位 3D 内容:

Compose XR

Subspace(FollowTarget.anchor(anchorCreateResult.anchor)) {
    SpatialPanel {
        GeospatialContent()
    }
}

SceneCore

val anchorSpace = AnchorSpace.create(session, anchorCreateResult.anchor)
val contentEntity = createGeospatialContentEntity(context, session)
anchorSpace.addChild(contentEntity)