Condividi tramite


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

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:

  1. Accedere al portale di Azure.

  2. Nell'angolo in alto a sinistra del portale di Azure selezionare Crea una risorsa.

  3. Nella casella servizio di ricerca e marketplace digitare App per la logica.

  4. Nei risultati selezionare App per la logica. Quindi, selezionare Crea.

  5. 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.

    Screenshot of create a logic app.

  6. Al termine, selezionare Rivedi e crea. Dopo che Azure convalida le informazioni sulla risorsa dell'app per la logica, selezionare Crea.

  7. Al termine della distribuzione, selezionare Vai alla risorsa.

  8. 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.

    Screenshot of create a logic app HTTP trigger.

  9. 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.

    Screenshot of Logic App HTTP Request URL and JSON.

  10. Seleziona + Nuovo passaggio.

  11. Nella casella di ricerca digitare outlook.com email. Nell'elenco Azioni scorrere verso il basso e selezionare Invia un messaggio di posta elettronica (v2).

    Screenshot of create a logic app designer.

  12. Accedere all'account Outlook. Assicurarsi di selezionare per consentire all'app per la logica di accedere all'account. Compilare i campi per l'invio di un messaggio di posta elettronica.

    Screenshot of create a logic app send email step.

    Suggerimento

    È possibile recuperare i dati della risposta GeoJSON, ad esempio geometryId o deviceId, 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.

  13. Nell'angolo superiore sinistro di Progettazione app per la logica selezionare Salva.

  14. 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:

  1. Nell'account Mappe di Azure selezionare Sottoscrizioni.

  2. Selezionare il nome della sottoscrizione.

  3. Nel menu delle impostazioni selezionare eventi.

    Screenshot of go to Azure Maps account events.

  4. Nella pagina degli eventi selezionare + Sottoscrizione di eventi.

    Screenshot of create an Azure Maps events subscription.

  5. 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.

    Screenshot of Azure Maps events subscription details.

  6. Seleziona Crea.

  7. 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.

Diagram of geofence map in Azure Maps

Posizione 1 del macchinario (47.638237,-122.132483)

  1. Nell'app Postman selezionare Nuovo.

  2. Nella finestra Crea nuovo selezionare Richiesta HTTP.

  3. Immettere un nome di richiesta per la richiesta, ad esempio Location 1.

  4. Selezionare il metodo HTTP GET .

  5. Immettere l'URL seguente. La richiesta dovrebbe avere un aspetto simile all'URL seguente (sostituire {udid} con quello udid 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.

  6. Selezionare Invia.

  7. 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)

  1. Nell'app Postman selezionare Nuovo.

  2. Nella finestra Crea nuovo selezionare Richiesta HTTP.

  3. Immettere un nome di richiesta per la richiesta, ad esempio Posizione 2.

  4. Selezionare il metodo HTTP GET .

  5. Immettere l'URL seguente. La richiesta dovrebbe avere un aspetto simile all'URL seguente (sostituire {udid} con quello udid 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
    
  6. Selezionare Invia.

  7. 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 falsee Operations Manager non riceve alcuna notifica tramite posta elettronica.

Posizione 3 (47.63810783315048,-122.13336020708084)

  1. Nell'app Postman selezionare Nuovo.

  2. Nella finestra Crea nuovo selezionare Richiesta HTTP.

  3. Immettere un nome di richiesta per la richiesta, ad esempio Location 3.

  4. Selezionare il metodo HTTP GET .

  5. Immettere l'URL seguente. La richiesta dovrebbe avere un aspetto simile all'URL seguente (sostituire {udid} con quello udid 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
    
  6. Selezionare Invia.

  7. 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)

  1. Nell'app Postman selezionare Nuovo.

  2. Nella finestra Crea nuovo selezionare Richiesta HTTP.

  3. Immettere un nome di richiesta per la richiesta, ad esempio Location 4.

  4. Selezionare il metodo HTTP GET .

  5. Immettere l'URL seguente. La richiesta dovrebbe avere un aspetto simile all'URL seguente (sostituire {udid} con quello udid 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
    
  6. Selezionare Invia.

  7. 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 falsee Operations Manager non riceve una notifica tramite posta elettronica.

Posizione 5 (47.63799, -122.134505)

  1. Nell'app Postman selezionare Nuovo.

  2. Nella finestra Crea nuovo selezionare Richiesta HTTP.

  3. Immettere un nome di richiesta per la richiesta, ad esempio Posizione 5.

  4. Selezionare il metodo HTTP GET .

  5. Immettere l'URL seguente. La richiesta dovrebbe avere un aspetto simile all'URL seguente (sostituire {udid} con quello udid 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
    
  6. Selezionare Invia.

  7. 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 truee 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