Nav SDK टूल की मदद से मोबाइल एसेट ट्रैक करने के लिए, जियोफ़ेंस क्लाइंट-साइड को ट्रिगर करें

इस दस्तावेज़ में बताया गया है कि क्लाइंट-साइड जियोफ़ेंसिंग क्या है, इसका इस्तेमाल कब करना चाहिए, और इसे मोबाइल ऐप्लिकेशन में इस्तेमाल के उदाहरणों पर कैसे लागू किया जाता है. इसमें यह भी बताया गया है कि Google Navigation SDK का इस्तेमाल करके, Android पर कोई उदाहरण कैसे लागू किया जा सकता है.

जियोफ़ेंस की पहचान करने की सुविधा वाला Nav SDK
जियोफ़ेंस का पता लगाने की सुविधा वाला Nav SDK

कंपनियों को अक्सर यह जानने की ज़रूरत होती है कि कोई मोबाइल डिवाइस किसी खास इलाके में कब आता है या कब जाता है. इसके लिए, वर्चुअल भौगोलिक सीमाएं या जियोफ़ेंस बनाए जाते हैं. इससे सॉफ़्टवेयर को यह पता चलता है कि कोई डिवाइस किसी सीमा को पार कर गया है.

किसी वाहन के किसी सीमा को पार करने की जानकारी कई मामलों में ज़रूरी होती है. जैसे:

  • ग्राहकों की दिलचस्पी बढ़ाना: कारोबार, जियोफ़ेंसिंग का इस्तेमाल करके, उपयोगकर्ताओं को खास ऑफ़र, इवेंट या नए प्रॉडक्ट के बारे में पुश नोटिफ़िकेशन भेज सकते हैं.
  • सुरक्षा: कारोबार, संवेदनशील जगहों के आस-पास वर्चुअल बाउंड्री बनाने के लिए, जियोफ़ेंसिंग का इस्तेमाल कर सकते हैं. जैसे, डेटा सेंटर या गोदाम. साथ ही, अगर कोई व्यक्ति उस जगह में प्रवेश करता है या उसे छोड़ता है, तो सुरक्षा कर्मियों को सूचना दे सकते हैं.
  • परिवहन: कारोबार, वाहनों की जगह की जानकारी ट्रैक करने के लिए जियोफ़ेंसिंग का इस्तेमाल कर सकते हैं. साथ ही, रास्तों और शेड्यूल को ऑप्टिमाइज़ कर सकते हैं.

इसलिए यह ज़रूरी है कि आप क्लाइंट-फेसिंग ऐप के अंदर उन ज़ोन (पॉलीगॉन) को दर्शाना सीखें. इस ऐप को डिवाइस की लोकेशन ट्रैक करनी चाहिए और यह जाँच करनी चाहिए कि कहीं उसने किसी खास जियोफ़ेंस का उल्लंघन तो नहीं किया है.

दायरा

इस दस्तावेज़ में, जियोफ़ेंसिंग को क्लाइंट-साइड पर लागू करने के बारे में बताया गया है . इसका मतलब है कि क्लाइंट ऐप्लिकेशन में ये चीज़ें होनी चाहिए:

  1. बहुभुजों को उल्लंघनों के लिए जांचने की आवश्यकता है;
  2. उपयोगकर्ता का वास्तविक समय स्थान
  3. यह जांचने के लिए तर्क कि वर्तमान स्थान किसी बहुभुज के अंदर है या बाहर.

इस गाइड में Android के उदाहरण शामिल हैं. हालांकि, iOS पर भी ऐसा ही किया जा सकता है. Android स्थान सेवा में सर्कुलर जियोफ़ेंस के लिए एक अंतर्निहित कार्यान्वयन है जिसे यहां देखा जा सकता है. नीचे दिया गया रेफ़रंस कोड और जानकारी, ज़्यादा जटिल सेटअप के लिए शुरुआती जानकारी है.

Navigation SDK, Android / iOS की एक नेटिव लाइब्रेरी है. इसे ड्राइवर ऐप्लिकेशन में जोड़ा जाता है. यह इन कामों के लिए ज़िम्मेदार है:

  • सड़क के हिसाब से जगह की जानकारी को ऐप्लिकेशन से पाना. यह Android के FusedLocationProvider (FLP) से ज़्यादा सटीक है. ऐसा इसलिए, क्योंकि यह Google के सड़क नेटवर्क का इस्तेमाल करके, जगहों को सड़क के सबसे नज़दीकी सेगमेंट पर स्नैप करता है. इससे पहुंचने का अनुमानित समय (ईटीए) ज़्यादा सटीक होता है. साथ ही, यह FLP से मिली अन्य जानकारी का भी इस्तेमाल करता है.
  • ड्राइवरों को पॉइंट A से पॉइंट B तक पहुंचने के लिए, बारी-बारी से निर्देश मिलते हैं. इसमें रीयल-टाइम में ट्रैफ़िक और रास्ते से जुड़ी अन्य पाबंदियों को ध्यान में रखा जाता है.
  • इवेंट लिसनर और रजिस्टर किए गए कॉलबैक के ज़रिए इवेंट ट्रिगर करना.

लिसनर

नेविगेशन SDK में कई श्रोता हैं जिनका आप उपयोग कर सकते हैं. कुछ नाम है:

  • RoadSnappedLocation प्रदाता के माध्यम से स्थान परिवर्तन.
  • ReroutingListener की मदद से, इवेंट को फिर से रूट करें. जैसे, उपयोगकर्ता यू-टर्न, बाईं ओर मुड़ने वगैरह के निर्देशों को अनदेखा करता है और सुझाए गए रास्ते से भटक जाता है.
  • ArrivalListener के माध्यम से आगमन ईवेंट (उपयोगकर्ता नियोजित गंतव्य पर पहुंचता है).
  • शेष दूरी और ETA इवेंट (जब ड्राइवर गंतव्य पर पहुंचने वाला हो, तो सूचना प्राप्त करें - मीटर के आधार पर, जब ड्राइवर गंतव्य पर पहुंचने वाला हो, तो सूचना प्राप्त करें - समय के आधार पर) दोनों .RemainingTimeOrDistanceChangedListener के माध्यम से उपलब्ध हैं

इस गाइड में, सिर्फ़ RoadSnappedLocationProvider और उसके LocationListener का इस्तेमाल किया गया है.

क्लाइंट-साइड जियोफ़ेंसिंग की सुविधा

अब हम क्लाइंट साइड पर जियोफ़ेंसिंग की सुविधा बनाने का तरीका जानेंगे. यहां दिए गए उदाहरण में, Navigation SDK को टर्न-बाय-टर्न मोड में काम करते हुए दिखाया गया है. साथ ही, रास्ते में एक पॉलीगॉन को दिखाया गया है, जो हमारे जियोफ़ेंस को दिखाता है.

फ़ंक्शनल डायग्राम
फ़ंक्शनल डायग्राम

  1. जियोफ़ेंस, BigQuery में सेव किए जाते हैं और आपके बैकएंड से पुल किए जाते हैं.
  2. बैकएंड, समय-समय पर ड्राइव ऐप्लिकेशन को जियोफ़ेंस भेजता है.
  3. ड्राइवर नेविगेट करता है और ड्राइवर ऐप्लिकेशन, ट्रिगर के लिए नियमित रूप से जियोफ़ेंस की जांच करता है.
  4. Driver ऐप्लिकेशन, ट्रिगर इवेंट की सूचना बैकएंड को देता है, ताकि वह कार्रवाई कर सके.

जैसे-जैसे वाहन रास्ते पर आगे बढ़ता है, वैसे-वैसे ऐप्लिकेशन यह जांच करता रहता है कि पॉलीगॉन का उल्लंघन तो नहीं हुआ है. जब ऐप्लिकेशन को पता चलता है कि वह जियोफ़ेंस से बाहर निकल गया है, तो यूज़र इंटरफ़ेस (यूआई) पर एक मैसेज दिखता है. इसमें लिखा होता है: जियोफ़ेंस का उल्लंघन हुआ.

Android-Maps-Utils के लिए डिपेंडेंसी कॉन्फ़िगर करना

इस समाधान में Android-Maps-Utils का इस्तेमाल किया जाता है. यह एक ओपन-सोर्स लाइब्रेरी है. इसमें ऐसे टूल शामिल होते हैं जो Google Maps Android API का इस्तेमाल करने वाले कई ऐप्लिकेशन के लिए काम के होते हैं.

यह लाइब्रेरी सार्वजनिक है और इसे Github पर होस्ट किया गया है. इसे यहां ऐक्सेस किया जा सकता है:

  • Android: https://github.com/googlemaps/android-maps-utils
  • iOS: https://github.com/googlemaps/google-maps-ios-utils

इस लाइब्रेरी को अपने Android ऐप्लिकेशन (इस दस्तावेज़ का स्कोप) में शामिल करने के लिए, आपको अपनी build.gradle फ़ाइल में बदलाव करना होगा. ध्यान दें कि यह build.gradle फ़ाइल, उस मॉड्यूल (ऐप्लिकेशन) के लिए है जिसे बनाया जा रहा है. यह प्रोजेक्ट लेवल पर नहीं है.

dependencies {
   ...
   // Utilities for Maps SDK for Android (requires Google Play Services)
   implementation 'com.google.maps.android:android-maps-utils:2.3.0'
}

इसके बाद, Gradle को अपनी नई build.gradle फ़ाइल के साथ सिंक करने के बाद, अपनी Java फ़ाइल में com.google.maps.android.PolyUtil इंपोर्ट किया जा सकता है:

import com.google.android.gms.maps.model.PolygonOptions;
import com.google.maps.android.PolyUtil;

जियोफ़ेंस तय करना

ध्यान दें कि यहां भी PolygonOptions इंपोर्ट किया जा रहा है. इसकी वजह यह है कि पॉलीगॉन को दिखाने के लिए इसका इस्तेमाल किया जा रहा है:

mPolygonOptions = new PolygonOptions()
       .add(new LatLng(29.4264525,-98.4948758))
       .add(new LatLng(29.4267029,-98.4948758))
       .add(new LatLng(29.4273742,-98.4945822))
       .add(new LatLng(29.4264562,-98.4943592))
       .fillColor(0x0000ff36)
       .strokePattern(Arrays.asList(new Dash(45.0f), new Gap(10.0f)))
       .strokeColor(Color.BLUE)
       .strokeWidth(5);

ऊपर दिए गए उदाहरण में, हमने पहले से तय किए गए निर्देशांकों (अक्षांश, देशांतर) के जोड़े के साथ एक पॉलीगॉन तय किया है. हालांकि, असल में ज़्यादातर मामलों में ये कोऑर्डिनेट और पॉलीगॉन की परिभाषाएं, बैकएंड एंडपॉइंट से मिलती हैं. साथ ही, इन्हें शायद रिमोट से फ़ेच किया जाता है. इसका मतलब है कि ऐप्लिकेशन को पॉलीगॉन तुरंत बनाने होंगे.

PolygonOptions में क्या-क्या बताया जा सकता है, इस बारे में ज़्यादा जानने के लिए, कृपया यहां देखें.

आपको फ़्रैगमेंट या ऐक्टिविटी बनाते समय पॉलीगॉन तय करने चाहिए. उदाहरण के लिए:

protected void onCreate(Bundle savedInstanceState) {
   ...
   mPolygonOptions = new PolygonOptions()
           .add(new LatLng(29.4264525,-98.4948758))
           .add(new LatLng(29.4267029,-98.4948758))
           .add(new LatLng(29.4273742,-98.4945822))
           .add(new LatLng(29.4264562,-98.4943592))
           .fillColor(0x0000ff36)
           .strokePattern(Arrays.asList(new Dash(45.0f), new Gap(10.0f)))
           .strokeColor(Color.BLUE)
           .strokeWidth(5);

   ...// more code here
}

जगह की जानकारी के अपडेट सुनना

जियोफ़ेंस तय करने के बाद, आपको सिर्फ़ एक लोकेशन अपडेट लिसनर बनाना होगा. इससे Navigation SDK में मौजूद RoadSnappedLocationProvider इवेंट को सब्सक्राइब किया जा सकेगा. यह इवेंट, डिवाइस की नई लोकेशन की जानकारी देगा.

mLocListener = new RoadSnappedLocationProvider.LocationListener() {
   @Override
   public void onLocationChanged(Location snapped) {
       LatLng snappedL = new LatLng(snapped.getLatitude(), snapped.getLongitude());
       if(PolyUtil.containsLocation(snappedL, mPolygonOptions.getPoints(), true) && !mGeofenceBreached){
           Log.d("Geofence", "Vehicle has breached the polygon");
       }
   }
   @Override
   public void onRawLocationUpdate(Location location) {
   }
};

Android-Maps-Utils की मदद से, PolyUtil.containsLocation का इस्तेमाल करके यह पता लगाया जा सकता है कि मिली हुई जगह की जानकारी, पहले से तय किए गए पॉलीगॉन के अंदर है या नहीं. नीचे दिए गए उदाहरण में, पहले से तय किए गए पॉलीगॉन का इस्तेमाल किया गया है. यह पॉलीगॉन, जियोफ़ेंस को दिखाता है. हालांकि, असल में आपके पास एक से ज़्यादा पॉलीगॉन हो सकते हैं और आपको लूप की ज़रूरत पड़ सकती है.

अन्य तरीका

इस दस्तावेज़ में, क्लाइंट के लिए उपलब्ध ऐसे ऐप्लिकेशन के बारे में बताया गया है जो कस्टम जियोफ़ेंस (बहुभुज) के उल्लंघन की जांच करता है. हालांकि, कुछ ऐसे मामले हो सकते हैं जिनमें आपको अपने बैकएंड पर इस तरह की जांच करनी पड़ सकती है.

इसका मतलब है कि ऐप्लिकेशन, जगह की जानकारी के अपडेट को बैकएंड को रिपोर्ट करेगा. इसके बाद, यह बैकएंड यह जांच करेगा कि वाहन ने किसी पॉलीगॉन का उल्लंघन किया है या नहीं. इस तरह, पुष्टि करने के लिए क्लाइंट ऐप्लिकेशन पर निर्भर नहीं रहना पड़ेगा.

इस समस्या को ऐसे हल किया जा सकता है:

[Execution Environment] Server side geofencing architecture

जियोफ़ेंसिंग के लिए सर्वर साइड के तरीके को दिखाने वाले आर्किटेक्चर का उदाहरण.

सर्वर-साइड सलूशन
सर्वर-साइड समाधान

  1. ड्राइवर ऐप्लिकेशन, Driver SDK का इस्तेमाल करके Fleet Engine को जगह की जानकारी के अपडेट भेजता है. जगह की जानकारी के अपडेट और इन-ऐप्लिकेशन नेविगेशन की सुविधा, Navigation SDK के ज़रिए मिलती है.
  2. Fleet Engine, इन अपडेट को Cloud Logging या Pub/Sub पर भेजता है.
  3. बैकएंड, जगह की जानकारी देने वाले उन सिग्नल को इकट्ठा करता है.
  4. जियोफ़ेंस को BigQuery में सेव किया जाता है, ताकि बैकएंड उनका विश्लेषण कर सके.
  5. जियोफ़ेंस ट्रिगर होने पर, ड्राइवर ऐप्लिकेशन को सूचनाएं भेजी जाती हैं.

इस आर्किटेक्चर में, Driver SDK और Fleet Engine का इस्तेमाल किया जाता है. Fleet Engine, PubSub अपडेट भेज सकता है और Cloud Logging में लॉग एंट्री जनरेट कर सकता है. दोनों ही मामलों में, वाहन की जगह की जानकारी वापस पाई जा सकती है.

इसके बाद, बैकएंड PubSub कतार की निगरानी कर सकता है या लॉग पढ़ सकता है और वाहन के अपडेट देख सकता है. इसके बाद, जब भी कोई अपडेट होता है (या हर कुछ सेकंड, मिनट में, अपडेट की अहमियत के हिसाब से), बैकएंड BigQuery GIS फ़ंक्शन को कॉल कर सकता है. इससे यह पता चलता है कि कोई वाहन, जियोफ़ेंस के अंदर है या बाहर. अगर एक या इससे ज़्यादा जियोफ़ेंस का उल्लंघन हुआ है, तो बैकएंड कार्रवाई कर सकता है. साथ ही, इंटरनल पाइपलाइन या अन्य ज़रूरी वर्कफ़्लो को ट्रिगर कर सकता है.

नतीजा

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

Navigation SDK, इवेंट लिसनर के काम के टूल उपलब्ध कराता है. इनकी मदद से, यात्रा के दौरान कई अहम पलों का पता लगाया जा सकता है. कंपनियों को अक्सर इस्तेमाल के कुछ खास मामलों के लिए, कस्टम जियोफ़ेंस की ज़रूरत होती है. इस दस्तावेज़ में, हमने इसे लागू करने का एक तरीका बताया है. हालांकि, इसे कई तरीकों से लागू किया जा सकता है. हमें यह देखने का इंतज़ार रहेगा कि आपने किस तरह का कॉन्टेंट बनाया है.

अगली कार्रवाइयां

इसके बारे में और पढ़ें: