XR_ANDROID_geospatial
Name String
XR_ANDROID_geospatial
نوع الإضافة
إضافة مثيل
رقم الإضافة المسجَّل
790
المراجعة
1
حالة التصديق
لم تتم المصادقة
الاعتماديات على الإضافات والإصدارات
XR_EXT_future
تاريخ آخر تعديل
2025-12-18
حالة عنوان IP
ما مِن مطالبات معروفة بشأن الملكية الفكرية.
المساهمون
"جون أولمان"، Google
"بن كينغ"، Google
"نيهاف جاين"، Google
"جاريد فايندر"، Google
نظرة عامة
توفّر هذه الإضافة ميزة "التتبُّع الجغرافي المكاني" لواجهة Geospatial API من Google التي توفّر تحديدًا دقيقًا للموقع الجغرافي والاتجاه، وتسمح للتطبيق بوضع المحتوى بالنسبة إلى الأرض. ويتم ذلك باستخدام مجموعة من أدوات تتبُّع الحركة ونظام تحديد المواقع العالمي (GPS) وأجهزة الاستشعار الأخرى، بالإضافة إلى نظام تحديد المواقع المرئي (VPS) من Google. يقارن نظام تحديد المواقع المرئي (VPS) الصور من كاميرا الجهاز بصور "التجوّل الافتراضي" لتحديد الموقع الجغرافي والاتجاه بدقة. توفّر Geospatial API غالبًا دقة تحديد المواقع الجغرافية أقل من متر واحد (أفضل بكثير من نظام تحديد المواقع العالمي) ودقة تحديد الاتجاه أقل من درجة واحدة.
لاستخدام واجهات برمجة التطبيقات في هذه الإضافة بنجاح (باستثناء التحقّق من توفّر الإضافة)، يجب أن يكون التطبيق قد ضبط بيانات اعتماد المصادقة بنجاح من خلال آلية معيّنة، مثل XR_ANDROID_google_cloud_auth . راجِع مستندات إضافة المصادقة للحصول على مزيد من التفاصيل حول عملية الإعداد ونتائج الأخطاء.
الأذونات
يجب أن تتضمّن تطبيقات Android حتماً الإذن android.permission.ACCESS_FINE_LOCATION في ملف البيان الخاص بها لاستخدام هذا الامتداد. يُعدّ الإذن android.permission.ACCESS_FINE_LOCATION إذنًا خطيرًا. يجب أن يطلب التطبيق الإذن أثناء التشغيل لاستخدام الوظائف التالية:
(مستوى الحماية: خطير)
فحص إمكانات النظام
يتم تعريف بنية XrSystemGeospatialPropertiesANDROID على النحو التالي:
typedef struct XrSystemGeospatialPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsGeospatial;
} XrSystemGeospatialPropertiesANDROID;
أوصاف الأعضاء
typeهو XrStructureType لهذه البنية.nextهوNULLأو مؤشر إلى البنية التالية في سلسلة البنية. لم يتم تحديد أي بنى من هذا النوع في OpenXR الأساسية أو في هذه الإضافة.-
supportsGeospatialهيXrBool32، وتشير إلى ما إذا كان النظام الحالي يتيح استخدام الميزات الجغرافية المكانية.
يمكن للتطبيق التحقّق مما إذا كان النظام يتيح ميزات الموقع الجغرافي المكاني من خلال ربط بنية XrSystemGeospatialPropertiesANDROID ببنية XrSystemProperties عند استدعاء xrGetSystemProperties .
إذا عرض وقت التشغيل القيمة XR_FALSE لـ supportsGeospatial ، يعني ذلك أنّ النظام لا يتيح ميزات الموقع الجغرافي، وبالتالي يجب عرض القيمة XR_ERROR_FEATURE_UNSUPPORTED من xrCreateGeospatialTrackerANDROID . يجب أن يتجنّب التطبيق استخدام وظائف الموقع الجغرافي المكاني عندما تكون قيمة supportsGeospatial هي XR_FALSE .
الاستخدام الصالح (الضمني)
- يجب تفعيل الإضافة
XR_ANDROID_geospatialقبل استخدام XrSystemGeospatialPropertiesANDROID. - يجب أن يكون
typeXR_TYPE_SYSTEM_GEOSPATIAL_PROPERTIES_ANDROID - يجب أن تكون قيمة
nextهيNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البِنى
إنشاء معرّف Geospatial Tracker
XR_DEFINE_HANDLE(XrGeospatialTrackerANDROID)
يتم تعريف الدالة xrCreateGeospatialTrackerANDROID على النحو التالي:
XrResult xrCreateGeospatialTrackerANDROID(
XrSession session,
const XrGeospatialTrackerCreateInfoANDROID* createInfo,
XrGeospatialTrackerANDROID* geospatialTrackerOutput);
أوصاف المَعلمات
-
sessionهي XrSession سيتم فيها تفعيل أداة التتبُّع الجغرافية المكانية. -
createInfoهو مؤشر إلى بنية XrGeospatialTrackerCreateInfoANDROID تحدّد مَعلمات أداة التتبُّع الجغرافية المكانية الأولية. geospatialTrackerOutputهو مؤشر إلى معرّف يتم فيه عرض XrGeospatialTrackerANDROID الذي تم إنشاؤه.
يمكن لأحد التطبيقات إنشاء معرّف XrGeospatialTrackerANDROID من خلال استدعاء xrCreateGeospatialTrackerANDROID . يمكن لاحقًا استخدام معرّف XrGeospatialTrackerANDROID الذي تم عرضه في طلبات البيانات من واجهة برمجة التطبيقات. إذا لم يحصل التطبيق على الأذونات المطلوبة، يجب أن تعرض بيئة التشغيل القيمة XR_ERROR_PERMISSION_INSUFFICIENT. يمكن أن يكون هناك XrGeospatialTrackerANDROID واحد فقط في كل مرة لجلسة XrSession معيّنة . يجب أن يضمن التطبيق إتلاف أي عناصر XrGeospatialTrackerANDROID سابقة قبل إعادة استدعاء هذه الدالة، وإلا يجب أن يعرض وقت التشغيل XR_ERROR_LIMIT_REACHED . في حال إنشاء أداة التتبُّع بنجاح، ستدخل في البداية إلى الحالة XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID ، ويجب على التطبيق الانتظار إلى أن تتغيّر الحالة إلى XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID قبل استخدام أداة التتبُّع. راجِع XrEventDataGeospatialTrackerStateChangedANDROID . إذا مرّر التطبيق XrGeospatialTrackerANDROID الذي ليس في الحالة XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID إلى دالة تتطلّبه، يجب أن يعرض وقت التشغيل XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID .
يجب تحرير مقبض XrGeospatialTrackerANDROID في النهاية من خلال الدالة xrDestroyGeospatialTrackerANDROID.
الاستخدام الصالح (الضمني)
- يجب تفعيل الإضافة
XR_ANDROID_geospatialقبل استدعاء xrCreateGeospatialTrackerANDROID - يجب أن يكون
sessionمعرّفًا صالحًا لـ XrSession - يجب أن يكون
createInfoمؤشرًا إلى بنية XrGeospatialTrackerCreateInfoANDROID صالحة - يجب أن يكون
geospatialTrackerOutputمؤشرًا إلى معرّف XrGeospatialTrackerANDROID
رموز الإرجاع
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
يتم تعريف بنية XrGeospatialTrackerCreateInfoANDROID على النحو التالي:
typedef struct XrGeospatialTrackerCreateInfoANDROID {
XrStructureType type;
const void* next;
} XrGeospatialTrackerCreateInfoANDROID;
أوصاف الأعضاء
typeهو XrStructureType لهذه البنية.nextهوNULLأو مؤشر إلى البنية التالية في سلسلة البنية.
الاستخدام الصالح (الضمني)
- يجب تفعيل الإضافة
XR_ANDROID_geospatialقبل استخدام XrGeospatialTrackerCreateInfoANDROID - يجب أن يكون
typeXR_TYPE_GEOSPATIAL_TRACKER_CREATE_INFO_ANDROID - يجب أن تكون قيمة
nextإماNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البِنى. راجِع أيضًا: XrGeospatialTrackerAnchorTrackingInfoANDROID
يتم تعريف الدالة xrDestroyGeospatialTrackerANDROID على النحو التالي:
XrResult xrDestroyGeospatialTrackerANDROID(
XrGeospatialTrackerANDROID geospatialTracker);
أوصاف المَعلمات
-
geospatialTrackerهو XrGeospatialTrackerANDROID الذي سيتم إتلافه.
يمكن للتطبيق استخدام الدالة xrDestroyGeospatialTrackerANDROID لإيقاف أداة التتبُّع الجغرافية المكانية والموارد الأساسية.
الاستخدام الصالح (الضمني)
- يجب تفعيل إضافة
XR_ANDROID_geospatialقبل استدعاء xrDestroyGeospatialTrackerANDROID - يجب أن يكون
geospatialTrackerمقبضًا صالحًا XrGeospatialTrackerANDROID
أمان سلاسل المحادثات
- يجب مزامنة الوصول إلى
geospatialTrackerوأي أسماء مستخدمين للأطفال خارجيًا
رموز الإرجاع
XR_SUCCESS
XR_ERROR_CALL_ORDER_INVALIDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
حالة أداة التتبُّع الجغرافية المكانية
يتم تعريف التعداد XrGeospatialTrackerStateANDROID على النحو التالي:
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;
يحدّد التعداد XrGeospatialTrackerStateANDROID الحالات المختلفة لأداة تتبُّع الموقع الجغرافي.
تحتوي القيم المُعدَّدة على القيم التالية:
وصف التعداد
XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID
لا يتم تشغيل أداة Geospatial Tracker.
XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID
يكون جهاز التتبُّع الجغرافي قيد التشغيل وقابلاً للاستخدام.
XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID
تعذّر إعداد Geospatial Tracker، ولن يكون قابلاً للاستخدام أبدًا.
يتم تعريف بنية XrEventDataGeospatialTrackerStateChangedANDROID على النحو التالي:
typedef struct XrEventDataGeospatialTrackerStateChangedANDROID {
XrStructureType type;
const void* next;
XrGeospatialTrackerANDROID geospatialTracker;
XrGeospatialTrackerStateANDROID state;
XrResult initializationResult;
XrTime time;
} XrEventDataGeospatialTrackerStateChangedANDROID;
أوصاف الأعضاء
typeهو XrStructureType لهذه البنية.nextهوNULLأو مؤشر إلى البنية التالية في سلسلة البنية.-
geospatialTrackerهو XrGeospatialTrackerANDROID الذي تم تغيير حالته. stateهي XrGeospatialTrackerStateANDROID الجديدة .initializationResultهي نتيجة الخطأ إذا كانتstateهيXR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID، وإلا تكونXR_SUCCESS.timeهوXrTimeالذي حدث فيه تغيير الحالة.
يتم إرسال بنية XrEventDataGeospatialTrackerStateChangedANDROID عند تغيُّر حالة أداة التتبُّع الجغرافية المكانية. إذا كان التطبيق يتضمّن XrGeospatialTrackerANDROID صالحًا، يجب أن يطلب هذا الحدث. سيتضمّن الحدث الأول الذي يتم تلقّيه لأداة التتبُّع state XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID . بعد فترة زمنية يحدّدها وقت التشغيل، يجب أن تتغيّر الحالة إلى XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID أو XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID . سيستغرق هذا الانتقال مدة زمنية عشوائية. إذا تغيّر state إلى XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID ، يجب أن يكون هذا آخر حدث تم تلقّيه لهذا المتتبّع، وسيتضمّن الحقل initializationResult رمز الخطأ. قد يستغرق حدوث الخطأ عدة ثوانٍ. يجب أن يوقف التطبيق جهاز التتبُّع في هذه الحالة. في حال تغيّر state إلى XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID ، يجب أن تتوقف جميع نقاط الارتكاز الجغرافية المكانية التي تم إنشاؤها سابقًا عن التتبُّع نهائيًا، ويجب أن يدمّرها التطبيق. قد تتغيّر الحالة ذهابًا وإيابًا بين XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID وXR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID عددًا كبيرًا من المرات.
الاستخدام الصالح (الضمني)
- يجب تفعيل إضافة
XR_ANDROID_geospatialقبل استخدام XrEventDataGeospatialTrackerStateChangedANDROID - يجب أن يكون
typeXR_TYPE_EVENT_DATA_GEOSPATIAL_TRACKER_STATE_CHANGED_ANDROID - يجب أن تكون قيمة
nextهيNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البِنى
Geospatial Pose
يتم تعريف بنية XrGeospatialPoseANDROID على النحو التالي:
typedef struct XrGeospatialPoseANDROID {
XrQuaternionf eastUpSouthOrientation;
double latitude;
double longitude;
double altitude;
} XrGeospatialPoseANDROID;
أوصاف الأعضاء
-
eastUpSouthOrientationهو XrQuaternionf يحدّد الاتجاه بالنسبة إلى نظام إحداثيات يكون فيه +X=الشرق و+Y=الأعلى و+Z=الجنوب. latitudeهو خط العرض بالدرجات، ويتراوح بين -90 و90+.-
longitudeهو خط الطول بالدرجات، ويتراوح بين -180 و+180. altitudeهو الارتفاع بالأمتار فوق المجسم الإهليلجي WGS84.
يمثّل البنية XrGeospatialPoseANDROID موضعًا واتجاهًا بالنسبة إلى الأرض باستخدام المجسم الناقص WGS84.
الاستخدام الصالح (الضمني)
- يجب تفعيل إضافة
XR_ANDROID_geospatialقبل استخدام XrGeospatialPoseANDROID - يجب أن تكون قيمة
latitudeصالحةdouble - يجب أن تكون قيمة
longitudeصالحةdouble - يجب أن تكون قيمة
altitudeصالحةdouble
يتم تعريف التعداد XrGeospatialPoseFlagBitsANDROID على النحو التالي:
// 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;
يحدّد التعداد XrGeospatialPoseFlagBitsANDROID علامات للمواضع الجغرافية المكانية.
تحمل وحدات بت العلامة المعاني التالية:
أوصاف الأعلام
-
XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID: تشير إلى أنّ عنصر الاتجاه يحتوي على بيانات صالحة XR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID: تشير إلى أنّ عنصر الموضع يحتوي على بيانات صالحة
النوع XrGeospatialPoseFlagsANDROID هو قناع بت XrGeospatialPoseFlagBitsANDROID .
typedef XrFlags64 XrGeospatialPoseFlagsANDROID;
تحويل XrPosef إلى وضعية جغرافية مكانية
يتم تعريف الدالة xrLocateGeospatialPoseFromPoseANDROID على النحو التالي:
XrResult xrLocateGeospatialPoseFromPoseANDROID(
XrGeospatialTrackerANDROID geospatialTracker,
const XrGeospatialPoseFromPoseLocateInfoANDROID* locateInfo,
XrGeospatialPoseResultANDROID* geospatialPoseResult);
أوصاف المَعلمات
-
geospatialTrackerهو XrGeospatialTrackerANDROID الذي سيتم استخدامه للتحويل. -
locateInfoهو مؤشر إلى XrGeospatialPoseFromPoseLocateInfoANDROID يحتوي على مَعلمات طلب البحث. -
geospatialPoseResultهو مؤشر إلى XrGeospatialPoseResultANDROID الذي يتلقّى النتيجة.
تحوّل الدالة xrLocateGeospatialPoseFromPoseANDROID وضعية في XrGeospatialPoseFromPoseLocateInfoANDROID :: space إلى وضعية جغرافية مكانية. إذا لم تكن حالة geospatialTracker هي XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID ، يجب أن تعرض بيئة التشغيل XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID . إذا عرضت الدالة XR_SUCCESS ، يحدّد الحقل poseFlags في XrGeospatialPoseResultANDROID :: geospatialPoseResult حقول الإخراج الصالحة. إذا لم يتم ضبط XR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID في XrGeospatialPoseResultANDROID :: poseFlags ، يجب ألا يقرأ التطبيق الحقول XrGeospatialPoseANDROID :: latitude أو XrGeospatialPoseANDROID :: longitude أو XrGeospatialPoseANDROID :: altitude أو XrGeospatialPoseResultANDROID :: horizontalAccuracy أو XrGeospatialPoseResultANDROID :: verticalAccuracy في XrGeospatialPoseResultANDROID . إذا لم يتم ضبط XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID في XrGeospatialPoseResultANDROID :: poseFlags ، يجب ألا يقرأ التطبيق XrGeospatialPoseANDROID :: eastUpSouthOrientation أو XrGeospatialPoseResultANDROID :: orientationYawAccuracy . في حال عدم ضبط XR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID، يجب أيضًا عدم ضبط XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID.
إذا كانت الدقة أقل من المتوقّع، قد يشير ذلك إلى أنّ الجهاز لا يستخدم خدمة تحديد الموقع الجغرافي المستندة إلى الموقع المرئي. يمكن للتطبيق أن يطلب من المستخدم توجيه جهازه نحو اللافتات والمباني لتحسين تحديد الموقع الجغرافي.
الاستخدام الصالح (الضمني)
- يجب تفعيل إضافة
XR_ANDROID_geospatialقبل استدعاء xrLocateGeospatialPoseFromPoseANDROID - يجب أن يكون
geospatialTrackerمقبضًا صالحًا XrGeospatialTrackerANDROID - يجب أن يكون
locateInfoمؤشرًا إلى بنية XrGeospatialPoseFromPoseLocateInfoANDROID صالحة - يجب أن يكون
geospatialPoseResultمؤشرًا إلى بنية XrGeospatialPoseResultANDROID
رموز الإرجاع
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
يتم تعريف بنية XrGeospatialPoseFromPoseLocateInfoANDROID على النحو التالي:
typedef struct XrGeospatialPoseFromPoseLocateInfoANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
XrPosef pose;
} XrGeospatialPoseFromPoseLocateInfoANDROID;
أوصاف الأعضاء
typeهو XrStructureType لهذه البنية.nextهوNULLأو مؤشر إلى البنية التالية في سلسلة البنية.-
spaceهو XrSpace الذي تم تحديدposeفيه. timeهيXrTimeالتي سيتم تقييمposeعندها .-
poseهو XrPosef فيspaceالمطلوب تحويله إلى وضعية جغرافية مكانية.
الاستخدام الصالح (الضمني)
- يجب تفعيل إضافة
XR_ANDROID_geospatialقبل استخدام XrGeospatialPoseFromPoseLocateInfoANDROID - يجب أن يكون
typeXR_TYPE_GEOSPATIAL_POSE_FROM_POSE_LOCATE_INFO_ANDROID - يجب أن تكون قيمة
nextهيNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البِنى - يجب أن يكون
spaceمقدارًا صالحًا من XrSpace
يتم تعريف بنية XrGeospatialPoseResultANDROID على النحو التالي:
typedef struct XrGeospatialPoseResultANDROID {
XrStructureType type;
void* next;
XrGeospatialPoseFlagsANDROID poseFlags;
XrGeospatialPoseANDROID geospatialPose;
double horizontalAccuracy;
double verticalAccuracy;
double orientationYawAccuracy;
} XrGeospatialPoseResultANDROID;
أوصاف الأعضاء
typeهو XrStructureType لهذه البنية.nextهوNULLأو مؤشر إلى البنية التالية في سلسلة البنية.-
poseFlagsهي قناع بتات XrGeospatialPoseFlagsANDROID يشير إلى صحة مكوّنات الوضع. -
geospatialPoseهي XrGeospatialPoseANDROID الناتجة . -
horizontalAccuracyهي الدقة الأفقية المقدَّرة لموضع Geospatial pose، ويتم تعريفها على أنّها نصف قطر الدائرة بمستوى ثقة% 68 حول خطوط الطول والعرض المحدّدة. verticalAccuracyهي الدقة العمودية المقدَّرة لموضع Geospatial pose، ويتم تحديدها على أنّها المسافة بالأمتار عند مستوى ثقة يبلغ% 68 حول الارتفاع المحدّد. بعبارة أخرى، هناك احتمال بنسبة% 68 أن يكون الارتفاع الحقيقي ضمن النطاق [ XrGeospatialPoseANDROID ::altitude-verticalAccuracy, XrGeospatialPoseANDROID ::altitude\+verticalAccuracy].orientationYawAccuracyهي دقة الانحراف المقدرة لاتجاه الوضع الجغرافي المكاني، ويتم تحديدها على أنّها نصف القطر بالدرجات لمستوى الثقة البالغ% 68 حول الاتجاه المحدّد.
الاستخدام الصالح (الضمني)
- يجب تفعيل إضافة
XR_ANDROID_geospatialقبل استخدام XrGeospatialPoseResultANDROID - يجب أن يكون
typeXR_TYPE_GEOSPATIAL_POSE_RESULT_ANDROID - يجب أن تكون قيمة
nextهيNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البِنى
تحويل وضعية جغرافية مكانية إلى XrPosef
يتم تعريف الدالة xrLocateGeospatialPoseANDROID على النحو التالي:
XrResult xrLocateGeospatialPoseANDROID(
XrGeospatialTrackerANDROID geospatialTracker,
const XrGeospatialPoseLocateInfoANDROID* locateInfo,
XrSpaceLocation* location);
أوصاف المَعلمات
-
geospatialTrackerهو XrGeospatialTrackerANDROID الذي سيتم استخدامه للتحويل. -
locateInfoهو مؤشر إلى XrGeospatialPoseLocateInfoANDROID يحتوي على مَعلمات طلب البحث. -
locationهو مؤشر إلى XrSpaceLocation الذي يتلقّى الوضع الناتج.
تحوّل الدالة xrLocateGeospatialPoseANDROID وضعية جغرافية مكانية إلى XrSpaceLocation . إذا لم يكن XrGeospatialTrackerANDROID قيد التشغيل، يجب أن يعرض وقت التشغيل القيمة XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID . إذا عرضت الدالة XR_SUCCESS ، يحدّد الحقل XrSpaceLocation :: locationFlags في location حقول الإخراج الصالحة.
الاستخدام الصالح (الضمني)
- يجب تفعيل إضافة
XR_ANDROID_geospatialقبل استدعاء xrLocateGeospatialPoseANDROID - يجب أن يكون
geospatialTrackerمقبضًا صالحًا XrGeospatialTrackerANDROID - يجب أن يكون
locateInfoمؤشرًا إلى بنية XrGeospatialPoseLocateInfoANDROID صالحة - يجب أن يكون
locationمؤشرًا إلى بنية XrSpaceLocation.
رموز الإرجاع
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_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
يتم تعريف بنية XrGeospatialPoseLocateInfoANDROID على النحو التالي:
typedef struct XrGeospatialPoseLocateInfoANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
XrGeospatialPoseANDROID geospatialPose;
} XrGeospatialPoseLocateInfoANDROID;
أوصاف الأعضاء
typeهو XrStructureType لهذه البنية.nextهوNULLأو مؤشر إلى البنية التالية في سلسلة البنية.-
spaceهو XrSpace الذي سيتم فيه تمثيل الوضع الناتج. timeهوXrTimeالذي سيتم فيه تحديد موضع الوضعية.-
geospatialPoseهو XrGeospatialPoseANDROID المطلوب تحويله.
الاستخدام الصالح (الضمني)
- يجب تفعيل إضافة
XR_ANDROID_geospatialقبل استخدام XrGeospatialPoseLocateInfoANDROID - يجب أن يكون
typeXR_TYPE_GEOSPATIAL_POSE_LOCATE_INFO_ANDROID - يجب أن تكون قيمة
nextهيNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البِنى - يجب أن يكون
spaceمقدارًا صالحًا من XrSpace - يجب أن يكون
geospatialPoseبنية XrGeospatialPoseANDROID صالحة
مدى توفّر VPS
يتم تعريف التعداد XrVPSAvailabilityANDROID على النحو التالي:
typedef enum XrVPSAvailabilityANDROID {
XR_VPS_AVAILABILITY_UNAVAILABLE_ANDROID = 1,
XR_VPS_AVAILABILITY_AVAILABLE_ANDROID = 2,
XR_VPSAVAILABILITY_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrVPSAvailabilityANDROID;
يشير التعداد XrVPSAvailabilityANDROID إلى مدى توفّر خدمة VPS.
تحتوي القيم المُعدَّدة على القيم التالية:
وصف التعداد
XR_VPS_AVAILABILITY_UNAVAILABLE_ANDROID
لا تتوفّر خدمة تحديد الموقع المرئي (VPS) بالقرب من الموقع الجغرافي المحدّد.
XR_VPS_AVAILABILITY_AVAILABLE_ANDROID
تتوفّر خدمة تحديد الموقع المرئي بالقرب من الموقع الجغرافي المحدّد.
يتم تعريف الدالة xrCheckVpsAvailabilityAsyncANDROID على النحو التالي:
XrResult xrCheckVpsAvailabilityAsyncANDROID(
XrSession session,
double latitude,
double longitude,
XrFutureEXT* future);
أوصاف المَعلمات
-
sessionهو XrSession الذي سيتم استخدامه في عملية التحقّق. latitudeهو خط العرض بالدرجات.longitudeهو خط الطول بالدرجات.futureهو مؤشر إلىXrFutureEXTالذي سيحتوي على نتيجة العملية غير المتزامنة.
يشير توفّر "خدمة تحديد المواقع المرئية" (VPS) إلى ما إذا كان يمكن استخدامها لتحسين دقة الموقع الجغرافي المكاني في موقع جغرافي معيّن.
تبدأ الدالة xrCheckVpsAvailabilityAsyncANDROID عملية تحقّق غير متزامنة من توفّر نظام تحديد المواقع المرئية (VPS) في موقع جغرافي معيّن. لا يحتاج التطبيق إلى XrGeospatialTrackerANDROID لاستدعاء هذه الدالة، ويمكنه استخدام نتيجة هذه العملية لتحديد ما إذا كان سيتم إنشاء عنصر أم لا. إذا لم يحصل التطبيق على الأذونات المطلوبة، يجب أن تعرض بيئة التشغيل القيمة XR_ERROR_PERMISSION_INSUFFICIENT.
الاستخدام الصالح (الضمني)
- يجب تفعيل إضافة
XR_ANDROID_geospatialقبل استدعاء xrCheckVpsAvailabilityAsyncANDROID - يجب أن يكون
sessionمعرّفًا صالحًا لـ XrSession - يجب أن تكون قيمة
latitudeصالحةdouble - يجب أن تكون قيمة
longitudeصالحةdouble - يجب أن يكون
futureمؤشرًا إلى قيمةXrFutureEXT
رموز الإرجاع
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
يتم تعريف الدالة xrCheckVpsAvailabilityCompleteANDROID على النحو التالي:
XrResult xrCheckVpsAvailabilityCompleteANDROID(
XrSession session,
XrFutureEXT future,
XrVPSAvailabilityCheckCompletionANDROID* completion);
أوصاف المَعلمات
-
sessionهو XrSession المستخدَم في عملية التحقّق. -
futureهيXrFutureEXTالتي تعرضها الدالة xrCheckVpsAvailabilityAsyncANDROID . -
completionهو مؤشر إلى XrVPSAvailabilityCheckCompletionANDROID الذي يتلقّى النتيجة.
الاستخدام الصالح (الضمني)
- يجب تفعيل إضافة
XR_ANDROID_geospatialقبل استدعاء xrCheckVpsAvailabilityCompleteANDROID - يجب أن يكون
sessionمعرّفًا صالحًا لـ XrSession - يجب أن يكون
completionمؤشرًا إلى بنية XrVPSAvailabilityCheckCompletionANDROID
رموز الإرجاع
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
يتم تعريف بنية XrVPSAvailabilityCheckCompletionANDROID على النحو التالي:
typedef struct XrVPSAvailabilityCheckCompletionANDROID {
XrStructureType type;
void* next;
XrResult futureResult;
XrVPSAvailabilityANDROID availability;
} XrVPSAvailabilityCheckCompletionANDROID;
أوصاف الأعضاء
typeهو XrStructureType لهذه البنية.nextهوNULLأو مؤشر إلى البنية التالية في سلسلة البنية.-
futureResultهو XrResult لعملية التحقّق. إذا كانت قيمةfutureResultهيXR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROID، قد تقدّم إحدى البُنى في سلسلةnextمزيدًا من المعلومات حول الخطأ. availabilityهي XrVPSAvailabilityANDROID الناتجة . يجب ألا يقرأ التطبيق هذا الحقل إلا إذا كانت قيمةfutureResultهيXR_SUCCESS.
رموز العودة المستقبلية
قيم futureResult:
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROID
الاستخدام الصالح (الضمني)
- يجب تفعيل الإضافة
XR_ANDROID_geospatialقبل استخدام XrVPSAvailabilityCheckCompletionANDROID - يجب أن يكون
typeXR_TYPE_VPS_AVAILABILITY_CHECK_COMPLETION_ANDROID - يجب أن تكون قيمة
nextهيNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البِنى - يجب أن تكون قيمة
futureResultصالحة من النوع XrResult - يجب أن تكون قيمة
availabilitymust صالحة XrVPSAvailabilityANDROID
مثال
إعداد أداة التتبُّع الجغرافية المكانية
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;
}
}
}
استدعاء واجهات برمجة التطبيقات Geospatial Pose
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.
}
أنواع العناصر الجديدة
الأوامر الجديدة
- xrCheckVpsAvailabilityAsyncANDROID
- xrCheckVpsAvailabilityCompleteANDROID
- xrCreateGeospatialTrackerANDROID
- xrDestroyGeospatialTrackerANDROID
- xrLocateGeospatialPoseANDROID
- xrLocateGeospatialPoseFromPoseANDROID
المنشآت الجديدة
- XrEventDataGeospatialTrackerStateChangedANDROID
- XrGeospatialPoseANDROID
- XrGeospatialPoseFromPoseLocateInfoANDROID
- XrGeospatialPoseLocateInfoANDROID
- XrGeospatialPoseResultANDROID
- XrGeospatialTrackerCreateInfoANDROID
- XrVPSAvailabilityCheckCompletionANDROID
تمديد XrSystemProperties :
عمليات التعداد الجديدة
New Bitmasks
ثوابت التعداد الجديدة
XR_ANDROID_GEOSPATIAL_EXTENSION_NAMEXR_ANDROID_geospatial_SPEC_VERSIONتمديد XrObjectType :
XR_OBJECT_TYPE_GEOSPATIAL_TRACKER_ANDROID
تمديد XrResult :
XR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROIDXR_ERROR_GEOSPATIAL_COORDINATES_INVALID_ANDROIDXR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID
توسيع 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
المشاكل
سجلّ التعديلات
المراجعة 1، 18-12-2025 (Ben King)
- الوصف الأوّلي للإضافة