Menambatkan konten di lokasi dunia nyata

Perangkat XR yang kompatibel
Panduan ini membantu Anda membangun pengalaman untuk jenis perangkat XR ini.
Kacamata XR Berkabel

Anchor geospasial adalah jenis anchor yang memungkinkan Anda menempatkan konten 3D dengan koordinat geografis menggunakan Geospatial API.

Anchor geospasial menggunakan lintang dan bujur untuk menentukan posisinya. Lintang dan bujur ditentukan oleh spesifikasi WGS84, yang merupakan koordinat yang sama dengan yang ditampilkan dalam sistem GPS standar.

Menentukan lintang dan bujur lokasi

Jika Anda memiliki lokasi menarik tertentu, gunakan Google Maps untuk menentukan lintang dan bujurnya:

  1. Buka Google Maps di komputer desktop.
  2. Buka Lapisan > Lainnya.

    Tombol lapisan di Google Maps

    Tombol lainnya di Google Maps

  3. Ubah Map Type menjadi Satellite dan hapus centang pada kotak Globe View di pojok kiri bawah layar.

    Opsi jenis peta di Google Maps

    Hal ini akan memaksa perspektif 2D dan menghilangkan kemungkinan error yang dapat berasal dari tampilan 3D miring.

  4. Di peta, klik kanan lokasi, lalu pilih bujur dan lintang untuk menyalinnya ke papan klip.

Mengonversi posisi di area pengguna menjadi anchor Geospatial

Jika dapat melakukan perjalanan ke lokasi menarik, Anda dapat menentukan lintang, bujur, dan ketinggian dari pembacaan lokal dengan mengonversi pose lokal perangkat menjadi pose Geospasial.

Memosisikan konten di anchor Geospasial

Anchor geospasial memerlukan nilai ketinggian, yang relatif terhadap elipsoid WGS84 atau relatif terhadap medan atau atap.

  • Untuk nilai ketinggian yang relatif terhadap elipsoid WGS84, gunakan Geospatial.createAnchor:

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

  • Untuk nilai ketinggian yang relatif terhadap medan atau atap, gunakan Geospatial.createAnchorOnSurface, menggunakan GeospatialSurface.TERRAIN dan GeospatialSurface.ROOFTOP masing-masing untuk menentukan cara penafsiran ketinggian akhir:

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

    Saat menggunakan GeospatialSurface.ROOFTOP, ketinggian akan ditetapkan secara default ke ketinggian medan jika tidak ditempatkan di bangunan.

Kemudian, periksa hasil panggilan pembuatan:

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

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

Terakhir, gunakan anchor untuk memosisikan konten 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)