XR_ANDROID_geospatial
Name String
XR_ANDROID_geospatial
نوع الإضافة
إضافة مثيل
رقم الإضافة المسجَّل
790
المراجعة
1
حالة التصديق
لم تتم المصادقة عليها
الاعتماد على الإضافات والإصدارات
XR_EXT_future
تاريخ آخر تعديل
2025-12-18
حالة الملكية الفكرية
ما مِن مطالبات معروفة بشأن الملكية الفكرية.
المساهمون
جون أولمان، Google
بن كينغ، Google
نيهاف جاين، Google
جاريد فايندر، Google
نظرة عامة
توفّر هذه الإضافة ميزة التتبُّع الجغرافي المكاني لواجهة Geospatial API من Google، والتي توفّر موقعًا جغرافيًا واتجاهًا دقيقَين، وتسمح للتطبيق بوضع المحتوى بالنسبة إلى الأرض. ويتم ذلك من خلال تتبُّع الحركة ونظام تحديد المواقع العالمي (GPS) وأدوات الاستشعار الأخرى ونظام تحديد الموقع المرئي (VPS) من Google. يقارن نظام تحديد الموقع المرئي الصور من كاميرا الجهاز بصور "التجوّل الافتراضي" لتحديد الموقع الجغرافي والاتجاه بدقة. غالبًا ما توفّر واجهة برمجة التطبيقات 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
أمان Thread
- يجب مزامنة الوصول إلى
geospatialTrackerوأي معرّفات فرعية خارجيًا
رموز الإرجاع
XR_SUCCESS
XR_ERROR_CALL_ORDER_INVALIDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
حالة أداة التتبُّع الجغرافي المكاني
يتم تحديد تعداد 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
لا يتم تشغيل "أداة التتبُّع الجغرافي المكاني".
XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID
أداة التتبُّع الجغرافي قيد التشغيل ويمكن استخدامها.
XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROID
تعذّر إعداد "أداة التتبُّع الجغرافي"، ولن يكون من الممكن استخدامها مطلقًا.
يتم تحديد بنية 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: يشير إلى أنّ العنصر "position" يحتوي على بيانات صالحة
النوع 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، يحدّد الحقل XrGeospatialPoseResultANDROID :: poseFlags في 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.
إذا كانت الدقة أقل من المتوقع، قد يشير ذلك إلى أنّ الجهاز لا يستخدم ميزة "تحديد الموقع الجغرافي" في VPS. يمكن للتطبيق أن يطلب من المستخدم توجيه جهازه نحو اللافتات والمباني لتحسين عملية تحديد الموقع الجغرافي.
الاستخدام الصالح (ضمني)
- يجب تفعيل الإضافة
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، ويتم تحديدها على أنّها نصف قطر الدائرة بمستوى ثقة% 68 حول خط العرض وخط الطول المحدّدَين. -
verticalAccuracyهي الدقة العمودية المقدَّرة لموضع الوضعية الجغرافية المكانية، ويتم تحديدها على أنّها المسافة بالأمتار لمستوى ثقة يبلغ% 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، يحدّد الحقل locationFlags في location من النوع XrSpaceLocation حقول الإخراج الصالحة.
الاستخدام الصالح (ضمني)
- يجب تفعيل الإضافة
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_POSE_INVALIDXR_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
تتوفّر خدمة VPS بالقرب من الموقع الجغرافي المحدّد.
يتم تعريف الدالة 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 -
availabilityيجب أن تكون قيمة صالحة لـ 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 :
عمليات تعداد جديدة
أقنعة بت جديدة
ثوابت تعداد جديدة
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 ديسمبر 2025 (بن كينغ)
- وصف الإضافة الأوّلي