Jetpack XR के लिए ARCore में Geospatial API की मदद से, आपका ऐप्लिकेशन Google Street View में दिखने वाली किसी भी जगह पर, रिमोट तरीके से कॉन्टेंट जोड़ सकता है. साथ ही, दुनिया भर में एआर के अनुभव तैयार कर सकता है. Geospatial API, डिवाइस के सेंसर और जीपीएस डेटा का इस्तेमाल करके, डिवाइस के आस-पास के माहौल का पता लगाता है. इसके बाद, उस माहौल के पहचाने जा सकने वाले हिस्सों को, Google के विज़ुअल पोज़िशनिंग सिस्टम (वीपीएस) के ज़रिए उपलब्ध कराए गए स्थानीयकरण मॉडल से मैच करता है. इससे, उपयोगकर्ता के डिवाइस की सटीक जगह का पता चलता है. एपीआई, उपयोगकर्ता के स्थानीय निर्देशांकों को वीपीएस से मिले भौगोलिक निर्देशांकों के साथ मर्ज भी करता है, ताकि एक ही कोऑर्डिनेट सिस्टम में काम किया जा सके.
ARCore API चालू करना
अपने ऐप्लिकेशन में विज़ुअल पोज़िशनिंग सिस्टम (वीपीएस) का इस्तेमाल करने से पहले, आपको पहले नए या मौजूदा Google Cloud प्रोजेक्ट में ARCore API चालू करना होगा. यह सेवा, जियोस्पेशियल ऐंकर को होस्ट करने, सेव करने, और हल करने के लिए ज़िम्मेदार होती है.
अन्य लाइब्रेरी की डिपेंडेंसी जोड़ना
Geospatial API का इस्तेमाल करने के लिए, कुछ अन्य लाइब्रेरी की डिपेंडेंसी की ज़रूरत होती है. इन्हें अपने ऐप्लिकेशन की build.gradle.kts फ़ाइल में जोड़ें:
शानदार
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: उपयोगकर्ता की सटीक जगह का पता लगाने के लिए ज़रूरी है.
ऐप्लिकेशन की अनुमतियों की जानकारी देना
रनटाइम के दौरान इन अनुमतियों का अनुरोध करने से पहले, आपको अपने ऐप्लिकेशन के मेनिफ़ेस्ट में इनकी जानकारी declare them देनी होगी:
<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 के ज़रिए, जियोस्पेशियल जानकारी ऐक्सेस करें.
इसे आपके ऐप्लिकेशन को बनाना होगा.
सेशन को कॉन्फ़िगर करना
एक्सआर सेशन में, डिवाइस की पोज़िशन की जानकारी डिफ़ॉल्ट रूप से चालू नहीं होती. अपने
ऐप्लिकेशन को डिवाइस की पोज़िशन की जानकारी पाने की अनुमति देने के लिए, सेशन को कॉन्फ़िगर करें. साथ ही,
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 मोड, डिवाइस की जियोस्पेशियल पोज़िशन का सटीक पता लगाने के लिए, विज़ुअल पोज़िशनिंग सिस्टम (वीपीएस) और ग्लोबल पोज़िशनिंग सिस्टम (जीपीएस), दोनों के डेटा का इस्तेमाल करता है.
सभी एक्सआर डिवाइसों पर, GeospatialMode.VPS_AND_GPS और DeviceTrackingMode.LAST_KNOWN मोड काम नहीं करते. अगर Session.configure() काम करता है,
तो डिवाइस इन मोड के साथ काम करता है.
उपयोगकर्ता से डिवाइस के डेटा के इस्तेमाल की अनुमति के लिए अनुरोध करना
Jetpack XR के लिए ARCore के साथ Geospatial API का इस्तेमाल करने वाले ऐप्लिकेशन को, उपयोगकर्ता को एक प्रॉम्प्ट दिखाना होगा. इससे उपयोगकर्ता, अपने डिवाइस के डेटा के इस्तेमाल की अनुमति दे पाएगा. ज़्यादा जानकारी के लिए, उपयोगकर्ता की निजता से जुड़ी ज़रूरी शर्तें देखें.
जियोस्पेशियल ऑब्जेक्ट पाना
सेशन कॉन्फ़िगर होने के बाद, Geospatial ऑब्जेक्ट पाने के लिए
Geospatial.getInstance(session) का इस्तेमाल करें:
// Get the Geospatial instance for the current session. val geospatial = Geospatial.getInstance(session)
Geospatial ऑब्जेक्ट का इस्तेमाल सिर्फ़ तब किया जाना चाहिए, जब उसकी स्थिति
State.RUNNING हो. स्थिति की निगरानी करने के लिए,
Geospatial.state StateFlow<Geospatial.State> का इस्तेमाल किया जा सकता है.
वीपीएस की उपलब्धता की जांच करना
Geospatial API, जियोस्पेशियल पोज़िशन का पता लगाने के लिए, वीपीएस और जीपीएस , दोनों का इस्तेमाल करता है. इसलिए, यह एपीआई तब उपलब्ध होता है, जब डिवाइस अपनी जगह की जानकारी का पता लगा सकता है . कम जीपीएस कवरेज वाले इलाकों में, जैसे कि इनडोर स्पेस और घने शहरी माहौल में, एपीआई, सटीक पोज़िशन जनरेट करने के लिए, वीपीएस कवरेज पर निर्भर करता है.
आम तौर पर, वीपीएस से पोज़िशन की सटीक जानकारी करीब 5 मीटर और रोटेशन की सटीक जानकारी 5 डिग्री तक मिलने की उम्मीद की जा सकती है. यह देखने के लिए कि किसी
जगह पर वीपीएस कवरेज है या नहीं, सस्पेंड फ़ंक्शन
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. } }