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

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

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

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

कोई वाहन कब सीमा पार करता है, यह समझना कई कामों के लिए ज़रूरी है, जैसे:

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

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

स्कोप

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

  1. ऐसे पॉलीगॉन जिनका इस्तेमाल करके, उल्लंघन का पता लगाने के लिए इसे जांच करना ज़रूरी है;
  2. उपयोगकर्ता की जगह की रीयल-टाइम जानकारी
  3. यह जांचने के लिए तर्क कि मौजूदा जगह किसी पॉलीगॉन के अंदर है या बाहर.

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

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

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

लिसनर

नेविगेशन SDK टूल में कई लिसनर हैं, जिनका इस्तेमाल किया जा सकता है. इनमें से कुछ नाम हैं:

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

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

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

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

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

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

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

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 को अपनी सबसे नई बिल्ड.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
}

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

जियोफ़ेंस तय करने के बाद, आपको नेविगेशन 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 का इस्तेमाल करके यह देखा जा सकता है कि जो जगह मिली है वह पहले से तय पॉलीगॉन के अंदर है या नहीं. नीचे दिए गए उदाहरण में, जियोफ़ेंस को दिखाने वाले पहले से तय पॉलीगॉन का इस्तेमाल किया गया है. हालांकि, व्यावहारिक तौर पर आपके पास कई पॉलीगॉन हो सकते हैं और लूप की ज़रूरत होगी.

एक वैकल्पिक तरीका

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

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

इसका संभावित समाधान इस तरह से होगा:

[एक्ज़ीक्यूशन एनवायरमेंट] सर्वर साइड जियोफ़ेंसिंग आर्किटेक्चर

जियोफ़ेंसिंग के लिए सर्वर साइड अप्रोच का उदाहरण.

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

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

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

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

नतीजा

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

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

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

सुझाई गई अतिरिक्त रीडिंग: