Obtain the device camera's Geospatial pose
Stay organized with collections
Save and categorize content based on your preferences.
Once you have configured your app's settings to use the Geospatial API, you can call Earth.getCameraGeospatialPose()
to obtain a GeospatialPose
that describes the device’s Geospatial positioning for the camera in the latest frame. This pose, managed in an Earth
object, contains the following information:
- Location, expressed in latitude and longitude
- Altitude
- An orientation approximating the direction the user is facing in the EUS coordinate system with X+ pointing east, Y+ pointing up, and Z+ pointing south
Check the tracking state
Geospatial values are only valid while Earth.TrackingState
is TrackingState.TRACKING
. Make sure to wrap all Geospatial API calls in a Earth.TrackingState
control block.
Java
if (earth != null && earth.getTrackingState() == TrackingState.TRACKING) {
GeospatialPose cameraGeospatialPose = earth.getCameraGeospatialPose();
// cameraGeospatialPose contains geodetic location, rotation, and confidences values.
}
Kotlin
if (earth.trackingState == TrackingState.TRACKING) {
val cameraGeospatialPose = earth.cameraGeospatialPose
// cameraGeospatialPose contains geodetic location, rotation, and confidences values.
}
If Earth.TrackingState
does not become TrackingState.TRACKING
, Earth.TrackingState
may be TrackingState.PAUSED
or TrackingState.STOPPED
. If neither of these conditions are true, check Earth.Earthstate
, which shows other error states that may keep the Earth
object from tracking.
Adjust the pose for accuracy
When the device is upright in the default orientation, the pitch (X+) and roll (Z+) angles tend to be precise due to a natural alignment with AR tracking. However, the yaw (Y+) angles can vary depending on VPS data availability and temporal conditions at the location. Your app may have to make adjustments for accuracy.
GeospatialPose.getOrientationYawAccuracy()
provides an accuracy estimate for the yaw (Y+) angles for a certain GeospatialPose
. The orientation yaw accuracy is a number that describes the radius, in degrees, of the 68th percentile confidence level around the yaw angles returned from GeospatialPose.getEastUpSouthQuaternion()
. In other words, there is a 68% chance that the GeospatialPose
’s true yaw angle is accurate.
Larger values indicate lower accuracy. For example, if the estimated yaw angle is 60 degrees and the yaw accuracy is 10 degrees, then there is a 68% probability that the true yaw angle is between 50 and 70 degrees.
What's next
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2025-07-14 UTC.
[null,null,["Last updated 2025-07-14 UTC."],[[["\u003cp\u003eThe Geospatial API provides the device's location, altitude, and orientation using the \u003ccode\u003eEarth\u003c/code\u003e object and \u003ccode\u003eGeospatialPose\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003eGeospatial data is only valid when \u003ccode\u003eEarth.TrackingState\u003c/code\u003e is \u003ccode\u003eTrackingState.TRACKING\u003c/code\u003e; ensure your code handles other tracking states.\u003c/p\u003e\n"],["\u003cp\u003eWhile pitch and roll are generally precise, yaw accuracy can vary and may require adjustments in your application.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003eGeospatialPose.getOrientationYawAccuracy()\u003c/code\u003e provides an estimate of yaw accuracy, with larger values indicating lower accuracy.\u003c/p\u003e\n"],["\u003cp\u003eYou can leverage the Geospatial pose to place Geospatial anchors in your AR experience.\u003c/p\u003e\n"]]],[],null,["# Obtain the device camera's Geospatial pose\n\nOnce you have configured your app's settings to use the Geospatial API, you can call [`Earth.getCameraGeospatialPose()`](/ar/reference/java/com/google/ar/core/Earth#getCameraGeospatialPose-) to obtain a [`GeospatialPose`](/ar/reference/java/com/google/ar/core/GeospatialPose) that describes the device's Geospatial positioning for the camera in the latest frame. This pose, managed in an [`Earth`](/ar/reference/java/com/google/ar/core/Earth) object, contains the following information:\n\n- Location, expressed in latitude and longitude\n- Altitude\n- An orientation approximating the direction the user is facing in the EUS coordinate system with X+ pointing east, Y+ pointing up, and Z+ pointing south\n\nCheck the tracking state\n------------------------\n\nGeospatial values are only valid while [`Earth.TrackingState`](/ar/reference/java/com/google/ar/core/TrackingState) is [`TrackingState.TRACKING`](/ar/reference/java/com/google/ar/core/TrackingState#tracking). Make sure to wrap all Geospatial API calls in a [`Earth.TrackingState`](/ar/reference/java/com/google/ar/core/TrackingState) control block. \n\n### Java\n\n```java\nif (earth != null && earth.getTrackingState() == TrackingState.TRACKING) {\n GeospatialPose cameraGeospatialPose = earth.getCameraGeospatialPose();\n // cameraGeospatialPose contains geodetic location, rotation, and confidences values.\n}\n```\n\n### Kotlin\n\n```kotlin\nif (earth.trackingState == TrackingState.TRACKING) {\n val cameraGeospatialPose = earth.cameraGeospatialPose\n // cameraGeospatialPose contains geodetic location, rotation, and confidences values.\n}\n```\n\nIf [`Earth.TrackingState`](/ar/reference/java/com/google/ar/core/TrackingState) does not become [`TrackingState.TRACKING`](/ar/reference/java/com/google/ar/core/TrackingState#tracking), [`Earth.TrackingState`](/ar/reference/java/com/google/ar/core/TrackingState) may be [`TrackingState.PAUSED`](/ar/reference/java/com/google/ar/core/TrackingState#paused) or [`TrackingState.STOPPED`](/ar/reference/java/com/google/ar/core/TrackingState#stopped). If neither of these conditions are true, check [`Earth.Earthstate`](/ar/reference/java/com/google/ar/core/Earth.EarthState), which shows other error states that may keep the [`Earth`](/ar/reference/java/com/google/ar/core/Earth) object from tracking.\n\nAdjust the pose for accuracy\n----------------------------\n\nWhen the device is upright in the default orientation, the pitch (X+) and roll (Z+) angles tend to be precise due to a natural alignment with AR tracking. However, the yaw (Y+) angles can vary depending on VPS data availability and temporal conditions at the location. Your app may have to make adjustments for accuracy.\n\n[`GeospatialPose.getOrientationYawAccuracy()`](/ar/reference/java/com/google/ar/core/GeospatialPose#getOrientationYawAccuracy-) provides an accuracy estimate for the yaw (Y+) angles for a certain [`GeospatialPose`](/ar/reference/java/com/google/ar/core/GeospatialPose). The orientation yaw accuracy is a number that describes the radius, in degrees, of the 68th percentile confidence level around the yaw angles returned from [`GeospatialPose.getEastUpSouthQuaternion()`](/ar/reference/java/com/google/ar/core/GeospatialPose#getEastUpSouthQuaternion-). In other words, there is a 68% chance that the [`GeospatialPose`](/ar/reference/java/com/google/ar/core/GeospatialPose)'s true yaw angle is accurate.\n\nLarger values indicate lower accuracy. For example, if the estimated yaw angle is 60 degrees and the yaw accuracy is 10 degrees, then there is a 68% probability that the true yaw angle is between 50 and 70 degrees.\n\nWhat's next\n-----------\n\n- Place a [Geospatial anchor](/ar/develop/java/geospatial/anchors#wgs84_anchors) by obtaining the anchor's Geospatial pose."]]