56 KiB
जियोफेंस
स्केच नोट नित्या नरसिम्हन द्वारा। बड़े संस्करण के लिए छवि पर क्लिक करें।
यह वीडियो जियोफेंस और Azure Maps में उनका उपयोग करने के तरीके का अवलोकन देता है, जो इस पाठ में कवर किए जाएंगे:
🎥 वीडियो देखने के लिए ऊपर दी गई छवि पर क्लिक करें
पूर्व-पाठ प्रश्नोत्तरी
परिचय
पिछले 3 पाठों में, आपने IoT का उपयोग करके अपने खेत से प्रसंस्करण केंद्र तक उत्पाद ले जाने वाले ट्रकों का पता लगाया। आपने GPS डेटा कैप्चर किया, इसे क्लाउड में संग्रहीत किया, और इसे मानचित्र पर विज़ुअलाइज़ किया। आपकी आपूर्ति श्रृंखला की दक्षता बढ़ाने का अगला कदम यह है कि जब ट्रक प्रसंस्करण केंद्र के पास पहुंचे, तो आपको एक अलर्ट मिले, ताकि अनलोडिंग के लिए आवश्यक टीम फोर्कलिफ्ट और अन्य उपकरणों के साथ तैयार हो सके। इस तरह वे जल्दी से अनलोड कर सकते हैं, और आपको ट्रक और ड्राइवर के इंतजार के लिए भुगतान नहीं करना पड़ेगा।
इस पाठ में आप जियोफेंस के बारे में जानेंगे - परिभाषित भू-स्थानिक क्षेत्र जैसे कि प्रसंस्करण केंद्र के 2 किमी के भीतर का क्षेत्र, और यह जांचने का तरीका कि GPS निर्देशांक जियोफेंस के अंदर हैं या बाहर, ताकि आप देख सकें कि आपका GPS सेंसर किसी क्षेत्र में पहुंचा है या उसे छोड़ा है।
इस पाठ में हम कवर करेंगे:
- जियोफेंस क्या हैं
- जियोफेंस को परिभाषित करना
- जियोफेंस के खिलाफ बिंदुओं का परीक्षण करना
- सर्वरलेस कोड से जियोफेंस का उपयोग करना
🗑 यह इस प्रोजेक्ट का अंतिम पाठ है, इसलिए इस पाठ और असाइनमेंट को पूरा करने के बाद, अपनी क्लाउड सेवाओं को साफ करना न भूलें। असाइनमेंट पूरा करने के लिए आपको सेवाओं की आवश्यकता होगी, इसलिए पहले इसे पूरा करना सुनिश्चित करें।
यदि आवश्यक हो तो निर्देशों के लिए अपने प्रोजेक्ट को साफ करने की गाइड देखें।
जियोफेंस क्या हैं
जियोफेंस वास्तविक दुनिया के भौगोलिक क्षेत्र के लिए एक आभासी परिधि है। जियोफेंस सर्कल हो सकते हैं, जो एक बिंदु और त्रिज्या के रूप में परिभाषित होते हैं (उदाहरण के लिए, किसी इमारत के चारों ओर 100 मीटर चौड़ा सर्कल), या एक बहुभुज जो किसी क्षेत्र को कवर करता है, जैसे स्कूल ज़ोन, शहर की सीमाएँ, या विश्वविद्यालय या कार्यालय परिसर।
💁 आपने पहले से ही जियोफेंस का उपयोग किया हो सकता है, बिना इसे जाने। यदि आपने iOS रिमाइंडर्स ऐप या Google Keep में किसी स्थान के आधार पर रिमाइंडर सेट किया है, तो आपने जियोफेंस का उपयोग किया है। ये ऐप्स दिए गए स्थान के आधार पर जियोफेंस सेट करेंगे और जब आपका फोन जियोफेंस में प्रवेश करेगा तो आपको अलर्ट करेंगे।
ऐसे कई कारण हैं जिनकी वजह से आप यह जानना चाहेंगे कि कोई वाहन जियोफेंस के अंदर है या बाहर:
- अनलोडिंग की तैयारी - साइट पर वाहन के पहुंचने की सूचना मिलने से टीम अनलोडिंग के लिए तैयार हो सकती है, जिससे वाहन के इंतजार का समय कम हो जाता है। इससे ड्राइवर कम समय में अधिक डिलीवरी कर सकता है।
- कर अनुपालन - कुछ देश, जैसे न्यूज़ीलैंड, सार्वजनिक सड़कों पर डीजल वाहनों के वजन के आधार पर रोड टैक्स लगाते हैं। जियोफेंस का उपयोग करके आप सार्वजनिक और निजी सड़कों पर तय की गई दूरी को ट्रैक कर सकते हैं।
- चोरी की निगरानी - यदि कोई वाहन केवल एक निश्चित क्षेत्र में रहना चाहिए, जैसे कि खेत पर, और वह जियोफेंस छोड़ देता है, तो यह चोरी हो सकता है।
- स्थान अनुपालन - कार्य स्थल, खेत या फैक्ट्री के कुछ हिस्से कुछ वाहनों के लिए प्रतिबंधित हो सकते हैं, जैसे कि कृत्रिम उर्वरक और कीटनाशक ले जाने वाले वाहनों को जैविक उत्पाद उगाने वाले क्षेत्रों से दूर रखना। यदि जियोफेंस में प्रवेश किया जाता है, तो वाहन अनुपालन से बाहर है और ड्राइवर को सूचित किया जा सकता है।
✅ क्या आप जियोफेंस के अन्य उपयोगों के बारे में सोच सकते हैं?
Azure Maps, जिसे आपने पिछले पाठ में GPS डेटा को विज़ुअलाइज़ करने के लिए उपयोग किया था, आपको जियोफेंस को परिभाषित करने और फिर यह जांचने की अनुमति देता है कि कोई बिंदु जियोफेंस के अंदर है या बाहर।
जियोफेंस को परिभाषित करना
जियोफेंस को GeoJSON का उपयोग करके परिभाषित किया जाता है, जैसे पिछले पाठ में मानचित्र में जोड़े गए बिंदु। इस मामले में, Point
मानों के FeatureCollection
के बजाय, यह Polygon
वाले FeatureCollection
को शामिल करता है।
{
"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 बिंदुओं के लिए
देशांतर, अक्षांश
का उपयोग करता है, न किअक्षांश, देशांतर
का।
बहुभुज निर्देशांक सरणी में हमेशा बहुभुज पर बिंदुओं की संख्या से 1 अधिक प्रविष्टि होती है, जिसमें अंतिम प्रविष्टि पहले के समान होती है, जो बहुभुज को बंद करती है। उदाहरण के लिए, एक आयत के लिए 5 बिंदु होंगे।
ऊपर दी गई छवि में, एक आयत है। बहुभुज निर्देशांक शीर्ष-बाएँ 47,-122 से शुरू होता है, फिर दाएँ 47,-121 तक जाता है, फिर नीचे 46,-121 तक, फिर बाएँ 46,-122 तक, फिर शीर्ष-बाएँ पर वापस जाता है। इससे बहुभुज में 5 बिंदु होते हैं - शीर्ष-बाएँ, शीर्ष-दाएँ, नीचे-दाएँ, नीचे-बाएँ, फिर इसे बंद करने के लिए शीर्ष-बाएँ।
✅ अपने घर या स्कूल के चारों ओर एक GeoJSON बहुभुज बनाने का प्रयास करें। GeoJSON.io जैसे टूल का उपयोग करें।
कार्य - जियोफेंस को परिभाषित करें
Azure Maps में जियोफेंस का उपयोग करने के लिए, पहले इसे आपके Azure Maps खाते में अपलोड करना होगा। अपलोड करने के बाद, आपको एक अद्वितीय ID प्राप्त होगी जिसका उपयोग आप जियोफेंस के खिलाफ बिंदु का परीक्षण करने के लिए कर सकते हैं। Azure Maps में जियोफेंस अपलोड करने के लिए, आपको मैप्स वेब API का उपयोग करना होगा। आप curl नामक टूल का उपयोग करके Azure Maps वेब API को कॉल कर सकते हैं।
🎓 Curl एक कमांड लाइन टूल है जो वेब एंडपॉइंट्स के खिलाफ अनुरोध करता है।
-
यदि आप Linux, macOS, या Windows 10 के हाल के संस्करण का उपयोग कर रहे हैं, तो संभवतः आपके पास पहले से ही curl इंस्टॉल है। इसे जांचने के लिए अपने टर्मिनल या कमांड लाइन से निम्नलिखित चलाएँ:
curl --version
यदि आपको curl के लिए संस्करण जानकारी नहीं दिखती है, तो आपको इसे curl डाउनलोड पृष्ठ से इंस्टॉल करना होगा।
💁 यदि आप Postman के साथ अनुभव रखते हैं, तो आप इसे पसंद करते हैं तो इसका उपयोग कर सकते हैं।
-
एक GeoJSON फ़ाइल बनाएं जिसमें एक बहुभुज हो। आप इसे अपने GPS सेंसर का उपयोग करके परीक्षण करेंगे, इसलिए अपने वर्तमान स्थान के चारों ओर एक बहुभुज बनाएं। आप इसे मैन्युअल रूप से ऊपर दिए गए GeoJSON उदाहरण को संपादित करके बना सकते हैं, या GeoJSON.io जैसे टूल का उपयोग कर सकते हैं।
GeoJSON में एक
FeatureCollection
होना चाहिए, जिसमेंgeometry
प्रकारPolygon
के साथ एकFeature
हो।आपको ज़रूर
geometry
तत्व के समान स्तर पर एकproperties
तत्व जोड़ना होगा, और इसमें एकgeometryId
होना चाहिए:"properties": { "geometryId": "1" }
यदि आप GeoJSON.io का उपयोग करते हैं, तो आपको इस आइटम को खाली
properties
तत्व में मैन्युअल रूप से जोड़ना होगा, या तो JSON फ़ाइल डाउनलोड करने के बाद, या ऐप में JSON संपादक में।यह
geometryId
इस फ़ाइल में अद्वितीय होना चाहिए। आप एक ही GeoJSON फ़ाइल मेंFeatureCollection
में कईFeatures
के रूप में कई जियोफेंस अपलोड कर सकते हैं, जब तक कि प्रत्येक काgeometryId
अलग हो। यदि वे अलग-अलग समय पर अलग-अलग फ़ाइलों से अपलोड किए गए हैं, तो बहुभुजों काgeometryId
समान हो सकता है। -
इस फ़ाइल को
geofence.json
के रूप में सहेजें, और इसे अपने टर्मिनल या कंसोल में सहेजे गए स्थान पर नेविगेट करें। -
GeoFence बनाने के लिए निम्नलिखित curl कमांड चलाएँ:
curl --request POST 'https://atlas.microsoft.com/mapData/upload?api-version=1.0&dataFormat=geojson&subscription-key=<subscription_key>' \ --header 'Content-Type: application/json' \ --include \ --data @geofence.json
URL में
<subscription_key>
को अपने Azure Maps खाते के API कुंजी से बदलें।URL का उपयोग
https://atlas.microsoft.com/mapData/upload
API के माध्यम से मानचित्र डेटा अपलोड करने के लिए किया जाता है। कॉल मेंapi-version
पैरामीटर शामिल है जो यह निर्दिष्ट करता है कि Azure Maps API का कौन सा संस्करण उपयोग करना है। अपलोड किया गया डेटा प्रारूपgeojson
के रूप में सेट है।यह POST अनुरोध को अपलोड API पर चलाएगा और प्रतिक्रिया हेडर की एक सूची लौटाएगा जिसमें
location
नामक एक हेडर शामिल है: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
के रूप में कुंजी-मूल्य जोड़े, और कुंजी-मूल्य जोड़े को&
से अलग कर सकते हैं। -
Azure Maps इसे तुरंत प्रोसेस नहीं करता है, इसलिए आपको यह जांचने की आवश्यकता होगी कि अपलोड अनुरोध समाप्त हुआ है या नहीं।
location
हेडर में दिए गए URL का उपयोग करके GET अनुरोध करें। आपको अपने Azure Maps खाते के API कुंजी को URL के अंत में जोड़ना होगा,&subscription-key=<subscription_key>
जोड़कर,<subscription_key>
को अपनी API कुंजी से बदलें। निम्नलिखित कमांड चलाएँ:curl --request GET '<location>&subscription-key=<subscription_key>'
<location>
कोlocation
हेडर के मान से बदलें, और<subscription_key>
को अपने Azure Maps खाते के API कुंजी से बदलें। -
प्रतिक्रिया में
status
के मान की जांच करें। यदि यहSucceeded
नहीं है, तो एक मिनट प्रतीक्षा करें और फिर से प्रयास करें। -
एक बार जब स्थिति
Succeeded
के रूप में वापस आ जाए, तो प्रतिक्रिया सेresourceLocation
देखें। इसमें GeoJSON ऑब्जेक्ट के लिए अद्वितीय ID (UDID) का विवरण होता है। UDID वह मान है जोmetadata/
के बाद आता है, औरapi-version
को शामिल नहीं करता। उदाहरण के लिए, यदिresourceLocation
था:{ "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 में अपलोड हो जाता है, तो आप यह जांचने के लिए एक वेब API अनुरोध कर सकते हैं कि कोई बिंदु जियोफेंस के अंदर है या बाहर। आप इस अनुरोध में जियोफेंस के UDID और परीक्षण किए जाने वाले बिंदु के अक्षांश और देशांतर को पास करते हैं।
जब आप यह अनुरोध करते हैं, तो आप searchBuffer
नामक एक मान भी पास कर सकते हैं। यह Maps API को बताता है कि परिणाम लौटाते समय कितनी सटीकता होनी चाहिए। इसका कारण यह है कि GPS पूरी तरह से सटीक नहीं है, और कभी-कभी स्थान मीटर या उससे अधिक तक गलत हो सकते हैं। डिफ़ॉल्ट रूप से सर्च बफर 50 मीटर है, लेकिन आप इसे 0 मीटर से 500 मीटर तक सेट कर सकते हैं।
API कॉल से परिणाम लौटाए जाने पर, परिणाम का एक हिस्सा distance
होता है, जो जियोफेंस के किनारे के सबसे नजदीकी बिंदु तक की दूरी को मापता है। यदि बिंदु जियोफेंस के बाहर है तो यह मान सकारात्मक होता है, और यदि यह अंदर है तो नकारात्मक। यदि यह दूरी सर्च बफर से कम है, तो वास्तविक दूरी मीटर में लौटाई जाती है, अन्यथा मान 999 या -999 होता है। 999 का मतलब है कि बिंदु जियोफेंस से सर्च बफर से अधिक बाहर है, और -999 का मतलब है कि यह सर्च बफर से अधिक अंदर है।
ऊपर दी गई छवि में, जियोफेंस में 50 मीटर का सर्च बफर है।
- जियोफेंस के केंद्र में एक बिंदु, जो सर्च बफर के अंदर है, की दूरी -999 है।
- सर्च बफर से बाहर एक बिंदु की दूरी 999 है।
- जियोफेंस के अंदर और सर्च बफर के अंदर एक बिंदु, जो जियोफेंस से 6 मीटर दूर है, की दूरी 6 मीटर है।
- जियोफेंस के बाहर और सर्च बफर के अंदर एक बिंदु, जो जियोफेंस से 39 मीटर दूर है, की दूरी 39 मीटर है।
जियोफेंस के किनारे तक की दूरी जानना महत्वपूर्ण है, और वाहन के स्थान के आधार पर निर्णय लेते समय अन्य जानकारी जैसे GPS रीडिंग, गति और सड़क डेटा के साथ इसे संयोजित करना आवश्यक है।
उदाहरण के लिए, कल्पना करें कि GPS रीडिंग दिखाती है कि एक वाहन एक सड़क पर चल रहा था जो अंततः जियोफेंस के पास जाती है। यदि एक GPS मान गलत है और वाहन को जियोफेंस के अंदर रखता है, जबकि वहां कोई वाहन पहुंच नहीं है, तो इसे अनदेखा किया जा सकता है।
ऊपर दी गई छवि में, Microsoft कैंपस के एक हिस्से पर एक जियोफेंस है। लाल रेखा एक ट्रक को 520 के साथ चलते हुए दिखाती है, जिसमें GPS रीडिंग्स को दिखाने के लिए वृत्त हैं। इनमें से अधिकांश सटीक हैं और 520 के साथ हैं, लेकिन एक गलत रीडिंग जियोफेंस के अंदर है। यह रीडिंग सही नहीं हो सकती - ट्रक के लिए 520 से अचानक कैंपस में मुड़ने और फिर वापस 520 पर जाने का कोई रास्ता नहीं है। जियोफेंस की जांच करने वाला कोड परिणामों पर कार्रवाई करने से पहले पिछली रीडिंग्स को ध्यान में रखना होगा।
✅ GPS रीडिंग को सही मानने के लिए आपको कौन सा अतिरिक्त डेटा जांचने की आवश्यकता होगी?
कार्य - जियोफेंस के खिलाफ पॉइंट्स का परीक्षण करें
-
वेब API क्वेरी के लिए URL बनाकर शुरू करें। इसका प्रारूप है:
https://atlas.microsoft.com/spatial/geofence/json?api-version=1.0&deviceId=gps-sensor&subscription-key=<subscription-key>&udid=<UDID>&lat=<lat>&lon=<lon>
<subscription_key>
को अपने Azure Maps खाते के API कुंजी से बदलें।<UDID>
को पिछले कार्य से जियोफेंस के UDID से बदलें।<lat>
और<lon>
को उस अक्षांश और देशांतर से बदलें जिसे आप परीक्षण करना चाहते हैं।यह URL
https://atlas.microsoft.com/spatial/geofence/json
API का उपयोग करता है, जो GeoJSON का उपयोग करके परिभाषित जियोफेंस को क्वेरी करता है। यह1.0
API संस्करण को लक्षित करता है।deviceId
पैरामीटर आवश्यक है और इसे उस डिवाइस का नाम होना चाहिए जिससे अक्षांश और देशांतर आता है।डिफ़ॉल्ट सर्च बफर 50 मीटर है, और आप इसे
searchBuffer=<distance>
नामक एक अतिरिक्त पैरामीटर पास करके बदल सकते हैं,<distance>
को मीटर में सर्च बफर दूरी पर सेट कर सकते हैं, 0 से 500 तक। -
इस URL पर GET अनुरोध करने के लिए curl का उपयोग करें:
curl --request GET '<URL>'
💁 यदि आपको
BadRequest
प्रतिक्रिया कोड मिलता है, जिसमें यह त्रुटि है:Invalid GeoJSON: All feature properties should contain a geometryId, which is used for identifying the geofence.
तो आपका GeoJSON
properties
सेक्शन मेंgeometryId
के बिना है। आपको अपना GeoJSON ठीक करना होगा, फिर ऊपर दिए गए चरणों को दोहराकर इसे फिर से अपलोड करना होगा और नया UDID प्राप्त करना होगा। -
प्रतिक्रिया में
geometries
की एक सूची होगी, प्रत्येक बहुभुज के लिए एक जो GeoJSON का उपयोग करके जियोफेंस बनाने के लिए परिभाषित किया गया है। प्रत्येक ज्यामिति में 3 महत्वपूर्ण फ़ील्ड होते हैं:distance
,nearestLat
औरnearestLon
।{ "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।
-
-
जियोफेंस के अंदर और बाहर स्थानों के साथ इसे कई बार दोहराएं।
सर्वरलेस कोड से जियोफेंस का उपयोग करें
अब आप अपने Functions ऐप में एक नया ट्रिगर जोड़ सकते हैं ताकि IoT Hub GPS इवेंट डेटा को जियोफेंस के खिलाफ परीक्षण किया जा सके।
कंज्यूमर ग्रुप्स
जैसा कि आपने पिछले पाठों में देखा है, IoT Hub आपको हब द्वारा प्राप्त किए गए लेकिन संसाधित नहीं किए गए इवेंट्स को फिर से चलाने की अनुमति देगा। लेकिन अगर कई ट्रिगर जुड़े हों तो क्या होगा? यह कैसे जान पाएगा कि किसने कौन से इवेंट्स को संसाधित किया है?
उत्तर है कि यह नहीं जान सकता! इसके बजाय आप इवेंट्स को पढ़ने के लिए कई अलग-अलग कनेक्शन परिभाषित कर सकते हैं, और प्रत्येक अप्रयुक्त संदेशों के पुन:प्ले का प्रबंधन कर सकता है। इन्हें कंज्यूमर ग्रुप्स कहा जाता है। जब आप एंडपॉइंट से कनेक्ट करते हैं, तो आप निर्दिष्ट कर सकते हैं कि आप किस कंज्यूमर ग्रुप से कनेक्ट करना चाहते हैं। आपके एप्लिकेशन का प्रत्येक घटक एक अलग कंज्यूमर ग्रुप से कनेक्ट होगा।
सिद्धांत रूप में प्रत्येक कंज्यूमर ग्रुप से 5 एप्लिकेशन तक कनेक्ट हो सकते हैं, और वे सभी संदेश प्राप्त करेंगे जब वे आएंगे। यह सुनिश्चित करने के लिए कि सभी कतारबद्ध संदेश सही ढंग से संसाधित किए गए हैं, प्रत्येक कंज्यूमर ग्रुप तक केवल एक एप्लिकेशन की पहुंच होना सबसे अच्छा अभ्यास है। उदाहरण के लिए, यदि आपने अपने Functions ऐप को लोकली लॉन्च किया और इसे क्लाउड में भी चलाया, तो वे दोनों संदेशों को संसाधित करेंगे, जिससे स्टोरेज अकाउंट में डुप्लिकेट ब्लॉब्स संग्रहीत होंगे।
यदि आप पहले बनाए गए IoT Hub ट्रिगर के function.json
फ़ाइल की समीक्षा करते हैं, तो आप इवेंट हब ट्रिगर बाइंडिंग सेक्शन में कंज्यूमर ग्रुप देखेंगे:
"consumerGroup": "$Default"
जब आप IoT Hub बनाते हैं, तो आपको डिफ़ॉल्ट रूप से $Default
कंज्यूमर ग्रुप मिलता है। यदि आप एक अतिरिक्त ट्रिगर जोड़ना चाहते हैं, तो आप इसे एक नए कंज्यूमर ग्रुप का उपयोग करके जोड़ सकते हैं।
💁 इस पाठ में, आप GPS डेटा को स्टोर करने के लिए उपयोग किए गए फ़ंक्शन से अलग जियोफेंस का परीक्षण करने के लिए एक अलग फ़ंक्शन का उपयोग करेंगे। यह दिखाने के लिए कि कंज्यूमर ग्रुप्स का उपयोग कैसे करें और कोड को अलग करें ताकि इसे पढ़ना और समझना आसान हो। एक प्रोडक्शन एप्लिकेशन में आप इसे कई तरीकों से आर्किटेक्ट कर सकते हैं - दोनों को एक फ़ंक्शन पर रखना, स्टोरेज अकाउंट पर एक ट्रिगर का उपयोग करके जियोफेंस की जांच करने के लिए एक फ़ंक्शन चलाना, या कई फ़ंक्शंस का उपयोग करना। कोई 'सही तरीका' नहीं है, यह आपके एप्लिकेशन और आपकी आवश्यकताओं पर निर्भर करता है।
कार्य - एक नया कंज्यूमर ग्रुप बनाएं
-
अपने IoT Hub के लिए
geofence
नामक एक नया कंज्यूमर ग्रुप बनाने के लिए निम्नलिखित कमांड चलाएं:az iot hub consumer-group create --name geofence \ --hub-name <hub_name>
<hub_name>
को उस नाम से बदलें जिसे आपने अपने IoT Hub के लिए उपयोग किया था। -
यदि आप IoT Hub के लिए सभी कंज्यूमर ग्रुप्स देखना चाहते हैं, तो निम्नलिखित कमांड चलाएं:
az iot hub consumer-group list --output table \ --hub-name <hub_name>
<hub_name>
को उस नाम से बदलें जिसे आपने अपने IoT Hub के लिए उपयोग किया था। यह सभी कंज्यूमर ग्रुप्स को सूचीबद्ध करेगा।Name ResourceGroup -------- --------------- $Default gps-sensor geofence gps-sensor
💁 जब आपने पिछले पाठ में IoT Hub इवेंट मॉनिटर चलाया था, तो यह
$Default
कंज्यूमर ग्रुप से जुड़ा था। यही कारण था कि आप इवेंट मॉनिटर और इवेंट ट्रिगर को एक साथ नहीं चला सकते। यदि आप दोनों को चलाना चाहते हैं, तो आप अपने सभी फ़ंक्शन ऐप्स के लिए अन्य कंज्यूमर ग्रुप्स का उपयोग कर सकते हैं और$Default
को इवेंट मॉनिटर के लिए रख सकते हैं।
कार्य - एक नया IoT Hub ट्रिगर बनाएं
-
अपने
gps-trigger
फ़ंक्शन ऐप में एक नया IoT Hub इवेंट ट्रिगर जोड़ें जिसे आपने पिछले पाठ में बनाया था। इस फ़ंक्शन कोgeofence-trigger
कहें।⚠️ यदि आवश्यक हो तो प्रोजेक्ट 2, पाठ 5 से IoT Hub इवेंट ट्रिगर बनाने के निर्देशों का संदर्भ लें।
-
function.json
फ़ाइल में IoT Hub कनेक्शन स्ट्रिंग को कॉन्फ़िगर करें।local.settings.json
सभी ट्रिगर्स के बीच साझा किया जाता है। -
function.json
फ़ाइल मेंconsumerGroup
के मान को नएgeofence
कंज्यूमर ग्रुप का संदर्भ देने के लिए अपडेट करें:"consumerGroup": "geofence"
-
आपको इस ट्रिगर में अपने Azure Maps खाते के लिए सब्सक्रिप्शन कुंजी का उपयोग करना होगा, इसलिए
local.settings.json
फ़ाइल मेंMAPS_KEY
नामक एक नया प्रविष्टि जोड़ें। -
सुनिश्चित करें कि यह संदेशों को कनेक्ट और संसाधित कर रहा है। पहले पाठ से
iot-hub-trigger
भी चलेगा और स्टोरेज में ब्लॉब्स अपलोड करेगा।ब्लॉब स्टोरेज में डुप्लिकेट GPS रीडिंग्स से बचने के लिए, आप क्लाउड में चल रहे Functions ऐप को रोक सकते हैं। ऐसा करने के लिए, निम्नलिखित कमांड का उपयोग करें:
az functionapp stop --resource-group gps-sensor \ --name <functions_app_name>
<functions_app_name>
को उस नाम से बदलें जिसे आपने अपने Functions ऐप के लिए उपयोग किया था।आप इसे बाद में निम्नलिखित कमांड के साथ पुनः प्रारंभ कर सकते हैं:
az functionapp start --resource-group gps-sensor \ --name <functions_app_name>
<functions_app_name>
को उस नाम से बदलें जिसे आपने अपने Functions ऐप के लिए उपयोग किया था।
कार्य - ट्रिगर से जियोफेंस का परीक्षण करें
इससे पहले इस पाठ में आपने जियोफेंस को क्वेरी करने के लिए curl का उपयोग किया था ताकि यह देखा जा सके कि कोई बिंदु अंदर या बाहर स्थित है। आप अपने ट्रिगर के अंदर से इसी तरह का वेब अनुरोध कर सकते हैं।
-
जियोफेंस को क्वेरी करने के लिए, आपको इसका UDID चाहिए।
local.settings.json
फ़ाइल मेंGEOFENCE_UDID
नामक एक नया प्रविष्टि जोड़ें। -
नए
geofence-trigger
ट्रिगर से__init__.py
फ़ाइल खोलें। -
फ़ाइल के शीर्ष पर निम्नलिखित आयात जोड़ें:
import json import os import requests
requests
पैकेज आपको वेब API कॉल करने की अनुमति देता है। Azure Maps में Python SDK नहीं है, आपको इसे Python कोड से उपयोग करने के लिए वेब API कॉल करने की आवश्यकता है। -
main
विधि की शुरुआत में निम्नलिखित 2 पंक्तियाँ जोड़ें ताकि Maps सब्सक्रिप्शन कुंजी प्राप्त हो सके:maps_key = os.environ['MAPS_KEY'] geofence_udid = os.environ['GEOFENCE_UDID']
-
for event in events
लूप के अंदर, प्रत्येक इवेंट से अक्षांश और देशांतर प्राप्त करने के लिए निम्नलिखित जोड़ें:event_body = json.loads(event.get_body().decode('utf-8')) lat = event_body['gps']['lat'] lon = event_body['gps']['lon']
यह कोड इवेंट बॉडी से JSON को एक डिक्शनरी में परिवर्तित करता है, फिर
gps
फ़ील्ड सेlat
औरlon
निकालता है। -
requests
का उपयोग करते समय, curl के साथ लंबे URL बनाने के बजाय, आप केवल URL भाग का उपयोग कर सकते हैं और पैरामीटर को एक डिक्शनरी के रूप में पास कर सकते हैं। कॉल करने के लिए URL को परिभाषित करने और पैरामीटर को कॉन्फ़िगर करने के लिए निम्नलिखित कोड जोड़ें: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 के माध्यम से कॉल करते समय उपयोग किया था। -
वेब API को कॉल करने के लिए निम्नलिखित पंक्तियाँ कोड में जोड़ें:
response = requests.get(url, params=params) response_body = json.loads(response.text)
यह URL को पैरामीटर के साथ कॉल करता है, और एक प्रतिक्रिया ऑब्जेक्ट प्राप्त करता है।
-
इसके नीचे निम्नलिखित कोड जोड़ें:
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 ज्यामिति मानता है, और उस एकल ज्यामिति से दूरी निकालता है। फिर यह दूरी के आधार पर विभिन्न संदेशों को लॉग करता है।
-
इस कोड को चलाएं। आप लॉगिंग आउटपुट में देखेंगे कि GPS निर्देशांक जियोफेंस के अंदर हैं या बाहर, और यदि बिंदु 50 मीटर के भीतर है तो दूरी। इस कोड को अपने GPS सेंसर के स्थान के आधार पर विभिन्न जियोफेंस के साथ आज़माएं, सेंसर को स्थानांतरित करने का प्रयास करें (उदाहरण के लिए मोबाइल फोन से वाईफाई से जुड़े हुए, या वर्चुअल IoT डिवाइस पर विभिन्न निर्देशांक के साथ) ताकि यह परिवर्तन देख सके।
-
जब आप तैयार हों, तो इस कोड को क्लाउड में अपने Functions ऐप पर तैनात करें। नई एप्लिकेशन सेटिंग्स को तैनात करना न भूलें।
⚠️ यदि आवश्यक हो तो प्रोजेक्ट 2, पाठ 5 से एप्लिकेशन सेटिंग्स अपलोड करने के निर्देशों का संदर्भ लें।
⚠️ यदि आवश्यक हो तो प्रोजेक्ट 2, पाठ 5 से अपने Functions ऐप को क्लाउड में तैनात करने के निर्देशों का संदर्भ लें।
💁 आप इस कोड को code/functions फ़ोल्डर में पा सकते हैं।
🚀 चुनौती
इस पाठ में आपने एक बहुभुज के साथ एक GeoJSON फ़ाइल का उपयोग करके एक जियोफेंस जोड़ा। आप एक ही समय में कई बहुभुज अपलोड कर सकते हैं, जब तक कि उनके पास properties
सेक्शन में अलग-अलग geometryId
मान हों।
एक GeoJSON फ़ाइल के साथ कई बहुभुज अपलोड करने का प्रयास करें और अपने कोड को समायोजित करें ताकि यह पता लगाया जा सके कि GPS निर्देशांक किस बहुभुज के सबसे करीब हैं या उसमें हैं।
पोस्ट-लेक्चर क्विज़
समीक्षा और स्व-अध्ययन
- जियोफेंस और उनके कुछ उपयोग मामलों के बारे में अधिक पढ़ें विकिपीडिया पर जियोफेंसिंग पेज पर।
- Azure Maps जियोफेंसिंग API के बारे में अधिक पढ़ें Microsoft Azure Maps Spatial - Get Geofence दस्तावेज़ पर।
- कंज्यूमर ग्रुप्स के बारे में अधिक पढ़ें Microsoft Docs पर Azure Event Hubs में फीचर्स और टर्मिनोलॉजी - इवेंट कंज्यूमर्स दस्तावेज़ पर।
असाइनमेंट
Twilio का उपयोग करके सूचनाएं भेजें
अस्वीकरण:
यह दस्तावेज़ AI अनुवाद सेवा Co-op Translator का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता सुनिश्चित करने का प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल भाषा में उपलब्ध मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं।