Inhalte an realen Orten verankern

XR‑Geräte, für die der Leitfaden gilt
Dieser Leitfaden hilft Ihnen dabei, Erlebnisse für die folgenden Arten von XR-Geräten zu entwickeln.
Kabelgebundene XR-Datenbrille

Geospatial-Anker sind eine Art von Anker, mit dem Sie 3D-Inhalte mit geografischen Koordinaten über die Geospatial API platzieren können.

Georäumliche Anker verwenden einen Breiten- und Längengrad, um ihre Position zu bestimmen. Breiten- und Längengrad werden durch die WGS84-Spezifikation definiert. Es handelt sich um dieselben Koordinaten, die in einem typischen GPS-System angezeigt werden.

Breiten- und Längengrad eines Standorts ermitteln

Wenn Sie einen bestimmten POI im Sinn haben, können Sie mit Google Maps den Längen- und Breitengrad ermitteln:

  1. Rufen Sie Google Maps auf einem Computer auf.
  2. Gehen Sie zu Ebenen > Mehr.

    Die Schaltfläche „Ebenen“ in Google Maps

    Die Schaltfläche „Mehr“ in Google Maps

  3. Ändern Sie den Kartentyp in Satellit und entfernen Sie das Häkchen aus dem Kästchen Globusansicht unten links auf dem Bildschirm.

    Die Optionen für den Kartentyp in Google Maps

    Dadurch wird eine 2D-Perspektive erzwungen und mögliche Fehler, die durch eine schräge 3D-Ansicht entstehen können, werden vermieden.

  4. Klicken Sie auf der Karte mit der rechten Maustaste auf den Standort und wählen Sie den Längen- und Breitengrad aus, um ihn in die Zwischenablage zu kopieren.

Position im Bereich des Nutzers in einen Georäumlichen Anker umwandeln

Wenn Sie zum POI reisen können, können Sie den Breiten-, Längen- und Höhengrad anhand einer lokalen Messung bestimmen, indem Sie eine geräteinterne Position in eine Geospatial-Position umwandeln.

Inhalte an einem Georäumlichen Anker positionieren

Für raumbezogene Anker ist ein Höhenwert erforderlich, der sich auf das WGS84-Ellipsoid oder auf das Gelände oder Dach bezieht.

  • Verwenden Sie für Höhenwerte relativ zum WGS84-Ellipsoid Geospatial.createAnchor:

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

  • Für Höhenwerte relativ zum Gelände oder zu einem Dach verwenden Sie Geospatial.createAnchorOnSurface. Mit GeospatialSurface.TERRAIN bzw. GeospatialSurface.ROOFTOP geben Sie an, wie die endgültige Höhe interpretiert werden soll:

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

    Wenn Sie GeospatialSurface.ROOFTOP verwenden, wird die Höhe standardmäßig auf die Geländehöhe festgelegt, wenn das Objekt nicht auf einem Gebäude platziert wird.

Prüfen Sie dann das Ergebnis des Erstellungsaufrufs:

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

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

Verwenden Sie schließlich den Anker, um 3D-Inhalte zu positionieren:

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)