# జియోఫెన్సెస్ ![ఈ పాఠం యొక్క స్కెచ్‌నోట్ అవలోకనం](../../../../../translated_images/te/lesson-14.63980c5150ae3c15.webp) > స్కెచ్‌నోట్ [నిత్య నరసింహన్](https://github.com/nitya) ద్వారా. పెద్ద వెర్షన్ కోసం చిత్రం క్లిక్ చేయండి. ఈ వీడియో జియోఫెన్సెస్‌ను మరియు Azure మ్యాప్స్‌లో వాటిని ఎలా ఉపయోగించాలో ఒక అవలోకనం ఇస్తుంది, ఈ పాఠంలో కవర్ చేయబోయే విషయాలు: [![Microsoft Developer IoT షో నుంచి Azure మ్యాప్స్‌తో జియోఫెన్సింగ్](https://img.youtube.com/vi/nsrgYhaYNVY/0.jpg)](https://www.youtube.com/watch?v=nsrgYhaYNVY) > 🎥 వీడియో చూడద için పై చిత్రం క్లిక్ చేయండి ## ప్రీ-లెక్చర్ క్విజ్ [ప్రీ-లెక్చర్ క్విజ్](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/te/geofence-examples.172fbc534665769f.webp) > 💁 మీరు తెలియకుండానే జియోఫెన్సును ఉపయోగించకపోవచ్చు. మీరు iOS రిమైండర్స్ యాప్ లేదా Google Keep ద్వారా స్థలంపై ఆధారమై రిమైండర్ సెట్ చేసినట్లయితే, మీరు జియోఫెన్స్ ఉపయోగించారు. ఈ యాప్స్ ఇచ్చిన స్థలాన్ని ఆధారంగా జియోఫెన్స్ సెట్ చేసి, మీ ఫోన్ ఆ జియోఫెన్స్‌లోకి ప్రవేశిస్తున్నప్పుడు అలర్ట్ ఇస్తాయి. కారు లేదా వాహనం జియోఫెన్స్ లోపల లేదా బయట ఉన్నదాన్ని తెలుసుకోవడం అనేక కారణాలు ఉన్నాయి: * అన్‌లోడింగ్‌కి తయారీ - ఒక వాహనం సైట్‌లో చేరిందని సమాచారం అందించడం, అన్‌లోడ్ టీమ్‌ను సిద్ధంగా ఉంచడానికి సహాయం చేస్తుంది, దీనివల్ల వాహనం వేచి ఉండే సమయం తగ్గుతుంది. దీని ద్వారా డ్రైవర్ ఒకరోజుకు ఎక్కువ డెలివరీలు చేయగలుగుతాడు. * పన్నుల సమర్థత - కొన్ని దేశాలు, ఉదాహరణకు న్యూజిలాండ్, ప్రజా రహదారులపై మాత్రమే వాహన బరువుపై డీజిల్ వాహనాల కోసం రోడ్డు పన్నులు వేస్తాయి. జియోఫెన్సెస్ ఉపయోగించి మీరు ప్రజా రహదారులపై డ్రైవ్ చేసిన దూరాన్ని ట్రాక్ చేయగలరు, ఫార్మ్లు లేదా లాగింగ్ ప్రాంతాలు వంటి ప్రైవేట్ రహదారులపై కాకుండా. * దొంగతనం మానిటరింగ్ - వాహనం ఒక నిర్దిష్ట ప్రాంతంలో మాత్రమే ఉండాలని ఉండగా (ఉదాహరణకు వ్యవసాయంలో), అది జియోఫెన్స్ బయటకు వెళ్ళితే దొంగతనం అయ్యిందని భావించవచ్చు. * స్థలం నియంత్రణ - పని స్థలం, వ్యవసాయ భూమి లేదా ఫ్యాక్టరీలో కొన్ని వాహనాలకు అనుమతి లేనిది ఉండవచ్చు, ఉదాహరణకు రసాయన ఎరువులు మరియు పెస్టిసైడ్స్ తీసుకువెళ్లే వాహనాలను ఆర్గానిక్ పంటల ప్రాంతాల నుంచి దూరంగా ఉంచుట. జియోఫెన్స్ లో ప్రవేశిస్తే వాహనం నియమావళి ఉల్లంఘనలో ఉంటుందని తెలుసుకుని డ్రైవర్‌కు తెలియచేయవచ్చు. ✅ మీరు జియోఫెన్సులకు ఇతర ఉపయోగాలను ఎంచుకోగలరా? Azure మ్యాప్స్, మీరు గత పాఠంలో 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` కాదు పోలీగాన్ కոఆర్డినేట్స్ అర్రే వద్దకు, పొలిగాన్ పాయింట్ల కంటే ఒకటి ఎక్కువ ఎంట్రీ ఉంటుంది, చివరి ఎంట్రీ మొదటి ఎంట్రీతో సమానంగా ఉంటుంది, ఇది పోలీగాన్‌ను ముగిస్తుంది. ఉదాహరణకు, ఒక చతురస్రానికి 5 పాయింట్లు ఉంటాయి. ![ఒక చతురస్రం మరియు దాని కოఆర్డినేట్లతో](../../../../../translated_images/te/polygon-points.302193da381cb415.webp) పై చిత్రంలో, ఒక చతురస్రం ఉంది. పోలీగాన్ క్ాఆర్డినేట్లు ఎడమ పై నుంచి 47,-122 వద్ద ప్రారంభమవుతాయి, ఆపై కుడివైపు 47,-121కి, ఆపై దిగువ 46,-121కి, ఆపై కుడి వైపు 46,-122కి, ఆపై మళ్లీ పైకి మొదటి పాయింట్ 47,-122కి వెళ్తాయి. ఇది 5 పాయింట్లు కలిగిన పోలీగాన్ - ఎడమ పై, కుడి పై, కుడి క్రింద, ఎడమ క్రింద, ఆపై మూసివేయాలని ఎడమ పై. ✅ మీ ఇంటి లేదా పాఠశాల చుట్టూ ఒక GeoJSON పోలీగాన్ రూపొందించడం ప్రయత్నించండి. [GeoJSON.io](https://geojson.io/) వంటి టూల్ ఉపయోగించవచ్చు. ### టాస్క్ - జియోఫెన్స్ నిర్వచించండి Azure మ్యాప్స్‌లో జియోఫెన్స్ ఉపయోగించడానికి, మొదట మీరు దాని Azure మ్యాప్స్ ఖాతాకు అప్లోడ్ చేయాలి. అప్లోడ్ చేసిన తరువాత, మీకు వేరే ID లభిస్తుంది, దీన్ని మీరు జియోఫెన్స్‌తో పాయింట్తో పరీక్షించడానికి ఉపయోగించవచ్చు. జియోఫెన్సులను Azure మ్యాప్స్‌లోకి అప్లోడ్ చేసేందుకు మీరు మ్యాప్స్ వెబ్ API ఉపయోగించాలి. మీరు [curl](https://curl.se) అని పిలవబడే టూల్ ఉపయోగించి Azure మ్యాప్స్ వెబ్ API కోల్ చేయవచ్చు. > 🎓 కర్ల్ ఒక కమాండ్ లైన్ టూల్, ఇది వెబ్ ఎండ్పాయింట్లపై రిక్వెస్ట్‌లు పంపడానికి ఉపయోగపడుతుంది 1. మీరు Linux, macOS లేదా Windows 10 తాజా వెర్షన్ ఉపయోగిస్తుంటే, మీకు curl ముందే ఇన్‌స్టాల్ అయి ఉండవచ్చు. తనిఖీ చేసేందుకు మీ టెర్మినల్ లేదా కమాండ్ లైన్ నుండి క్రింది కమాండ్ నిలుపుకోండి: ```sh curl --version ``` మీరు కర్ల్ వెర్షన్ సమాచారం కనిపెట్టకపోతే, దాన్ని [curl డౌన్లోడ్స్ పేజీ](https://curl.se/download.html) నుండి డౌన్లోడ్ చేసుకోండి. > 💁 మీరు పోస్ట్‌మ్యాన్ లో అనుభవం ఉన్నట్లయితే, మీరు దాన్ని కూడా ఉపయోగించొచ్చు. 1. పోలీగాన్ కలిగిన GeoJSON ఫైల్ తయారు చేయండి. మీరు GPS సెన్సార్ ద్వారా దీన్ని పరీక్షించబోతున్నారు, కాబట్టి ప్రస్తుత స్థల చుట్టూ పోలీగాన్ చేయండి. మీరు ఎడిట్ చేసిన GeoJSON ఉదాహరణను ఉపయోగించి లేదా [GeoJSON.io](https://geojson.io/) వంటి టూల్ ఉపయోగించి రూపొందించుకోవచ్చు. GeoJSON లో ఒక `FeatureCollection` ఉండాలి, ఇందులో `Feature` ఉంటుంది, దాని `geometry` టైప్ `Polygon` గా ఉండాలి. మీరు తప్పనిసరిగా `geometry` సమాన లెవెల్లోని `properties` అంశాన్ని కూడా జోడించాలి, అందులో `geometryId` ఉండాలి: ```json "properties": { "geometryId": "1" } ``` మీరు [GeoJSON.io](https://geojson.io/) ఉపయోగిస్తే, మీరు ఈ అంశాన్ని ఖాళీ ఉండే `properties` లో మానవీయంగా జోడించాల్సి ఉంటుంది, ఫైల్ డౌన్లోడ్ చేసిన తరువాత లేదా యాప్ లో JSON ఎడిటర్ లో. ఈ `geometryId` ఈ ఫైల్‌లో ప్రత్యేకమైనది కావాలి. మీరు ఒకే GeoJSON ఫైలులో బహుళ `Features` ని పలు జియోఫెన్సులు అప్లోడ్ చేయవచ్చు, ప్రతీ `geometryId` వేరు ఉండాలి. వివిధ ఫైల్స్ నుండి పలు సార్లు అప్లోడ్ చేసే పోలీగాన్‌లు అదే `geometryId` కలిగి ఉండొచ్చు. 1. ఈ ఫైల్‌ను `geofence.json` గా సేవ్ చేసి, టెర్మినల్ లేదా కన్సోల్‌లో దాని నిల్వ స్థానానికి వెళ్లండి. 1. ఈ క్రింది curl కమాండ్ రన్ చేసి జియోఫెన్స్ సృష్టించండి: ```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 మ్యాప్స్ ఖాతాకు సంబంధించిన API కీతో మార్చండి. URL ద్వారా `https://atlas.microsoft.com/mapData/upload` API వాడి మ్యాప్ డేటాను అప్లోడ్ చేస్తారు. ఈ కాల్‌లో `api-version` పారామీటర్ ఉంటుంది, ఇది Azure మ్యాప్స్ API ఎడిషన్‌ను సూచిస్తుంది, API కాలం మారినప్పటికీ వెనుకకు అనుకూలంగా కుదిరేలా ఉంటుంది. అప్లోడ్ డేటా ఫార్మాట్ `geojson` గా సెట్ చేయబడుతుంది. ఇది POST రిక్వెస్ట్‌ను పంపుతుంది మరియు ప్రతిస్పందన హెడ్డర్ల జాబితాను ఇస్తుంది, అందులో ఒక హెడ్డర్ పేరు `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 ``` > 🎓 మీరు వెబ్ ఎండ్పాయింట్‌ని పిలవటం లో, మీరు `?` ద్వారా కీ విలువ జంటలుగా పేరామితులను జతచేయవచ్చు, వాటిని `&` ద్వారా విడగొట్టండి. 1. Azure మ్యాప్స్ ఇది వెంటనే ప్రాసెస్ చేయదు, కాబట్టి `location` హెడ్డర్‌లో ఉన్న URLకి GET రిక్వెస్ట్ చేయండి అప్లోడ్ అయింది లేదా లేదని చూసేందుకు. ఈ URL చివర `&subscription-key=` జతచేయండి, `` ని మీ API కీతో మార్చండి. క్రింది కమాండ్ నడపండి: ```sh curl --request GET '&subscription-key=' ``` `` ని `location` హెడ్డర్ విలువతో, `` ని మీ Azure మ్యాప్స్ ఖాతా API కీతో మార్చండి. 1. ప్రతిస్పందనలో `status` విలువ చూడండి. అది `Succeeded` కాకపోతే, ఒక నిమిషం వేచి మళ్లీ ప్రయత్నించండి. 1. స్టేటస్ `Succeeded` అయితే, ప్రతిస్పందనలోని `resourceLocation` ను చూడండి. ఇందులో GeoJSON αντικ/object కి ప్రత్యేక 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 మ్యాప్స్ లో అప్లోడ్ అయిన తర్వాత, మీరు ఒక పాయింట్ జియోఫెన్స్ లోపల లేదా బయట ఉందో తెలుసుకోవచ్చు. మీరు వెబ్ API అభ్యర్థన చేసి, జియోఫెన్స్ UDID మరియు పరీక్షించే పాయింట్ latitude, longitude పంపాలి. ఈ అభ్యర్థన పుట్టిన సమయంలో మీరు `searchBuffer` అనే విలువను కూడా పంపవచ్చు. ఇది మ్యాప్స్ APIకి ఎంత ఖచ్చితత్వంతో ఫలితాలు ఇవ్వాలో సూచిస్తుంది. ఎందుకంటే GPS 100% ఖచ్చితంగా ఉండదు, కొన్నిసార్లు స్థలాలు మీటర్ల దూరంలో తప్పు ఉండవచ్చు. `searchBuffer` కు డిఫాల్ట్ విలువ 50 మీటర్లు, కానీ మీరు 0 నుండి 500 మీటర్లు వరకు సెట్ చేయవచ్చు. API నుంచి వచ్చే ఫలితాల్లో ఒక భాగం జియోఫెన్స్ సరిహద్దు దగ్గరున్న మీClosest point వరకు దూరం (distance) ఉంటుంది, ఇది పాజిటివ్ అయితే పాయింట్ జియోఫెన్స్ వెలుపల ఉందని, నెగెటివ్ అయితే లోపల ఉందని తెలియజేస్తుంది. ఈ దూరం search buffer కన్నా తక్కువ అయితే నిజమైన మీటర్ల దూరం ఇవ్వబడుతుంది, లేదంటే 999 లేదా -999 విలువ వస్తుంది. 999 అంటే పాయింట్ search buffer కంటే ఎక్కువ దూరం జియోఫెన్స్ వెలుపల ఉంది, -999 అంటే search buffer కంటే ఎక్కువ లోపల ఉంది. ![50 మీటర్ల search buffer తో జియోఫెన్స్](../../../../../translated_images/te/search-buffer-and-distance.e6a79af3898183c7.webp) పై చిత్రంలో, జియోఫెన్స్ కి 50 మీటర్లు search buffer ఉంది. * జియోఫెన్స్ మధ్యలో, search buffer లోపల ఉన్న పాయింట్‌కు **-999** * search buffer వెలుపల ఉన్న పాయింట్‌కు **999** * జియోఫెన్స్ లోపల మరియు search buffer లోపల ఉండి, జియోఫెన్స్ నుండి 6 మీటర్లు దూరం ఉన్న పాయింట్‌కు **6 మీ** * జియోఫెన్స్ వెలుపల మరియు search buffer లోపల, 39 మీటర్లు దూరం ఉన్న పాయింట్‌కు **39 మీ** పాయింట్ సరిహద్దు వరకు దూరాన్ని తెలుసుకోవడం ముఖ్యము, దీన్ని ఇతర GPS రీడింగులు, వేగం మరియు రహదారి సమాచారం తో కలిపి వాహన స్థానం ఆధారంగా నిర్ణయాలు తీసేటప్పుడు ఉపయోగిస్తారు. ఉదాహరణకి, ఒక వాహనం ఒక రహదారిపై ప్రయాణిస్తున్నట్లు GPS రీడింగులు చూపిస్తుంటే, ఆ రహదారి కానివైపు జియోఫెన్స్ ఉంది. ఒక GPS విలువ తప్పుగా వాహనం జియోఫెన్స్ లోపల ఉండటం చూపిస్తే, వాహన ప్రవేశం అనుమతించని ప్రాంతం ఉన్నందున, దాన్ని నిర్లక్ష్యం చేయవచ్చు. ![Microsoft క్యాంపస్ పక్కన 520 రహదారిపై వాహనం దొర్లుతున్న GPS ట్రెయిల్, కానీ క్యాంపస్ లో ఒక తప్పు GPS పాయింట్ జియోఫెన్స్ లో ఉంది](../../../../../translated_images/te/geofence-crossing-inaccurate-gps.6a3ed911202ad9ca.webp) పై చిత్రంలో, 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తో మార్చండి. `` మరియు ``ని మీరు పరీక్షించాలనుకున్న అక్షాంశం మరియు dèశాంశంతో మార్చండి. ఈ URL `https://atlas.microsoft.com/spatial/geofence/json` APIని ఉపయోగించి GeoJSON ఉపయోగించి నిర్వచించిన జియోఫెన్స్‌ను క్వెరీ చేస్తుంది. ఇది `1.0` ఎపి వెర్షన్‌ను లక్ష్యంగా పెట్టుకుంది. `deviceId` పారామీటర్ తప్పనిసరి, ఇది latitude మరియు longitude వచ్చే పరికరం పేరు అయి ఉండాలి. డిఫాల్ట్ సెర్చ్ బఫర్ 50 మీటర్లున్నది, ఇందులో మీరు అదనపు `searchBuffer=` పారామీటరును జోడించి దీన్ని మార్చవచ్చు, ``ను మీటర్లలో 0 నుండి 500 వరకు సెట్ చేయండి. 1. ఈ URL కి GET అభ్యర్థన చేయడానికి curl ని ఉపయోగించండి: ```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. స్పందనలో జియోమెట్రీల జాబితా ఉంటుంది, GeoJSONలో నిర్వచించిన ప్రతి పొలిగాన్‌కు ఒకటి. ప్రతి జియోమెట్రీకి 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` అంటే పరీక్షిస్తున్న ప్రాంతానికి అత్యంత సమీపంలోని జియోఫెన్స్ అంచు పాయింట్ యొక్క అక్షాంశం మరియు dèశాంశం. * `distance` అంటే పరీక్షిస్తున్న స్థానంలో నుండి జియోఫెన్స్ అంచు పాయింట్ వరకు దూరం. నెగెటివ్ సంఖ్యలు అంటే జియోఫెన్స్ లోపల, పాజిటివ్ అంటే వెలుపల. ఈ విలువ 50 (డిఫాల్ట్ సెర్చ్ బఫర్) కన్నా తక్కువ లేదా 999 అవుతుంది. 1. జియోఫెన్స్ లోపల లేదా బయట ఉన్న స్థలాలతో ఎన్నోసార్లు పరీక్షించండి. ## సర్వర్‌లెస్ కోడ్ నుండి జియోఫెన్స్ ఉపయోగించండి ఇప్పుడు మీరు Functions ఆప్‌కు కొత్త ట్రిగ్గర్ జోడించి IoT హబ్ GPS ఈవెంట్ డేటాను జియోఫెన్స్‌తో పరీక్షించవచ్చు. ### కన్స్యూమర్ గ్రూప్స్ మునుపటి పాఠాల నుండి గుర్తుంచుకోండి, IoT హబ్ hub కి వచ్చిన కానీ ప్రాసెస్ కాలేదు ఈవెంట్లను మళ్లీ ప్లే చేయడానికి అనుమతిస్తుంది. కాని ఒకదానికి కాక కొన్ని ట్రిగ్గర్లు కనెక్ట్ అయితే ఏమవుతుంది? ఏది ఈవెంట్లను ప్రాసెస్ చేసిందో ఎలా తెలుసుకుంటుంది? జవాబు అది సాధ్యం కాదు! మీరు వేర్వేరు కనెక్షన్లను నిర్వచించి ప్రతి కనెక్షన్ అవినీధిగాళ్ళని చదవగలుగుతారు, అవి ఇంకా చదవనిది నుంచి మళ్లీ ప్లే చేయడం నిర్వహించవచ్చు. వీటిని *కన్స్యూమర్ గ్రూప్స్* అంటారు. ఎండ్పాయింట్ కు కనెక్ట్ అయినప్పుడు మీరు ఏ కన్స్యూమర్ గ్రూప్ కు కనెక్ట్ కావాలనే చొరవను పేర్కొనగలరు. ప్రతి అప్లికేషన్ భాగం వేరే కన్స్యూమర్ గ్రూప్ కు కనెక్ట్ అవుతుంది. ![One IoT Hub with 3 consumer groups distributing the same messages to 3 different functions apps](../../../../../translated_images/te/consumer-groups.a3262e26fc27ba20.webp) తత్త్వంతో, ఒక్క కన్స్యూమర్ గ్రూప్ కి గరిష్టం 5 అప్లికేషన్లు కనెక్ట్ అవ్వవచ్చు, అవన్నీ సమయానుకూలంగా సందేశాలు పొందతాయి. అనుకరించే సందేశాల ప్రాసెసింగ్ నివారించడానికి ఒక్క వినియోగదారుడికి ఒక్క కన్స్యూమర్ గ్రూప్ ను పరిమితం చేయడం మంచిది, మళ్ళీ స్టార్ట్ చేసేటప్పుడు సందేశాలు సరైనవిగా ప్రాసెస్ అవ్వాలి. ఉదాహరణకు, మీరు Functions ఆప్ ని లోకల్ మరియు క్లౌడ్ రెండింటిలో అదే సమయంలో నడిపిస్తే, రెండ్uplicated జిపిఎస్ రీడింగ్లు సંગ્રహం ఖాతాలో నిల్వ అవుతాయి. ముందటి పాఠంలో మీరు సృష్టించిన IoT హబ్ ట్రిగ్గర్ కోసం `function.json` ఫైల్ లో ఈవెంట్ హబ్ ట్రిగ్గర్ బైండింగ్ విభాగంలో కన్స్యూమర్ గ్రూప్ ఉంది: ```json "consumerGroup": "$Default" ``` ఒక IoT హబ్ సృష్టించినపుడు, మున్నుగా `$Default` కన్స్యూమర్ గ్రూప్ కుదిరిపోయి ఉంటుంది. మీరు కొత్త ట్రిగ్గర్ జోడించాలంటే కొత్త కన్స్యూమర్ గ్రూప్ ఉపయోగించవచ్చు. > 💁 ఈ పాఠంలో మీరు GPS డేటా నిల్వ చేయడానికి ఉపయోగించిన ట్రిగ్గర్ కాకుండా వేరే ఫంక్షన్ ఉపయోగించి జియోఫెన్స్ ని పరీక్షిస్తారు. ఇది కన్స్యూమర్ గ్రూప్స్ ఉపయోగించి కోడ్ ను విడగొట్టి సులభంగా పఠించేందుకు చూపించడానికి. ఉత్పత్తిలో మీ ఆర్కిటెక్చర్ అనేక విధాలుగా ఉండొచ్చు - రెండింటినీ ఒక్క ఫంక్షన్ లో పెట్టడం, స్టోరేజి అకౌంట్ మీద ట్రిగ్గర్ పెట్టి జియోఫెన్స్ తనిఖీ చేయడం, లేదా బహుళ ఫంక్షన్స్ ఉపయోగించడం. "తప్పనిసరి స్వరూపం" లేదు, అది మీ అప్లికేషన్ అవసరాలపై ఆధారపడి ఉంటుంది. ### టాస్క్ - కొత్త కన్స్యూమర్ గ్రూప్ సృష్టించండి 1. మీ IoT హబ్ కోసం `geofence` అని పేరున్న కొత్త కన్స్యూమర్ గ్రూప్ సృష్టించడానికి ఈ కమాండ్ ను అమలు చేయండి: ```sh az iot hub consumer-group create --name geofence \ --hub-name ``` ``ని మీ IoT హబ్ పేరుతో మార్చండి. 1. IoT హబ్ యొక్క అన్ని కన్స్యూమర్ గ్రూప్లను చూడాలని ఉన్నట్లయితే, ఈ కమాండ్ ను అమలు చేయండి: ```sh az iot hub consumer-group list --output table \ --hub-name ``` ``ని మీ IoT హబ్ పేరుతో మార్చండి. ఇది అన్ని కన్స్యూమర్ గ్రూపులను చూపిస్తుంది. ```output Name ResourceGroup -------- --------------- $Default gps-sensor geofence gps-sensor ``` > 💁 మీరు మునుపటి పాఠంలో IoT హబ్ ఈవెంట్ మానిటర్ నడిపినప్పుడు `$Default` కన్స్యూమర్ గ్రూప్‌తో కనెక్ట్ అయ్యింది. అందుకే మీరు ఈవెంట్ మానిటర్ మరియు ట్రిగ్గర్ రెండింటినీ అదే సమయంలో నడిపలేరు. రెండింటినీ నడిపాలంటే, ఫంక్షన్ ఆప్స్ కోసం ఇతర కన్స్యూమర్ గ్రూప్స్ ఉపయోగించండి మరియు ఈవెంట్ మానిటర్ కోసం మాత్రమే `$Default` ఉంచండి. ### టాస్క్ - కొత్త IoT హబ్ ట్రిగ్గర్ సృష్టించండి 1. మీరు మునుపటి పాఠంలో సృష్టించిన `gps-trigger` ఫంక్షన్ ఆప్‌కు కొత్త IoT హబ్ ఈవెంట్ ట్రిగ్గర్‌ను జోడించండి. ఈ ఫంక్షన్‌ను `geofence-trigger` అని పిలవండి. > ⚠️ మీరు [ప్రాజెక్ట్ 2, పాఠం 5 నుండి IoT హబ్ ఈవెంట్ ట్రిగ్గర్ సృష్టించడం కోసం సూచనలు](../../../2-farm/lessons/5-migrate-application-to-the-cloud/README.md#create-an-iot-hub-event-trigger) అవసరమైతే చూడవచ్చు. 1. `function.json` ఫైల్లో IoT హబ్ కనెక్షన్ స్ట్రింగ్ ను కాన్ఫిగర్ చేయండి. `local.settings.json` ఫలితం Function Appలో అన్ని ట్రిగ్గర్లకు పంచబడుతుంది. 1. `function.json`లో `consumerGroup` విలువను కొత్త `geofence` కన్స్యూమర్ గ్రూప్ ను సూచించేలా మార్చండి: ```json "consumerGroup": "geofence" ``` 1. ఈ ట్రిగ్గర్‌లో మీరు Azure Maps ఖాతా కోసం సబ్‌స్క్రిప్షన్ కీ అవసరం అవుతుంది, అందుకని `local.settings.json` ఫైలులో `MAPS_KEY` అనే కొత్త ఎంట్రీని జోడించండి. 1. Functions App నడిపించి కనెక్ట్ అవుతోందో, సందేశాలు ప్రాసెస్ అవుతుండాయో చూసుకోండి. ముందుగా చేసిన `iot-hub-trigger` కూడా నడిచి blobలను స్టోరేజ్‌కు అప్లోడ్ చేస్తుంది. > డూప్లికేట్ GPS రీడింగ్లు blob స్టోరేజిలో నిల్వ కాకపోవడానికి, మీరు క్లౌడ్‌లో నడుస్తున్న Functions Appను ఆపవచ్చు. దీని కోసం ఈ క్రింది కమాండ్ ఉపయోగించండి: > > ```sh > az functionapp stop --resource-group gps-sensor \ > --name > ``` > > ``ని మీ Functions App పేరుతో మార్చండి. > > తరువాత ఈ క్రింది కమాండ్ తో బాగు చేస్తే మళ్లీ రన్ చేయవచ్చు: > > ```sh > az functionapp start --resource-group gps-sensor \ > --name > ``` > > ``ని మీ Functions App పేరుతో మార్చండి. ### టాస్క్ - ట్రిగ్గర్ నుంచి జియోఫెన్స్‌ను పరీక్షించండి ఈ పాఠంలో మీరు curl ఉపయోగించి ఒక పాయింట్ జియోఫెన్స్ లో అచ్చు వెలుపల ఉందో తెలుసుకున్నారు. ఇలాంటి వెబ్ అభ్యర్థనను మీ ట్రిగ్గర్ నుండి కూడా చేయవచ్చు. 1. జియోఫెన్స్ UDID అవసరం. దీన్ని `local.settings.json` లో `GEOFENCE_UDID` అనే కొత్త ఎంట్రీగా జోడించండి. 1. కొత్త `geofence-trigger` ట్రిగ్గర్ నుండి `__init__.py` ఫైల్ ఓపెన్ చేయండి. 1. ఫైల顶部కు క్రింది import ను జోడించండి: ```python import json import os import requests ``` `requests` ప్యాకేజ్ వెబ్ API కాల్స్ చేయడంలో సహాయపడుతుంది. Azure Maps కు Python SDK లేదు, కాబట్టి Python కోడ్ లో దీనిని ఉపయోగించడానికి వెబ్ API కాల్స్ చేయాలి. 1. `main` ఫంక్షన్ ప్రారంభంలో క్రింది రెండు పంక్తులు జోడించండి, Maps సబ్బస్క్రిప్షన్ కీ పొందడానికి: ```python maps_key = os.environ['MAPS_KEY'] geofence_udid = os.environ['GEOFENCE_UDID'] ``` 1. `for event in events` లూప్ లో, ప్రతి ఈవెంట్ నుండి అక్షాంశం, dèశాంశం పొందడానికి క్రింది కోడ్ జోడించండి: ```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` డిక్షనరీ లో ఉన్న అంశాలు మీరు 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') ``` ఈ కోడ్ ఒకే ఒక జియోమెట్రీ ఆశాంశంతో ఉండాలని అనుకుంటుంది, దానిలోని distance తీసుకుంటుంది. ద్రూరం ఆధారంగా విభిన్న సందేశాలను లాగ్ చేస్తుంది. 1. ఈ కోడ్ నడపండి. లాగింగ్లో GPS కోఆర్డినేట్లు జియోఫెన్స్‌లో ఉన్నాయో లేరో, ఉంటే దూరం కూడా చూపిస్తుంది. వివిధ జియోఫెన్స్‌తో, మీ GPS సెన్సార్ స్థానం ఆధారంగా దీనిని ప్రయత్నించండి. సెన్సార్‌ని మార్చి (ఉదా: మొబైల్ ఫోనులో WiFi కనెక్షన్ ద్వారా, లేదా వర్చువల్ IoT పరికరంలో వేరు కొఆర్డినేట్లతో) ఈ మార్పును చూడండి. 1. సిద్ధంగా ఉన్నప్పుడు, ఈ కోడ్‌ను మీ Functions ఆప్‌లో క్లౌడ్‌కు డిప్లాయ్ చేయండి. కొత్త అప్లికేషన్ సెట్టింగ్స్ అప్లోడ్ చేయడం మర్చిపోకండి. > ⚠️ అవసరమైతే [ప్రాజెక్ట్ 2, పాఠం 5 నుండి అప్లికేషన్ సెట్టింగ్స్ ఎక్కింపు సూచనలు](../../../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 ఫైల్ తో ఒక జియోఫెన్స్ జోడించారు. మీరు ఒకేసారి అనేక పొలిగాన్లు ఉన్న GeoJSON అందజేయవచ్చు, అవి `properties` విభాగంలో వేర్వేరు `geometryId` విలువలు కలిగి ఉండాలి. ఒకటి కంటే ఎక్కువ పొలిగాన్లు ఉన్న GeoJSON అప్లోడ్ చేసి, GPS కోఆర్డినేట్లు ఎటువంటి పొలిగాన్‌కి అత్యంత సమీపంగా లేదా లోపల ఉన్నాయో కనుగొనడం కోసం మీ కోడ్ సవరించండి. ## తరగతి ముగింపు క్విజ్ [Post-lecture quiz](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/28) ## రివ్యూ & స్వీయ అధ్యయనం * జియోఫెన్స్లు మరియు వాటి వినియోగాల గురించి మరింత చదవండి: [Geofencing - వికీపీڈیا](https://en.wikipedia.org/wiki/Geo-fence). * Azure Maps జియోఫెన్సింగ్ API గురించి మరింత తెలుసుకోండి: [Microsoft Azure Maps Spatial - Get Geofence documentation](https://docs.microsoft.com/rest/api/maps/spatial/getgeofence?WT.mc_id=academic-17441-jabenn). * Azure Event Hubs లో కన్స్యూమర్ గ్రూపుల గురించి తెలుసుకోండి: [Azure Event Hubs ఫీచర్లు మరియు టర్మినాలజీ](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) ఉపయోగించి అనువదించబడింది. మేము ఖచ్చితత్వానికి ప్రయత్నిస్తాము గానీ, ఆటోమేటెడ్ అనువాదాల్లో లోపాలు లేదా తప్పులు ఉండవచ్చు అని దయచేసి గమనించండి. మౌలిక భాషలో ఉన్న అసలు దస్త్రాన్ని అధికారిక మూలంగా పరిగణించాలి. ముఖ్యమైన సమాచారం కోసం, ప్రొఫెషనల్ మానవ భాషాంతరం సిఫారసు చేయబడుతుంది. ఈ అనువాదాన్ని ఉపయోగించడం వలన సంభవించే ఏవైనా అపార్థాలు లేదా తప్పు అర్థం చేసుకోబడిన దోషాలకు మేము బాధ్యత వహించము.