Geospatial API, ज़्यादा सटीक भौगोलिक पोज़ जनरेट करने के लिए, VPS और जीपीएस डेटा के कॉम्बिनेशन का इस्तेमाल करता है. इस एपीआई का इस्तेमाल ऐसी किसी भी जगह पर किया जा सकता है जहां डिवाइस की जगह की जानकारी मिल सकती है:
- जिन जगहों पर जीपीएस की सटीक जानकारी नहीं मिलती है, जैसे कि इनडोर स्पेस और शहर के घने इलाके, वहां एपीआई वीपीएस कवरेज का इस्तेमाल करके, सटीक पोज़ जनरेट करेगा.
- अगर बाहरी जगहों पर, ऊपर से आने वाली रुकावटें कम या बिलकुल नहीं हैं, तो Geospatial API, जीपीएस की जगह की जानकारी के उपलब्ध डेटा का इस्तेमाल करके, ज़्यादा सटीक भौगोलिक पोज़ जनरेट कर सकता है.
एआर सेशन शुरू होने से पहले, किसी हॉरिज़ॉन्टल पोज़िशन पर वीपीएस की उपलब्धता का पता लगाया जा सकता है. साथ ही, इसका इस्तेमाल करके ज़्यादा बेहतर अनुभव दिए जा सकते हैं. उदाहरण के लिए, सिर्फ़ वीपीएस उपलब्ध होने पर "एआर में जाएं" बटन दिखाना.
ARCore API चालू करना
वीपीएस की उपलब्धता देखने के लिए, आपके ऐप्लिकेशन में ARCore API चालू होना चाहिए.
ARCore API चालू होने के बाद, वीपीएस की उपलब्धता की जांच इनके बिना की जा सकती है:
ArSession_resume()
को कॉल करने से पहले, कोई मौजूदाArSession
.ArGeospatialMode
सेट करना.
अपने ऐप्लिकेशन में वीपीएस की उपलब्धता देखना
Geospatial API का इस्तेमाल ऐसी किसी भी जगह पर किया जा सकता है जहां डिवाइस की जगह की जानकारी मिल सकती है. अगर एआर अनुभव, वीपीएस कवरेज पर निर्भर करता है, तो ArVpsAvailabilityFuture
पाने के लिए ArSession_checkVpsAvailabilityAsync()
का इस्तेमाल किया जा सकता है. यह एक असाइनमेंट है, जो किसी दी गई हॉरिज़ॉन्टल पोज़िशन पर वीपीएस की उपलब्धता की जांच करता है.
ArVpsAvailabilityFuture
मिलने के बाद, पॉलिंग या कॉलबैक की मदद से इसका नतीजा पाया जा सकता है.
नतीजे के बारे में पोल करना
ArFuture
की स्थिति जानने के लिए, ArFuture_getState()
का इस्तेमाल करें. तीन अलग-अलग स्थितियां होती हैं:
AR_FUTURE_STATE_PENDING
: कार्रवाई अभी पूरी नहीं हुई है, इसलिए नतीजे की जानकारी नहीं है.AR_FUTURE_STATE_CANCELLED
:ArFuture_cancel()
ने कार्रवाई रद्द कर दी है. रजिस्टर किया गया कोई भी कॉलबैक कभी नहीं किया जाएगा.AR_FUTURE_STATE_DONE
: कार्रवाई पूरी हो गई है. नतीजा पाने के लिए,ArVpsAvailabilityFuture_getResult()
का इस्तेमाल करें.
टास्क पूरा होने तक, ArFuture_getState()
को देखते रहें.
// Obtain a ArVpsAvailabilityFuture and store it somewhere. ArVpsAvailabilityFuture* future = NULL; CHECK(ArSession_checkVpsAvailabilityAsync(ar_session, latitude, longitude, NULL, NULL, &future) == AR_SUCCESS); // Poll ArVpsAvailabilityFuture later, for example, in a render loop. ArFutureState future_state = AR_FUTURE_STATE_PENDING; ArFuture_getState(ar_session, (ArFuture*)future, &future_state); if (future_state == AR_FUTURE_STATE_DONE) { ArVpsAvailability vps_availability = AR_VPS_AVAILABILITY_UNKNOWN; ArVpsAvailabilityFuture_getResult(ar_session, future, &vps_availability); switch (vps_availability) { case AR_VPS_AVAILABILITY_AVAILABLE: // VPS is available at this location. break; case AR_VPS_AVAILABILITY_UNAVAILABLE: // VPS is unavailable at this location. break; case AR_VPS_AVAILABILITY_ERROR_NETWORK_CONNECTION: // The external service could not be reached due to a network connection // error. break; // Handle other error states, e.g. // AR_VPS_AVAILABILITY_ERROR_RESOURCE_EXHAUSTED, // AR_VPS_AVAILABILITY_ERROR_INTERNAL, ... } ArFuture_release((ArFuture*)future); }
कॉलबैक की मदद से नतीजा पाना
कॉलबैक की मदद से भी ArFuture
का नतीजा पाया जा सकता है. ArSession_checkVpsAvailabilityAsync()
का इस्तेमाल करें और callback
डालें. ArFuture
के स्टेटस के AR_FUTURE_STATE_DONE
होने के तुरंत बाद, इस callback
को मुख्य थ्रेड पर कॉल किया जाएगा.
void vps_availability_callback(void* context, ArVpsAvailability availability) { // Callback is called on the Main thread. // Handle the ArVpsAvailability result as shown above. // For example, show UI that enables your AR view. // It is a best practice to free `context` memory at the end of the callback. free(context); } void check_availability_with_callback(ArSession* ar_session, double latitude, double longitude) { ArVpsAvailabilityFuture* future = NULL; void* context = NULL; CHECK(ArSession_checkVpsAvailabilityAsync( ar_session, latitude, longitude, context, vps_availability_callback, &future) == AR_SUCCESS); }
ArFuture
को रद्द करना
ArFuture
को रद्द करने के लिए, ArFuture_cancel()
का इस्तेमाल करें. थ्रेड के पैरलल प्रोसेस होने की वजह से, हो सकता है कि आपका रद्द करने का अनुरोध पूरा न हो पाए.
अगर यह कोशिश पूरी हो जाती है, तो ArFuture_cancel()
1
दिखाता है. अगर ऐसा नहीं होता है, तो 0
दिखाता है.
VPS कवरेज के बिना Geospatial API का इस्तेमाल करना
जियोस्पेशल एपीआई का इस्तेमाल उन इलाकों में भी किया जा सकता है जहां वीपीएस की सुविधा उपलब्ध नहीं है. अगर आप किसी ऐसे आउटडोर लोकेशन पर हैं जहां ऊपर से कोई रुकावट नहीं है या बहुत कम रुकावटें हैं, तो जीपीएस की मदद से, पोज़ को सटीक तरीके से जनरेट किया जा सकता है.
आगे क्या करना है
- डिवाइस के कैमरे की जियोस्पेशल पोज़िशन की जानकारी पाना, ताकि असल दुनिया में उपयोगकर्ता के डिवाइस की सटीक जगह की जानकारी मिल सके.