XR_ANDROID_geospatial
Name String
XR_ANDROID_geospatial
एक्सटेंशन टाइप
इंस्टेंस एक्सटेंशन
रजिस्टर किया गया एक्सटेंशन नंबर
790
बदलाव
1
पुष्टि की स्थिति
पुष्टि नहीं की गई
एक्सटेंशन और वर्शन की डिपेंडेंसी
XR_EXT_future
पिछली बार बदलाव किए जाने की तारीख
2025-12-18
आईपी स्टेटस
आईपी से जुड़े किसी भी दावे की जानकारी नहीं है.
योगदान देने वाले
जॉन उल्मैन, Google
बेन किंग, Google
निहाव जैन, Google
जेरेड फ़ाइंडर, Google
खास जानकारी
यह एक्सटेंशन, Google के Geospatial API के लिए Geospatial ट्रैकिंग की सुविधा देता है. इससे सटीक जियो-लोकेशन और ओरिएंटेशन की जानकारी मिलती है. साथ ही, ऐप्लिकेशन को पृथ्वी के हिसाब से कॉन्टेंट रखने की अनुमति मिलती है. यह सुविधा, मोशन ट्रैकिंग, जीपीएस, और अन्य सेंसर के साथ-साथ Google के विज़ुअल पोज़िशनिंग सिस्टम (वीपीएस) का इस्तेमाल करके ऐसा करती है. सटीक जगह और ओरिएंटेशन का पता लगाने के लिए, वीपीएस किसी डिवाइस के कैमरे से ली गई इमेज की तुलना Street View की इमेज से करता है. जियोस्पेशल एपीआई, अक्सर एक मीटर से भी कम की दूरी तक की सटीक जानकारी देता है. यह जीपीएस से कई गुना बेहतर है. साथ ही, यह एक डिग्री से भी कम के ओरिएंटेशन की सटीक जानकारी देता है.
इस एक्सटेंशन में मौजूद एपीआई का इस्तेमाल करने के लिए (एक्सटेंशन के साथ काम करने की सुविधा की जांच करने के अलावा), ऐप्लिकेशन के पास पुष्टि करने के क्रेडेंशियल होने चाहिए. इसके लिए, 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है. इससे पता चलता है कि मौजूदा सिस्टम , जियोस्पेशल सुविधाओं के साथ काम करता है या नहीं.
कोई ऐप्लिकेशन, यह जांच कर सकता है कि सिस्टम में जियोस्पेशल सुविधाएं काम करती हैं या नहीं. इसके लिए, xrGetSystemProperties को कॉल करते समय, XrSystemGeospatialPropertiesANDROID स्ट्रक्चर को XrSystemProperties से जोड़ना होगा.
अगर कोई रनटाइम, supportsGeospatial के लिए XR_FALSE दिखाता है, तो इसका मतलब है कि सिस्टम में भू-स्थानिक सुविधाओं का इस्तेमाल नहीं किया जा सकता. इसलिए, xrCreateGeospatialTrackerANDROID से XR_ERROR_FEATURE_UNSUPPORTED मिलना ज़रूरी है. जब supportsGeospatial की वैल्यू XR_FALSE हो, तब ऐप्लिकेशन को जियोस्पेशल फ़ंक्शन का इस्तेमाल नहीं करना चाहिए .
मान्य इस्तेमाल (इंप्लिसिट)
- XrSystemGeospatialPropertiesANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_geospatialएक्सटेंशन को चालू करना ज़रूरी है -
typeज़रूरी तौर परXR_TYPE_SYSTEM_GEOSPATIAL_PROPERTIES_ANDROIDहोना चाहिए -
next,NULLया स्ट्रक्चर चेन में मौजूद अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए
जियोस्पेशल ट्रैकर हैंडल बनाना
XR_DEFINE_HANDLE(XrGeospatialTrackerANDROID)
xrCreateGeospatialTrackerANDROID फ़ंक्शन को इस तरह से परिभाषित किया गया है:
XrResult xrCreateGeospatialTrackerANDROID(
XrSession session,
const XrGeospatialTrackerCreateInfoANDROID* createInfo,
XrGeospatialTrackerANDROID* geospatialTrackerOutput);
पैरामीटर की जानकारी
sessionएक XrSession है, जिसमें जियोस्पेशल ट्रैकर चालू होगा.createInfo, XrGeospatialTrackerCreateInfoANDROID स्ट्रक्चर का पॉइंटर है. यह जियोस्पेशल ट्रैकर के शुरुआती पैरामीटर तय करता है.geospatialTrackerOutputएक हैंडल का पॉइंटर है, जिसमें बनाया गया XrGeospatialTrackerANDROID ऑब्जेक्ट वापस मिलता है.
कोई ऐप्लिकेशन, xrCreateGeospatialTrackerANDROID को कॉल करके, XrGeospatialTrackerANDROID हैंडल बना सकता है . इसके बाद, एपीआई कॉल में मिले XrGeospatialTrackerANDROID हैंडल का इस्तेमाल किया जा सकता है. अगर ऐप्लिकेशन को ज़रूरी अनुमतियां नहीं मिली हैं, तो रनटाइम को XR_ERROR_PERMISSION_INSUFFICIENT वैल्यू ज़रूर दिखानी चाहिए . किसी XrSession के लिए, एक समय में सिर्फ़ एक XrGeospatialTrackerANDROID हो सकता है . ऐप्लिकेशन को यह ज़रूर पक्का करना चाहिए कि इस फ़ंक्शन को फिर से कॉल करने से पहले, सभी पिछले 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 फ़ंक्शन के ज़रिए ज़रूर फ़्री किया जाना चाहिए.
मान्य इस्तेमाल (इंप्लिसिट)
- xrCreateGeospatialTrackerANDROID को कॉल करने से पहले,
XR_ANDROID_geospatialएक्सटेंशन को चालू करना ज़रूरी है -
session, XrSession का एक मान्य हैंडल होना चाहिए -
createInfomust be a pointer to a valid XrGeospatialTrackerCreateInfoANDROID structure -
geospatialTrackerOutputmust be a pointer to an XrGeospatialTrackerANDROID handle
रिटर्न कोड
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होता है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर होता है.
मान्य इस्तेमाल (इंप्लिसिट)
- XrGeospatialTrackerCreateInfoANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_geospatialएक्सटेंशन को चालू करना ज़रूरी है -
typeज़रूरी तौर परXR_TYPE_GEOSPATIAL_TRACKER_CREATE_INFO_ANDROIDहोना चाहिए -
nextmust beNULLor a valid pointer to the next structure in a structure chain . यह भी देखें: XrGeospatialTrackerAnchorTrackingInfoANDROID
xrDestroyGeospatialTrackerANDROID फ़ंक्शन को इस तरह से परिभाषित किया गया है:
XrResult xrDestroyGeospatialTrackerANDROID(
XrGeospatialTrackerANDROID geospatialTracker);
पैरामीटर की जानकारी
geospatialTracker, मिटाया जाने वाला XrGeospatialTrackerANDROID है.
कोई ऐप्लिकेशन, जियोस्पेशल ट्रैकर और उससे जुड़ी अन्य सुविधाओं को बंद करने के लिए, xrDestroyGeospatialTrackerANDROID फ़ंक्शन का इस्तेमाल कर सकता है.
मान्य इस्तेमाल (इंप्लिसिट)
- xrDestroyGeospatialTrackerANDROID को कॉल करने से पहले,
XR_ANDROID_geospatialएक्सटेंशन को चालू करना ज़रूरी है -
geospatialTracker, XrGeospatialTrackerANDROID का एक मान्य हैंडल होना चाहिए
थ्रेड सेफ़्टी
geospatialTrackerऔर बच्चों के सभी हैंडल को बाहरी तौर पर सिंक किया जाना चाहिए
रिटर्न कोड
XR_SUCCESS
XR_ERROR_CALL_ORDER_INVALIDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
Geospatial Tracker State
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 इन्यूमरेशन, जियोस्पेशल ट्रैकर की अलग-अलग स्थितियों की पहचान करता है.
गिनती करने वाले लोगों की वैल्यू इस तरह हैं:
Enum की जानकारी
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,XR_GEOSPATIAL_TRACKER_STATE_INITIALIZATION_FAILED_ANDROIDहोने पर गड़बड़ी का नतीजा है. अगर ऐसा नहीं है, तोXR_SUCCESS.statetimeवह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 हो जाता है, तो पहले से बनाए गए सभी जियोस्पेशल ऐंकर को ज़रूर ट्रैकिंग बंद कर देनी चाहिए. साथ ही, ऐप्लिकेशन को उन्हें मिटा देना चाहिए. स्टेट may XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID और XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID के बीच कई बार बदल सकती है.
मान्य इस्तेमाल (इंप्लिसिट)
- XrEventDataGeospatialTrackerStateChangedANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_geospatialएक्सटेंशन को चालू करना ज़रूरी है -
typeज़रूरी तौर परXR_TYPE_EVENT_DATA_GEOSPATIAL_TRACKER_STATE_CHANGED_ANDROIDहोना चाहिए -
next,NULLया स्ट्रक्चर चेन में मौजूद अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए
जियोस्पेशल पोज़
XrGeospatialPoseANDROID स्ट्रक्चर को इस तरह से परिभाषित किया गया है:
typedef struct XrGeospatialPoseANDROID {
XrQuaternionf eastUpSouthOrientation;
double latitude;
double longitude;
double altitude;
} XrGeospatialPoseANDROID;
सदस्यों के बारे में जानकारी
eastUpSouthOrientationएक XrQuaternionf है. यह एक कॉर्डिनेट सिस्टम के हिसाब से ओरिएंटेशन तय करता है. इस कॉर्डिनेट सिस्टम में +X=East, +Y=Up, और +Z=South होता है.latitudeडिग्री में अक्षांश है, जो -90 और +90 के बीच होता है.longitudeडिग्री में देशांतर है, जो -180 और +180 के बीच होता है.altitude, WGS84 एलिप्सॉइड से मीटर में ऊंचाई है.
XrGeospatialPoseANDROID स्ट्रक्चर, WGS84 एलिप्सॉइड का इस्तेमाल करके, पृथ्वी के हिसाब से किसी ऑब्जेक्ट की पोज़िशन और ओरिएंटेशन दिखाता है.
मान्य इस्तेमाल (इंप्लिसिट)
- XrGeospatialPoseANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_geospatialएक्सटेंशन को चालू करना ज़रूरी है -
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 को Geospatial Pose में बदलना
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 दिखाता है , तो geospatialPoseResult का XrGeospatialPoseResultANDROID :: poseFlags फ़ील्ड यह तय करता है कि कौनसे आउटपुट फ़ील्ड मान्य हैं. अगर XrGeospatialPoseResultANDROID :: poseFlags में XR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID सेट नहीं है , तो ऐप्लिकेशन को XrGeospatialPoseResultANDROID में मौजूद फ़ील्ड XrGeospatialPoseANDROID :: latitude , XrGeospatialPoseANDROID :: longitude , XrGeospatialPoseANDROID :: altitude , XrGeospatialPoseResultANDROID :: horizontalAccuracy या XrGeospatialPoseResultANDROID :: verticalAccuracy को नहीं पढ़ना चाहिए. अगर XrGeospatialPoseResultANDROID :: poseFlags में XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID सेट नहीं है , तो ऐप्लिकेशन को XrGeospatialPoseANDROID :: eastUpSouthOrientation या XrGeospatialPoseResultANDROID :: orientationYawAccuracy को नहीं पढ़ना चाहिए. ऐसा करना ज़रूरी है. अगर XR_GEOSPATIAL_POSE_POSITION_VALID_BIT_ANDROID सेट नहीं है, तो XR_GEOSPATIAL_POSE_ORIENTATION_VALID_BIT_ANDROID को भी सेट नहीं किया जाना चाहिए.
अगर जगह की जानकारी उम्मीद के मुताबिक सटीक नहीं है, तो ऐसा हो सकता है कि डिवाइस, वीपीएस की सुविधा का इस्तेमाल न कर रहा हो. ऐप्लिकेशन, उपयोगकर्ता को स्थानीय जानकारी को बेहतर बनाने के लिए, अपने डिवाइस को साइनबोर्ड और इमारतों की ओर पॉइंट करने के लिए कह सकता है.
मान्य इस्तेमाल (इंप्लिसिट)
- xrLocateGeospatialPoseFromPoseANDROID को कॉल करने से पहले,
XR_ANDROID_geospatialएक्सटेंशन को चालू करना ज़रूरी है -
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,spaceमें मौजूद XrPosef है. इसे जियोस्पेशियल पोज़ में बदला जा सकता है.
मान्य इस्तेमाल (इंप्लिसिट)
- XrGeospatialPoseFromPoseLocateInfoANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_geospatialएक्सटेंशन को चालू करना ज़रूरी है -
typeज़रूरी तौर परXR_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, भौगोलिक पोज़िशन की अनुमानित हॉरिज़ॉन्टल ऐक्युरसी है. इसे दिए गए अक्षांश और देशांतर के आस-पास 68% कॉन्फ़िडेंस लेवल वाले सर्कल के रेडियस के तौर पर तय किया जाता है.verticalAccuracy, जियोस्पेशल पोज़ की वर्टिकल पोज़िशन की अनुमानित सटीकता है. इसे दी गई ऊंचाई के आस-पास 68% कॉन्फ़िडेंस लेवल की दूरी के तौर पर तय किया जाता है. दूसरे शब्दों में, इस बात की 68% संभावना है कि ऊंचाई की सही वैल्यू, [ XrGeospatialPoseANDROID ::altitude-verticalAccuracy, XrGeospatialPoseANDROID ::altitude\+verticalAccuracy] रेंज में हो.orientationYawAccuracy, जियोस्पेशल पोज़ ओरिएंटेशन की अनुमानित यॉ ऐक्सेस की सटीक जानकारी है. इसे दिए गए ओरिएंटेशन के आस-पास 68% कॉन्फ़िडेंस लेवल के रेडियस के तौर पर तय किया जाता है.
मान्य इस्तेमाल (इंप्लिसिट)
- XrGeospatialPoseResultANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_geospatialएक्सटेंशन को चालू करना ज़रूरी है -
typeज़रूरी तौर परXR_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 दिखाता है , तो location का XrSpaceLocation :: locationFlags फ़ील्ड यह तय करता है कि कौनसे आउटपुट फ़ील्ड मान्य हैं.
मान्य इस्तेमाल (इंप्लिसिट)
- xrLocateGeospatialPoseANDROID को कॉल करने से पहले,
XR_ANDROID_geospatialएक्सटेंशन को चालू करना ज़रूरी है -
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 है.
मान्य इस्तेमाल (इंप्लिसिट)
- XrGeospatialPoseLocateInfoANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_geospatialएक्सटेंशन को चालू करना ज़रूरी है -
typeज़रूरी तौर परXR_TYPE_GEOSPATIAL_POSE_LOCATE_INFO_ANDROIDहोना चाहिए -
next,NULLया स्ट्रक्चर चेन में मौजूद अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए -
spaceमान्य XrSpace हैंडल होना चाहिए -
geospatialPosemust be a valid XrGeospatialPoseANDROID structure
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 इन्यूमरेशन से, वीपीएस की उपलब्धता के बारे में पता चलता है.
गिनती करने वाले लोगों की वैल्यू इस तरह हैं:
Enum की जानकारी
XR_VPS_AVAILABILITY_UNAVAILABLE_ANDROID
दी गई जगह के आस-पास वीपीएस उपलब्ध नहीं है.
XR_VPS_AVAILABILITY_AVAILABLE_ANDROID
दी गई जगह के आस-पास वीपीएस उपलब्ध है.
xrCheckVpsAvailabilityAsyncANDROID फ़ंक्शन को इस तरह से परिभाषित किया गया है:
XrResult xrCheckVpsAvailabilityAsyncANDROID(
XrSession session,
double latitude,
double longitude,
XrFutureEXT* future);
पैरामीटर की जानकारी
session, जांच के लिए इस्तेमाल किया जाने वाला XrSession है.latitudeडिग्री में अक्षांश है.longitude, डिग्री में देशांतर है.future,XrFutureEXTका पॉइंटर है. इसमें एसिंक्रोनस ऑपरेशन का नतीजा सेव होगा.
विज़ुअल पोज़िशनिंग सर्विस (वीपीए) की उपलब्धता से पता चलता है कि किसी जगह पर, भू-स्थानिक जानकारी को ज़्यादा सटीक बनाने के लिए वीपीएस का इस्तेमाल किया जा सकता है या नहीं.
xrCheckVpsAvailabilityAsyncANDROID फ़ंक्शन, किसी जगह पर वीपीएस की उपलब्धता की एसिंक्रोनस जांच शुरू करता है. इस फ़ंक्शन को कॉल करने के लिए, ऐप्लिकेशन को XrGeospatialTrackerANDROID की ज़रूरत नहीं होती. साथ ही, यह कर सकता है कि इस ऑपरेशन के नतीजे का इस्तेमाल करके यह तय किया जाए कि इसे बनाना है या नहीं. अगर ऐप्लिकेशन को ज़रूरी अनुमतियां नहीं मिली हैं, तो रनटाइम को XR_ERROR_PERMISSION_INSUFFICIENT वैल्यू ज़रूर दिखानी चाहिए .
मान्य इस्तेमाल (इंप्लिसिट)
- xrCheckVpsAvailabilityAsyncANDROID को कॉल करने से पहले,
XR_ANDROID_geospatialएक्सटेंशन को चालू करना ज़रूरी है -
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, xrCheckVpsAvailabilityAsyncANDROID से मिलीXrFutureEXTहै .completion, XrVPSAvailabilityCheckCompletionANDROID का पॉइंटर है. यह नतीजे को स्वीकार करता है.
मान्य इस्तेमाल (इंप्लिसिट)
- xrCheckVpsAvailabilityCompleteANDROID को कॉल करने से पहले,
XR_ANDROID_geospatialएक्सटेंशन को चालू करना ज़रूरी है -
session, XrSession का एक मान्य हैंडल होना चाहिए -
completionXrVPSAvailabilityCheckCompletionANDROID स्ट्रक्चर का पॉइंटर होना चाहिए
रिटर्न कोड
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 है. अगरfutureResultXR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROIDहै, तोnextचेन में मौजूद कोई स्ट्रक्चर, गड़बड़ी के बारे में ज़्यादा जानकारी दे सकता है.availability, XrVPSAvailabilityANDROID का नतीजा है . जब तकfutureResultXR_SUCCESSन हो, तब तक ऐप्लिकेशन को इस फ़ील्ड को नहीं पढ़ना चाहिए.
आने वाले समय में इस्तेमाल किए जाने वाले रिटर्न कोड
futureResult वैल्यू:
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROID
मान्य इस्तेमाल (इंप्लिसिट)
- XrVPSAvailabilityCheckCompletionANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_geospatialएक्सटेंशन को चालू करना ज़रूरी है -
typeज़रूरी तौर परXR_TYPE_VPS_AVAILABILITY_CHECK_COMPLETION_ANDROIDहोना चाहिए -
next,NULLया स्ट्रक्चर चेन में मौजूद अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए -
futureResultmust be a valid XrResult value -
availabilityXrVPSAvailabilityANDROID की मान्य वैल्यू होनी चाहिए
उदाहरण
Geospatial Tracker सेट अप करना
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 API को कॉल करना
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 को बढ़ाना :
नए एनम
नए बिटमास्क
नए Enum कॉन्स्टेंट
XR_ANDROID_GEOSPATIAL_EXTENSION_NAMEXR_ANDROID_geospatial_SPEC_VERSIONXrObjectType को बढ़ाना :
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
समस्याएं
वर्शन इतिहास
पहला संशोधन, 18-12-2025 (बेन किंग)
- एक्सटेंशन के बारे में शुरुआती जानकारी.