|
4 weeks ago | |
---|---|---|
.. | ||
README.md | 4 weeks ago | |
assignment.md | 4 weeks ago |
README.md
Geofences
Sketchnote na Nitya Narasimhan. Bofya picha kwa toleo kubwa zaidi.
Video hii inatoa muhtasari wa geofences na jinsi ya kuzitumia katika Azure Maps, mada zitakazojadiliwa katika somo hili:
🎥 Bofya picha hapo juu kutazama video
Maswali ya awali ya somo
Utangulizi
Katika masomo matatu yaliyopita, umetumia IoT kufuatilia malori yanayobeba mazao yako kutoka shambani hadi kituo cha usindikaji. Umenasa data ya GPS, kuipeleka kwenye wingu kuhifadhi, na kuiona kwenye ramani. Hatua inayofuata ya kuongeza ufanisi wa mnyororo wako wa usambazaji ni kupata arifa wakati lori linakaribia kufika kituo cha usindikaji, ili wafanyakazi wanaohitajika kupakua wawe tayari na vifaa kama forklifts mara tu gari linapofika. Kwa njia hii wanaweza kupakua haraka, na hautalipa kwa lori na dereva kusubiri.
Katika somo hili utajifunza kuhusu geofences - maeneo maalum ya kijiografia kama eneo ndani ya umbali wa dakika 2km kutoka kituo cha usindikaji, na jinsi ya kujaribu kama viwianishi vya GPS viko ndani au nje ya geofence, ili kuona kama sensor yako ya GPS imefika au kuondoka eneo fulani.
Katika somo hili tutajadili:
- Geofences ni nini
- Kufafanua geofence
- Kujaribu pointi dhidi ya geofence
- Kutumia geofences kutoka kwa msimbo usio na seva
🗑 Hili ni somo la mwisho katika mradi huu, kwa hivyo baada ya kukamilisha somo hili na kazi, usisahau kusafisha huduma zako za wingu. Utahitaji huduma hizo kukamilisha kazi, kwa hivyo hakikisha unakamilisha hiyo kwanza.
Rejelea mwongozo wa kusafisha mradi wako ikiwa ni lazima kwa maelekezo ya jinsi ya kufanya hivyo.
Geofences ni nini
Geofence ni mpaka wa kielektroniki kwa eneo halisi la kijiografia. Geofences zinaweza kuwa duara lililofafanuliwa kama nukta na radius (kwa mfano duara lenye upana wa 100m karibu na jengo), au poligoni inayofunika eneo kama eneo la shule, mipaka ya jiji, au kampasi ya chuo kikuu au ofisi.
💁 Huenda tayari umetumia geofences bila kujua. Ikiwa umewahi kuweka kikumbusho kwa kutumia programu ya iOS reminders au Google Keep kulingana na eneo, umeshatumia geofence. Programu hizi huweka geofence kulingana na eneo lililotolewa na kukuarifu simu yako inapoingia kwenye geofence.
Kuna sababu nyingi za kutaka kujua kama gari liko ndani au nje ya geofence:
- Maandalizi ya kupakua - kupata arifa kwamba gari limefika kwenye eneo huruhusu wafanyakazi kujiandaa kupakua gari, kupunguza muda wa kusubiri wa gari. Hii inaweza kuruhusu dereva kufanya usafirishaji zaidi kwa siku bila muda mwingi wa kusubiri.
- Uzingatiaji wa kodi - baadhi ya nchi, kama New Zealand, hutoza kodi ya barabara kwa magari ya dizeli kulingana na uzito wa gari wakati wa kuendesha kwenye barabara za umma pekee. Kutumia geofences huruhusu kufuatilia umbali uliosafiri kwenye barabara za umma tofauti na barabara za kibinafsi kwenye maeneo kama mashamba au maeneo ya ukataji miti.
- Ufuatiliaji wa wizi - ikiwa gari linapaswa kubaki tu katika eneo fulani kama shambani, na linaondoka kwenye geofence, huenda limeibiwa.
- Uzingatiaji wa eneo - baadhi ya sehemu za eneo la kazi, shamba au kiwanda zinaweza kuwa marufuku kwa magari fulani, kama kuweka magari yanayobeba mbolea za bandia na dawa mbali na mashamba yanayolima mazao ya kikaboni. Ikiwa geofence itaingiliwa, basi gari liko nje ya uzingatiaji na dereva anaweza kuarifiwa.
✅ Je, unaweza kufikiria matumizi mengine ya geofences?
Azure Maps, huduma uliyotumia katika somo lililopita kuonyesha data ya GPS, inakuruhusu kufafanua geofences, kisha kujaribu kuona kama nukta iko ndani au nje ya geofence.
Kufafanua geofence
Geofences hufafanuliwa kwa kutumia GeoJSON, sawa na nukta zilizoongezwa kwenye ramani katika somo lililopita. Katika kesi hii, badala ya kuwa FeatureCollection
ya maadili ya Point
, ni FeatureCollection
inayojumuisha Polygon
.
{
"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"
}
}
]
}
Kila nukta kwenye poligoni hufafanuliwa kama jozi la longitudo na latitudo katika safu, na nukta hizi ziko katika safu ambayo imewekwa kama coordinates
. Katika Point
katika somo lililopita, coordinates
ilikuwa safu yenye maadili 2, latitudo na longitudo, kwa Polygon
ni safu ya safu zenye maadili 2, longitudo, latitudo.
💁 Kumbuka, GeoJSON hutumia
longitudo, latitudo
kwa nukta, silatitudo, longitudo
Safu ya viwianishi vya poligoni daima ina kiingilio 1 zaidi kuliko idadi ya nukta kwenye poligoni, na kiingilio cha mwisho kuwa sawa na cha kwanza, kufunga poligoni. Kwa mfano, kwa mstatili kutakuwa na nukta 5.
Katika picha hapo juu, kuna mstatili. Viwianishi vya poligoni vinaanza upande wa juu-kushoto kwa 47,-122, kisha vinaenda kulia kwa 47,-121, kisha chini kwa 46,-121, kisha kulia kwa 46, -122, kisha kurudi juu kwa nukta ya mwanzo kwa 47, -122. Hii inatoa poligoni nukta 5 - juu-kushoto, juu-kulia, chini-kulia, chini-kushoto, kisha juu-kushoto kufunga.
✅ Jaribu kuunda poligoni ya GeoJSON karibu na nyumbani au shule yako. Tumia zana kama GeoJSON.io.
Kazi - kufafanua geofence
Ili kutumia geofence katika Azure Maps, kwanza lazima ipakiwa kwenye akaunti yako ya Azure Maps. Mara baada ya kupakiwa, utapata ID ya kipekee ambayo unaweza kutumia kujaribu nukta dhidi ya geofence. Ili kupakia geofences kwenye Azure Maps, unahitaji kutumia API ya wavuti ya ramani. Unaweza kuita API ya wavuti ya Azure Maps kwa kutumia zana inayoitwa curl.
🎓 Curl ni zana ya mstari wa amri kufanya maombi dhidi ya viunganishi vya wavuti
-
Ikiwa unatumia Linux, macOS, au toleo la hivi karibuni la Windows 10 huenda tayari una curl imewekwa. Endesha amri ifuatayo kutoka kwa terminal au mstari wa amri ili kuangalia:
curl --version
Ikiwa huoni maelezo ya toleo la curl, utahitaji kuisakinisha kutoka kwa ukurasa wa kupakua curl.
💁 Ikiwa una uzoefu na Postman, basi unaweza kutumia hiyo badala yake ikiwa unapendelea.
-
Unda faili ya GeoJSON inayojumuisha poligoni. Utajaribu hii kwa kutumia sensor yako ya GPS, kwa hivyo unda poligoni karibu na eneo lako la sasa. Unaweza kuunda moja kwa mkono kwa kuhariri mfano wa GeoJSON uliotolewa hapo juu, au kutumia zana kama GeoJSON.io.
GeoJSON itahitaji kuwa na
FeatureCollection
, inayojumuishaFeature
yenyegeometry
ya ainaPolygon
.Lazima pia uongeze kipengele cha
properties
katika kiwango sawa na kipengele chageometry
, na hii lazima iwe nageometryId
:"properties": { "geometryId": "1" }
Ikiwa unatumia GeoJSON.io, basi utalazimika kuongeza kipengele hiki kwa mkono kwenye kipengele cha
properties
kilicho tupu, ama baada ya kupakua faili ya JSON, au katika mhariri wa JSON kwenye programu.Hii
geometryId
lazima iwe ya kipekee katika faili hii. Unaweza kupakia geofences nyingi kamaFeatures
nyingi katikaFeatureCollection
katika faili moja ya GeoJSON, mradi kila moja inageometryId
tofauti. Poligoni zinaweza kuwa nageometryId
sawa ikiwa zimepakiwa kutoka faili tofauti kwa wakati tofauti. -
Hifadhi faili hii kama
geofence.json
, na nenda mahali ilipo hifadhiwa kwenye terminal au console yako. -
Endesha amri ifuatayo ya curl kuunda GeoFence:
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
Badilisha
<subscription_key>
katika URL na API key ya akaunti yako ya Azure Maps.URL inatumika kupakia data ya ramani kupitia API ya
https://atlas.microsoft.com/mapData/upload
. Simu inajumuisha parameter yaapi-version
ili kubainisha ni API gani ya Azure Maps ya kutumia, hii ni kuruhusu API kubadilika kwa muda lakini kudumisha utangamano wa nyuma. Muundo wa data unaopakiwa umewekwa kuwageojson
.Hii itaendesha ombi la POST kwa API ya kupakia na kurudisha orodha ya vichwa vya majibu ambavyo vinajumuisha kichwa kinachoitwa
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
🎓 Wakati wa kuita kiunganishi cha wavuti, unaweza kupitisha vigezo kwa simu kwa kuongeza
?
ikifuatiwa na jozi za thamani ya ufunguo kamakey=value
, ukitenganisha jozi za thamani ya ufunguo kwa&
. -
Azure Maps haichakata hii mara moja, kwa hivyo utahitaji kuangalia ili kuona ikiwa ombi la kupakia limekamilika kwa kutumia URL iliyotolewa katika kichwa cha
location
. Fanya ombi la GET kwa eneo hili ili kuona hali. Utahitaji kuongeza subscription key yako mwishoni mwa URL yalocation
kwa kuongeza&subscription-key=<subscription_key>
mwishoni, ukibadilisha<subscription_key>
na API key ya akaunti yako ya Azure Maps. Endesha amri ifuatayo:curl --request GET '<location>&subscription-key=<subscription_key>'
Badilisha
<location>
na thamani ya kichwa chalocation
, na<subscription_key>
na API key ya akaunti yako ya Azure Maps. -
Angalia thamani ya
status
katika majibu. Ikiwa siSucceeded
, basi subiri dakika moja na jaribu tena. -
Mara hali inapokuja kama
Succeeded
, angaliaresourceLocation
kutoka kwa majibu. Hii ina maelezo kuhusu ID ya kipekee (inayojulikana kama UDID) kwa kitu cha GeoJSON. UDID ni thamani baada yametadata/
, na si pamoja naapi-version
. Kwa mfano, ikiwaresourceLocation
ilikuwa:{ "resourceLocation": "https://us.atlas.microsoft.com/mapData/metadata/7c3776eb-da87-4c52-ae83-caadf980323a?api-version=1.0" }
Basi UDID itakuwa
7c3776eb-da87-4c52-ae83-caadf980323a
.Hifadhi nakala ya UDID hii kwani utahitaji kuijaribu geofence.
Kujaribu pointi dhidi ya geofence
Mara poligoni inapopakiwa kwenye Azure Maps, unaweza kujaribu nukta kuona kama iko ndani au nje ya geofence. Unafanya hivi kwa kufanya ombi la API ya wavuti, ukipita UDID ya geofence, na latitudo na longitudo ya nukta ya kujaribu.
Wakati unafanya ombi hili, unaweza pia kupitisha thamani inayoitwa searchBuffer
. Hii inaambia API ya Ramani jinsi ya kuwa sahihi wakati wa kurudisha matokeo. Sababu ya hii ni kwamba GPS si sahihi kabisa, na wakati mwingine maeneo yanaweza kuwa nje kwa mita ikiwa si zaidi. Chaguo-msingi kwa search buffer ni 50m, lakini unaweza kuweka maadili kutoka 0m hadi 500m.
Wakati matokeo yanarudishwa kutoka kwa simu ya API, moja ya sehemu za matokeo ni distance
iliyopimwa hadi nukta ya karibu kwenye ukingo wa geofence, na thamani chanya ikiwa nukta iko nje ya geofence, hasi ikiwa iko ndani ya geofence. Ikiwa umbali huu ni chini ya search buffer, umbali halisi unarudishwa kwa mita, vinginevyo thamani ni 999 au -999. 999 inamaanisha kwamba nukta iko nje ya geofence kwa zaidi ya search buffer, -999 inamaanisha iko ndani ya geofence kwa zaidi ya search buffer.
Katika picha hapo juu, geofence ina search buffer ya 50m.
- Nukta katikati ya geofence, ndani kabisa ya search buffer ina umbali wa -999
- Nukta nje kabisa ya search buffer ina umbali wa 999
- Nukta ndani ya geofence na ndani ya search buffer, 6m kutoka geofence, ina umbali wa 6m
- Nukta nje ya geofence na ndani ya search buffer, 39m kutoka geofence, ina umbali wa 39m
Ni muhimu kujua umbali hadi ukingo wa geofence, na kuunganisha hii na taarifa nyingine kama maelezo ya GPS mengine, kasi na data ya barabara wakati wa kufanya maamuzi kulingana na eneo la gari.
Kwa mfano, fikiria maelezo ya GPS yanayoonyesha gari lilikuwa linaendesha barabara inayomalizika karibu na geofence. Ikiwa thamani moja ya GPS si sahihi na inaweka gari ndani ya geofence, licha ya kutokuwepo kwa ufikiaji wa gari, basi inaweza kupuuzwa.
Katika picha hapo juu, kuna geofence juu ya sehemu ya kampasi ya Microsoft. Mstari mwekundu unaonyesha lori likiendeshwa kando ya barabara ya 520, na duara zinaonyesha vipimo vya GPS. Vipimo vingi ni sahihi na viko kando ya barabara ya 520, lakini kuna kipimo kimoja kisicho sahihi ndani ya geofence. Haiwezekani kipimo hicho kuwa sahihi - hakuna barabara kwa lori kubadilisha ghafla kutoka barabara ya 520 kwenda kampasi, kisha kurudi tena kwenye barabara ya 520. Msimbo unaochunguza geofence hii utahitaji kuzingatia vipimo vya awali kabla ya kuchukua hatua kulingana na matokeo ya jaribio la geofence.
✅ Ni data gani ya ziada unayohitaji kuangalia ili kuthibitisha kama kipimo cha GPS kinaweza kuchukuliwa kuwa sahihi?
Kazi - jaribu pointi dhidi ya geofence
-
Anza kwa kujenga URL ya swali la API ya wavuti. Muundo ni:
https://atlas.microsoft.com/spatial/geofence/json?api-version=1.0&deviceId=gps-sensor&subscription-key=<subscription-key>&udid=<UDID>&lat=<lat>&lon=<lon>
Badilisha
<subscription_key>
na ufunguo wa API wa akaunti yako ya Azure Maps.Badilisha
<UDID>
na UDID ya geofence kutoka kwenye kazi ya awali.Badilisha
<lat>
na<lon>
na latitudo na longitudo unayotaka kujaribu.URL hii inatumia API ya
https://atlas.microsoft.com/spatial/geofence/json
kuuliza geofence iliyofafanuliwa kwa kutumia GeoJSON. Inalenga toleo la API1.0
. Kipengele chadeviceId
kinahitajika na kinapaswa kuwa jina la kifaa ambacho latitudo na longitudo zinatoka.Buffer ya utafutaji ya chaguo-msingi ni 50m, na unaweza kubadilisha hii kwa kupitisha kipengele cha ziada cha
searchBuffer=<distance>
, ukibadilisha<distance>
na umbali wa buffer ya utafutaji kwa mita, kutoka 0 hadi 500. -
Tumia curl kufanya ombi la GET kwa URL hii:
curl --request GET '<URL>'
💁 Ukipata msimbo wa majibu wa
BadRequest
, na kosa la:Invalid GeoJSON: All feature properties should contain a geometryId, which is used for identifying the geofence.
basi GeoJSON yako inakosa sehemu ya
properties
yenyegeometryId
. Utahitaji kurekebisha GeoJSON yako, kisha kurudia hatua zilizo hapo juu ili kupakia tena na kupata UDID mpya. -
Majibu yatakuwa na orodha ya
geometries
, moja kwa kila poligoni iliyofafanuliwa katika GeoJSON iliyotumika kuunda geofence. Kila geometry ina sehemu 3 za kuvutia,distance
,nearestLat
nanearestLon
.{ "geometries": [ { "deviceId": "gps-sensor", "udId": "7c3776eb-da87-4c52-ae83-caadf980323a", "geometryId": "1", "distance": 999.0, "nearestLat": 47.645875, "nearestLon": -122.142713 } ], "expiredGeofenceGeometryId": [], "invalidPeriodGeofenceGeometryId": [] }
-
nearestLat
nanearestLon
ni latitudo na longitudo ya sehemu kwenye ukingo wa geofence ambayo iko karibu zaidi na eneo linalojaribiwa. -
distance
ni umbali kutoka eneo linalojaribiwa hadi sehemu ya karibu zaidi kwenye ukingo wa geofence. Nambari hasi zinaonyesha ndani ya geofence, nambari chanya nje. Thamani hii itakuwa chini ya 50 (buffer ya utafutaji ya chaguo-msingi), au 999.
-
-
Rudia hii mara kadhaa na maeneo ndani na nje ya geofence.
Tumia geofences kutoka kwa msimbo wa serverless
Sasa unaweza kuongeza trigger mpya kwenye programu yako ya Functions ili kujaribu data ya tukio la GPS la IoT Hub dhidi ya geofence.
Vikundi vya watumiaji
Kama unavyokumbuka kutoka masomo ya awali, IoT Hub itakuruhusu kurudia matukio ambayo yamepokelewa na hub lakini hayajashughulikiwa. Lakini nini kitatokea ikiwa triggers nyingi zimeunganishwa? Itawezaje kujua ni ipi imechakata matukio gani?
Jibu ni kwamba haiwezi! Badala yake unaweza kufafanua miunganisho tofauti kusoma matukio, na kila moja inaweza kudhibiti kurudia kwa ujumbe ambao haujasomwa. Hizi zinaitwa vikundi vya watumiaji. Unapounganisha kwenye endpoint, unaweza kubainisha ni kikundi gani cha watumiaji unataka kuunganishwa nacho. Kila sehemu ya programu yako itaunganishwa na kikundi tofauti cha watumiaji.
Kwa nadharia, hadi programu 5 zinaweza kuunganishwa kwa kila kikundi cha watumiaji, na zote zitapokea ujumbe unapowasili. Ni bora kuwa na programu moja tu inayopata kila kikundi cha watumiaji ili kuepuka uchakataji wa ujumbe mara mbili, na kuhakikisha unapowasha tena ujumbe wote ulio kwenye foleni unachakatwa kwa usahihi. Kwa mfano, ikiwa ulizindua programu yako ya Functions kwa ndani pamoja na kuiendesha kwenye wingu, zote mbili zingechakata ujumbe, na kusababisha blobs maradufu kuhifadhiwa kwenye akaunti ya hifadhi.
Ukikagua faili ya function.json
kwa trigger ya IoT Hub uliyounda katika somo la awali, utaona kikundi cha watumiaji katika sehemu ya binding ya trigger ya event hub:
"consumerGroup": "$Default"
Unapounda IoT Hub, unapata kikundi cha watumiaji cha $Default
kilichoundwa kwa chaguo-msingi. Ikiwa unataka kuongeza trigger ya ziada, unaweza kuongeza hii kwa kutumia kikundi kipya cha watumiaji.
💁 Katika somo hili, utatumia function tofauti kujaribu geofence na ile iliyotumika kuhifadhi data ya GPS. Hii ni kuonyesha jinsi ya kutumia vikundi vya watumiaji na kutenganisha msimbo ili iwe rahisi kusoma na kuelewa. Katika programu ya uzalishaji kuna njia nyingi unazoweza kupanga hili - kuweka zote kwenye function moja, kutumia trigger kwenye akaunti ya hifadhi kuendesha function ya kuangalia geofence, au kutumia functions nyingi. Hakuna 'njia sahihi', inategemea programu yako yote na mahitaji yako.
Kazi - unda kikundi kipya cha watumiaji
-
Endesha amri ifuatayo kuunda kikundi kipya cha watumiaji kinachoitwa
geofence
kwa IoT Hub yako:az iot hub consumer-group create --name geofence \ --hub-name <hub_name>
Badilisha
<hub_name>
na jina ulilotumia kwa IoT Hub yako. -
Ikiwa unataka kuona vikundi vyote vya watumiaji kwa IoT Hub, endesha amri ifuatayo:
az iot hub consumer-group list --output table \ --hub-name <hub_name>
Badilisha
<hub_name>
na jina ulilotumia kwa IoT Hub yako. Hii itaorodhesha vikundi vyote vya watumiaji.Name ResourceGroup -------- --------------- $Default gps-sensor geofence gps-sensor
💁 Ulipoendesha monitor ya tukio la IoT Hub katika somo la awali, iliunganishwa na kikundi cha watumiaji cha
$Default
. Hii ndiyo sababu huwezi kuendesha monitor ya tukio na trigger ya tukio. Ikiwa unataka kuendesha zote mbili, basi unaweza kutumia vikundi vingine vya watumiaji kwa programu zako zote za function, na kuweka$Default
kwa monitor ya tukio.
Kazi - unda trigger mpya ya IoT Hub
-
Ongeza trigger mpya ya tukio la IoT Hub kwenye programu yako ya
gps-trigger
ya function uliyounda katika somo la awali. Ita function hiigeofence-trigger
.⚠️ Unaweza kurejelea maelekezo ya kuunda trigger ya tukio la IoT Hub kutoka mradi wa 2, somo la 5 ikiwa inahitajika.
-
Sanidi string ya muunganisho wa IoT Hub katika faili ya
function.json
. Faili yalocal.settings.json
inashirikiwa kati ya triggers zote katika programu ya Function. -
Sasisha thamani ya
consumerGroup
katika faili yafunction.json
ili kurejelea kikundi kipya cha watumiaji chageofence
:"consumerGroup": "geofence"
-
Utahitaji kutumia ufunguo wa usajili wa akaunti yako ya Azure Maps katika trigger hii, kwa hivyo ongeza kipengele kipya kwenye faili ya
local.settings.json
kinachoitwaMAPS_KEY
. -
Endesha programu ya Functions ili kuhakikisha inaunganishwa na kuchakata ujumbe. Trigger ya
iot-hub-trigger
kutoka somo la awali pia itaendesha na kupakia blobs kwenye hifadhi.Ili kuepuka vipimo vya GPS maradufu katika hifadhi ya blob, unaweza kusimamisha programu ya Functions unayoendesha kwenye wingu. Ili kufanya hivyo, tumia amri ifuatayo:
az functionapp stop --resource-group gps-sensor \ --name <functions_app_name>
Badilisha
<functions_app_name>
na jina ulilotumia kwa programu yako ya Functions.Unaweza kuianzisha tena baadaye kwa amri ifuatayo:
az functionapp start --resource-group gps-sensor \ --name <functions_app_name>
Badilisha
<functions_app_name>
na jina ulilotumia kwa programu yako ya Functions.
Kazi - jaribu geofence kutoka trigger
Mapema katika somo hili ulitumia curl kuuliza geofence ili kuona kama pointi iko ndani au nje. Unaweza kufanya ombi la wavuti kama hilo kutoka ndani ya trigger yako.
-
Ili kuuliza geofence, unahitaji UDID yake. Ongeza kipengele kipya kwenye faili ya
local.settings.json
kinachoitwaGEOFENCE_UDID
na thamani hii. -
Fungua faili ya
__init__.py
kutoka trigger mpya yageofence-trigger
. -
Ongeza import ifuatayo juu ya faili:
import json import os import requests
Kipengele cha
requests
kinakuruhusu kufanya maombi ya API ya wavuti. Azure Maps haina SDK ya Python, unahitaji kufanya maombi ya API ya wavuti kuitumia kutoka kwa msimbo wa Python. -
Ongeza mistari 2 ifuatayo mwanzoni mwa njia ya
main
ili kupata ufunguo wa usajili wa Maps:maps_key = os.environ['MAPS_KEY'] geofence_udid = os.environ['GEOFENCE_UDID']
-
Ndani ya kitanzi cha
for event in events
, ongeza ifuatayo ili kupata latitudo na longitudo kutoka kila tukio:event_body = json.loads(event.get_body().decode('utf-8')) lat = event_body['gps']['lat'] lon = event_body['gps']['lon']
Msimbo huu hubadilisha JSON kutoka mwili wa tukio kuwa kamusi, kisha hutoa
lat
nalon
kutoka sehemu yagps
. -
Unapotumia
requests
, badala ya kujenga URL ndefu kama ulivyofanya na curl, unaweza kutumia sehemu ya URL tu na kupitisha vipengele kama kamusi. Ongeza msimbo ufuatao ili kufafanua URL ya kupiga na kusanidi vipengele: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 }
Vipengele katika kamusi ya
params
vitafanana na jozi za funguo na thamani ulizotumia ulipoita API ya wavuti kupitia curl. -
Ongeza mistari ifuatayo ya msimbo ili kupiga API ya wavuti:
response = requests.get(url, params=params) response_body = json.loads(response.text)
Hii inaita URL na vipengele, na kurudisha kitu cha majibu.
-
Ongeza msimbo ufuatao chini ya hii:
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')
Msimbo huu unadhani geometry moja, na hutoa umbali kutoka geometry hiyo moja. Kisha huandika ujumbe tofauti kulingana na umbali.
-
Endesha msimbo huu. Utaona katika matokeo ya kuandika ikiwa vipimo vya GPS viko ndani au nje ya geofence, na umbali ikiwa pointi iko ndani ya 50m. Jaribu msimbo huu na geofences tofauti kulingana na eneo la sensor yako ya GPS, jaribu kuhamisha sensor (kwa mfano kwa kuunganisha kwenye WiFi kutoka simu ya mkononi, au kwa kutumia latitudo na longitudo tofauti kwenye kifaa cha IoT cha virtual) ili kuona mabadiliko haya.
-
Unapokuwa tayari, pakia msimbo huu kwenye programu yako ya Functions kwenye wingu. Usisahau kupakia mipangilio mpya ya programu.
⚠️ Unaweza kurejelea maelekezo ya kupakia mipangilio ya programu kutoka mradi wa 2, somo la 5 ikiwa inahitajika.
⚠️ Unaweza kurejelea maelekezo ya kupakia programu yako ya Functions kutoka mradi wa 2, somo la 5 ikiwa inahitajika.
💁 Unaweza kupata msimbo huu katika folda ya code/functions.
🚀 Changamoto
Katika somo hili umeongeza geofence moja kwa kutumia faili ya GeoJSON yenye poligoni moja. Unaweza kupakia poligoni nyingi kwa wakati mmoja, mradi tu zina geometryId
tofauti katika sehemu ya properties
.
Jaribu kupakia faili ya GeoJSON yenye poligoni nyingi na rekebisha msimbo wako ili kupata ni poligoni gani vipimo vya GPS viko karibu nayo au ndani yake.
Maswali ya baada ya somo
Mapitio na Kujisomea
- Soma zaidi kuhusu geofences na baadhi ya matumizi yake kwenye ukurasa wa Geofencing kwenye Wikipedia.
- Soma zaidi kuhusu API ya geofencing ya Azure Maps kwenye Microsoft Azure Maps Spatial - Get Geofence documentation.
- Soma zaidi kuhusu vikundi vya watumiaji katika Features and terminology in Azure Event Hubs - Event consumers documentation on Microsoft docs
Kazi
Kanusho:
Hati hii imetafsiriwa kwa kutumia huduma ya kutafsiri ya AI Co-op Translator. Ingawa tunajitahidi kuhakikisha usahihi, tafadhali fahamu kuwa tafsiri za kiotomatiki zinaweza kuwa na makosa au kutokuwa sahihi. Hati ya asili katika lugha yake ya awali inapaswa kuzingatiwa kama chanzo cha mamlaka. Kwa taarifa muhimu, tafsiri ya kitaalamu ya binadamu inapendekezwa. Hatutawajibika kwa kutoelewana au tafsiri zisizo sahihi zinazotokana na matumizi ya tafsiri hii.