Ein GeospatialPose beschreibt eine Position im Raum relativ zur Erde. Sie besteht aus den folgenden Komponenten:
- Breiten- und Längengrad, die in Grad gemäß der WGS84-Spezifikation angegeben werden.
- Höhe, die in Metern über dem WGS84-Ellipsoid angegeben wird, was ungefähr der Höhe über dem Meeresspiegel entspricht.
- Ausrichtung, die ungefähr der Richtung entspricht, in die die Pose im EUS-Koordinatensystem zeigt. Im EUS-Koordinatensystem zeigt X+ nach Osten, Y+ nach oben und Z+ nach Süden.
Die Geospatial API bietet Zugriff auf die Geoposition des Geräts und ermöglicht die Umwandlung von Geopositionen in lokale Gerätepositionen und umgekehrt.
Vorbereitung
Damit Ihre App Geospatial-Positionen abrufen und konvertieren kann, muss sie für die Verwendung der Geospatial API eingerichtet sein. Geospatial-Ausrichtungen können nur abgerufen werden, wenn die Geospatial API den Status RUNNING hat.
Gerätelokale Pose in eine Geospatial-Pose umwandeln
Ein gerätelokales Pose kann in ein GeospatialPose umgewandelt werden, um beispielsweise die Position des Nutzergeräts relativ zur Erde zu bestimmen. Das kann dir bei Folgendem helfen:
- Erstellen Sie langlebige AR-Inhalte, bei denen ein vom Nutzer platziertes virtuelles Objekt genau an einem globalen Ort verankert wird, um es später abzurufen.
- Sie können standortbasierte Funktionen auslösen, indem Sie die Position des Nutzers auf einer Karte kontinuierlich aktualisieren, um Echtzeitnavigation oder Geofencing-Gameplay zu ermöglichen.
- Den genauen Kontext des Nutzers in der realen Welt bestimmen, um standortrelevante Anwendungslogik auszulösen.
Im folgenden Codebeispiel wird gezeigt, wie Sie mit Geospatial.createGeospatialPoseFromPose() ein Pose in ein GeospatialPose konvertieren.
val devicePose = ArDevice.getInstance(session).state.value.devicePose // Convert the device Pose into a GeospatialPose. when (val result = geospatial.createGeospatialPoseFromPose(devicePose)) { is CreateGeospatialPoseFromPoseSuccess -> { val geoPose = result.pose val lat = geoPose.latitude val lon = geoPose.longitude val alt = geoPose.altitude // Orientation is in the EUS (East-Up-South) coordinate system. val orientation = geoPose.eastUpSouthQuaternion } is CreateGeospatialPoseFromPoseNotTracking -> { // Geospatial is not currently tracking. } else -> { // A newer exception was added, but your app is using an old version of the library } }
Geospatial-Pose in eine gerätelokale Pose umwandeln
Du kannst auch einen GeospatialPose in einen gerätelokalen Pose konvertieren. Bei dieser Transformation werden Informationen, die durch reale Koordinaten definiert sind, z. B. der Standort einer Sehenswürdigkeit, ein Navigationspfad oder persistente AR-Inhalte, in den genauen visuellen Raum des Geräts des Nutzers umgewandelt.
Im folgenden Codebeispiel wird gezeigt, wie Sie mit Geospatial.createPoseFromGeospatialPose() eine Geospatial-Pose in eine gerätelokale Pose umwandeln.
// Convert a GeospatialPose (lat/long/alt) back to a device-space Pose. when (val result = geospatial.createPoseFromGeospatialPose(geoPose)) { is CreatePoseFromGeospatialPoseSuccess -> { val devicePose: Pose = result.pose // devicePose is now ready to be used relative to the tracking origin. } is CreatePoseFromGeospatialPoseNotTracking -> { // Geospatial is not currently tracking. } is CreatePoseFromGeospatialPoseInternalError -> { // An internal error occurred. } else -> { // A newer exception was added, but your app is using an old version of the library } }