지리 공간 포즈 작업

적용 가능한 XR 기기
이 가이드는 이러한 유형의 XR 기기를 위한 환경을 빌드하는 데 도움이 됩니다.
유선 XR 글라스
오디오 및
디스플레이 안경

GeospatialPose는 지구를 기준으로 한 공간의 위치를 설명합니다. 다음 구성요소로 이루어집니다.

  • WGS84 사양에 정의된 각도로 지정된 위도 및 경도입니다.
  • 고도: WGS84 타원체 위의 미터 단위로 지정되거나 해발 미터와 거의 동일합니다.
  • 방향: EUS 좌표계에서 포즈가 향하는 방향을 근사치로 나타냅니다. EUS 좌표계는 X+가 동쪽을, Y+가 위쪽을, Z+가 남쪽을 가리킵니다.

Geospatial API는 기기의 Geospatial 포즈에 대한 액세스를 제공하고 Geospatial 포즈와 기기 로컬 포즈 간의 변환을 제공합니다.

기본 요건

Geospatial 포즈를 가져오고 변환하려면 앱이 Geospatial API를 사용하도록 설정되어야 합니다. Geospatial 포즈는 Geospatial API에 RUNNING 상태가 있는 경우에만 가져올 수 있습니다.

기기 로컬 포즈를 지리 공간적 포즈로 변환

기기 로컬 Pose는 예를 들어 지구를 기준으로 사용자 기기의 위치를 확인하기 위해 GeospatialPose로 변환할 수 있습니다. 이렇게 하면 다음과 같은 작업에 도움이 됩니다.

  • 사용자가 배치한 가상 객체가 나중에 검색할 수 있도록 전역 위치에 정확하게 고정되는 영구 AR 콘텐츠를 작성합니다.
  • 지도에서 사용자의 위치를 지속적으로 업데이트하여 실시간 내비게이션 또는 지오펜싱 게임플레이를 지원함으로써 위치 기반 환경을 트리거합니다.
  • 위치 관련 애플리케이션 로직을 트리거하기 위해 사용자의 정확한 실제 컨텍스트를 확인합니다.

다음 코드 샘플은 Geospatial.createGeospatialPoseFromPose()를 사용하여 Pose를 GeospatialPose로 변환하는 방법을 보여줍니다.

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

지리 공간적 포즈를 기기 로컬 포즈로 변환

GeospatialPose를 기기 로컬 Pose로 변환할 수도 있습니다. 이 변환은 랜드마크의 위치, 탐색 경로, 영구 AR 콘텐츠와 같은 실제 좌표로 정의된 정보를 가져와 사용자의 기기의 정확한 시각적 공간으로 변환합니다.

다음 코드 샘플은 Geospatial.createPoseFromGeospatialPose()를 사용하여 Geospatial 포즈를 기기 로컬 포즈로 변환하는 방법을 보여줍니다.

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