29 KiB
Geotvoros
Piešinys sukurtas Nitya Narasimhan. Spustelėkite paveikslėlį, kad pamatytumėte didesnę versiją.
Šiame vaizdo įraše pateikiama geotvorų apžvalga ir kaip jas naudoti Azure Maps. Tai temos, kurios bus aptartos šioje pamokoje:
🎥 Spustelėkite aukščiau esantį paveikslėlį, kad peržiūrėtumėte vaizdo įrašą
Klausimynas prieš paskaitą
Įvadas
Per paskutines tris pamokas naudojote IoT technologijas, kad nustatytumėte sunkvežimių, gabenančių jūsų produkciją iš ūkio į perdirbimo centrą, buvimo vietą. Jūs rinkote GPS duomenis, siuntėte juos į debesį saugojimui ir vizualizavote juos žemėlapyje. Kitas žingsnis, siekiant padidinti tiekimo grandinės efektyvumą, yra gauti pranešimą, kai sunkvežimis artėja prie perdirbimo centro, kad darbuotojai būtų pasiruošę iškrauti naudodami krautuvus ir kitą įrangą vos tik transporto priemonė atvyks. Tokiu būdu iškrovimas vyksta greičiau, ir jums nereikia mokėti už sunkvežimio ir vairuotojo laukimą.
Šioje pamokoje sužinosite apie geotvoras – apibrėžtas geografinio ploto ribas, tokias kaip 2 km spindulio zona aplink perdirbimo centrą, ir kaip patikrinti, ar GPS koordinatės yra geotvoroje ar už jos ribų, kad galėtumėte nustatyti, ar jūsų GPS jutiklis atvyko į tam tikrą vietą ar ją paliko.
Šioje pamokoje aptarsime:
- Kas yra geotvoros
- Kaip apibrėžti geotvorą
- Kaip patikrinti taškus geotvoroje
- Kaip naudoti geotvoras serverless kode
🗑 Tai paskutinė šio projekto pamoka, todėl baigę šią pamoką ir užduotį nepamirškite išvalyti savo debesų paslaugų. Jums reikės šių paslaugų užduočiai atlikti, todėl pirmiausia įsitikinkite, kad ją užbaigėte.
Jei reikia, vadovaukitės projekto išvalymo vadovu, kad gautumėte instrukcijas, kaip tai padaryti.
Kas yra geotvoros
Geotvora yra virtuali realaus pasaulio geografinio regiono perimetro riba. Geotvoros gali būti apskritimai, apibrėžti kaip taškas ir spindulys (pavyzdžiui, 100 m pločio apskritimas aplink pastatą), arba daugiakampiai, apimantys tokias zonas kaip mokyklos teritorija, miesto ribos ar universiteto ar biuro kompleksas.
💁 Galbūt jau naudojote geotvoras, to nežinodami. Jei naudojote iOS priminimų programėlę ar Google Keep, kad nustatytumėte priminimą pagal vietą, jūs naudojote geotvorą. Šios programėlės nustato geotvorą pagal nurodytą vietą ir praneša, kai jūsų telefonas patenka į geotvorą.
Yra daug priežasčių, kodėl norėtumėte žinoti, ar transporto priemonė yra geotvoroje ar už jos ribų:
- Iškrovimo pasiruošimas – gavus pranešimą, kad transporto priemonė atvyko į vietą, komanda gali pasiruošti ją iškrauti, taip sumažinant laukimo laiką. Tai leidžia vairuotojui atlikti daugiau pristatymų per dieną su mažesniu laukimo laiku.
- Mokesčių atitikimas – kai kurios šalys, tokios kaip Naujoji Zelandija, taiko kelių mokesčius dyzeliniams automobiliams pagal jų svorį, kai jie važiuoja tik viešaisiais keliais. Naudojant geotvoras galima stebėti, kiek kilometrų nuvažiuota viešaisiais keliais, o kiek privačiais, pavyzdžiui, ūkio ar miško teritorijose.
- Vagysčių stebėjimas – jei transporto priemonė turėtų likti tam tikroje teritorijoje, pavyzdžiui, ūkyje, ir ji palieka geotvorą, tai gali reikšti, kad ji buvo pavogta.
- Vietos atitikimas – kai kurios darbo vietos, ūkio ar gamyklos dalys gali būti uždraustos tam tikroms transporto priemonėms, pavyzdžiui, neleisti transporto priemonėms, vežančioms dirbtines trąšas ir pesticidus, patekti į laukus, kuriuose auginama ekologiška produkcija. Jei geotvora yra pažeista, transporto priemonė yra už atitikties ribų, ir vairuotojas gali būti apie tai informuotas.
✅ Ar galite sugalvoti kitų geotvorų naudojimo būdų?
Azure Maps, paslauga, kurią naudojote ankstesnėje pamokoje GPS duomenims vizualizuoti, leidžia apibrėžti geotvoras ir patikrinti, ar taškas yra geotvoroje ar už jos ribų.
Kaip apibrėžti geotvorą
Geotvoros apibrėžiamos naudojant GeoJSON, taip pat kaip ir taškai, kurie buvo pridėti prie žemėlapio ankstesnėje pamokoje. Šiuo atveju, vietoj FeatureCollection su Point reikšmėmis, tai yra FeatureCollection, kuriame yra 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"
}
}
]
}
Kiekvienas daugiakampio taškas apibrėžiamas kaip ilgumos ir platumos pora masyve, o šie taškai yra masyve, kuris nustatomas kaip coordinates. Ankstesnėje pamokoje Point turėjo coordinates masyvą su 2 reikšmėmis – platuma ir ilguma, o Polygon turi masyvą masyvų, kuriuose yra 2 reikšmės – ilguma ir platuma.
💁 Atminkite, GeoJSON naudoja
ilguma, platumataškams, o neplatuma, ilguma.
Daugiakampio koordinatės masyvas visada turi 1 įrašą daugiau nei daugiakampio taškų skaičius, nes paskutinis įrašas yra toks pat kaip pirmasis, uždarant daugiakampį. Pavyzdžiui, stačiakampiui būtų 5 taškai.
Aukščiau esančiame paveikslėlyje yra stačiakampis. Daugiakampio koordinatės prasideda viršutiniame kairiajame kampe 47,-122, tada juda į dešinę iki 47,-121, tada žemyn iki 46,-121, tada į kairę iki 46,-122, tada grįžta į pradinį tašką 47,-122. Tai suteikia daugiakampiui 5 taškus – viršutinis kairysis, viršutinis dešinysis, apatinis dešinysis, apatinis kairysis ir viršutinis kairysis, kad uždarytų daugiakampį.
✅ Pabandykite sukurti GeoJSON daugiakampį aplink savo namus ar mokyklą. Naudokite tokią priemonę kaip GeoJSON.io.
Užduotis – apibrėžkite geotvorą
Norint naudoti geotvorą Azure Maps, pirmiausia ją reikia įkelti į jūsų Azure Maps paskyrą. Kai ji bus įkelta, gausite unikalų ID, kurį galėsite naudoti taškui patikrinti geotvoroje. Norėdami įkelti geotvoras į Azure Maps, turite naudoti žemėlapių žiniatinklio API. Galite naudoti įrankį, pavyzdžiui, curl, kad iškviestumėte Azure Maps žiniatinklio API.
🎓 Curl yra komandų eilutės įrankis, skirtas užklausoms į žiniatinklio galinius taškus atlikti.
-
Jei naudojate Linux, macOS arba naujesnę Windows 10 versiją, tikriausiai jau turite įdiegtą curl. Paleiskite šią komandą savo terminale arba komandų eilutėje, kad patikrintumėte:
curl --versionJei nematote curl versijos informacijos, turėsite ją įdiegti iš curl atsisiuntimų puslapio.
💁 Jei esate patyręs Postman naudotojas, galite naudoti jį vietoj curl, jei norite.
-
Sukurkite GeoJSON failą, kuriame yra daugiakampis. Jūs testuosite tai naudodami savo GPS jutiklį, todėl sukurkite daugiakampį aplink savo dabartinę vietą. Galite sukurti jį rankiniu būdu, redaguodami aukščiau pateiktą GeoJSON pavyzdį, arba naudodami tokią priemonę kaip GeoJSON.io.
GeoJSON turi turėti
FeatureCollection, kuriame yraFeaturesugeometrytipoPolygon.Taip pat PRIVALOTE pridėti
propertieselementą tame pačiame lygyje kaipgeometryelementas, ir jis turi turėtigeometryId:"properties": { "geometryId": "1" }Jei naudojate GeoJSON.io, turėsite rankiniu būdu pridėti šį elementą prie tuščio
propertieselemento, arba atsisiuntę JSON failą, arba JSON redaktoriuje programėlėje.Šis
geometryIdturi būti unikalus šiame faile. Galite įkelti kelias geotvoras kaip kelisFeaturesFeatureCollectionfaile, jei kiekviena turi skirtingągeometryId. Daugiakampiai gali turėti tą patįgeometryId, jei jie įkeliami iš skirtingų failų skirtingu laiku. -
Išsaugokite šį failą kaip
geofence.jsonir terminale arba konsolėje pereikite į vietą, kur jis išsaugotas. -
Paleiskite šią curl komandą, kad sukurtumėte geotvorą:
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.jsonPakeiskite
<subscription_key>URL adresu savo Azure Maps paskyros API raktu.URL naudojamas žemėlapių duomenims įkelti per
https://atlas.microsoft.com/mapData/uploadAPI. Užklausa apimaapi-versionparametrą, nurodantį, kurią Azure Maps API versiją naudoti. Tai leidžia API keistis laikui bėgant, išlaikant atgalinį suderinamumą. Įkeliami duomenys nustatomi kaipgeojson.Tai atliks POST užklausą į įkėlimo API ir grąžins atsakymo antraščių sąrašą, įskaitant antraštę
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🎓 Kai kviečiate žiniatinklio galinį tašką, galite perduoti parametrus užklausai, pridėdami
?, po kurio eina raktų ir reikšmių poros kaipraktas=reikšmė, atskiriant poras&. -
Azure Maps neapdoroja šios užklausos iš karto, todėl turėsite patikrinti, ar įkėlimo užklausa baigta, naudodami URL, pateiktą
locationantraštėje. Atlikite GET užklausą šiuo adresu, kad pamatytumėte būseną. Turėsite pridėti savo prenumeratos raktą prielocationURL pabaigos, pridėdami&subscription-key=<subscription_key>, pakeisdami<subscription_key>savo Azure Maps paskyros API raktu. Paleiskite šią komandą:curl --request GET '<location>&subscription-key=<subscription_key>'Pakeiskite
<location>locationantraštės reikšme ir<subscription_key>savo Azure Maps paskyros API raktu. -
Patikrinkite atsakymo
statusreikšmę. Jei ji nėraSucceeded, palaukite minutę ir bandykite dar kartą. -
Kai būsena bus
Succeeded, peržiūrėkite atsakymoresourceLocation. Jame yra informacija apie unikalų ID (vadinamą UDID) GeoJSON objektui. UDID yra reikšmė pometadata/, neįskaitantapi-version. Pavyzdžiui, jeiresourceLocationbuvo:{ "resourceLocation": "https://us.atlas.microsoft.com/mapData/metadata/7c3776eb-da87-4c52-ae83-caadf980323a?api-version=1.0" }Tada UDID būtų
7c3776eb-da87-4c52-ae83-caadf980323a.Išsaugokite šį UDID, nes jums jo prireiks geotvorai testuoti.
Kaip patikrinti taškus geotvoroje
Kai daugiakampis įkeltas į Azure Maps, galite patikrinti tašką, ar jis yra geotvoroje, ar už jos ribų. Tai atliekama naudojant žiniatinklio API užklausą, perduodant geotvoros UDID ir taško platumą bei ilgumą.
Kai atliekate šią užklausą, taip pat galite perduoti reikšmę, vadinamą searchBuffer. Ji nurodo Maps API, kokio tikslumo reikia grąžinant rezultatus. Taip yra todėl, kad GPS nėra visiškai tikslus, ir kartais vietos gali būti netikslios keliais metrais ar daugiau. Numatytoji searchBuffer reikšmė yra 50 m, tačiau galite nustatyti reikšmes nuo 0 m iki 500 m.
Kai API užklausa grąžina rezultatus, viena iš rezultatų dalių yra distance, matuojamas iki artimiausio taško geotvoros krašte. Jei taškas yra už geotvoros, reikšmė bus teigiama, jei viduje – neigiama. Jei ši reikšmė yra mažesnė už searchBuffer, grąžinama tikroji reikšmė metrais, kitaip reikšmė bus 999 arba -999. 999 reiškia, kad taškas yra už geotvoros daugiau nei searchBuffer, -999 reiškia, kad jis yra geotvoroje daugiau nei searchBuffer.
Aukščiau esančiame paveikslėlyje geotvora turi 50 m paieškos buferį.
- Taškas geotvoros centre, gerokai viduje paieškos buferio, turi atstumą -999
- Taškas gerokai už paieškos buferio ribų turi atstumą 999
- Taškas geotvoroje ir paieškos buferyje, 6 m nuo geotvoros, turi atstumą 6 m
- Taškas už geotvoros ir paieškos buferyje, 39 m nuo geotvoros, turi atstumą 39 m
Svarbu žinoti atstumą iki geotvoros krašto ir derinti šią informaciją su kitais duomenimis, tokiais kaip kiti GPS rodmenys, greitis ir kelių duomenys, priimant sprendimus pagal transporto priemonės buvimo vietą.
Pavyzdžiui, įsivaizduokite GPS rodmenis, rodančius, kad transporto priemonė važiuoja keliu, kuris eina šalia geotvoros. Jei vienas GPS rodmuo yra netikslus ir rodo, kad transporto priemonė yra geotvoroje, nors ten nėra jokio kelio, šį rodmenį galima ignoruoti.
. -
Naudokite
curl, kad atliktumėte GET užklausą šiam URL:curl --request GET '<URL>'💁 Jei gaunate atsakymo kodą
BadRequestsu klaida:Invalid GeoJSON: All feature properties should contain a geometryId, which is used for identifying the geofence.tuomet jūsų GeoJSON trūksta
propertiesskyriaus sugeometryId. Turėsite pataisyti savo GeoJSON, tada pakartoti aukščiau nurodytus veiksmus, kad iš naujo įkeltumėte ir gautumėte naują UDID. -
Atsakyme bus pateiktas
geometriessąrašas, kuriame yra kiekvienas GeoJSON apibrėžtas poligonas, naudojamas geotvorai sukurti. Kiekvienas poligonas turi 3 svarbius laukus:distance,nearestLatirnearestLon.{ "geometries": [ { "deviceId": "gps-sensor", "udId": "7c3776eb-da87-4c52-ae83-caadf980323a", "geometryId": "1", "distance": 999.0, "nearestLat": 47.645875, "nearestLon": -122.142713 } ], "expiredGeofenceGeometryId": [], "invalidPeriodGeofenceGeometryId": [] }-
nearestLatirnearestLonyra geotvoros krašto taško, esančio arčiausiai tikrinamos vietos, platuma ir ilguma. -
distanceyra atstumas nuo tikrinamos vietos iki artimiausio geotvoros krašto taško. Neigiami skaičiai reiškia, kad taškas yra geotvoros viduje, o teigiami – išorėje. Ši reikšmė bus mažesnė nei 50 (numatytasis paieškos buferis) arba 999.
-
-
Pakartokite šį procesą kelis kartus su vietomis, esančiomis tiek geotvoros viduje, tiek išorėje.
Naudokite geotvoras iš serverio be serverio kodo
Dabar galite pridėti naują trigerį prie savo „Functions“ programos, kad patikrintumėte IoT Hub GPS įvykių duomenis pagal geotvorą.
Vartotojų grupės
Kaip prisimenate iš ankstesnių pamokų, IoT Hub leidžia atkurti įvykius, kurie buvo gauti, bet dar neapdoroti. Tačiau kas nutiktų, jei prisijungtų keli trigeriai? Kaip jis žinotų, kurie įvykiai jau buvo apdoroti?
Atsakymas – jis negali! Vietoj to galite apibrėžti kelis atskirus ryšius, kad skaitytumėte įvykius, ir kiekvienas iš jų gali valdyti neperskaitytų pranešimų atkūrimą. Tai vadinama vartotojų grupėmis. Kai prisijungiate prie galinio taško, galite nurodyti, prie kurios vartotojų grupės norite prisijungti. Kiekvienas jūsų programos komponentas prisijungs prie skirtingos vartotojų grupės.
Teoriškai prie kiekvienos vartotojų grupės gali prisijungti iki 5 programų, ir jos visos gaus pranešimus, kai jie atvyks. Geriausia praktika yra leisti tik vienai programai pasiekti kiekvieną vartotojų grupę, kad būtų išvengta pranešimų dubliavimo ir užtikrinta, kad paleidus iš naujo visi eilėje esantys pranešimai būtų tinkamai apdoroti. Pavyzdžiui, jei paleistumėte savo „Functions“ programą vietoje ir debesyje vienu metu, abi apdorotų pranešimus, todėl saugykloje būtų saugomi dubliuoti blobai.
Jei peržiūrėsite function.json failą, susijusį su IoT Hub trigeriu, kurį sukūrėte ankstesnėje pamokoje, pamatysite vartotojų grupę įvykių centro trigerio susiejimo skyriuje:
"consumerGroup": "$Default"
Kai sukuriate IoT Hub, pagal numatytuosius nustatymus sukuriama $Default vartotojų grupė. Jei norite pridėti papildomą trigerį, galite tai padaryti naudodami naują vartotojų grupę.
💁 Šioje pamokoje naudosite kitą funkciją geotvorai testuoti nei tą, kuri naudojama GPS duomenims saugoti. Tai parodo, kaip naudoti vartotojų grupes ir atskirti kodą, kad būtų lengviau jį skaityti ir suprasti. Produkcijos programoje yra daug būdų, kaip tai sukurti – abi funkcijas galima įdėti į vieną funkciją, naudoti trigerį saugyklos paskyroje, kad paleistumėte funkciją geotvorai tikrinti, arba naudoti kelias funkcijas. Nėra „teisingo būdo“, viskas priklauso nuo jūsų programos ir poreikių.
Užduotis – sukurti naują vartotojų grupę
-
Paleiskite šią komandą, kad sukurtumėte naują vartotojų grupę, pavadintą
geofence, savo IoT Hub:az iot hub consumer-group create --name geofence \ --hub-name <hub_name>Pakeiskite
<hub_name>savo IoT Hub pavadinimu. -
Jei norite pamatyti visas IoT Hub vartotojų grupes, paleiskite šią komandą:
az iot hub consumer-group list --output table \ --hub-name <hub_name>Pakeiskite
<hub_name>savo IoT Hub pavadinimu. Tai parodys visas vartotojų grupes.Name ResourceGroup -------- --------------- $Default gps-sensor geofence gps-sensor
💁 Kai ankstesnėje pamokoje paleidote IoT Hub įvykių monitorių, jis prisijungė prie
$Defaultvartotojų grupės. Dėl to negalėjote paleisti įvykių monitoriaus ir įvykių trigerio vienu metu. Jei norite paleisti abu, galite naudoti kitas vartotojų grupes visoms savo funkcijų programoms ir palikti$Defaultįvykių monitoriui.
Užduotis – sukurti naują IoT Hub trigerį
-
Pridėkite naują IoT Hub įvykių trigerį prie savo
gps-triggerfunkcijų programos, kurią sukūrėte ankstesnėje pamokoje. Pavadinkite šią funkcijągeofence-trigger.⚠️ Jei reikia, galite pasinaudoti instrukcijomis, kaip sukurti IoT Hub įvykių trigerį iš 2 projekto, 5 pamokos.
-
Sujunkite IoT Hub ryšio eilutę
function.jsonfaile.local.settings.jsonyra bendra visiems funkcijų programos trigeriams. -
Atnaujinkite
consumerGroupreikšmęfunction.jsonfaile, kad ji nurodytų naujągeofencevartotojų grupę:"consumerGroup": "geofence" -
Šiame trigerio faile jums reikės „Azure Maps“ paskyros prenumeratos rakto, todėl pridėkite naują įrašą į
local.settings.jsonfailą, pavadintąMAPS_KEY. -
Paleiskite „Functions“ programą, kad įsitikintumėte, jog ji jungiasi ir apdoroja pranešimus. Ankstesnėje pamokoje sukurtas
iot-hub-triggertaip pat veiks ir įkels blobus į saugyklą.Kad išvengtumėte dubliuotų GPS nuskaitymų blobų saugykloje, galite sustabdyti debesyje veikiančią „Functions“ programą. Norėdami tai padaryti, naudokite šią komandą:
az functionapp stop --resource-group gps-sensor \ --name <functions_app_name>Pakeiskite
<functions_app_name>savo „Functions“ programos pavadinimu.Vėliau galite ją paleisti iš naujo naudodami šią komandą:
az functionapp start --resource-group gps-sensor \ --name <functions_app_name>Pakeiskite
<functions_app_name>savo „Functions“ programos pavadinimu.
Užduotis – testuoti geotvorą iš trigerio
Ankstesnėje pamokoje naudojote curl, kad užklaustumėte geotvorą ir nustatytumėte, ar taškas yra viduje, ar išorėje. Panašią užklausą galite atlikti iš savo trigerio.
-
Norėdami užklausti geotvorą, jums reikės jos UDID. Pridėkite naują įrašą į
local.settings.jsonfailą, pavadintąGEOFENCE_UDID, su šia reikšme. -
Atidarykite
__init__.pyfailą iš naujogeofence-triggertrigerio. -
Pridėkite šį importą failo viršuje:
import json import os import requestsrequestspaketas leidžia atlikti žiniatinklio API užklausas. „Azure Maps“ neturi Python SDK, todėl norėdami jį naudoti iš Python kodo, turite atlikti žiniatinklio API užklausas. -
Pridėkite šias 2 eilutes į
mainmetodo pradžią, kad gautumėte „Maps“ prenumeratos raktą:maps_key = os.environ['MAPS_KEY'] geofence_udid = os.environ['GEOFENCE_UDID'] -
Viduje
for event in eventsciklo pridėkite šį kodą, kad gautumėte platumą ir ilgumą iš kiekvieno įvykio:event_body = json.loads(event.get_body().decode('utf-8')) lat = event_body['gps']['lat'] lon = event_body['gps']['lon']Šis kodas konvertuoja JSON iš įvykio kūno į žodyną, tada ištraukia
latirlonišgpslauko. -
Naudodami
requests, vietoj ilgo URL kūrimo, kaip darėte sucurl, galite naudoti tik URL dalį ir perduoti parametrus kaip žodyną. Pridėkite šį kodą, kad apibrėžtumėte kviečiamą URL ir sukonfigūruotumėte parametrus: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 }Elementai
paramsžodyne atitiks raktų ir reikšmių poras, kurias naudojote kviesdami žiniatinklio API percurl. -
Pridėkite šias kodo eilutes, kad atliktumėte žiniatinklio API užklausą:
response = requests.get(url, params=params) response_body = json.loads(response.text)Tai kviečia URL su parametrais ir gauna atsakymo objektą.
-
Pridėkite šį kodą žemiau:
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')Šis kodas daro prielaidą, kad yra 1 geometrija, ir ištraukia atstumą iš tos vienintelės geometrijos. Tada jis registruoja skirtingas žinutes, atsižvelgiant į atstumą.
-
Paleiskite šį kodą. Žurnalo išvestyje matysite, ar GPS koordinatės yra geotvoros viduje, ar išorėje, su atstumu, jei taškas yra 50 m ribose. Išbandykite šį kodą su skirtingomis geotvoromis, atsižvelgdami į savo GPS jutiklio vietą, pabandykite perkelti jutiklį (pvz., prijungtą prie mobiliojo telefono „WiFi“ arba su skirtingomis koordinatėmis virtualiame IoT įrenginyje), kad pamatytumėte pokyčius.
-
Kai būsite pasiruošę, įkelkite šį kodą į savo „Functions“ programą debesyje. Nepamirškite įkelti naujų programos nustatymų.
⚠️ Jei reikia, galite pasinaudoti instrukcijomis, kaip įkelti programos nustatymus iš 2 projekto, 5 pamokos.
⚠️ Jei reikia, galite pasinaudoti instrukcijomis, kaip įkelti savo „Functions“ programą iš 2 projekto, 5 pamokos.
💁 Šį kodą galite rasti code/functions aplanke.
🚀 Iššūkis
Šioje pamokoje pridėjote vieną geotvorą naudodami GeoJSON failą su vienu poligonu. Galite įkelti kelis poligonus vienu metu, jei jie turi skirtingas geometryId reikšmes properties skyriuje.
Pabandykite įkelti GeoJSON failą su keliais poligonais ir pritaikykite savo kodą, kad nustatytumėte, kuris poligonas yra arčiausiai GPS koordinatės arba kuriame jis yra.
Po paskaitos testas
Peržiūra ir savarankiškas mokymasis
- Skaitykite daugiau apie geotvoras ir jų naudojimo atvejus Geotvorų puslapyje Vikipedijoje.
- Skaitykite daugiau apie „Azure Maps“ geotvorų API Microsoft Azure Maps Spatial - Get Geofence dokumentacijoje.
- Skaitykite daugiau apie vartotojų grupes „Azure Event Hubs“ funkcijų ir terminų dokumentacijoje.
Užduotis
Siųsti pranešimus naudojant Twilio
Atsakomybės apribojimas:
Šis dokumentas buvo išverstas naudojant dirbtinio intelekto vertimo paslaugą Co-op Translator. Nors siekiame tikslumo, atkreipkite dėmesį, kad automatiniai vertimai gali turėti klaidų ar netikslumų. Originalus dokumentas jo gimtąja kalba turėtų būti laikomas autoritetingu šaltiniu. Kritinei informacijai rekomenduojama naudoti profesionalų žmogaus vertimą. Mes neprisiimame atsakomybės už nesusipratimus ar klaidingus aiškinimus, kylančius dėl šio vertimo naudojimo.





