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

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

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

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

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

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

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

दायरा

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

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

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

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

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

लिसनर

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

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

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

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

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

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

  1. जियोफ़ेंस, BigQuery में सेव किए जाते हैं और आपके बैकएंड से खींचे जाते हैं.
  2. बैकएंड, समय-समय पर Drive ऐप्लिकेशन में जियोफ़ेंस भेजता रहता है.
  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
}

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

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

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

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

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

नतीजा

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

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

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

इसके बारे में और पढ़ने के लिए, ये लेख पढ़ें: