Làm việc với tư thế không gian địa lý

Các thiết bị XR được hỗ trợ
Hướng dẫn này giúp bạn xây dựng các trải nghiệm cho những loại thiết bị XR sau.
Kính thông minh XR có dây
Kính có màn hình
và âm thanh

GeospatialPose mô tả một vị trí trong không gian so với Trái Đất. Nó bao gồm các thành phần sau:

  • Vĩ độ và kinh độ, được chỉ định theo độ như được xác định trong quy cách WGS84.
  • Độ cao, được chỉ định bằng mét so với hình elip WGS84 hoặc tương đương với mét so với mực nước biển.
  • Hướng, gần đúng với hướng mà tư thế đang hướng tới trong hệ toạ độ EUS. Hệ toạ độ EUS có X+ hướng về phía đông, Y+ hướng lên trên và Z+ hướng về phía nam.

API Không gian địa lý cung cấp quyền truy cập vào tư thế Không gian địa lý của thiết bị và cung cấp chuyển đổi giữa tư thế Không gian địa lý và tư thế cục bộ của thiết bị.

Điều kiện tiên quyết

Để lấy và chuyển đổi tư thế không gian địa lý, ứng dụng của bạn phải được thiết lập để sử dụng API Không gian địa lý. Bạn chỉ có thể lấy tư thế không gian địa lý khi API Không gian địa lý có trạng thái RUNNING.

Chuyển đổi tư thế cục bộ của thiết bị thành tư thế không gian địa lý

Bạn có thể chuyển đổi Pose cục bộ trên thiết bị thành GeospatialPose, chẳng hạn như để xác định vị trí của thiết bị của người dùng so với Trái Đất. Điều này có thể giúp bạn:

  • Tạo nội dung thực tế tăng cường (AR) ổn định, trong đó đối tượng ảo do người dùng đặt được neo chính xác vào một vị trí chung để truy xuất sau này.
  • Kích hoạt trải nghiệm dựa trên vị trí bằng cách liên tục cập nhật vị trí của người dùng trên bản đồ để bật tính năng chỉ đường theo thời gian thực hoặc lối chơi khoanh vùng địa lý.
  • Xác định bối cảnh thực tế chính xác của người dùng để kích hoạt logic ứng dụng liên quan đến vị trí.

Mã mẫu sau đây minh hoạ cách chuyển đổi Pose thành GeospatialPose bằng cách sử dụng 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
    }
}

Chuyển đổi tư thế không gian địa lý thành tư thế cục bộ của thiết bị

Bạn cũng có thể chuyển đổi GeospatialPose thành Pose trên thiết bị. Quá trình chuyển đổi này lấy thông tin được xác định bằng toạ độ trong thế giới thực (chẳng hạn như vị trí của một địa danh, đường đi hoặc nội dung thực tế tăng cường cố định) rồi chuyển đổi thông tin đó thành không gian hình ảnh chính xác trên thiết bị của người dùng.

Mã mẫu sau đây minh hoạ cách sử dụng Geospatial.createPoseFromGeospatialPose() để chuyển đổi tư thế Địa không gian thành tư thế cục bộ của thiết bị.

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