इस दस्तावेज़ में बताया गया है कि क्लाइंट-साइड जियोफ़ेंसिंग क्या है, इसका इस्तेमाल कब करना चाहिए, और इसे मोबाइल ऐप्लिकेशन में इस्तेमाल के उदाहरणों पर कैसे लागू किया जाता है. इसमें यह भी बताया गया है कि Google Navigation SDK का इस्तेमाल करके, Android पर कोई उदाहरण कैसे लागू किया जाता है.
कंपनियों को अक्सर यह जानने की ज़रूरत होती है कि कोई मोबाइल डिवाइस किसी खास इलाके में कब आता है या कब जाता है. इसके लिए, वर्चुअल भौगोलिक सीमाएं या जियोफ़ेंस बनाए जाते हैं. इससे कोई डिवाइस किसी सीमा को पार करने पर, सॉफ़्टवेयर इवेंट ट्रिगर कर पाता है.
किसी वाहन के सीमा पार करने की जानकारी कई मामलों में ज़रूरी होती है. जैसे:
- ग्राहक का जुड़ाव: कारोबार, जियोफ़ेंसिंग का इस्तेमाल करके, असली उपयोगकर्ताओं को खास ऑफ़र, इवेंट या नए प्रॉडक्ट के बारे में पुश नोटिफ़िकेशन भेज सकते हैं.
- सुरक्षा: कारोबार, संवेदनशील जगहों के आस-पास वर्चुअल बाउंड्री बनाने के लिए, जियोफ़ेंसिंग का इस्तेमाल कर सकते हैं. जैसे, डेटा सेंटर या गोदाम. साथ ही, अगर कोई व्यक्ति उस जगह में प्रवेश करता है या उसे छोड़ता है, तो सुरक्षा कर्मियों को सूचना दे सकते हैं.
- परिवहन: कारोबार, वाहनों की जगह की जानकारी ट्रैक करने के लिए जियोफ़ेंसिंग का इस्तेमाल कर सकते हैं. साथ ही, रास्तों और शेड्यूल को ऑप्टिमाइज़ कर सकते हैं.
इसलिए, यह ज़रूरी है कि आपको पता हो कि क्लाइंट के लिए उपलब्ध ऐप्लिकेशन में उन ज़ोन (पॉलीगॉन) को कैसे दिखाया जाए. इस ऐप्लिकेशन को डिवाइस की जगह की जानकारी ट्रैक करनी चाहिए और यह देखना चाहिए कि क्या डिवाइस ने किसी जियोफ़ेंस का उल्लंघन किया है.
दायरा
इस दस्तावेज़ में, क्लाइंट-साइड पर जियोफ़ेंसिंग लागू करने के बारे में बताया गया है . इसका मतलब है कि क्लाइंट ऐप्लिकेशन में ये चीज़ें होनी चाहिए:
- उन पॉलीगॉन की जानकारी जिनके हिसाब से उल्लंघन की जांच करनी है;
- उपयोगकर्ता की जगह की रीयल-टाइम जानकारी
- यह लॉजिक यह पता लगाने के लिए है कि मौजूदा जगह, किसी पॉलीगॉन के अंदर है या बाहर.
इस गाइड में Android के उदाहरण शामिल हैं, लेकिन iOS पर भी ऐसा ही किया जा सकता है. Android की जगह की जानकारी देने वाली सेवा में, गोलाकार जियोफ़ेंस के लिए पहले से मौजूद सुविधा होती है. इसके बारे में यहां देखा जा सकता है. नीचे दिया गया रेफ़रंस कोड और जानकारी, ज़्यादा जटिल सेटअप के लिए शुरुआती जानकारी है.
Navigation SDK
Navigation SDK, Android / iOS की एक नेटिव लाइब्रेरी है. इसे ड्राइवर ऐप्लिकेशन में जोड़ा जाता है. यह इन कामों के लिए ज़िम्मेदार है:
- सड़क के हिसाब से जगह की जानकारी को स्नैप करने वाले ऐप्लिकेशन से जगह की जानकारी पाना. यह Android के FusedLocationProvider (FLP) से ज़्यादा सटीक है. ऐसा इसलिए, क्योंकि यह Google के सड़क नेटवर्क का इस्तेमाल करके, जगहों की जानकारी को सड़क के सबसे नज़दीकी सेगमेंट से जोड़ता है. इससे पहुंचने का अनुमानित समय ज़्यादा सटीक होता है. साथ ही, यह FLP से मिली अन्य जानकारी का भी इस्तेमाल करता है.
- मोड़-दर-मोड़ अनुभव जो ड्राइवरों को रीयल-टाइम ट्रैफ़िक और अन्य रूट पाबंदियों को ध्यान में रखते हुए पॉइंट A से पॉइंट B तक कुशलता से पहुंचने की अनुमति देता है.
- इवेंट लिसनर और रजिस्टर किए गए कॉलबैक के ज़रिए इवेंट ट्रिगर करना.
लिसनर
Navigation SDK में कई लिसनर होते हैं, जिनका इस्तेमाल किया जा सकता है. इनमें से कुछ के नाम यहां दिए गए हैं:
- RoadSnappedLocation प्रोवाइडर के ज़रिए जगह की जानकारी में बदलाव.
- ReroutingListener की मदद से, इवेंट को फिर से रूट करें. जैसे, उपयोगकर्ता यू-टर्न, बाईं ओर मुड़ने वगैरह के निर्देशों को अनदेखा करता है और सुझाए गए रास्ते से भटक जाता है.
- ArrivalListener के ज़रिए, मंज़िल पर पहुंचने से जुड़े इवेंट (उपयोगकर्ता का प्लान की गई मंज़िल पर पहुंचना).
- बची हुई दूरी और ईटीए इवेंट (ड्राइवर के मंज़िल पर पहुंचने से पहले सूचना पाएं - मीटर के आधार पर, ड्राइवर के मंज़िल पर पहुंचने से पहले सूचना पाएं - समय के आधार पर) दोनों .RemainingTimeOrDistanceChangedListener के ज़रिए उपलब्ध हैं
इस गाइड में, सिर्फ़ RoadSnappedLocationProvider और उसके LocationListener का इस्तेमाल किया गया है.
क्लाइंट-साइड जियोफ़ेंसिंग की सुविधा
अब हम क्लाइंट साइड पर जियोफ़ेंसिंग की सुविधा बनाने का तरीका जानेंगे. यहां दिए गए उदाहरण में, Navigation SDK को मोड़-दर-मोड़ मोड में काम करते हुए दिखाया गया है. साथ ही, रास्ते में एक पॉलीगॉन को दिखाया गया है, जो हमारे जियोफ़ेंस को दिखाता है.
- जियोफ़ेंस, BigQuery में सेव किए जाते हैं और आपके बैकएंड से पुल किए जाते हैं.
- बैकएंड, समय-समय पर ड्राइव ऐप्लिकेशन को जियोफ़ेंस भेजता है.
- ड्राइवर नेविगेट करता है और ड्राइवर ऐप्लिकेशन, ट्रिगर के लिए नियमित रूप से जियोफ़ेंस की जांच करता है.
- 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
जियोफ़ेंसिंग के लिए सर्वर साइड के तरीके को दिखाने वाले आर्किटेक्चर का उदाहरण.
- ड्राइवर ऐप्लिकेशन, Driver SDK का इस्तेमाल करके Fleet Engine को जगह की जानकारी के अपडेट भेजता है. जगह की जानकारी के अपडेट और ऐप्लिकेशन में नेविगेशन की सुविधा, Navigation SDK की मदद से काम करती है.
- Fleet Engine, इन अपडेट को Cloud Logging या Pub/Sub पर भेजता है.
- बैकएंड, जगह की जानकारी देने वाले उन सिग्नल को इकट्ठा करता है.
- जियोफ़ेंस को BigQuery में सेव किया जाता है, ताकि बैकएंड उनका विश्लेषण कर सके.
- जियोफ़ेंस ट्रिगर होने पर, ड्राइवर ऐप्लिकेशन को सूचनाएं भेजी जाती हैं.
इस आर्किटेक्चर में, Driver SDK और Fleet Engine का इस्तेमाल किया जाता है. Fleet Engine, PubSub अपडेट भेज सकता है और Cloud Logging में लॉग एंट्री जनरेट कर सकता है. दोनों ही मामलों में, वाहन की जगह की जानकारी वापस पाई जा सकती है.
इसके बाद, बैकएंड PubSub कतार की निगरानी कर सकता है या लॉग पढ़ सकता है और वाहन के अपडेट देख सकता है. इसके बाद, जब भी कोई अपडेट होता है (या हर कुछ सेकंड, मिनट में, अपडेट की अहमियत के हिसाब से), तो बैकएंड BigQuery GIS फ़ंक्शन को कॉल कर सकता है. इससे यह पता चलता है कि कोई वाहन जियोफ़ेंस के अंदर है या बाहर. अगर एक या इससे ज़्यादा जियोफ़ेंस का उल्लंघन हुआ है, तो बैकएंड कार्रवाई कर सकता है. साथ ही, इंटरनल पाइपलाइन या अन्य ज़रूरी वर्कफ़्लो को ट्रिगर कर सकता है.
नतीजा
जियोफ़ेंसिंग एक बेहतरीन टूल है. इसका इस्तेमाल कई कामों के लिए किया जा सकता है. कारोबार, जियोफ़ेंसिंग का इस्तेमाल करके, असली उपयोगकर्ताओं को काम के विज्ञापन और प्रमोशन दिखा सकते हैं. साथ ही, जगह के हिसाब से सेवाएं उपलब्ध करा सकते हैं. इसके अलावा, सुरक्षा को बेहतर बना सकते हैं.
Navigation SDK, काम के इवेंट लिसनर उपलब्ध कराता है. ये लिसनर, यात्रा के दौरान कई अहम पलों का पता लगा सकते हैं. कंपनियों को अक्सर इस्तेमाल के कुछ खास मामलों के लिए, कस्टम जियोफ़ेंस की ज़रूरत होती है. इस दस्तावेज़ में, हमने इसे हासिल करने का एक तरीका बताया है. हालांकि, इसे कई तरीकों से हासिल किया जा सकता है. हमें यह देखने का इंतज़ार रहेगा कि आप किस तरह का कॉन्टेंट बनाते हैं.
अगली कार्रवाइयां
- Google Maps Platform की मदद से क्या-क्या किया जा सकता है, इसके बारे में जानें, एक्सप्लोर करें, और प्रेरणा पाएं वेबिनार देखें.
इसके बारे में और पढ़ें: