XR_ANDROID_geospatial
Name String
XR_ANDROID_geospatial
Loại tiện ích
Phần mở rộng thực thể
Số máy lẻ đã đăng ký
790
Bản sửa đổi
1
Trạng thái phê chuẩn
Chưa được phê chuẩn
Phần phụ thuộc của tiện ích và phiên bản
XR_EXT_future
Ngày sửa đổi gần đây nhất
2025-12-18
Trạng thái IP
Không có tuyên bố nào về tài sản trí tuệ.
Cộng tác viên
John Ullman, Google
Ben King, Google
Nihav Jain, Google
Jared Finder, Google
Tổng quan
Tiện ích này cung cấp tính năng theo dõi không gian địa lý cho Geospatial API của Google, giúp cung cấp thông tin chính xác về vị trí địa lý và hướng, đồng thời cho phép ứng dụng đặt nội dung theo Trái Đất. Tính năng này hoạt động bằng cách kết hợp tính năng theo dõi chuyển động, GPS và các cảm biến khác, cũng như Hệ thống định vị trực quan (VPS) của Google. VPS so sánh hình ảnh từ camera của thiết bị với hình ảnh trong Chế độ xem đường phố để xác định vị trí và hướng chính xác. Geospatial API thường cung cấp độ chính xác về vị trí dưới một mét (mức độ chính xác cao hơn nhiều so với GPS) và độ chính xác về hướng dưới một độ.
Để sử dụng thành công các API trong tiện ích này (ngoài việc kiểm tra khả năng hỗ trợ tiện ích), ứng dụng phải đặt thành công thông tin xác thực thông qua một số cơ chế, chẳng hạn như XR_ANDROID_google_cloud_auth . Hãy xem tài liệu về tiện ích xác thực để biết thêm thông tin chi tiết về cách thiết lập và kết quả lỗi.
Quyền
Ứng dụng Android phải có quyền android.permission.ACCESS_FINE_LOCATION trong tệp kê khai để sử dụng tiện ích này. Quyền android.permission.ACCESS_FINE_LOCATION được coi là quyền nguy hiểm. Ứng dụng phải yêu cầu quyền trong thời gian chạy để sử dụng các hàm sau:
(mức độ bảo vệ: nguy hiểm)
Kiểm tra chức năng của hệ thống
Cấu trúc XrSystemGeospatialPropertiesANDROID được định nghĩa như sau:
typedef struct XrSystemGeospatialPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsGeospatial;
} XrSystemGeospatialPropertiesANDROID;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.supportsGeospatiallà mộtXrBool32, cho biết liệu hệ thống hiện tại có hỗ trợ các tính năng không gian địa lý hay không.
Ứng dụng có thể kiểm tra xem hệ thống có hỗ trợ các tính năng không gian địa lý hay không bằng cách liên kết cấu trúc XrSystemGeospatialPropertiesANDROID với XrSystemProperties khi gọi xrGetSystemProperties .
Nếu một thời gian chạy trả về XR_FALSE cho supportsGeospatial , thì hệ thống sẽ không hỗ trợ các tính năng không gian địa lý, do đó phải trả về XR_ERROR_FEATURE_UNSUPPORTED từ xrCreateGeospatialTrackerANDROID . Ứng dụng nên tránh sử dụng chức năng không gian địa lý khi supportsGeospatial là XR_FALSE .
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_geospatialtrước khi sử dụng XrSystemGeospatialPropertiesANDROID -
typephải làXR_TYPE_SYSTEM_GEOSPATIAL_PROPERTIES_ANDROID -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
Tạo một trình xử lý Trình theo dõi không gian địa lý
XR_DEFINE_HANDLE(XrGeospatialTrackerANDROID)
Hàm xrCreateGeospatialTrackerANDROID được định nghĩa như sau:
XrResult xrCreateGeospatialTrackerANDROID(
XrSession session,
const XrGeospatialTrackerCreateInfoANDROID* createInfo,
XrGeospatialTrackerANDROID* geospatialTrackerOutput);
Nội dung mô tả về tham số
sessionlà một XrSession, trong đó trình theo dõi không gian địa lý sẽ hoạt động.createInfolà con trỏ đến cấu trúc XrGeospatialTrackerCreateInfoANDROID chỉ định các tham số ban đầu của trình theo dõi không gian địa lý.geospatialTrackerOutputlà con trỏ đến một handle mà trong đó XrGeospatialTrackerANDROID được tạo sẽ được trả về.
Ứng dụng có thể tạo một tay điều khiển XrGeospatialTrackerANDROID bằng cách gọi xrCreateGeospatialTrackerANDROID . Sau đó, bạn có thể sử dụng tay điều khiển XrGeospatialTrackerANDROID được trả về trong các lệnh gọi API. Nếu ứng dụng chưa có được các quyền cần thiết, thì thời gian chạy phải trả về XR_ERROR_PERMISSION_INSUFFICIENT . Chỉ có thể có một XrGeospatialTrackerANDROID tại một thời điểm cho một XrSession cụ thể. Ứng dụng phải đảm bảo rằng mọi đối tượng XrGeospatialTrackerANDROID trước đó đã bị huỷ trước khi gọi lại hàm này, nếu không, thời gian chạy phải trả về XR_ERROR_LIMIT_REACHED . Nếu trình theo dõi được tạo thành công, thì ban đầu trình theo dõi sẽ chuyển sang trạng thái XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID và ứng dụng phải đợi cho đến khi trạng thái chuyển sang XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID trước khi sử dụng trình theo dõi. Xem XrEventDataGeospatialTrackerStateChangedANDROID . Nếu ứng dụng truyền một XrGeospatialTrackerANDROID không ở trạng thái XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID đến một hàm yêu cầu trạng thái đó, thì thời gian chạy phải trả về XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID .
Cuối cùng, bạn phải giải phóng tay điều khiển XrGeospatialTrackerANDROID thông qua hàm xrDestroyGeospatialTrackerANDROID.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Phải bật tiện ích
XR_ANDROID_geospatialtrước khi gọi xrCreateGeospatialTrackerANDROID -
sessionphải là một tên người dùng XrSession hợp lệ -
createInfophải là một con trỏ đến cấu trúc XrGeospatialTrackerCreateInfoANDROID hợp lệ -
geospatialTrackerOutputphải là một con trỏ đến một tay điều khiển XrGeospatialTrackerANDROID
Mã trả về
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_PERMISSION_INSUFFICIENTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
Cấu trúc XrGeospatialTrackerCreateInfoANDROID được định nghĩa như sau:
typedef struct XrGeospatialTrackerCreateInfoANDROID {
XrStructureType type;
const void* next;
} XrGeospatialTrackerCreateInfoANDROID;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Phải bật tiện ích
XR_ANDROID_geospatialtrước khi sử dụng XrGeospatialTrackerCreateInfoANDROID -
typephải làXR_TYPE_GEOSPATIAL_TRACKER_CREATE_INFO_ANDROID -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc . Xem thêm: XrGeospatialTrackerAnchorTrackingInfoANDROID
Hàm xrDestroyGeospatialTrackerANDROID được định nghĩa như sau:
XrResult xrDestroyGeospatialTrackerANDROID(
XrGeospatialTrackerANDROID geospatialTracker);
Nội dung mô tả về tham số
geospatialTrackerlà XrGeospatialTrackerANDROID cần huỷ.
Ứng dụng có thể sử dụng hàm xrDestroyGeospatialTrackerANDROID để giải phóng trình theo dõi không gian địa lý và các tài nguyên cơ bản.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_ANDROID_geospatialphải được bật trước khi gọi xrDestroyGeospatialTrackerANDROID -
geospatialTrackerphải là một tên người dùng XrGeospatialTrackerANDROID hợp lệ
Độ an toàn cho chuỗi
- Quyền truy cập vào
geospatialTrackervà mọi tay điều khiển con phải được đồng bộ hoá bên ngoài
Mã trả về
XR_SUCCESS
XR_ERROR_CALL_ORDER_INVALIDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Trạng thái của trình theo dõi không gian địa lý
Phép liệt kê XrGeospatialTrackerStateANDROID được định nghĩa như sau:
typedef enum XrGeospatialTrackerStateANDROID {
XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID = 0,
XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID = 1,
XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID = 2,
XR_GEOSPATIAL_TRACKER_STATE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrGeospatialTrackerStateANDROID;
Kiểu liệt kê XrGeospatialTrackerStateANDROID xác định các trạng thái của trình theo dõi không gian địa lý.
Các giá trị liệt kê có các giá trị sau:
Nội dung mô tả enum
XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID
Trình theo dõi không gian địa lý không chạy.
XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID
Trình theo dõi không gian địa lý đang chạy và có thể sử dụng được.
XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID
Không khởi động được Trình theo dõi không gian địa lý và sẽ không thể sử dụng được.
Cấu trúc XrEventDataGeospatialTrackerStateChangedANDROID được định nghĩa như sau:
typedef struct XrEventDataGeospatialTrackerStateChangedANDROID {
XrStructureType type;
const void* next;
XrGeospatialTrackerANDROID geospatialTracker;
XrGeospatialTrackerStateANDROID state;
XrResult initializationResult;
XrTime time;
} XrEventDataGeospatialTrackerStateChangedANDROID;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc.geospatialTrackerlà XrGeospatialTrackerANDROID có trạng thái đã thay đổi.statelà XrGeospatialTrackerStateANDROID mới.initializationResultlà kết quả lỗi nếustatelàXR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID, nếu không thì làXR_SUCCESS.timelàXrTimemà tại đó trạng thái thay đổi.
Cấu trúc XrEventDataGeospatialTrackerStateChangedANDROID được gửi khi trạng thái của trình theo dõi không gian địa lý thay đổi. Nếu ứng dụng có XrGeospatialTrackerANDROID hợp lệ, thì ứng dụng nên thăm dò ý kiến về sự kiện này. Sự kiện đầu tiên nhận được cho một trình theo dõi sẽ có state XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID . Sau một khoảng thời gian do thời gian chạy xác định, trạng thái phải thay đổi thành XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID hoặc XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID . Quá trình chuyển đổi này sẽ mất một khoảng thời gian tuỳ ý. Nếu state thay đổi thành XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID, thì đây phải là sự kiện cuối cùng nhận được cho trình theo dõi này và trường initializationResult sẽ chứa mã lỗi. Có thể mất vài giây để lỗi xảy ra. Trong trường hợp này, ứng dụng nên huỷ trình theo dõi. Nếu state thay đổi thành XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID , thì tất cả các neo không gian địa lý đã tạo trước đó phải ngừng theo dõi vĩnh viễn và phải bị ứng dụng huỷ. Trạng thái có thể thay đổi qua lại giữa XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID và XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID nhiều lần tuỳ ý.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_geospatialtrước khi sử dụng XrEventDataGeospatialTrackerStateChangedANDROID -
typephải làXR_TYPE_EVENT_DATA_GEOSPATIAL_TRACKER_STATE_CHANGED_ANDROID -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
Tư thế không gian địa lý
Cấu trúc XrGeospatialPoseANDROID được định nghĩa như sau:
typedef struct XrGeospatialPoseANDROID {
XrQuaternionf eastUpSouthOrientation;
double latitude;
double longitude;
double altitude;
} XrGeospatialPoseANDROID;
Nội dung mô tả về thành viên
eastUpSouthOrientationlà một XrQuaternionf xác định hướng đối với hệ toạ độ trong đó +X=Đông, +Y=Lên và +Z=Nam.latitudelà vĩ độ tính bằng độ, trong khoảng từ -90 đến +90.longitudelà kinh độ tính bằng độ, từ -180 đến +180.altitudelà độ cao tính bằng mét so với hình elip WGS84.
Cấu trúc XrGeospatialPoseANDROID biểu thị vị trí và hướng tương ứng với Trái Đất bằng cách sử dụng hình elip WGS84.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_geospatialtrước khi sử dụng XrGeospatialPoseANDROID -
latitudephải là một giá trịdoublehợp lệ -
longitudephải là một giá trịdoublehợp lệ -
altitudephải là một giá trịdoublehợp lệ
Phép liệt kê XrGeospatialPoseFlagBitsANDROID được định nghĩa như sau:
// Flag bits for XrGeospatialPoseFlagsANDROID
static const XrGeospatialPoseFlagsANDROID XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID = 0x00000001;
static const XrGeospatialPoseFlagsANDROID XR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID = 0x00000002;
Bảng liệt kê XrGeospatialPoseFlagBitsANDROID chỉ định cờ cho tư thế không gian địa lý.
Các bit cờ có ý nghĩa như sau:
Nội dung mô tả cờ
XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID— Cho biết thành phần hướng chứa dữ liệu hợp lệXR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID— Cho biết thành phần vị trí chứa dữ liệu hợp lệ
Loại XrGeospatialPoseFlagsANDROID là một mặt nạ bit của XrGeospatialPoseFlagBitsANDROID .
typedef XrFlags64 XrGeospatialPoseFlagsANDROID;
Chuyển đổi XrPosef thành Tư thế không gian địa lý
Hàm xrLocateGeospatialPoseFromPoseANDROID được định nghĩa như sau:
XrResult xrLocateGeospatialPoseFromPoseANDROID(
XrGeospatialTrackerANDROID geospatialTracker,
const XrGeospatialPoseFromPoseLocateInfoANDROID* locateInfo,
XrGeospatialPoseResultANDROID* geospatialPoseResult);
Nội dung mô tả về tham số
geospatialTrackerlà XrGeospatialTrackerANDROID dùng để chuyển đổi.locateInfolà con trỏ đến XrGeospatialPoseFromPoseLocateInfoANDROID chứa các tham số truy vấn.geospatialPoseResultlà con trỏ đến XrGeospatialPoseResultANDROID nhận kết quả.
Hàm xrLocateGeospatialPoseFromPoseANDROID chuyển đổi tư thế trong XrGeospatialPoseFromPoseLocateInfoANDROID :: space thành tư thế không gian địa lý. Nếu trạng thái của geospatialTracker không phải là XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID , thì thời gian chạy phải trả về XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID . Nếu hàm trả về XR_SUCCESS , thì trường XrGeospatialPoseResultANDROID :: poseFlags của geospatialPoseResult sẽ xác định trường đầu ra nào hợp lệ. Nếu XR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID không được đặt trong XrGeospatialPoseResultANDROID :: poseFlags , thì ứng dụng không được đọc các trường XrGeospatialPoseANDROID :: latitude , XrGeospatialPoseANDROID :: longitude , XrGeospatialPoseANDROID :: altitude , XrGeospatialPoseResultANDROID :: horizontalAccuracy hoặc XrGeospatialPoseResultANDROID :: verticalAccuracy trong XrGeospatialPoseResultANDROID . Nếu XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID không được đặt trong XrGeospatialPoseResultANDROID :: poseFlags , thì ứng dụng không được đọc XrGeospatialPoseANDROID :: eastUpSouthOrientation hoặc XrGeospatialPoseResultANDROID :: orientationYawAccuracy . Nếu bạn không đặt XR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID, thì bạn cũng không được đặt XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID.
Nếu độ chính xác thấp hơn dự kiến, thì đây có thể là dấu hiệu cho thấy thiết bị không sử dụng tính năng bản địa hoá VPS. Ứng dụng có thể hướng dẫn người dùng hướng thiết bị của họ vào các biển báo và toà nhà để cải thiện khả năng bản địa hoá.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_geospatialtrước khi gọi xrLocateGeospatialPoseFromPoseANDROID -
geospatialTrackerphải là một tên người dùng XrGeospatialTrackerANDROID hợp lệ -
locateInfophải là một con trỏ đến cấu trúc XrGeospatialPoseFromPoseLocateInfoANDROID hợp lệ -
geospatialPoseResultphải là một con trỏ đến cấu trúc XrGeospatialPoseResultANDROID
Mã trả về
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROIDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_POSE_INVALIDXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
Cấu trúc XrGeospatialPoseFromPoseLocateInfoANDROID được định nghĩa như sau:
typedef struct XrGeospatialPoseFromPoseLocateInfoANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
XrPosef pose;
} XrGeospatialPoseFromPoseLocateInfoANDROID;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc.spacelà XrSpace màposeđược xác định.timelàXrTimeđể đánh giápose.poselà XrPosef trongspaceđể chuyển đổi thành tư thế không gian địa lý.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_geospatialtrước khi sử dụng XrGeospatialPoseFromPoseLocateInfoANDROID -
typephải làXR_TYPE_GEOSPATIAL_POSE_FROM_POSE_LOCATE_INFO_ANDROID -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc -
spacephải là một tên người dùng XrSpace hợp lệ
Cấu trúc XrGeospatialPoseResultANDROID được định nghĩa như sau:
typedef struct XrGeospatialPoseResultANDROID {
XrStructureType type;
void* next;
XrGeospatialPoseFlagsANDROID poseFlags;
XrGeospatialPoseANDROID geospatialPose;
double horizontalAccuracy;
double verticalAccuracy;
double orientationYawAccuracy;
} XrGeospatialPoseResultANDROID;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc.poseFlagslà một mặt nạ bit của XrGeospatialPoseFlagsANDROID cho biết tính hợp lệ của các thành phần tư thế.geospatialPoselà XrGeospatialPoseANDROID thu được.horizontalAccuracylà độ chính xác ước tính theo chiều ngang của vị trí Tư thế không gian địa lý, được xác định là bán kính (tính bằng mét) của vòng tròn có mức độ tin cậy 68% xung quanh vĩ độ và kinh độ đã cho.verticalAccuracylà độ chính xác ước tính theo chiều dọc của vị trí tư thế không gian địa lý, được xác định là khoảng cách tính bằng mét của mức độ tin cậy 68% xung quanh độ cao đã cho. Nói cách khác, có 68% khả năng độ cao thực nằm trong khoảng [ XrGeospatialPoseANDROID ::altitude–verticalAccuracy, XrGeospatialPoseANDROID ::altitude\+verticalAccuracy].orientationYawAccuracylà độ chính xác ước tính của góc lệch trong hướng tư thế Địa không gian, được xác định là bán kính tính bằng độ của mức độ tin cậy 68% xung quanh hướng đã cho.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_ANDROID_geospatialphải được bật trước khi sử dụng XrGeospatialPoseResultANDROID -
typephải làXR_TYPE_GEOSPATIAL_POSE_RESULT_ANDROID -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
Chuyển đổi Tư thế không gian địa lý thành XrPosef
Hàm xrLocateGeospatialPoseANDROID được định nghĩa như sau:
XrResult xrLocateGeospatialPoseANDROID(
XrGeospatialTrackerANDROID geospatialTracker,
const XrGeospatialPoseLocateInfoANDROID* locateInfo,
XrSpaceLocation* location);
Nội dung mô tả về tham số
geospatialTrackerlà XrGeospatialTrackerANDROID dùng để chuyển đổi.locateInfolà con trỏ đến XrGeospatialPoseLocateInfoANDROID chứa các tham số truy vấn.locationlà con trỏ đến XrSpaceLocation nhận tư thế thu được.
Hàm xrLocateGeospatialPoseANDROID chuyển đổi tư thế không gian địa lý thành XrSpaceLocation . Nếu XrGeospatialTrackerANDROID không chạy, thì thời gian chạy phải trả về XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID . Nếu hàm trả về XR_SUCCESS , thì trường XrSpaceLocation :: locationFlags của location sẽ xác định trường đầu ra nào là hợp lệ.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_ANDROID_geospatialphải được bật trước khi gọi xrLocateGeospatialPoseANDROID -
geospatialTrackerphải là một tên người dùng XrGeospatialTrackerANDROID hợp lệ -
locateInfophải là con trỏ đến cấu trúc XrGeospatialPoseLocateInfoANDROID hợp lệ -
locationphải là một con trỏ đến cấu trúc XrSpaceLocation
Mã trả về
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_GEOSPATIAL_COORDINATES_INVALID_ANDROIDXR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROIDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_POSE_INVALIDXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
Cấu trúc XrGeospatialPoseLocateInfoANDROID được định nghĩa như sau:
typedef struct XrGeospatialPoseLocateInfoANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
XrGeospatialPoseANDROID geospatialPose;
} XrGeospatialPoseLocateInfoANDROID;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc.spacelà XrSpace mà tư thế thu được sẽ được biểu thị.timelàXrTimeđể xác định tư thế.geospatialPoselà XrGeospatialPoseANDROID cần chuyển đổi.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_geospatialtrước khi sử dụng XrGeospatialPoseLocateInfoANDROID -
typephải làXR_TYPE_GEOSPATIAL_POSE_LOCATE_INFO_ANDROID -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc -
spacephải là một tên người dùng XrSpace hợp lệ -
geospatialPosephải là một cấu trúc XrGeospatialPoseANDROID hợp lệ
Phạm vi cung cấp VPS
Kiểu liệt kê XrVPSAvailabilityANDROID được định nghĩa như sau:
typedef enum XrVPSAvailabilityANDROID {
XR_VPS_AVAILABILITY_UNAVAILABLE_ANDROID = 1,
XR_VPS_AVAILABILITY_AVAILABLE_ANDROID = 2,
XR_VPSAVAILABILITY_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrVPSAvailabilityANDROID;
Bảng liệt kê XrVPSAvailabilityANDROID cho biết tình trạng còn hàng của VPS.
Các giá trị liệt kê có các giá trị sau:
Nội dung mô tả enum
XR_VPS_AVAILABILITY_UNAVAILABLE_ANDROID
VPS không hoạt động gần vị trí đã cho.
XR_VPS_AVAILABILITY_AVAILABLE_ANDROID
VPS có sẵn gần vị trí đã cho.
Hàm xrCheckVpsAvailabilityAsyncANDROID được định nghĩa như sau:
XrResult xrCheckVpsAvailabilityAsyncANDROID(
XrSession session,
double latitude,
double longitude,
XrFutureEXT* future);
Nội dung mô tả về tham số
sessionlà XrSession cần dùng để kiểm tra.latitudelà vĩ độ tính bằng độ.longitudelà kinh độ tính bằng độ.futurelà một con trỏ trỏ đếnXrFutureEXTsẽ lưu giữ kết quả của hoạt động không đồng bộ.
Phạm vi cung cấp của Dịch vụ định vị bằng hình ảnh (VPS) cho biết liệu VPS có thể được dùng để cải thiện độ chính xác của dữ liệu không gian địa lý tại một vị trí nhất định hay không.
Hàm xrCheckVpsAvailabilityAsyncANDROID bắt đầu kiểm tra không đồng bộ về phạm vi cung cấp VPS tại một vị trí nhất định. Ứng dụng không cần XrGeospatialTrackerANDROID để gọi hàm này và có thể sử dụng kết quả của thao tác này để quyết định xem có tạo một hàm hay không. Nếu ứng dụng chưa có được các quyền cần thiết, thì thời gian chạy phải trả về XR_ERROR_PERMISSION_INSUFFICIENT .
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_ANDROID_geospatialphải được bật trước khi gọi xrCheckVpsAvailabilityAsyncANDROID -
sessionphải là một tên người dùng XrSession hợp lệ -
latitudephải là một giá trịdoublehợp lệ -
longitudephải là một giá trịdoublehợp lệ -
futurephải là một con trỏ đến giá trịXrFutureEXT
Mã trả về
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_GEOSPATIAL_COORDINATES_INVALID_ANDROIDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
Hàm xrCheckVpsAvailabilityCompleteANDROID được định nghĩa như sau:
XrResult xrCheckVpsAvailabilityCompleteANDROID(
XrSession session,
XrFutureEXT future,
XrVPSAvailabilityCheckCompletionANDROID* completion);
Nội dung mô tả về tham số
sessionlà XrSession được dùng để kiểm tra.futurelàXrFutureEXTdo xrCheckVpsAvailabilityAsyncANDROID trả về.completionlà con trỏ đến XrVPSAvailabilityCheckCompletionANDROID nhận kết quả.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_ANDROID_geospatialphải được bật trước khi gọi xrCheckVpsAvailabilityCompleteANDROID -
sessionphải là một tên người dùng XrSession hợp lệ -
completionphải là con trỏ đến cấu trúc XrVPSAvailabilityCheckCompletionANDROID
Mã trả về
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_FUTURE_INVALID_EXTXR_ERROR_FUTURE_PENDING_EXTXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
Cấu trúc XrVPSAvailabilityCheckCompletionANDROID được định nghĩa như sau:
typedef struct XrVPSAvailabilityCheckCompletionANDROID {
XrStructureType type;
void* next;
XrResult futureResult;
XrVPSAvailabilityANDROID availability;
} XrVPSAvailabilityCheckCompletionANDROID;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc.futureResultlà XrResult của thao tác kiểm tra. NếufutureResultlàXR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROID, thì một cấu trúc trong chuỗinextcó thể cung cấp thêm thông tin về lỗi.availabilitylà XrVPSAvailabilityANDROID thu được. Ứng dụng không được đọc trường này trừ phifutureResultlàXR_SUCCESS.
Mã trả về trong tương lai
Giá trị futureResult:
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROID
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_ANDROID_geospatialphải được bật trước khi sử dụng XrVPSAvailabilityCheckCompletionANDROID -
typephải làXR_TYPE_VPS_AVAILABILITY_CHECK_COMPLETION_ANDROID -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc -
futureResultphải là một giá trị XrResult hợp lệ -
availabilityphải là một giá trị XrVPSAvailabilityANDROID hợp lệ
Ví dụ
Thiết lập trình theo dõi không gian địa lý
PFN_xrCheckVpsAvailabilityAsyncANDROID xrCheckVpsAvailabilityAsyncANDROID;
PFN_xrPollFutureEXT xrPollFutureEXT;
PFN_xrCheckVpsAvailabilityCompleteANDROID xrCheckVpsAvailabilityCompleteANDROID;
PFN_xrCreateGeospatialTrackerANDROID xrCreateGeospatialTrackerANDROID;
XrInstance instance = XR_NULL_HANDLE;
XrSystemId systemId = XR_NULL_SYSTEM_ID;
XrSession session = XR_NULL_HANDLE;
double lat = 37.422, lng = -122.084;
// Check for support.
XrSystemGeospatialPropertiesANDROID geospatialSystemProperties{
XR_TYPE_SYSTEM_GEOSPATIAL_PROPERTIES_ANDROID};
XrSystemProperties systemProperties{XR_TYPE_SYSTEM_PROPERTIES,
&geospatialSystemProperties};
CHK_XR(xrGetSystemProperties(instance, systemId, &systemProperties));
if (!geospatialSystemProperties.supportsGeospatial) {
return;
}
// Check VPS Availability.
XrFutureEXT future = XR_NULL_FUTURE_EXT;
CHK_XR(xrCheckVpsAvailabilityAsyncANDROID(session, lat, lng, &future));
XrFuturePollInfoEXT pollInfo{XR_TYPE_FUTURE_POLL_INFO_EXT};
XrFuturePollResultEXT pollResult{XR_TYPE_FUTURE_POLL_RESULT_EXT};
pollInfo.future = future;
pollResult.state = XR_FUTURE_STATE_PENDING_EXT;
while (pollResult.state == XR_FUTURE_STATE_PENDING_EXT) {
// Do in render loop/state loop.
CHK_XR(xrPollFutureEXT(instance, &pollInfo, &pollResult));
}
XrVPSAvailabilityCheckCompletionANDROID vpsCompletion{
XR_TYPE_VPS_AVAILABILITY_CHECK_COMPLETION_ANDROID};
CHK_XR(xrCheckVpsAvailabilityCompleteANDROID(session, future, &vpsCompletion));
if (vpsCompletion.futureResult == XR_SUCCESS) {
if (vpsCompletion.availability == XR_VPS_AVAILABILITY_UNAVAILABLE_ANDROID) {
// Visual Positioning Service is not available. Accuracy of positions and
// orientations from Geospatial APIs are expected to be lower at this location.
} else {
// Visual Positioning Service is available. Higher accuracy of position and
// orientation is achievable at this location.
}
}
// Create Geospatial Tracker.
XrGeospatialTrackerCreateInfoANDROID createInfo{
XR_TYPE_GEOSPATIAL_TRACKER_CREATE_INFO_ANDROID};
XrGeospatialTrackerANDROID geospatialTracker = XR_NULL_HANDLE;
CHK_XR(xrCreateGeospatialTrackerANDROID(session, &createInfo, &geospatialTracker));
// In application main event loop:
while (true) {
XrEventDataBuffer event = {XR_TYPE_EVENT_DATA_BUFFER};
if (xrPollEvent(instance, &event) != XR_SUCCESS) {
continue;
}
switch (event.type) {
case XR_TYPE_EVENT_DATA_GEOSPATIAL_TRACKER_STATE_CHANGED_ANDROID:
const XrEventDataGeospatialTrackerStateChangedANDROID& eventData =
*reinterpret_cast<XrEventDataGeospatialTrackerStateChangedANDROID*>(&event);
switch (eventData.state) {
case XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID:
// Destroy existing anchors, if any.
break;
case XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID:
// Start adding content.
break;
case XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID:
// Handle eventData.initializationResult error result.
break;
}
}
}
Gọi API Tư thế không gian địa lý
PFN_xrLocateGeospatialPoseFromPoseANDROID xrLocateGeospatialPoseFromPoseANDROID;
PFN_xrLocateGeospatialPoseANDROID xrLocateGeospatialPoseANDROID;
XrGeospatialTrackerANDROID geospatialTracker;
// Get pose from view space.
XrSpace viewSpace;
XrPosef identityPose = {{0,0,0,1},{0,0,0}};
XrGeospatialPoseFromPoseLocateInfoANDROID poseGetInfo{
XR_TYPE_GEOSPATIAL_POSE_FROM_POSE_LOCATE_INFO_ANDROID};
XrGeospatialPoseResultANDROID poseResult{
XR_TYPE_GEOSPATIAL_POSE_RESULT_ANDROID};
poseGetInfo.space = viewSpace;
poseGetInfo.pose = identityPose;
poseGetInfo.time = 0; // Next frame timestamp.
CHK_XR(xrLocateGeospatialPoseFromPoseANDROID(geospatialTracker, &poseGetInfo, &poseResult));
if ((poseResult.poseFlags & XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID) &&
(poseResult.poseFlags & XR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID)) {
// poseResult.geospatialPose is valid.
}
// Convert Geospatial pose to an XrSpaceLocation.
XrGeospatialPoseLocateInfoANDROID poseLocateInfo{
XR_TYPE_GEOSPATIAL_POSE_LOCATE_INFO_ANDROID};
XrSpaceLocation location{XR_TYPE_SPACE_LOCATION};
poseLocateInfo.space = viewSpace;
poseLocateInfo.geospatialPose = poseResult.geospatialPose;
poseLocateInfo.time = 0; // Next frame timestamp.
CHK_XR(xrLocateGeospatialPoseANDROID(geospatialTracker, &poseLocateInfo, &location));
if ((location.locationFlags & XR_SPACE_LOCATION_ORIENTATION_VALID_BIT) &&
(location.locationFlags & XR_SPACE_LOCATION_POSITION_VALID_BIT)) {
// location.pose is valid.
}
Các loại đối tượng mới
Lệnh mới
- xrCheckVpsAvailabilityAsyncANDROID
- xrCheckVpsAvailabilityCompleteANDROID
- xrCreateGeospatialTrackerANDROID
- xrDestroyGeospatialTrackerANDROID
- xrLocateGeospatialPoseANDROID
- xrLocateGeospatialPoseFromPoseANDROID
Cấu trúc mới
- XrEventDataGeospatialTrackerStateChangedANDROID
- XrGeospatialPoseANDROID
- XrGeospatialPoseFromPoseLocateInfoANDROID
- XrGeospatialPoseLocateInfoANDROID
- XrGeospatialPoseResultANDROID
- XrGeospatialTrackerCreateInfoANDROID
- XrVPSAvailabilityCheckCompletionANDROID
Mở rộng XrSystemProperties :
Enum mới
Mặt nạ bit mới
Hằng số enum mới
XR_ANDROID_GEOSPATIAL_EXTENSION_NAMEXR_ANDROID_geospatial_SPEC_VERSIONMở rộng XrObjectType :
XR_OBJECT_TYPE_GEOSPATIAL_TRACKER_ANDROID
Mở rộng XrResult :
XR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROIDXR_ERROR_GEOSPATIAL_COORDINATES_INVALID_ANDROIDXR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID
Mở rộng XrStructureType :
XR_TYPE_EVENT_DATA_GEOSPATIAL_TRACKER_STATE_CHANGED_ANDROIDXR_TYPE_GEOSPATIAL_POSE_FROM_POSE_LOCATE_INFO_ANDROIDXR_TYPE_GEOSPATIAL_POSE_LOCATE_INFO_ANDROIDXR_TYPE_GEOSPATIAL_POSE_RESULT_ANDROIDXR_TYPE_GEOSPATIAL_TRACKER_CREATE_INFO_ANDROIDXR_TYPE_SYSTEM_GEOSPATIAL_PROPERTIES_ANDROIDXR_TYPE_VPS_AVAILABILITY_CHECK_COMPLETION_ANDROID
Vấn đề
Nhật ký phiên bản
Bản sửa đổi 1, 18/12/2025 (Ben King)
- Nội dung mô tả ban đầu về tiện ích.