Praca z pozycjami geoprzestrzennymi

Odpowiednie urządzenia z XR
Te wskazówki pomogą Ci tworzyć treści na te typy urządzeń z XR.
Przewodowe okulary XR
Okulary audio i z wyświetlaczem

GeospatialPose opisuje pozycję w przestrzeni względem Ziemi. Składa się z tych komponentów:

  • Szerokość i długość geograficzna, które są podawane w stopniach zgodnie ze specyfikacją WGS84.
  • wysokość nad poziomem morza, która jest podawana w metrach nad elipsoidą WGS84 lub w przybliżeniu odpowiada metrom nad poziomem morza;
  • Orientacja, która określa przybliżony kierunek, w którym zwrócona jest pozycja w układzie współrzędnych EUS. W układzie współrzędnych EUS oś X+ wskazuje wschód, oś Y+ – górę, a oś Z+ – południe.

Interfejs Geospatial API zapewnia dostęp do pozycji geoprzestrzennej urządzenia i umożliwia konwersję między pozycjami geoprzestrzennymi a pozycjami lokalnymi urządzenia.

Wymagania wstępne

Aby uzyskać i przekonwertować pozycje geoprzestrzenne, aplikacja musi być skonfigurowana do korzystania z interfejsu Geospatial API. Pozycje geoprzestrzenne można uzyskać tylko wtedy, gdy interfejs Geospatial API ma stan RUNNING.

Konwertowanie pozycji lokalnej urządzenia na pozycję geoprzestrzenną

Lokalny układ współrzędnych urządzenia Pose można przekonwertować na układ GeospatialPose, aby na przykład określić pozycję urządzenia użytkownika względem Ziemi. Może Ci to pomóc:

  • Twórz trwałe treści AR, w których umieszczony przez użytkownika obiekt wirtualny jest dokładnie zakotwiczony w globalnej lokalizacji, aby można go było później pobrać.
  • Uruchamiaj funkcje oparte na lokalizacji, stale aktualizując pozycję użytkownika na mapie, aby umożliwić nawigację w czasie rzeczywistym lub rozgrywkę z wykorzystaniem geofencingu.
  • Określanie dokładnego kontekstu rzeczywistego użytkownika w celu aktywowania logiki aplikacji związanej z lokalizacją.

Poniższy przykładowy kod pokazuje, jak przekonwertować Pose na GeospatialPose za pomocą Geospatial.createGeospatialPoseFromPose().

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
    }
}

Konwertowanie pozycji geoprzestrzennej na pozycję lokalną urządzenia

Możesz też przekonwertować GeospatialPose na Pose na urządzeniu. Ta transformacja pobiera informacje zdefiniowane przez współrzędne ze świata rzeczywistego, takie jak lokalizacja punktu orientacyjnego, ścieżka nawigacji lub trwałe treści AR, i konwertuje je na precyzyjną przestrzeń wizualną urządzenia użytkownika.

Poniższy przykładowy kod pokazuje, jak używać Geospatial.createPoseFromGeospatialPose() do konwertowania pozycji geoprzestrzennej na pozycję lokalną urządzenia.

// 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
    }
}