將內容錨定在現實世界的位置

適用的 XR 裝置
本指南可協助您為這類 XR 裝置打造體驗。
有線 XR 眼鏡

地理空間錨點是一種錨點,可讓您使用 Geospatial API 放置具有地理座標的 3D 內容。

地理空間錨點會使用經緯度來判斷位置。經緯度由 WGS84 規格定義,與一般 GPS 系統顯示的座標相同。

判斷地點的經緯度

如果您有特定景點,請使用 Google 地圖判斷其經緯度:

  1. 在電腦上前往 Google 地圖。
  2. 依序前往「圖層」>「更多」。

    Google 地圖上的圖層按鈕

    Google 地圖上的「更多」按鈕

  3. 將「Map Type」變更為「Satellite」,然後取消勾選畫面左下角的「Globe View」核取方塊。

    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)