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 हो, तब ऐप्लिकेशन को जियोस्पेशल फ़ंक्शन का इस्तेमाल नहीं करना चाहिए .

मान्य इस्तेमाल (इंप्लिसिट)

जियोस्पेशल ट्रैकर हैंडल बनाना

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 फ़ंक्शन के ज़रिए ज़रूर फ़्री किया जाना चाहिए.

मान्य इस्तेमाल (इंप्लिसिट)

रिटर्न कोड

सफल

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Failure

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_PERMISSION_INSUFFICIENT
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_VALIDATION_FAILURE

XrGeospatialTrackerCreateInfoANDROID स्ट्रक्चर को इस तरह से परिभाषित किया गया है:

typedef struct XrGeospatialTrackerCreateInfoANDROID {
    XrStructureType    type;
    const void*        next;
} XrGeospatialTrackerCreateInfoANDROID;

सदस्यों के बारे में जानकारी

  • type इस स्ट्रक्चर का XrStructureType है.
  • next, NULL होता है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर होता है.

मान्य इस्तेमाल (इंप्लिसिट)

xrDestroyGeospatialTrackerANDROID फ़ंक्शन को इस तरह से परिभाषित किया गया है:

XrResult xrDestroyGeospatialTrackerANDROID(
    XrGeospatialTrackerANDROID                  geospatialTracker);

पैरामीटर की जानकारी

कोई ऐप्लिकेशन, जियोस्पेशल ट्रैकर और उससे जुड़ी अन्य सुविधाओं को बंद करने के लिए, xrDestroyGeospatialTrackerANDROID फ़ंक्शन का इस्तेमाल कर सकता है.

मान्य इस्तेमाल (इंप्लिसिट)

  • xrDestroyGeospatialTrackerANDROID को कॉल करने से पहले, XR_ANDROID_geospatial एक्सटेंशन को चालू करना ज़रूरी है
  • geospatialTracker, XrGeospatialTrackerANDROID का एक मान्य हैंडल होना चाहिए

थ्रेड सेफ़्टी

  • geospatialTracker और बच्चों के सभी हैंडल को बाहरी तौर पर सिंक किया जाना चाहिए

रिटर्न कोड

सफल

  • XR_SUCCESS

Failure

  • XR_ERROR_CALL_ORDER_INVALID
  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_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 .state
  • 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 हो जाता है, तो पहले से बनाए गए सभी जियोस्पेशल ऐंकर को ज़रूर ट्रैकिंग बंद कर देनी चाहिए. साथ ही, ऐप्लिकेशन को उन्हें मिटा देना चाहिए. स्टेट may XR_GEOSPATIAL_TRACKER_STATE_RUNNING_ANDROID और XR_GEOSPATIAL_TRACKER_STATE_STOPPED_ANDROID के बीच कई बार बदल सकती है.

मान्य इस्तेमाल (इंप्लिसिट)

जियोस्पेशल पोज़

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 को भी सेट नहीं किया जाना चाहिए.

अगर जगह की जानकारी उम्मीद के मुताबिक सटीक नहीं है, तो ऐसा हो सकता है कि डिवाइस, वीपीएस की सुविधा का इस्तेमाल न कर रहा हो. ऐप्लिकेशन, उपयोगकर्ता को स्थानीय जानकारी को बेहतर बनाने के लिए, अपने डिवाइस को साइनबोर्ड और इमारतों की ओर पॉइंट करने के लिए कह सकता है.

मान्य इस्तेमाल (इंप्लिसिट)

रिटर्न कोड

सफल

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Failure

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_POSE_INVALID
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_TIME_INVALID
  • XR_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 है. इसे जियोस्पेशियल पोज़ में बदला जा सकता है.

मान्य इस्तेमाल (इंप्लिसिट)

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% कॉन्फ़िडेंस लेवल के रेडियस के तौर पर तय किया जाता है.

मान्य इस्तेमाल (इंप्लिसिट)

जियोस्पेशल पोज़ को 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_SUCCESS
  • XR_SESSION_LOSS_PENDING

Failure

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_GEOSPATIAL_COORDINATES_INVALID_ANDROID
  • XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_TIME_INVALID
  • XR_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 है.

मान्य इस्तेमाल (इंप्लिसिट)

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_SUCCESS
  • XR_SESSION_LOSS_PENDING

Failure

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_GEOSPATIAL_COORDINATES_INVALID_ANDROID
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_VALIDATION_FAILURE

xrCheckVpsAvailabilityCompleteANDROID फ़ंक्शन को इस तरह परिभाषित किया गया है:

XrResult xrCheckVpsAvailabilityCompleteANDROID(
    XrSession                                   session,
    XrFutureEXT                                 future,
    XrVPSAvailabilityCheckCompletionANDROID*    completion);

पैरामीटर की जानकारी

मान्य इस्तेमाल (इंप्लिसिट)

  • xrCheckVpsAvailabilityCompleteANDROID को कॉल करने से पहले, XR_ANDROID_geospatial एक्सटेंशन को चालू करना ज़रूरी है
  • session, XrSession का एक मान्य हैंडल होना चाहिए
  • completion XrVPSAvailabilityCheckCompletionANDROID स्ट्रक्चर का पॉइंटर होना चाहिए

रिटर्न कोड

सफल

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Failure

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_FUTURE_INVALID_EXT
  • XR_ERROR_FUTURE_PENDING_EXT
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_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_SUCCESS
  • XR_SESSION_LOSS_PENDING

Failure

  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROID

मान्य इस्तेमाल (इंप्लिसिट)

उदाहरण

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

नए ऑब्जेक्ट टाइप

नए निर्देश

नई संरचनाएं

नए एनम

नए बिटमास्क

नए Enum कॉन्स्टेंट

  • XR_ANDROID_GEOSPATIAL_EXTENSION_NAME
  • XR_ANDROID_geospatial_SPEC_VERSION
  • XrObjectType को बढ़ाना :

    • XR_OBJECT_TYPE_GEOSPATIAL_TRACKER_ANDROID
  • XrResult को बढ़ाना :

    • XR_ERROR_GEOSPATIAL_CLOUD_AUTH_FAILED_ANDROID
    • XR_ERROR_GEOSPATIAL_COORDINATES_INVALID_ANDROID
    • XR_ERROR_GEOSPATIAL_TRACKER_NOT_RUNNING_ANDROID
  • XrStructureType को बढ़ाना :

    • XR_TYPE_EVENT_DATA_GEOSPATIAL_TRACKER_STATE_CHANGED_ANDROID
    • XR_TYPE_GEOSPATIAL_POSE_FROM_POSE_LOCATE_INFO_ANDROID
    • XR_TYPE_GEOSPATIAL_POSE_LOCATE_INFO_ANDROID
    • XR_TYPE_GEOSPATIAL_POSE_RESULT_ANDROID
    • XR_TYPE_GEOSPATIAL_TRACKER_CREATE_INFO_ANDROID
    • XR_TYPE_SYSTEM_GEOSPATIAL_PROPERTIES_ANDROID
    • XR_TYPE_VPS_AVAILABILITY_CHECK_COMPLETION_ANDROID

समस्याएं

वर्शन इतिहास

  • पहला संशोधन, 18-12-2025 (बेन किंग)

    • एक्सटेंशन के बारे में शुरुआती जानकारी.