ARCore for Jetpack XR में Geospatial API की मदद से, आपका ऐप्लिकेशन Google Street View की कवरेज में आने वाले किसी भी इलाके में कॉन्टेंट को रिमोटली अटैच कर सकता है. साथ ही, दुनिया भर में एआर अनुभव क्रिएट कर सकता है. जियोस्पेशल एपीआई, डिवाइस के सेंसर और जीपीएस डेटा का इस्तेमाल करके, डिवाइस के आस-पास के माहौल का पता लगाता है. इसके बाद, उस माहौल के पहचाने जा सकने वाले हिस्सों को Google के विज़ुअल पोज़िशनिंग सिस्टम (वीपीएस) की ओर से उपलब्ध कराए गए लोकलाइज़ेशन मॉडल से मैच करता है. इससे, उपयोगकर्ता के डिवाइस की सटीक जगह की जानकारी का पता चलता है. एपीआई, उपयोगकर्ता के स्थानीय निर्देशांकों को वीपीएस से मिले भौगोलिक निर्देशांकों के साथ मर्ज करने का काम भी करता है, ताकि एक ही निर्देशांक सिस्टम में काम किया जा सके.
ARCore API चालू करना
अपने ऐप्लिकेशन में विज़ुअल पोज़िशनिंग सिस्टम (वीपीए) का इस्तेमाल करने से पहले, आपको नए या मौजूदा Google Cloud प्रोजेक्ट में ARCore API चालू करना होगा. यह सेवा, जियोस्पेशल ऐंकर को होस्ट करने, सेव करने, और ठीक करने के लिए ज़िम्मेदार है.
लाइब्रेरी की अन्य डिपेंडेंसी जोड़ना
Geospatial API का इस्तेमाल करने के लिए, कुछ और लाइब्रेरी डिपेंडेंसी की ज़रूरत होती है. अपने ऐप्लिकेशन की build.gradle.kts फ़ाइल में इन्हें जोड़ें:
Groovy
dependencies { // ... Other required dependencies for the Jetpack XR SDK implementation "com.google.android.gms:play-services-location:21.3.0" }
Kotlin
dependencies { // ... Other required dependencies for the Jetpack XR SDK implementation("com.google.android.gms:play-services-location:21.3.0") }
ज़रूरी अनुमतियों का अनुरोध करना
Jetpack XR के साथ ARCore में Geospatial API का इस्तेमाल करने के लिए, आपके ऐप्लिकेशन को रनटाइम के दौरान ये अनुमतियां मांगनी होंगी:
ACCESS_INTERNET: ARCore Geospatial API की क्लाउड सेवा से संपर्क करने के लिए ज़रूरी है.ACCESS_COARSE_LOCATION: किसी उपयोगकर्ता की अनुमानित जगह का पता लगाने के लिए ज़रूरी है.ACCESS_FINE_LOCATION: किसी व्यक्ति की सटीक जगह का पता लगाने के लिए ज़रूरी है.
ऐप्लिकेशन की अनुमतियों की जानकारी देना
रनटाइम के दौरान इन अनुमतियों का अनुरोध करने से पहले, आपको अपने ऐप्लिकेशन के मेनिफ़ेस्ट में इनका एलान करना होगा:
<manifest ... >
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
</manifest>
अनुमतियों का अनुरोध करना
ज़रूरी अनुमतियों के बारे में बताने के बाद, आपके ऐप्लिकेशन को रनटाइम के दौरान उनका अनुरोध करना होगा. पक्का करें कि आपने यह बताया हो कि आपके ऐप्लिकेशन को अनुमतियों की ज़रूरत क्यों है.
Geospatial API तब तक काम नहीं कर सकता, जब तक वह उपयोगकर्ता की सटीक जगह की जानकारी का पता न लगा ले. इसलिए, रनटाइम के दौरान जगह की जानकारी की अनुमतियों का अनुरोध करने से जुड़े दिशा-निर्देशों का पालन करें, ताकि आपके ऐप्लिकेशन को ACCESS_FINE_LOCATION और ACCESS_COARSE_LOCATION, दोनों अनुमतियां मिल सकें.
किसी सेशन को ऐक्सेस करना
Jetpack XR Runtime Session के ज़रिए जियोस्पेशल जानकारी ऐक्सेस करें. आपके ऐप्लिकेशन को इसे बनाना होगा.
सेशन को कॉन्फ़िगर करना
XR सेशन में, डिवाइस के पोज़ की जानकारी डिफ़ॉल्ट रूप से चालू नहीं होती है. अपने ऐप्लिकेशन को डिवाइस की पोज़िशन की जानकारी पाने की अनुमति देने के लिए, सेशन को कॉन्फ़िगर करें. साथ ही, GeospatialMode.VPS_AND_GPS और DeviceTrackingMode.LAST_KNOWN, दोनों मोड सेट करें:
// Define the configuration object to enable Geospatial features. val newConfig = Config( // Set the GeospatialMode to VPS_AND_GPS. geospatial = GeospatialMode.VPS_AND_GPS, // Set the DeviceTrackingMode to LAST_KNOWN. deviceTracking = DeviceTrackingMode.LAST_KNOWN ) // Apply the configuration to the session. try { when (val configResult = session.configure(newConfig)) { is SessionConfigureSuccess -> { // The session is now configured to use the Geospatial API. } else -> { // Handle other configuration errors (e.g., missing library dependencies). } } } catch (e: UnsupportedOperationException) { // Handle configuration failure if the mode is not supported. }
GeospatialMode.VPS_AND_GPS मोड, डिवाइस की भू-स्थानिक पोज़िशन का सटीक पता लगाने के लिए, विज़ुअल पोज़िशनिंग सिस्टम (वीपीएस) और ग्लोबल पोज़िशनिंग सिस्टम (जीपीएस), दोनों के डेटा का इस्तेमाल करता है.
सभी XR डिवाइसों पर GeospatialMode.VPS_AND_GPS और DeviceTrackingMode.LAST_KNOWN मोड काम नहीं करते. अगर Session.configure() कमांड काम करती है, तो इसका मतलब है कि डिवाइस पर ये मोड काम करते हैं.
उपयोगकर्ता को डिवाइस के डेटा के इस्तेमाल की अनुमति देने के लिए प्रॉम्प्ट करना
Jetpack XR के लिए ARCore के साथ Geospatial API का इस्तेमाल करने वाले ऐप्लिकेशन को, उपयोगकर्ता को एक प्रॉम्प्ट दिखाना होगा. इसमें उपयोगकर्ता को अपने डिवाइस से मिले डेटा के इस्तेमाल की पुष्टि करनी होगी और इसकी अनुमति देनी होगी. ज़्यादा जानकारी के लिए, उपयोगकर्ता की निजता से जुड़ी ज़रूरी शर्तें देखें.
Geospatial ऑब्जेक्ट पाना
सेशन कॉन्फ़िगर होने के बाद, Geospatial.getInstance(session) का इस्तेमाल करके Geospatial ऑब्जेक्ट पाएं:
// Get the Geospatial instance for the current session. val geospatial = Geospatial.getInstance(session)
Geospatial ऑब्जेक्ट का इस्तेमाल सिर्फ़ तब किया जाना चाहिए, जब उसकी स्थिति State.RUNNING हो. Geospatial.state StateFlow<Geospatial.State> का इस्तेमाल करके, स्थिति पर नज़र रखी जा सकती है.
वीपीएस की उपलब्धता की जांच करना
जियोस्पेशल पोज़ का पता लगाने के लिए, Geospatial API, VPS और जीपीएस, दोनों का इस्तेमाल करता है. इसलिए, यह एपीआई तब उपलब्ध होता है, जब डिवाइस अपनी जगह की जानकारी का पता लगा सकता है. जिन जगहों पर जीपीएस सटीक तरीके से काम नहीं करता, जैसे कि घर के अंदर और घनी आबादी वाले शहरी इलाकों में, एपीआई सटीक पोज़ जनरेट करने के लिए वीपीएस कवरेज पर निर्भर करता है.
सामान्य स्थितियों में, वीपीएस से आपको पोज़िशन की सटीक जानकारी मिल सकती है. यह जानकारी करीब पांच मीटर के दायरे में होती है. साथ ही, रोटेशन की सटीक जानकारी पांच डिग्री के दायरे में होती है. निलंबित करने के फ़ंक्शन Geospatial.checkVpsAvailability(latitude, longitude) का इस्तेमाल करके, यह देखा जा सकता है कि किसी जगह पर वीपीएस कवरेज है या नहीं. यह कॉल एक एसिंक्रोनस ऑपरेशन है. इसके लिए, सेशन को GeospatialMode.VPS_AND_GPS मोड में कॉन्फ़िगर करने की ज़रूरत नहीं होती.
यहां दिए गए कोड में, किसी अक्षांश और देशांतर के लिए वीपीएस की उपलब्धता की जांच करने का तरीका बताया गया है:
// You can query the GPS to get the current device's location. val latitude = 37.422 val longitude = -122.084 // Use the geospatial instance to check VPS availability for a specific location. val result = geospatial.checkVpsAvailability(latitude, longitude) when (result) { is VpsAvailabilityAvailable -> { // VPS is available at this location. } is VpsAvailabilityErrorInternal -> { // VPS availability check failed with an internal error. } is VpsAvailabilityNetworkError -> { // VPS availability check failed due to a network error. } is VpsAvailabilityNotAuthorized -> { // VPS availability check failed due to an authorization error. } is VpsAvailabilityResourceExhausted -> { // VPS availability check failed due to resource exhaustion. } is VpsAvailabilityUnavailable -> { // VPS is not available at this location. } }
आपका ऐप्लिकेशन, Google Cloud पर ARCore API के साथ कम्यूनिकेट करने के लिए सही तरीके से सेट अप किया गया हो. ऐसा न होने पर, आपके ऐप्लिकेशन को VpsAvailabilityNotAuthorized नतीजा मिलेगा.
डिवाइस की पोज़िशन को जियोस्पेशल पोज़िशन में बदलना
डिवाइस के पोज़ को जियोस्पेशल पोज़ में बदला जा सकता है, ताकि एआई चश्मे, जगह की जानकारी के हिसाब से डेटा जनरेट कर सकें और उससे इंटरैक्ट कर सकें. यह पाइपलाइन, डिवाइस की मौजूदा पोज़िशन और ओरिएंटेशन को उसके लोकल कोऑर्डिनेट सिस्टम (डिवाइस पोज़) से बदलकर, दुनिया भर में इस्तेमाल होने वाले कोऑर्डिनेट में बदलती है.
इससे आपको ये काम करने में मदद मिल सकती है:
- एआर (ऑगमेंटेड रिएलिटी) का ऐसा कॉन्टेंट बनाया जा सकता है जिसे लंबे समय तक इस्तेमाल किया जा सके. इसमें उपयोगकर्ता की ओर से रखे गए वर्चुअल ऑब्जेक्ट को किसी जगह पर सटीक तरीके से एंकर किया जाता है, ताकि उसे बाद में वापस लाया जा सके.
- किसी जगह के हिसाब से अनुभव ट्रिगर करें. इसके लिए, मैप पर उपयोगकर्ता की जगह की जानकारी को लगातार अपडेट करें, ताकि रीयल-टाइम नेविगेशन या जियो-फ़ेंस किए गए गेमप्ले को चालू किया जा सके.
- उपयोगकर्ता की जगह की सटीक जानकारी का पता लगाना, ताकि जगह के हिसाब से ऐप्लिकेशन लॉजिक को ट्रिगर किया जा सके.
Geospatial.createGeospatialPoseFromPose() का इस्तेमाल करके, डिवाइस पोज़ को जियोस्पेशियल पोज़ में बदलने के लिए:
// Get the current device Pose from the AR Session's state. val devicePose = ArDevice.getInstance(session).state.value.devicePose // Convert the device Pose into a GeospatialPose. when (val result = geospatial.createGeospatialPoseFromPose(devicePose)) { is CreateGeospatialPoseFromPoseSuccess -> { val geoPose = result.pose val lat = geoPose.latitude val lon = geoPose.longitude val alt = geoPose.altitude // Orientation is in the EUS (East-Up-South) coordinate system. val orientation = geoPose.eastUpSouthQuaternion } is CreateGeospatialPoseFromPoseNotTracking -> { // Geospatial is not currently tracking. } }
जियोस्पेशल पोज़ को डिवाइस पोज़ में बदलना
जियोस्पेशल पोज़ को डिवाइस पोज़ में बदला जा सकता है. इससे एआई चश्मे पर, कॉन्टेक्स्ट के हिसाब से और जगह की जानकारी के आधार पर अनुभव देने में मदद मिलती है. इस ट्रांसफ़ॉर्मेशन में, असल दुनिया के कोऑर्डिनेट से तय की गई जानकारी का इस्तेमाल किया जाता है. जैसे, किसी लैंडमार्क की जगह, नेविगेशन का रास्ता या एआर कॉन्टेंट. इसके बाद, इसे उपयोगकर्ता के चश्मे के विज़ुअल स्पेस में बदल दिया जाता है.
Geospatial.createPoseFromGeospatialPose() का इस्तेमाल करके, जियोस्पेशियल पोज़ को डिवाइस पोज़ में बदलने के लिए:
// Convert a GeospatialPose (lat/long/alt) back to a device-space Pose. when (val result = geospatial.createPoseFromGeospatialPose(geoPose)) { is CreatePoseFromGeospatialPoseSuccess -> { val devicePose: Pose = result.pose // devicePose is now ready to be used relative to the tracking origin. } is CreatePoseFromGeospatialPoseNotTracking -> { // Geospatial is not currently tracking. } }