# जिओफेन्सेस ![या धड्याचा स्केच नोट आढावा](../../../../../translated_images/lesson-14.63980c5150ae3c153e770fb71d044c1845dce79248d86bed9fc525adf3ede73c.mr.jpg) > स्केच नोट [नित्य नरसिंहन](https://github.com/nitya) यांनी तयार केले. मोठ्या आवृत्तीसाठी प्रतिमेवर क्लिक करा. या व्हिडिओमध्ये जिओफेन्सेस आणि Azure Maps मध्ये त्यांचा वापर कसा करायचा याचा आढावा दिला आहे, जे या धड्यात कव्हर केले जाईल: [![Microsoft Developer IoT शो मधील Azure Maps सह जिओफेन्सिंग](https://img.youtube.com/vi/nsrgYhaYNVY/0.jpg)](https://www.youtube.com/watch?v=nsrgYhaYNVY) > 🎥 व्हिडिओ पाहण्यासाठी वरील प्रतिमेवर क्लिक करा ## धड्यापूर्वीचा क्विझ [धड्यापूर्वीचा क्विझ](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/27) ## परिचय गेल्या 3 धड्यांमध्ये, तुम्ही IoT चा वापर करून तुमच्या शेतातून प्रक्रिया केंद्राकडे मालवाहतूक करणाऱ्या ट्रकचे स्थान शोधले आहे. तुम्ही GPS डेटा कॅप्चर केला, तो क्लाउडमध्ये पाठवून संग्रहित केला आणि नकाशावर व्हिज्युअलाइज केला. तुमच्या पुरवठा साखळीची कार्यक्षमता वाढवण्याचा पुढील टप्पा म्हणजे ट्रक प्रक्रिया केंद्राजवळ पोहोचण्याच्या आधी अलर्ट मिळवणे, जेणेकरून वाहन पोहोचताच फोर्कलिफ्ट्स आणि इतर उपकरणांसह आवश्यक कर्मचारी तयार असतील. यामुळे ते जलदपणे माल उतरवू शकतील आणि तुम्हाला ट्रक आणि ड्रायव्हरच्या प्रतीक्षेसाठी पैसे द्यावे लागणार नाहीत. या धड्यात तुम्ही जिओफेन्सेसबद्दल शिकाल - परिभाषित भू-आकृतिबंधीय क्षेत्रे जसे की प्रक्रिया केंद्राच्या 2 किमी मिनिटांच्या ड्राईव्हच्या आत असलेला भाग, आणि GPS निर्देशांक जिओफेन्सच्या आत किंवा बाहेर आहेत का हे कसे तपासायचे, जेणेकरून तुम्ही पाहू शकता की तुमचा GPS सेन्सर एखाद्या क्षेत्रात पोहोचला आहे किंवा तेथून बाहेर गेला आहे. या धड्यात आपण कव्हर करू: * [जिओफेन्सेस म्हणजे काय](../../../../../3-transport/lessons/4-geofences) * [जिओफेन्स परिभाषित करा](../../../../../3-transport/lessons/4-geofences) * [जिओफेन्स विरुद्ध पॉइंट्स तपासा](../../../../../3-transport/lessons/4-geofences) * [सर्व्हरलेस कोडमधून जिओफेन्सेस वापरा](../../../../../3-transport/lessons/4-geofences) > 🗑 हा प्रकल्पातील शेवटचा धडा आहे, त्यामुळे हा धडा आणि असाइनमेंट पूर्ण केल्यानंतर, तुमच्या क्लाउड सेवांची साफसफाई करायला विसरू नका. असाइनमेंट पूर्ण करण्यासाठी तुम्हाला सेवांची आवश्यकता असेल, त्यामुळे प्रथम ती पूर्ण करा. > > आवश्यक असल्यास [तुमचा प्रकल्प साफ करण्याचा मार्गदर्शक](../../../clean-up.md) पहा. ## जिओफेन्सेस म्हणजे काय जिओफेन्स म्हणजे वास्तविक जगातील भौगोलिक क्षेत्रासाठी एक आभासी परिघ आहे. जिओफेन्सेस सर्कल असू शकतात जे एका पॉइंट आणि रेडियसने परिभाषित केले जातात (उदाहरणार्थ, इमारतीभोवती 100 मीटर रुंद सर्कल), किंवा शाळेचा परिसर, शहराची सीमा, किंवा विद्यापीठ किंवा कार्यालयाचा कॅम्पस यासारख्या क्षेत्राचा समावेश असलेला बहुभुज असू शकतो. ![Microsoft कंपनी स्टोअरभोवती सर्क्युलर जिओफेन्स आणि Microsoft वेस्ट कॅम्पसभोवती बहुभुज जिओफेन्स दाखवणारे काही जिओफेन्स उदाहरणे](../../../../../translated_images/geofence-examples.172fbc534665769f6e1a1ddcf75e3b25183cd10354c80cc603ba44b635390e1a.mr.png) > 💁 तुम्ही कदाचित जिओफेन्सेसचा वापर आधीच केला असेल, पण तुम्हाला त्याची जाणीव नसेल. जर तुम्ही iOS रिमाइंडर्स अॅप किंवा Google Keep वापरून लोकेशनवर आधारित रिमाइंडर सेट केला असेल, तर तुम्ही जिओफेन्स वापरला आहे. या अॅप्स लोकेशनवर आधारित जिओफेन्स सेट करतात आणि तुमचा फोन जिओफेन्समध्ये प्रवेश करताच तुम्हाला अलर्ट देतात. जिओफेन्सेस वापरण्याची अनेक कारणे असू शकतात: * माल उतरवण्यासाठी तयारी - वाहन साइटवर पोहोचल्याचा नोटिफिकेशन मिळाल्याने कर्मचारी वाहन उतरवण्यासाठी तयार होऊ शकतात, ज्यामुळे वाहनाची प्रतीक्षा वेळ कमी होते. यामुळे ड्रायव्हर कमी प्रतीक्षा वेळेसह एका दिवसात अधिक डिलिव्हरी करू शकतो. * कर अनुपालन - काही देशांमध्ये, जसे की न्यूझीलंड, सार्वजनिक रस्त्यांवर केवळ वाहन चालवताना वाहनाच्या वजनावर आधारित डिझेल वाहनांसाठी रस्ते कर आकारले जातात. जिओफेन्सेसचा वापर करून तुम्ही सार्वजनिक रस्त्यांवर चालवलेले अंतर ट्रॅक करू शकता, खाजगी रस्त्यांवर चालवलेले अंतर जसे की शेत किंवा लाकूडतोड क्षेत्रांवर. * चोरीचे निरीक्षण - जर वाहन केवळ एका विशिष्ट क्षेत्रात राहायला हवे असेल जसे की शेतावर, आणि ते जिओफेन्सच्या बाहेर गेले असेल, तर ते चोरीला गेले असावे. * लोकेशन अनुपालन - कामाच्या साइटचा काही भाग, शेत किंवा कारखाना काही वाहनांसाठी बंद असू शकतो, जसे की कृत्रिम खत आणि कीटकनाशके वाहून नेणाऱ्या वाहनांना सेंद्रिय उत्पादन वाढवणाऱ्या शेतांपासून दूर ठेवणे. जर जिओफेन्समध्ये प्रवेश केला असेल, तर वाहन अनुपालनाच्या बाहेर आहे आणि ड्रायव्हरला सूचित केले जाऊ शकते. ✅ तुम्ही जिओफेन्सेससाठी इतर कोणते उपयोग विचार करू शकता? Azure Maps, ज्याचा तुम्ही मागील धड्यात GPS डेटा व्हिज्युअलाइज करण्यासाठी वापर केला होता, तुम्हाला जिओफेन्सेस परिभाषित करण्याची परवानगी देते, आणि नंतर पॉइंट जिओफेन्सच्या आत किंवा बाहेर आहे का हे तपासण्याची परवानगी देते. ## जिओफेन्स परिभाषित करा जिओफेन्सेस GeoJSON वापरून परिभाषित केले जातात, मागील धड्यात नकाशावर जोडलेल्या पॉइंट्ससारखेच. या प्रकरणात, `Point` मूल्यांच्या `FeatureCollection` ऐवजी, हे `Polygon` असलेल्या `FeatureCollection` आहे. ```json { "type": "FeatureCollection", "features": [ { "type": "Feature", "geometry": { "type": "Polygon", "coordinates": [ [ [ -122.13393688201903, 47.63829579223815 ], [ -122.13389128446579, 47.63782047131512 ], [ -122.13240802288054, 47.63783312249837 ], [ -122.13238388299942, 47.63829037035086 ], [ -122.13393688201903, 47.63829579223815 ] ] ] }, "properties": { "geometryId": "1" } } ] } ``` बहुभुजावरील प्रत्येक पॉइंट लांबी, अक्षांश जोड्यांमध्ये परिभाषित केला जातो आणि ही पॉइंट्स `coordinates` म्हणून सेट केलेल्या अॅरेमध्ये असतात. मागील धड्यात `Point` साठी, `coordinates` मध्ये अक्षांश आणि लांबी असलेले 2 मूल्य असलेले अॅरे होते, `Polygon` साठी, ते अॅरेमध्ये अॅरे असते ज्यामध्ये लांबी, अक्षांश असलेले 2 मूल्य असते. > 💁 लक्षात ठेवा, GeoJSON पॉइंट्ससाठी `longitude, latitude` वापरते, `latitude, longitude` नाही. बहुभुज समन्वय अॅरेमध्ये बहुभुजावरील पॉइंट्सच्या संख्येपेक्षा नेहमी 1 अधिक नोंदी असतात, शेवटची नोंद पहिल्यासारखीच असते, बहुभुज बंद करते. उदाहरणार्थ, आयतासाठी 5 पॉइंट्स असतील. ![समन्वयांसह आयत](../../../../../translated_images/polygon-points.302193da381cb415f46c2c7a98496ee4be05d6c73d21238a89721ad93e121233.mr.png) वरील प्रतिमेत, एक आयत आहे. बहुभुज समन्वय वरच्या डाव्या बाजूला 47,-122 वर सुरू होतो, नंतर उजवीकडे 47,-121 वर जातो, नंतर खाली 46,-121 वर जातो, नंतर उजवीकडे 46, -122 वर जातो, नंतर सुरुवातीच्या पॉइंटवर परत वरच्या डाव्या बाजूला 47, -122 वर जातो. यामुळे बहुभुजाला 5 पॉइंट्स मिळतात - वरचा डावा, वरचा उजवा, खालचा उजवा, खालचा डावा, नंतर वरचा डावा बंद करण्यासाठी. ✅ तुमच्या घराभोवती किंवा शाळाभोवती GeoJSON बहुभुज तयार करण्याचा प्रयत्न करा. [GeoJSON.io](https://geojson.io/) सारखे टूल वापरा. ### कार्य - जिओफेन्स परिभाषित करा Azure Maps मध्ये जिओफेन्स वापरण्यासाठी, प्रथम ते तुमच्या Azure Maps खात्यात अपलोड करावे लागेल. अपलोड केल्यानंतर, तुम्हाला एक अद्वितीय ID मिळेल ज्याचा वापर तुम्ही जिओफेन्स विरुद्ध पॉइंट तपासण्यासाठी करू शकता. Azure Maps मध्ये जिओफेन्सेस अपलोड करण्यासाठी, तुम्हाला नकाशे वेब API वापरावे लागेल. तुम्ही [curl](https://curl.se) नावाच्या टूलचा वापर करून Azure Maps वेब API कॉल करू शकता. > 🎓 Curl हे वेब एंडपॉइंट्स विरुद्ध विनंत्या करण्यासाठी कमांड लाइन टूल आहे 1. जर तुम्ही Linux, macOS, किंवा Windows 10 ची अलीकडील आवृत्ती वापरत असाल तर तुमच्याकडे curl आधीच इंस्टॉल केलेले असण्याची शक्यता आहे. तुमच्या टर्मिनल किंवा कमांड लाइनवरून खालील चालवा: ```sh curl --version ``` जर तुम्हाला curl साठी आवृत्ती माहिती दिसत नसेल, तर तुम्हाला [curl डाउनलोड पृष्ठ](https://curl.se/download.html) वरून ते इंस्टॉल करावे लागेल. > 💁 जर तुम्हाला Postman चा अनुभव असेल, तर तुम्ही ते वापरणे पसंत करू शकता. 1. बहुभुज असलेली GeoJSON फाइल तयार करा. तुम्ही तुमच्या GPS सेन्सरचा वापर करून हे तपासणार आहात, त्यामुळे तुमच्या सध्याच्या स्थानाभोवती बहुभुज तयार करा. तुम्ही दिलेल्या GeoJSON उदाहरण संपादित करून एक मॅन्युअली तयार करू शकता किंवा [GeoJSON.io](https://geojson.io/) सारखे टूल वापरू शकता. GeoJSON मध्ये `FeatureCollection` असणे आवश्यक आहे, ज्यामध्ये `geometry` प्रकार `Polygon` असलेले `Feature` आहे. तुम्ही **मस्ट** `geometry` घटकाच्या समान स्तरावर `properties` घटक देखील जोडला पाहिजे, आणि यात `geometryId` असणे आवश्यक आहे: ```json "properties": { "geometryId": "1" } ``` जर तुम्ही [GeoJSON.io](https://geojson.io/) वापरत असाल, तर तुम्हाला JSON फाइल डाउनलोड केल्यानंतर किंवा अॅपमधील JSON संपादकात रिक्त `properties` घटकात हा आयटम मॅन्युअली जोडावा लागेल. या `geometryId` नेहमी या फाइलमध्ये अद्वितीय असणे आवश्यक आहे. तुम्ही एकाच GeoJSON फाइलमध्ये `FeatureCollection` मधील एकाधिक `Features` म्हणून एकाधिक जिओफेन्सेस अपलोड करू शकता, जोपर्यंत प्रत्येकामध्ये वेगळा `geometryId` आहे. जर वेगळ्या फाइलमधून वेगळ्या वेळी अपलोड केले गेले तर बहुभुजांमध्ये समान `geometryId` असू शकतो. 1. ही फाइल `geofence.json` म्हणून सेव्ह करा आणि ती जिथे सेव्ह केली आहे तिथे तुमच्या टर्मिनल किंवा कन्सोलमध्ये जा. 1. खालील curl कमांड चालवून GeoFence तयार करा: ```sh curl --request POST 'https://atlas.microsoft.com/mapData/upload?api-version=1.0&dataFormat=geojson&subscription-key=' \ --header 'Content-Type: application/json' \ --include \ --data @geofence.json ``` URL मधील `` तुमच्या Azure Maps खात्यासाठी API कीने बदला. URL नकाशा डेटा अपलोड करण्यासाठी `https://atlas.microsoft.com/mapData/upload` API वापरते. कॉलमध्ये `api-version` पॅरामीटर समाविष्ट आहे जे Azure Maps API चा कोणता आवृत्ती वापरायचा ते निर्दिष्ट करते, हे API वेळोवेळी बदलू शकते परंतु मागील सुसंगतता राखते. अपलोड केलेल्या डेटा स्वरूप `geojson` म्हणून सेट केले आहे. हे POST विनंती अपलोड API वर चालवेल आणि प्रतिसाद हेडर्सची यादी परत करेल ज्यामध्ये `location` नावाचा हेडर समाविष्ट आहे. ```output content-type: application/json location: https://us.atlas.microsoft.com/mapData/operations/1560ced6-3a80-46f2-84b2-5b1531820eab?api-version=1.0 x-ms-azuremaps-region: West US 2 x-content-type-options: nosniff strict-transport-security: max-age=31536000; includeSubDomains x-cache: CONFIG_NOCACHE date: Sat, 22 May 2021 21:34:57 GMT content-length: 0 ``` > 🎓 वेब एंडपॉइंट कॉल करताना, तुम्ही कॉलला पॅरामीटर पास करू शकता `?` जोडून की व्हॅल्यू जोड्या `key=value` म्हणून, की व्हॅल्यू जोड्या `&` ने विभक्त करून. 1. Azure Maps हे त्वरित प्रक्रिया करत नाही, त्यामुळे तुम्हाला अपलोड विनंती पूर्ण झाली आहे का ते तपासण्यासाठी `location` हेडरमध्ये दिलेल्या URL वापरून तपासावे लागेल. या स्थान URL च्या शेवटी तुमची सबस्क्रिप्शन की जोडावी लागेल, `&subscription-key=` जोडून, `` तुमच्या Azure Maps खात्यासाठी API कीने बदला. खालील कमांड चालवा: ```sh curl --request GET '&subscription-key=' ``` `` हेडरच्या मूल्याने बदला आणि `` तुमच्या Azure Maps खात्यासाठी API कीने बदला. 1. प्रतिसादातील `status` चे मूल्य तपासा. जर ते `Succeeded` नसेल, तर एक मिनिट थांबा आणि पुन्हा प्रयत्न करा. 1. एकदा `status` `Succeeded` म्हणून परत आल्यावर, प्रतिसादातील `resourceLocation` पहा. यात GeoJSON ऑब्जेक्टसाठी अद्वितीय ID (UDID) चा तपशील आहे. UDID हे `metadata/` नंतरचे मूल्य आहे, आणि `api-version` समाविष्ट नाही. उदाहरणार्थ, जर `resourceLocation` असे असेल: ```json { "resourceLocation": "https://us.atlas.microsoft.com/mapData/metadata/7c3776eb-da87-4c52-ae83-caadf980323a?api-version=1.0" } ``` तर UDID असेल `7c3776eb-da87-4c52-ae83-caadf980323a`. या UDID ची प्रत ठेवा कारण तुम्हाला जिओफेन्स तपासण्यासाठी त्याची आवश्यकता असेल. ## जिओफेन्स विरुद्ध पॉइंट्स तपासा एकदा बहुभुज Azure Maps मध्ये अपलोड झाल्यानंतर, तुम्ही पॉइंट जिओफेन्सच्या आत किंवा बाहेर आहे का ते तपासू शकता. तुम्ही जिओफेन्सचा UDID आणि तपासण्यासाठी पॉइंटचा अक्षांश आणि लांबी पास करून वेब API विनंती करून हे करू शकता. जेव्हा तुम्ही ही विनंती करता, तेव्हा तुम्ही `searchBuffer` नावाचे मूल्य देखील पास करू शकता. हे Maps API ला परिणाम परत करताना किती अचूक असावे ते सांगते. याचे कारण म्हणजे GPS पूर्णपणे अचूक नाही, आणि कधीकधी स्थान मीटरने किंवा त्याहून अधिक चुकीचे असू शकते. `searchBuffer` साठी डीफॉल्ट 50m आहे, परंतु तुम्ही 0m ते 500m पर्यंत मूल्ये सेट करू शकता. API कॉलमधून परिणाम परत आल्यावर, परिणामांपैकी एक भाग `distance` असतो जो जिओफेन्सच्या काठावर सर्वात जवळच्या पॉइंटपर्यंत मोजला जातो, पॉइंट जिओफेन्सच्या बाहेर असल्यास सकारात्मक मूल्य, आत असल्यास नकारात्मक मूल्य. जर हे अंतर `searchBuffer` पेक्षा कमी असेल, तर वास्तविक अंतर मीटरमध्ये परत केले जाते, अन्यथा मूल्य 999 किंवा -999 असते. 999 म्हणजे पॉइंट जिओफेन्सच्या बाहेर `searchBuffer` पेक्षा जास्त आहे, -999 म्हणजे पॉइंट जिओफेन्सच्या आत `searchBuffer` पेक्षा जास्त आहे. ![जिओफेन्सभोवती 50m सर्च बफर](../../../../../translated_images/search-buffer-and-distance.e6a79af3898183c7b2ef6fbf12271b8b34afd23969bb946962b1b18d3d2635e8.mr.png) वरील प्रतिमेत, जिओफेन्सभोवती 50m सर्च बफर आहे. * जिओफेन्सच्या मध्यभागी असलेला पॉइंट, सर्च बफरच्या आत चांगल्या प्रकारे आहे, त्याचे अंतर **-999** आहे. * सर्च बफरच्या बाहेर असलेला पॉइंट, त्याचे अंतर **999** आहे. * जिओफेन्सच्या आत आणि सर्च बफरच्या आत असलेला पॉइंट, जिओफेन्सपासून 6m अंतरावर आहे, त्याचे अंतर **6m** आहे. * जिओफेन्सच्या बाहेर आणि सर्च बफरच्या आत असलेला पॉइंट, जिओफेन्सपासून 39m अंतरावर आहे, त्याचे अंतर **39m** आहे. जिओफेन्सच्या काठावर अंतर जाणून घेणे महत्त्वाचे आहे, आणि वाहनाच्या स्थानावर आधारित निर्णय घेताना इतर माहिती जसे की इतर GPS रीडिंग्स, वेग आणि रस्त्याचा डेटा यासह एकत्रित करणे महत्त्वाचे आहे. उदाहरणार्थ, कल्पना करा GPS रीडिंग्स वाहन एका रस्त्यावर चालत असल्याचे दर्शविते जो शेवटी जिओफेन्सच्या शेजारी धावत आहे. जर एकच GPS मूल्य अचूक नसून वाहन जिओफेन्सच्या आत ठेवले, जरी तेथे वाहन प्रवेश नसला तरी, ते दुर्लक्षित केले जाऊ शकते. ![Microsoft कॅ वरील प्रतिमेत Microsoft कॅम्पसच्या एका भागावर एक जिओफेन्स आहे. लाल रेषा 520 वरून जाणाऱ्या ट्रकचा मार्ग दाखवते, ज्यामध्ये GPS रीडिंग दाखवण्यासाठी वर्तुळे आहेत. यातील बहुतेक रीडिंग अचूक आहेत आणि 520 वर आहेत, परंतु एक चुकीचे रीडिंग जिओफेन्सच्या आत आहे. हे रीडिंग योग्य असू शकत नाही - ट्रक अचानक 520 वरून कॅम्पसवर वळून पुन्हा 520 वर परत येण्यासाठी कोणतेही रस्ते नाहीत. जिओफेन्स तपासणारा कोड परिणामांवर कृती करण्यापूर्वी मागील रीडिंग विचारात घेणे आवश्यक आहे. ✅ GPS रीडिंग योग्य मानले जाऊ शकते का हे तपासण्यासाठी तुम्हाला कोणते अतिरिक्त डेटा आवश्यक आहेत? ### कार्य - जिओफेन्सवर पॉइंट्स तपासा 1. वेब API क्वेरीसाठी URL तयार करण्यास सुरुवात करा. स्वरूप असे आहे: ```output https://atlas.microsoft.com/spatial/geofence/json?api-version=1.0&deviceId=gps-sensor&subscription-key=&udid=&lat=&lon= ``` `` ला तुमच्या Azure Maps खात्यासाठी API कीने बदला. `` ला मागील कार्यातील जिओफेन्सचा UDID ने बदला. `` आणि `` ला तुम्हाला तपासायचे असलेले अक्षांश आणि रेखांश ने बदला. हा URL `https://atlas.microsoft.com/spatial/geofence/json` API वापरतो जो GeoJSON वापरून परिभाषित केलेल्या जिओफेन्सवर क्वेरी करतो. तो `1.0` API आवृत्तीला लक्ष्य करतो. `deviceId` पॅरामीटर आवश्यक आहे आणि अक्षांश व रेखांश ज्या डिव्हाइसवरून आले आहेत त्याचे नाव असावे. डिफॉल्ट शोध बफर 50m आहे, आणि तुम्ही `searchBuffer=` हा अतिरिक्त पॅरामीटर पास करून `` ला मीटरमध्ये शोध बफर अंतर सेट करून बदलू शकता, 0 ते 500 पर्यंत. 1. curl वापरून या URL वर GET विनंती करा: ```sh curl --request GET '' ``` > 💁 जर तुम्हाला `BadRequest` प्रतिसाद कोड मिळाला, ज्यामध्ये खालील त्रुटी असेल: > > ```output > Invalid GeoJSON: All feature properties should contain a geometryId, which is used for identifying the geofence. > ``` > > तर तुमच्या GeoJSON मध्ये `properties` विभाग `geometryId` सह गहाळ आहे. तुम्हाला तुमचा GeoJSON दुरुस्त करावा लागेल, नंतर वर दिलेली पावले पुन्हा करावी लागतील आणि नवीन UDID मिळवावा लागेल. 1. प्रतिसादामध्ये `geometries` ची यादी असेल, GeoJSON वापरून तयार केलेल्या जिओफेन्समधील प्रत्येक बहुभुजासाठी एक. प्रत्येक geometry मध्ये 3 महत्त्वाचे फील्ड असतात, `distance`, `nearestLat` आणि `nearestLon`. ```output { "geometries": [ { "deviceId": "gps-sensor", "udId": "7c3776eb-da87-4c52-ae83-caadf980323a", "geometryId": "1", "distance": 999.0, "nearestLat": 47.645875, "nearestLon": -122.142713 } ], "expiredGeofenceGeometryId": [], "invalidPeriodGeofenceGeometryId": [] } ``` * `nearestLat` आणि `nearestLon` हे जिओफेन्सच्या कडेला असलेल्या बिंदूचे अक्षांश आणि रेखांश आहेत जे तपासल्या जाणाऱ्या स्थानाच्या सर्वात जवळ आहेत. * `distance` हे तपासल्या जाणाऱ्या स्थानापासून जिओफेन्सच्या कडेला असलेल्या सर्वात जवळच्या बिंदूपर्यंतचे अंतर आहे. नकारात्मक संख्या म्हणजे जिओफेन्सच्या आत, सकारात्मक बाहेर. ही किंमत 50 (डिफॉल्ट शोध बफर) पेक्षा कमी असेल, किंवा 999. 1. जिओफेन्सच्या आत आणि बाहेर असलेल्या स्थानांसह हे अनेक वेळा पुन्हा करा. ## सर्व्हरलेस कोडमधून जिओफेन्स वापरा आता तुम्ही तुमच्या Functions अ‍ॅपमध्ये नवीन ट्रिगर जोडू शकता ज्यामुळे IoT Hub GPS इव्हेंट डेटा जिओफेन्सशी तपासला जाईल. ### ग्राहक गट मागील धड्यांमधून तुम्हाला आठवत असेल, IoT Hub तुम्हाला हबद्वारे प्राप्त झालेल्या परंतु प्रक्रिया न केलेल्या इव्हेंट्स पुन्हा प्ले करण्याची परवानगी देतो. परंतु जर एकाधिक ट्रिगर कनेक्ट झाले तर काय होईल? त्याला कसे कळेल की कोणत्या इव्हेंट्स प्रक्रिया केल्या आहेत. उत्तर आहे, ते शक्य नाही! त्याऐवजी तुम्ही इव्हेंट्स वाचण्यासाठी अनेक स्वतंत्र कनेक्शन परिभाषित करू शकता, आणि प्रत्येक कनेक्शन न वाचलेल्या संदेशांचे पुनरावलोकन व्यवस्थापित करू शकते. यांना *ग्राहक गट* म्हणतात. जेव्हा तुम्ही एंडपॉइंटशी कनेक्ट करता, तेव्हा तुम्ही कोणत्या ग्राहक गटाशी कनेक्ट करायचे आहे ते निर्दिष्ट करू शकता. तुमच्या अ‍ॅप्लिकेशनचा प्रत्येक घटक वेगळ्या ग्राहक गटाशी कनेक्ट होईल. ![एक IoT Hub ज्यामध्ये 3 ग्राहक गट एकाच संदेशांना 3 वेगवेगळ्या Functions अ‍ॅप्समध्ये वितरित करत आहेत](../../../../../translated_images/consumer-groups.a3262e26fc27ba2092863678ad57af15c7223416e388a23f330c058cf4358630.mr.png) सिद्धांततः प्रत्येक ग्राहक गटाशी 5 अ‍ॅप्लिकेशन्सपर्यंत कनेक्ट होऊ शकतात, आणि त्यांना संदेश मिळतील जेव्हा ते येतील. प्रत्येक ग्राहक गटाला फक्त एक अ‍ॅप्लिकेशन प्रवेश देणे ही सर्वोत्तम पद्धत आहे जेणेकरून डुप्लिकेट संदेश प्रक्रिया टाळता येईल, आणि सर्व संदेश योग्यरित्या प्रक्रिया होईपर्यंत पुन्हा सुरू करता येईल. उदाहरणार्थ, जर तुम्ही तुमचे Functions अ‍ॅप स्थानिक पातळीवर लॉन्च केले तसेच ते क्लाउडमध्ये चालवले, तर ते दोन्ही संदेश प्रक्रिया करतील, ज्यामुळे स्टोरेज खात्यात डुप्लिकेट ब्लॉब्स संग्रहित होतील. जर तुम्ही IoT Hub ट्रिगरसाठी तयार केलेल्या `function.json` फाइलचे पुनरावलोकन केले तर तुम्हाला इव्हेंट हब ट्रिगर बाइंडिंग विभागात ग्राहक गट दिसेल: ```json "consumerGroup": "$Default" ``` जेव्हा तुम्ही IoT Hub तयार करता, तेव्हा तुम्हाला `$Default` ग्राहक गट डिफॉल्टने तयार होतो. जर तुम्हाला अतिरिक्त ट्रिगर जोडायचा असेल, तर तुम्ही नवीन ग्राहक गट वापरून हे करू शकता. > 💁 या धड्यात, तुम्ही GPS डेटा संग्रहित करण्यासाठी वापरलेल्या फंक्शनपेक्षा जिओफेन्स तपासण्यासाठी वेगळे फंक्शन वापरणार आहात. हे ग्राहक गट कसे वापरायचे आणि कोड वेगळे करून वाचणे आणि समजणे सोपे कसे करायचे हे दाखवण्यासाठी आहे. उत्पादन अ‍ॅप्लिकेशनमध्ये तुम्ही हे अनेक प्रकारे आर्किटेक्ट करू शकता - दोन्ही एका फंक्शनवर ठेवणे, स्टोरेज खात्यावर ट्रिगर वापरून जिओफेन्स तपासण्यासाठी फंक्शन चालवणे, किंवा अनेक फंक्शन्स वापरणे. 'योग्य मार्ग' नाही, हे तुमच्या अ‍ॅप्लिकेशनच्या उर्वरित भागावर आणि तुमच्या गरजांवर अवलंबून आहे. ### कार्य - नवीन ग्राहक गट तयार करा 1. तुमच्या IoT Hub साठी `geofence` नावाचा नवीन ग्राहक गट तयार करण्यासाठी खालील कमांड चालवा: ```sh az iot hub consumer-group create --name geofence \ --hub-name ``` `` ला तुम्ही तुमच्या IoT Hub साठी वापरलेले नाव बदला. 1. IoT Hub साठी सर्व ग्राहक गट पाहायचे असल्यास, खालील कमांड चालवा: ```sh az iot hub consumer-group list --output table \ --hub-name ``` `` ला तुम्ही तुमच्या IoT Hub साठी वापरलेले नाव बदला. हे सर्व ग्राहक गटांची यादी करेल. ```output Name ResourceGroup -------- --------------- $Default gps-sensor geofence gps-sensor ``` > 💁 जेव्हा तुम्ही मागील धडात IoT Hub इव्हेंट मॉनिटर चालवले, तेव्हा ते `$Default` ग्राहक गटाशी कनेक्ट झाले. यामुळे तुम्ही इव्हेंट मॉनिटर आणि इव्हेंट ट्रिगर चालवू शकत नाही. जर तुम्हाला दोन्ही चालवायचे असतील, तर तुम्ही तुमच्या सर्व फंक्शन अ‍ॅप्ससाठी इतर ग्राहक गट वापरू शकता, आणि `$Default` इव्हेंट मॉनिटरसाठी ठेवू शकता. ### कार्य - नवीन IoT Hub ट्रिगर तयार करा 1. मागील धडात तयार केलेल्या `gps-trigger` फंक्शन अ‍ॅपमध्ये नवीन IoT Hub इव्हेंट ट्रिगर जोडा. या फंक्शनला `geofence-trigger` म्हणा. > ⚠️ [प्रोजेक्ट 2, धडा 5 मधील IoT Hub इव्हेंट ट्रिगर तयार करण्याच्या सूचना आवश्यक असल्यास](../../../2-farm/lessons/5-migrate-application-to-the-cloud/README.md#create-an-iot-hub-event-trigger) संदर्भ घ्या. 1. `function.json` फाइलमध्ये IoT Hub कनेक्शन स्ट्रिंग कॉन्फिगर करा. `local.settings.json` सर्व ट्रिगर्समध्ये सामायिक आहे. 1. `function.json` फाइलमध्ये `consumerGroup` चे मूल्य नवीन `geofence` ग्राहक गटाचा संदर्भ देण्यासाठी अपडेट करा: ```json "consumerGroup": "geofence" ``` 1. तुम्हाला या ट्रिगरमध्ये तुमच्या Azure Maps खात्यासाठी सबस्क्रिप्शन की वापरावी लागेल, त्यामुळे `local.settings.json` फाइलमध्ये `MAPS_KEY` नावाचा नवीन एंट्री जोडा. 1. Functions अ‍ॅप चालवा आणि ते कनेक्ट होत आहे आणि संदेश प्रक्रिया करत आहे याची खात्री करा. मागील धडातील `iot-hub-trigger` देखील चालेल आणि स्टोरेजमध्ये ब्लॉब्स अपलोड करेल. > ब्लॉब स्टोरेजमध्ये डुप्लिकेट GPS रीडिंग टाळण्यासाठी, तुम्ही क्लाउडमध्ये चालू असलेले Functions अ‍ॅप थांबवू शकता. हे करण्यासाठी, खालील कमांड वापरा: > > ```sh > az functionapp stop --resource-group gps-sensor \ > --name > ``` > > `` ला तुम्ही तुमच्या Functions अ‍ॅपसाठी वापरलेले नाव बदला. > > तुम्ही नंतर खालील कमांड वापरून ते पुन्हा सुरू करू शकता: > > ```sh > az functionapp start --resource-group gps-sensor \ > --name > ``` > > `` ला तुम्ही तुमच्या Functions अ‍ॅपसाठी वापरलेले नाव बदला. ### कार्य - ट्रिगरमधून जिओफेन्स तपासा या धडाच्या सुरुवातीला तुम्ही जिओफेन्स क्वेरी करण्यासाठी curl वापरले होते, ज्यामुळे बिंदू आत किंवा बाहेर आहे का हे तपासता येते. तुम्ही तुमच्या ट्रिगरमधून समान वेब विनंती करू शकता. 1. जिओफेन्स क्वेरी करण्यासाठी तुम्हाला त्याचा UDID आवश्यक आहे. `local.settings.json` फाइलमध्ये `GEOFENCE_UDID` नावाचा नवीन एंट्री जोडा. 1. नवीन `geofence-trigger` ट्रिगरमधील `__init__.py` फाइल उघडा. 1. फाइलच्या शीर्षस्थानी खालील आयात जोडा: ```python import json import os import requests ``` `requests` पॅकेज तुम्हाला वेब API कॉल करण्यास अनुमती देते. Azure Maps मध्ये Python SDK नाही, तुम्हाला Python कोडमधून वापरण्यासाठी वेब API कॉल करावे लागतील. 1. `main` पद्धतीच्या सुरुवातीला खालील 2 ओळी जोडा ज्यामुळे Maps सबस्क्रिप्शन की मिळेल: ```python maps_key = os.environ['MAPS_KEY'] geofence_udid = os.environ['GEOFENCE_UDID'] ``` 1. `for event in events` लूपमध्ये, प्रत्येक इव्हेंटमधून अक्षांश आणि रेखांश मिळवण्यासाठी खालील कोड जोडा: ```python event_body = json.loads(event.get_body().decode('utf-8')) lat = event_body['gps']['lat'] lon = event_body['gps']['lon'] ``` हा कोड इव्हेंट बॉडीमधील JSON ला डिक्शनरीमध्ये रूपांतरित करतो, नंतर `gps` फील्डमधून `lat` आणि `lon` काढतो. 1. `requests` वापरताना, curl वापरून जसे तुम्ही लांब URL तयार केले होते तसे न करता, तुम्ही फक्त URL भाग वापरू शकता आणि पॅरामीटर्स डिक्शनरी म्हणून पास करू शकता. URL कॉल करण्यासाठी आणि पॅरामीटर्स कॉन्फिगर करण्यासाठी खालील कोड जोडा: ```python url = 'https://atlas.microsoft.com/spatial/geofence/json' params = { 'api-version': 1.0, 'deviceId': 'gps-sensor', 'subscription-key': maps_key, 'udid' : geofence_udid, 'lat' : lat, 'lon' : lon } ``` `params` डिक्शनरीमधील आयटम्स वेब API curl वापरून कॉल करताना तुम्ही वापरलेल्या की व्हॅल्यू जोड्यांशी जुळतील. 1. वेब API कॉल करण्यासाठी खालील ओळींचा कोड जोडा: ```python response = requests.get(url, params=params) response_body = json.loads(response.text) ``` हे URL पॅरामीटर्ससह कॉल करते, आणि प्रतिसाद ऑब्जेक्ट परत मिळवते. 1. याखालील कोड जोडा: ```python distance = response_body['geometries'][0]['distance'] if distance == 999: logging.info('Point is outside geofence') elif distance > 0: logging.info(f'Point is just outside geofence by a distance of {distance}m') elif distance == -999: logging.info(f'Point is inside geofence') else: logging.info(f'Point is just inside geofence by a distance of {distance}m') ``` हा कोड 1 geometry गृहीत धरतो, आणि त्या सिंगल geometry मधून distance काढतो. त्यानंतर distance वर आधारित वेगवेगळ्या संदेशांची लॉगिंग करते. 1. हा कोड चालवा. तुम्हाला लॉगिंग आउटपुटमध्ये GPS निर्देशांक जिओफेन्सच्या आत किंवा बाहेर आहेत का हे दिसेल, बिंदू 50m आत असल्यास distance सह. तुमच्या GPS सेन्सरच्या स्थानावर आधारित वेगवेगळ्या जिओफेन्ससह हा कोड वापरून पहा, सेन्सर हलवून (उदाहरणार्थ मोबाइल फोनच्या WiFi वरून जोडलेले, किंवा व्हर्च्युअल IoT डिव्हाइसवर वेगळ्या निर्देशांकांसह) हे बदल पहा. 1. जेव्हा तुम्ही तयार असाल, तेव्हा हा कोड क्लाउडमधील तुमच्या Functions अ‍ॅपवर तैनात करा. नवीन Application Settings तैनात करायला विसरू नका. > ⚠️ [प्रोजेक्ट 2, धडा 5 मधील Application Settings अपलोड करण्याच्या सूचना आवश्यक असल्यास](../../../2-farm/lessons/5-migrate-application-to-the-cloud/README.md#task---upload-your-application-settings) संदर्भ घ्या. > ⚠️ [प्रोजेक्ट 2, धडा 5 मधील Functions अ‍ॅप तैनात करण्याच्या सूचना आवश्यक असल्यास](../../../2-farm/lessons/5-migrate-application-to-the-cloud/README.md#task---deploy-your-functions-app-to-the-cloud) संदर्भ घ्या. > 💁 तुम्हाला हा कोड [code/functions](../../../../../3-transport/lessons/4-geofences/code/functions) फोल्डरमध्ये सापडेल. --- ## 🚀 आव्हान या धडात तुम्ही एक बहुभुज असलेल्या GeoJSON फाइलचा वापर करून एक जिओफेन्स जोडला. तुम्ही एकाच वेळी अनेक बहुभुज अपलोड करू शकता, जोपर्यंत `properties` विभागातील `geometryId` मूल्ये वेगवेगळी आहेत. अनेक बहुभुज असलेली GeoJSON फाइल अपलोड करण्याचा प्रयत्न करा आणि GPS निर्देशांक कोणत्या बहुभुजाच्या सर्वात जवळ किंवा आत आहेत हे शोधण्यासाठी तुमचा कोड समायोजित करा. ## धडानंतरचा क्विझ [धडानंतरचा क्विझ](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/28) ## पुनरावलोकन आणि स्व-अभ्यास * जिओफेन्स आणि त्यांचे काही उपयोग याबद्दल अधिक वाचा [विकिपीडियाच्या जिओफेन्स पृष्ठावर](https://en.wikipedia.org/wiki/Geo-fence). * Azure Maps जिओफेन्सिंग API बद्दल अधिक वाचा [Microsoft Azure Maps Spatial - Get Geofence दस्तऐवजावर](https://docs.microsoft.com/rest/api/maps/spatial/getgeofence?WT.mc_id=academic-17441-jabenn). * ग्राहक गटांबद्दल अधिक वाचा [Microsoft Docs वरील Azure Event Hubs - Event Consumers दस्तऐवजातील वैशिष्ट्ये आणि शब्दावली](https://docs.microsoft.com/azure/event-hubs/event-hubs-features?WT.mc_id=academic-17441-jabenn#event-consumers). ## असाइनमेंट [Twilio वापरून सूचना पाठवा](assignment.md) --- **अस्वीकरण**: हा दस्तऐवज AI भाषांतर सेवा [Co-op Translator](https://github.com/Azure/co-op-translator) चा वापर करून भाषांतरित करण्यात आला आहे. आम्ही अचूकतेसाठी प्रयत्नशील असलो तरी कृपया लक्षात ठेवा की स्वयंचलित भाषांतरे त्रुटी किंवा अचूकतेच्या अभावाने युक्त असू शकतात. मूळ भाषेतील दस्तऐवज हा अधिकृत स्रोत मानला जावा. महत्त्वाच्या माहितीसाठी व्यावसायिक मानवी भाषांतराची शिफारस केली जाते. या भाषांतराचा वापर करून उद्भवलेल्या कोणत्याही गैरसमज किंवा चुकीच्या अर्थासाठी आम्ही जबाबदार राहणार नाही.