Esercitazione: Configurare un recinto virtuale usando Mappe di Azure
Questa esercitazione illustra le basi per creare e usare i servizi di recinto virtuale di Mappe di Azure.
Prendi in considerazione lo scenario seguente:
Il direttore di un cantiere in costruzione deve monitorare i macchinari che entrano ed escono dal perimetro del cantiere. Ogni volta che un'attrezzatura esce o entra in questi perimetri, viene inviata una notifica tramite posta elettronica a Operations Manager.
Mappe di Azure fornisce servizi per supportare il tracciamento delle attrezzature che entrano ed escono dall'area di costruzione. Questa esercitazione illustra come:
- Caricare i dati GeoJSON di geofencing che definiscono le aree del cantiere da monitorare. Si caricheranno i recinti virtuali come coordinate poligono nell'account di archiviazione di Azure, quindi si userà il servizio registro dati per registrare tali dati con l'account Mappe di Azure.
- Configurare due app per la logica che, quando attivate, invieranno notifiche tramite posta elettronica al direttore dei lavori del cantiere quando i macchinari entrano ed escono dall'area del recinto virtuale.
- Usare Griglia di eventi di Azure per sottoscrivere gli eventi di entrata e uscita dal recinto virtuale di Mappe di Azure. Configurare due sottoscrizioni di eventi webhook che chiameranno gli endpoint HTTP definiti nelle due app per la logica. Le app per la logica invieranno quindi le notifiche di posta elettronica appropriate per i macchinari che escono o entrano nel recinto virtuale.
- Usare l'API GET di ricerca recinto virtuale per ricevere notifiche quando un macchinario esce ed entra nelle aree del recinto virtuale.
Prerequisiti
- Un account Mappe di Azure
- Una chiave di sottoscrizione
- Un account di archiviazione di Azure
Questa esercitazione usa l'applicazione Postman , ma è possibile usare un ambiente di sviluppo delle API diverso.
Importante
Negli esempi di URL sostituire {Your-Azure-Maps-Subscription-key}
con la chiave di sottoscrizione Mappe di Azure.
Caricare i dati GeoJSON di geofencing
Questa esercitazione illustra come caricare i dati GeoJSON di geofencing che contengono un oggetto FeatureCollection
. La FeatureCollection
contiene due recinti virtuali che definiscono le aree poligonali all'interno del cantiere. Il primo recinto virtuale non presenta alcuna scadenza o restrizione. Il secondo può essere sottoposto a query solo su durante l'orario di ufficio (9.00-5.00 PM nel fuso orario Pacifico) e non sarà più valido dopo il 1° gennaio 2022. Per altre informazioni sul formato GeoJSON, vedere Dati GeoJSON di geofencing.
Creare il file JSON del recinto virtuale usando i dati recinto virtuale seguenti. Questo file verrà caricato nell'account di archiviazione di Azure.
{
"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"
}
},
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
-122.13374376296996,
47.63784758098976
],
[
-122.13277012109755,
47.63784577367854
],
[
-122.13314831256866,
47.6382813338708
],
[
-122.1334782242775,
47.63827591198201
],
[
-122.13374376296996,
47.63784758098976
]
]
]
},
"properties": {
"geometryId": "2",
"validityTime": {
"expiredTime": "2022-01-01T00:00:00",
"validityPeriod": [
{
"startTime": "2020-07-15T16:00:00",
"endTime": "2020-07-15T24:00:00",
"recurrenceType": "Daily",
"recurrenceFrequency": 1,
"businessDayOnly": true
}
]
}
}
}
]
}
Seguire i passaggi descritti nell'articolo Come creare il registro dati per caricare il file JSON del recinto virtuale nell'account di archiviazione di Azure e registrarlo nell'account di Mappe di Azure.
Importante
Assicurarsi di prendere nota del valore di identificatore univoco (udid
) necessario. udid
è il modo in cui si fa riferimento al recinto virtuale caricato nell'account di archiviazione di Azure dal codice sorgente e dalle richieste HTTP.
Creare flussi di lavoro in App per la logica di Azure
Creare quindi due endpoint dell'app per la logica che attivano una notifica di posta elettronica.
Per creare le app per la logica:
Accedere al portale di Azure.
Nell'angolo in alto a sinistra del portale di Azure selezionare Crea una risorsa.
Nella casella servizio di ricerca e marketplace digitare App per la logica.
Nei risultati selezionare App per la logica. Quindi, selezionare Crea.
Nella pagina App per la logica immettere i valori seguenti:
- La sottoscrizione da usare per l'app per la logica.
- Il nome del gruppo di risorse per l'app per la logica. Per il gruppo di risorse è possibile selezionare l'opzione Crea nuovo o Usa esistente.
- Il nome dell'app per la logica. In questo caso usare
Equipment-Enter
come nome. - Selezionare Consumo come tipo di piano. Per altre informazioni, vedere Modelli di fatturazione e prezzi nella documentazione dell'app per la logica.
Ai fini di questa esercitazione, mantenere le impostazioni predefinite per tutti gli altri valori.
Al termine, selezionare Rivedi e crea. Dopo che Azure convalida le informazioni sulla risorsa dell'app per la logica, selezionare Crea.
Al termine della distribuzione, selezionare Vai alla risorsa.
Selezionare Progettazione app per la logica nella sezione Strumenti di sviluppo nel menu a sinistra, scorrere verso il basso fino alla sezione Inizia con un trigger comune. Selezionare Alla ricezione di una richiesta HTTP.
Nell'angolo in alto a destra di Progettazione app per la logica selezionare Salva. Viene automaticamente generato l'URL POST HTTP. Salvare l'URL. Sarà necessario nella sezione successiva per creare un endpoint di evento.
Seleziona + Nuovo passaggio.
Nella casella di ricerca digitare
outlook.com email
. Nell'elenco Azioni scorrere verso il basso e selezionare Invia un messaggio di posta elettronica (v2).Accedere all'account Outlook. Assicurarsi di selezionare Sì per consentire all'app per la logica di accedere all'account. Compilare i campi per l'invio di un messaggio di posta elettronica.
Suggerimento
È possibile recuperare i dati della risposta GeoJSON, ad esempio
geometryId
odeviceId
, nelle notifiche tramite posta elettronica. È possibile configurare App per la logica per leggere i dati inviati da Griglia di eventi. Per informazioni su come configurare App per la logica per l'utilizzo e il passaggio dei dati degli eventi nelle notifiche tramite posta elettronica, vedere Esercitazione: Inviare notifiche tramite posta elettronica sugli eventi hub IoT di Azure tramite Griglia di eventi e App per la logica.Nell'angolo superiore sinistro di Progettazione app per la logica selezionare Salva.
Per creare una seconda app per la logica per notificare al responsabile quando l'attrezzatura esce dal cantiere, ripetere lo stesso processo. Assegnare all'app per la logica il nome
Equipment-Exit
.
Creare le sottoscrizioni di eventi di Mappe di Azure
Mappe di Azure supporta tre tipi di eventi. Questa esercitazione illustra come creare sottoscrizioni ai due eventi seguenti:
- Eventi di immissione del recinto virtuale
- Eventi di uscita del recinto virtuale
Creare l'uscita dal recinto virtuale e immettere sottoscrizioni di eventi:
Nell'account Mappe di Azure selezionare Sottoscrizioni.
Selezionare il nome della sottoscrizione.
Nel menu delle impostazioni selezionare eventi.
Nella pagina degli eventi selezionare + Sottoscrizione di eventi.
Nella pagina Crea sottoscrizione di eventi immettere i valori seguenti:
- In Nome specificare un nome per la sottoscrizione di eventi.
- In Schema evento selezionare Schema griglia di eventi.
- Il valore di Nome dell'argomento del sistema per questa sottoscrizione di eventi, che in questo caso è
Contoso-Construction
. - Per Filtra per tipi di evento, scegliere
Geofence Entered
come tipo di evento. - Per Tipo di endpoint, scegliere
Web Hook
. - Per Endpoint, copiare l'URL POST HTTP per l'endpoint di entrata dell'app per la logica creato nella sezione precedente. Se si è dimenticato di salvarlo, basta tornare in Progettazione app per la logica e copiarlo dal passaggio relativo al trigger HTTP.
Seleziona Crea.
Ripetere lo stesso processo per l'evento di uscita del recinto virtuale. Assicurarsi di scegliere
Geofence Exited
come tipo di evento.
Usare l'API spaziale Get Geofence
Successivamente, si usa l'API Spatial Geofence Get per inviare notifiche tramite posta elettronica a Operations Manager quando un'attrezzatura entra o esce dai recinti virtuali.
Ogni macchinario è associato a un valore deviceId
. In questa esercitazione verrà monitorato un singolo macchinario il cui ID univoco è device_1
.
Il diagramma seguente mostra le cinque posizioni del macchinario nel tempo, a partire dalla posizione Start, che si trova all'esterno dei recinti virtuali. Ai fini di questa esercitazione, il percorso di avvio non è definito, perché non si esegue una query sul dispositivo in tale posizione.
Quando si esegue una query sull'API Get geofence spaziale con una posizione dell'attrezzatura che indica l'ingresso o l'uscita iniziale del recinto virtuale, Griglia di eventi chiama l'endpoint dell'app per la logica appropriato per inviare una notifica tramite posta elettronica a Operations Manager.
Ognuna delle sezioni seguenti crea richieste API Geofencing usando le cinque diverse coordinate di posizione del macchinario.
Posizione 1 del macchinario (47.638237,-122.132483)
Nell'app Postman selezionare Nuovo.
Nella finestra Crea nuovo selezionare Richiesta HTTP.
Immettere un nome di richiesta per la richiesta, ad esempio Location 1.
Selezionare il metodo HTTP GET .
Immettere l'URL seguente. La richiesta dovrebbe avere un aspetto simile all'URL seguente (sostituire
{udid}
con quelloudid
salvato nella sezione Caricare i dati GeoJSON geofencing).https://{geography}.atlas.microsoft.com/spatial/geofence/json?subscription-key={Your-Azure-Maps-Subscription-key}&api-version=2022-08-01&deviceId=device_01&udid={udid}&lat=47.638237&lon=-122.1324831&searchBuffer=5&isAsync=True&mode=EnterAndExit
Nota
Sostituire {geography} con l'ambito geografico. Per altre informazioni, vedere Mappe di Azure ambito geografico del servizio e l'API Get geofence spaziale.
Selezionare Invia.
La risposta dovrebbe essere simile al frammento GeoJSON seguente:
{ "geometries": [ { "deviceId": "device_1", "udId": "64f71aa5-bbee-942d-e351-651a6679a7da", "geometryId": "1", "distance": -999.0, "nearestLat": 47.638291, "nearestLon": -122.132483 }, { "deviceId": "device_1", "udId": "64f71aa5-bbee-942d-e351-651a6679a7da", "geometryId": "2", "distance": 999.0, "nearestLat": 47.638053, "nearestLon": -122.13295 } ], "expiredGeofenceGeometryId": [], "invalidPeriodGeofenceGeometryId": [], "isEventPublished": true }
Nella risposta GeoJSON riportata sopra la distanza negativa dal recinto virtuale del cantiere principale indica che il macchinario si trova all'interno del recinto virtuale. La distanza positiva dal recinto virtuale del cantiere secondario indica che il macchinario si trova al di fuori del recinto virtuale del cantiere secondario. Poiché questa è la prima volta che il dispositivo si trova all'interno del recinto virtuale del cantiere principale, il parametro isEventPublished
è impostato su true
. Operations Manager riceve una notifica tramite posta elettronica che indica che l'attrezzatura è entrata nel recinto virtuale.
Posizione 2 (47.63800,-122.132531)
Nell'app Postman selezionare Nuovo.
Nella finestra Crea nuovo selezionare Richiesta HTTP.
Immettere un nome di richiesta per la richiesta, ad esempio Posizione 2.
Selezionare il metodo HTTP GET .
Immettere l'URL seguente. La richiesta dovrebbe avere un aspetto simile all'URL seguente (sostituire
{udid}
con quelloudid
salvato nella sezione Caricare i dati GeoJSON geofencing).https://{geography}.atlas.microsoft.com/spatial/geofence/json?subscription-key={Your-Azure-Maps-Subscription-key}&api-version=2022-08-01&deviceId=device_01&udId={udId}&lat=47.63800&lon=-122.132531&searchBuffer=5&isAsync=True&mode=EnterAndExit
Selezionare Invia.
La risposta dovrebbe essere simile al frammento GeoJSON seguente:
{ "geometries": [ { "deviceId": "device_01", "udId": "64f71aa5-bbee-942d-e351-651a6679a7da", "geometryId": "1", "distance": -999.0, "nearestLat": 47.637997, "nearestLon": -122.132399 }, { "deviceId": "device_01", "udId": "64f71aa5-bbee-942d-e351-651a6679a7da", "geometryId": "2", "distance": 999.0, "nearestLat": 47.63789, "nearestLon": -122.132809 } ], "expiredGeofenceGeometryId": [], "invalidPeriodGeofenceGeometryId": [], "isEventPublished": false }
Nella risposta GeoJSON riportata sopra il macchinario è rimasto nel recinto virtuale del cantiere principale e non è entrato in quello del cantiere secondario. Di conseguenza, il isEventPublished
parametro è impostato su false
e Operations Manager non riceve alcuna notifica tramite posta elettronica.
Posizione 3 (47.63810783315048,-122.13336020708084)
Nell'app Postman selezionare Nuovo.
Nella finestra Crea nuovo selezionare Richiesta HTTP.
Immettere un nome di richiesta per la richiesta, ad esempio Location 3.
Selezionare il metodo HTTP GET .
Immettere l'URL seguente. La richiesta dovrebbe avere un aspetto simile all'URL seguente (sostituire
{udid}
con quelloudid
salvato nella sezione Caricare i dati GeoJSON geofencing).https://{geography}.atlas.microsoft.com/spatial/geofence/json?subscription-key={Your-Azure-Maps-Subscription-key}&api-version=2022-08-01&deviceId=device_01&udid={udid}&lat=47.63810783315048&lon=-122.13336020708084&searchBuffer=5&isAsync=True&mode=EnterAndExit
Selezionare Invia.
La risposta dovrebbe essere simile al frammento GeoJSON seguente:
{ "geometries": [ { "deviceId": "device_01", "udId": "64f71aa5-bbee-942d-e351-651a6679a7da", "geometryId": "1", "distance": -999.0, "nearestLat": 47.638294, "nearestLon": -122.133359 }, { "deviceId": "device_01", "udId": "64f71aa5-bbee-942d-e351-651a6679a7da", "geometryId": "2", "distance": -999.0, "nearestLat": 47.638161, "nearestLon": -122.133549 } ], "expiredGeofenceGeometryId": [], "invalidPeriodGeofenceGeometryId": [], "isEventPublished": true }
Nella risposta GeoJSON riportata sopra il macchinario è rimasto nel recinto virtuale del cantiere principale, ma è entrato in quello del cantiere secondario. Di conseguenza, il parametro isEventPublished
è impostato su true
. Operations Manager riceve una notifica tramite posta elettronica che indica che l'attrezzatura è entrata in un recinto virtuale.
Nota
Se il macchinario si fosse spostato nel cantiere secondario dopo l'orario lavorativo, non sarebbe stato pubblicato alcun evento e il direttore dei lavori non avrebbe ricevuto alcuna notifica.
Posizione 4 (47.637988,-122.1338344)
Nell'app Postman selezionare Nuovo.
Nella finestra Crea nuovo selezionare Richiesta HTTP.
Immettere un nome di richiesta per la richiesta, ad esempio Location 4.
Selezionare il metodo HTTP GET .
Immettere l'URL seguente. La richiesta dovrebbe avere un aspetto simile all'URL seguente (sostituire
{udid}
con quelloudid
salvato nella sezione Caricare i dati GeoJSON geofencing).https://{geography}.atlas.microsoft.com/spatial/geofence/json?subscription-key={Your-Azure-Maps-Subscription-key}&api-version=2022-08-01&deviceId=device_01&udid={udid}&lat=47.637988&userTime=2023-01-16&lon=-122.1338344&searchBuffer=5&isAsync=True&mode=EnterAndExit
Selezionare Invia.
La risposta dovrebbe essere simile al frammento GeoJSON seguente:
{ "geometries": [ { "deviceId": "device_01", "udId": "64f71aa5-bbee-942d-e351-651a6679a7da", "geometryId": "1", "distance": -999.0, "nearestLat": 47.637985, "nearestLon": -122.133907 } ], "expiredGeofenceGeometryId": [ "2" ], "invalidPeriodGeofenceGeometryId": [], "isEventPublished": false }
Nella risposta GeoJSON riportata sopra il macchinario è rimasto nel recinto virtuale del cantiere principale, ma è uscito da quello del cantiere secondario. Si noti tuttavia che il valore di userTime
è successivo al valore di expiredTime
definito nei dati del recinto virtuale. Di conseguenza, il isEventPublished
parametro è impostato su false
e Operations Manager non riceve una notifica tramite posta elettronica.
Posizione 5 (47.63799, -122.134505)
Nell'app Postman selezionare Nuovo.
Nella finestra Crea nuovo selezionare Richiesta HTTP.
Immettere un nome di richiesta per la richiesta, ad esempio Posizione 5.
Selezionare il metodo HTTP GET .
Immettere l'URL seguente. La richiesta dovrebbe avere un aspetto simile all'URL seguente (sostituire
{udid}
con quelloudid
salvato nella sezione Caricare i dati GeoJSON geofencing).https://{geography}.atlas.microsoft.com/spatial/geofence/json?subscription-key={Your-Azure-Maps-Subscription-key}&api-version=2022-08-01&deviceId=device_01&udid={udid}&lat=47.63799&lon=-122.134505&searchBuffer=5&isAsync=True&mode=EnterAndExit
Selezionare Invia.
La risposta dovrebbe essere simile al frammento GeoJSON seguente:
{ "geometries": [ { "deviceId": "device_01", "udId": "64f71aa5-bbee-942d-e351-651a6679a7da", "geometryId": "1", "distance": -999.0, "nearestLat": 47.637985, "nearestLon": -122.133907 }, { "deviceId": "device_01", "udId": "64f71aa5-bbee-942d-e351-651a6679a7da", "geometryId": "2", "distance": 999.0, "nearestLat": 47.637945, "nearestLon": -122.133683 } ], "expiredGeofenceGeometryId": [], "invalidPeriodGeofenceGeometryId": [], "isEventPublished": true }
Nella risposta GeoJSON riportata sopra il macchinario è uscito dal recinto virtuale del cantiere principale. Di conseguenza, il isEventPublished
parametro è impostato su true
e Operations Manager riceve una notifica tramite posta elettronica che indica che l'attrezzatura ha chiuso un recinto virtuale.
È anche possibile inviare notifiche tramite posta elettronica usando Griglia di eventi e App per la logica. Per altre informazioni, vedere Gestori eventi in Griglia di eventi di Azure.
Pulire le risorse
Non sono presenti risorse che richiedono la pulizia.
Passaggi successivi
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per