Tutorial: Einrichten eines Geofence mit Azure Maps

In diesem Tutorial werden Schritt für Schritt die Grundlagen der Erstellung und Verwendung von Azure Maps-Geofencediensten beschrieben.

Nehmen Sie das folgende Szenario als Beispiel:

Ein Baustellenleiter muss den Ein- und Ausgang von Geräten für eine Baustelle überwachen. Wenn ein Gerät den Baustellenbereich verlässt oder in den Baustellenbereich gebracht wird, erhält der Baustellenleiter eine E-Mail.

Azure Maps stellt Dienste zur Verfügung, die die Nachverfolgung des Ein- und Ausgangs von Geräten unterstützen. In diesem Lernprogramm lernen Sie Folgendes:

  • Sie laden GeoJSON-Geofencingdaten hoch, mit denen die zu überwachenden Baustellenbereiche definiert werden. Sie laden Geofences als Polygonkoordinaten in Ihr Azure-Speicherkonto hoch und verwenden dann den Datenregistrierungsdienst, um diese Daten bei Ihrem Azure Maps-Konto zu registrieren.
  • Sie richten zwei Logik-Apps ein, die ausgelöst werden können, um E-Mail-Benachrichtigungen an den Baustellenleiter zu senden, wenn Geräte in den Geofencebereich gebracht werden oder diesen verlassen.
  • Sie verwenden Azure Event Grid, um Eingangs- und Ausgangsereignisse für Ihren Azure Maps-Geofence zu abonnieren. Sie richten zwei Webhook-Ereignisabonnements ein, von denen die in Ihren beiden Logik-Apps definierten HTTP-Endpunkte aufgerufen werden. Von den Logik-Apps werden dann die entsprechenden E-Mail-Benachrichtigungen für Geräte gesendet, die in den Geofencebereich gebracht werden oder diesen verlassen.
  • Verwenden Sie die GET-API für die Geofencesuche, um Benachrichtigungen zu erhalten, wenn ein Gerät in die Geofencebereiche gebracht oder daraus entfernt wird.

Voraussetzungen

In diesem Tutorial wird die Anwendung Postman verwendet. Sie können jedoch auch eine andere API-Entwicklungsumgebung verwenden.

Wichtig

Ersetzen Sie in den URL-Beispielen {Your-Azure-Maps-Subscription-key} durch Ihren Azure Maps-Abonnementschlüssel.

Hochladen von GeoJSON-Geofencingdaten

In diesem Tutorial wird veranschaulicht, wie Geofencing-GeoJSON-Daten hochgeladen werden, die FeatureCollection enthalten. Die Merkmalsauswahl (FeatureCollection) enthält zwei Geofences, durch die polygonale Bereiche innerhalb der Baustelle definiert werden. Für den ersten Geofence sind keine Ablaufzeit und keine Einschränkungen festgelegt. Der zweite kann nur während der Geschäftszeiten (9:00 bis 17:00 Uhr Pacific Time) abgefragt werden und ist nach dem 1. Januar 2022 nicht mehr gültig. Weitere Informationen zum GeoJSON-Format finden Sie unter Geofencing von GeoJSON-Daten.

Erstellen Sie die JSON-Geofence-Datei mithilfe der folgenden Geofence-Daten. Als Nächstes laden Sie diese Datei in Ihr Azure-Speicherkonto hoch.

{
   "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
             }
           ]
         }
       }
     }
   ]
}

Führen Sie die im Artikel zum Erstellen der Datenregistrierung beschriebenen Schritte aus, um die Geofence-JSON-Datei in Ihr Azure-Speicherkonto hochzuladen und in Ihrem Azure Karten-Konto zu registrieren.

Wichtig

Notieren Sie sich unbedingt den Wert des eindeutigen Bezeichners (udid), da Sie ihn benötigen werden. Mit udid referenzieren Sie aus Ihrem Quellcode und Ihren HTTP-Anforderungen den Geofence, den Sie in Ihr Azure-Speicherkonto hochgeladen haben.

Erstellen von Workflows in Azure Logic Apps

Erstellen Sie als Nächstes zwei Logik-App-Endpunkte, die eine E-Mail-Benachrichtigung auslösen.

So erstellen Sie die Logik-Apps

  1. Melden Sie sich beim Azure-Portal an.

  2. Wählen Sie im Azure-Portal oben links die Option Ressource erstellen aus.

  3. Geben Sie im Feld "Suchdienst s" und "Marketplace" "Logic App" ein.

  4. Wählen Sie in den Ergebnissen Logik-App aus. Wählen Sie anschließend Erstellen.

  5. Geben Sie auf der Seite Logik-App die folgenden Werte ein:

    • Das Abonnement, das Sie für diese Logik-App verwenden möchten.
    • Den Namen der Ressourcengruppe für diese Logik-App. Sie können für die Ressourcengruppe die Option Neu erstellen oder Vorhandene verwenden auswählen.
    • Den Namen Ihrer Logik-App. Verwenden Sie hier den Namen Equipment-Enter.
    • Wählen Sie "Verbrauch" als Plantyp aus. Weitere Informationen finden Sie in der Dokumentation zur Logik-App unter Abrechnungs- und Preismodelle .

    Behalten Sie in diesem Tutorial für alle anderen Werte die Standardeinstellungen bei.

    Screenshot of create a logic app.

  6. Wenn Sie fertig sind, wählen Sie "Überprüfen" und "Erstellen" aus. Warten Sie, bis Azure die Informationen zu Ihrer Logik-App-Ressource überprüft hat, und wählen Sie anschließend Erstellen aus.

  7. Wählen Sie die Option Zu Ressource wechseln aus, nachdem die Bereitstellung erfolgreich abgeschlossen wurde.

  8. Wählen Sie im Abschnitt "Entwicklungstools" im Menü der linken Seite den Befehl "Logik-App-Designer" aus, scrollen Sie nach unten zum Startbereich mit einem allgemeinen Triggerabschnitt. Wählen Sie Beim Empfang einer HTTP-Anforderung aus.

    Screenshot of create a logic app HTTP trigger.

  9. Wählen Sie oben rechts im Logik-App-Designer die Option Speichern aus. Die HTTP-POST-URL wird automatisch generiert. Speichern Sie die URL. Sie wird im nächsten Abschnitt zum Erstellen eines Ereignisendpunkts benötigt.

    Screenshot of Logic App HTTP Request URL and JSON.

  10. Wählen Sie + Neuer Schritt aus.

  11. Geben Sie in das Suchfeld outlook.com email ein. Scrollen Sie in der Liste Aktionen nach unten, und wählen Sie E-Mail senden (V2) aus.

    Screenshot of create a logic app designer.

  12. Melden Sie sich bei Ihrem Outlook-Konto an. Wählen Sie Ja aus, damit die Logik-App auf das Konto zugreifen kann. Füllen Sie die Felder für das Senden einer E-Mail aus.

    Screenshot of create a logic app send email step.

    Tipp

    Sie können GeoJSON-Antwortdaten, z. B. geometryId oder deviceId, in Ihren E-Mail-Benachrichtigungen abrufen. Sie können Logic Apps so konfigurieren, dass die von Event Grid gesendeten Daten gelesen werden. Weitere Informationen zum Konfigurieren von Logic Apps für die Nutzung und Übergabe von Ereignisdaten in E-Mail-Benachrichtigungen finden Sie unter Tutorial: Senden von E-Mail-Benachrichtigungen zu Azure IoT Hub-Ereignissen mit Event Grid und Logic Apps.

  13. Wählen Sie links oben im Logik-App-Designer die Option Speichern aus.

  14. Wiederholen Sie den Vorgang, um eine zweite Logik-App zu erstellen, die den Baustellenleiter benachrichtigt, wenn Geräte den Baustellenbereich verlassen. Geben Sie der Logik-App den Namen Equipment-Exit.

Erstellen von Abonnements für Azure Maps-Ereignisse

Azure Maps unterstützt drei Ereignistypen. In diesem Tutorial erfahren Sie, wie Sie Abonnements für die folgenden beiden Ereignisse erstellen:

  • Geofencingereignisse bei Eintritt
  • Geofencingereignisse bei Austritt

Erstellen Sie einen Geofenceaustritt, und geben Sie Ereignisabonnements ein:

  1. Wählen Sie in Ihrem Azure Maps-Konto Abonnements aus.

  2. Wählen Sie Ihren Abonnementnamen aus.

  3. Wählen Sie im Einstellungsmenü Ereignisse aus.

    Screenshot of go to Azure Maps account events.

  4. Wählen Sie auf der Seite „Ereignisse“ die Option + Ereignisabonnement aus.

    Screenshot of create an Azure Maps events subscription.

  5. Geben Sie auf der Seite Ereignisabonnement erstellen die folgenden Werte ein:

    • Den Namen des Ereignisabonnements.
    • Das Ereignisschema muss Event Grid-Schema lauten.
    • Der Name des Systemthemas für dieses Ereignisabonnement, der in diesem Fall Contoso-Construction lautet.
    • Wählen Sie unter Nach Ereignistypen filtern die Option Geofence Entered (Eingang in Geofence) als Ereignistyp aus.
    • Wählen Sie unter Endpunkttyp die Option Web Hook (Webhook) aus.
    • Kopieren Sie unter Endpunkt die HTTP-POST-URL für den Logik-App-Eingangsendpunkt, den Sie im vorherigen Abschnitt erstellt haben. Sollten Sie die URL nicht gespeichert haben, können Sie zum Logik-App-Designer zurückkehren und sie im Schritt für den HTTP-Trigger kopieren.

    Screenshot of Azure Maps events subscription details.

  6. Wählen Sie Erstellen aus.

  7. Wiederholen Sie denselben Prozess für das Geofencingereignis beim Austritt. Wählen Sie als Ereignistyp unbedingt Geofence Exited aus.

Verwenden der Spatial Geofence-GET-API

Als Nächstes verwenden Sie die Spatial Geofence-GET-API, um E-Mail-Benachrichtigungen an den Baustellenleiter zu senden, wenn ein Gerät in den Geofencebereich gebracht oder daraus entfernt wird.

Jedes Gerät verfügt über eine deviceId. In diesem Tutorial verfolgen Sie ein einzelnes Gerät mit der eindeutigen ID device_1 nach.

Das folgende Diagramm zeigt die fünf Positionen des Geräts im Zeitverlauf – beginnend mit der Startposition, die sich außerhalb der Geofences befindet. Die Startposition ist in diesem Tutorial nicht definiert, da Sie das Gerät hierfür nicht abfragen.

Wenn Sie die Spatial Geofence-GET-API mit einer Geräteposition abfragen, die angibt, dass das Gerät erstmals in den Geofencebereich gebracht wurde oder diesen verlassen hat, wird von Event Grid der entsprechende Logik-App-Endpunkt aufgerufen. Hierüber wird dann eine E-Mail-Benachrichtigung an den Baustellenleiter gesendet.

In den folgenden Abschnitten werden jeweils API-Anforderungen mit den fünf verschiedenen Positionskoordinaten des Geräts gesendet.

Diagram of geofence map in Azure Maps

Geräteposition 1 (47,638237,-122,132483)

  1. Klicken Sie in der Postman-App auf New (Neu).

  2. Wählen Sie im Fenster Create New (Neu erstellen) die Option HTTP Request (HTTP-Anforderung) aus.

  3. Geben Sie einen Request name (Anforderungsname) für die Anforderung ein, z. B. Standort 1.

  4. Wählen Sie als HTTP-Methode GET aus.

  5. Geben Sie die folgende URL ein. Die Anforderung sollte der folgenden URL ähneln. (Ersetzen Sie {udid} durch die udid, die Sie im Abschnitt Hochladen von GeoJSON-Geofencingdaten gespeichert haben.)

    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
    

    Hinweis

    Ersetzen Sie {geography} durch Ihren geografischen Bereich. Weitere Informationen finden Sie unter Geografischer Bereich des Azure Maps-Dienstes und in der Spatial Geofence Get API.

  6. Wählen Sie Send (Senden) aus.

  7. Die Antwort sollte in etwa wie das folgende GeoJSON-Fragment aussehen:

    {
      "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
    }
    

In der obigen GeoJSON-Antwort bedeutet die negative Entfernung zum Geofence für den Hauptbereich, dass sich das Gerät innerhalb des Geofencebereichs befindet. Die positive Entfernung vom Geofence für den Unterbereich bedeutet, dass sich das Gerät außerhalb des Unterbereichs befindet. Da dieses Gerät zum ersten Mal innerhalb des Geofence für den Hauptbereich ermittelt wurde, wird der Parameter isEventPublished auf true festgelegt. Der Baustellenleiter erhält eine E-Mail-Benachrichtigung mit dem Hinweis, dass ein Gerät in den Geofencebereich gebracht wurde.

Position 2 (47.63800,-122.132531)

  1. Klicken Sie in der Postman-App auf New (Neu).

  2. Wählen Sie im Fenster Create New (Neu erstellen) die Option HTTP Request (HTTP-Anforderung) aus.

  3. Geben Sie einen Request name (Anforderungsname) für die Anforderung ein, z. B. Standort 2.

  4. Wählen Sie als HTTP-Methode GET aus.

  5. Geben Sie die folgende URL ein. Die Anforderung sollte der folgenden URL ähneln. (Ersetzen Sie {udid} durch die udid, die Sie im Abschnitt Hochladen von GeoJSON-Geofencingdaten gespeichert haben.)

    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. Wählen Sie Send (Senden) aus.

  7. Die Antwort sollte in etwa wie das folgende GeoJSON-Fragment aussehen:

    {
      "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
    }
    

In der obigen GeoJSON-Antwort befindet sich das Gerät weiterhin innerhalb des Geofence für den Hauptbereich und wurde nicht in den Geofence für den Unterbereich gebracht. Der Parameter isEventPublished wird daher auf false festgelegt, und der Baustellenleiter erhält keine E-Mail-Benachrichtigungen.

Position 3 (47.63810783315048,-122.13336020708084)

  1. Klicken Sie in der Postman-App auf New (Neu).

  2. Wählen Sie im Fenster Create New (Neu erstellen) die Option HTTP Request (HTTP-Anforderung) aus.

  3. Geben Sie einen Request name (Anforderungsname) für die Anforderung ein, z. B. Standort 3.

  4. Wählen Sie als HTTP-Methode GET aus.

  5. Geben Sie die folgende URL ein. Die Anforderung sollte der folgenden URL ähneln. (Ersetzen Sie {udid} durch die udid, die Sie im Abschnitt Hochladen von GeoJSON-Geofencingdaten gespeichert haben.)

      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. Wählen Sie Send (Senden) aus.

  7. Die Antwort sollte in etwa wie das folgende GeoJSON-Fragment aussehen:

    {
      "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
    }
    

In der obigen GeoJSON-Antwort befindet sich das Gerät weiterhin innerhalb des Geofence für den Hauptbereich, aber zusätzlich auch im Geofence für den Unterbereich. Der Parameter isEventPublished wird daher auf true festgelegt. Der Baustellenleiter erhält eine E-Mail-Benachrichtigung mit dem Hinweis, dass das Gerät in einen Geofencebereich gebracht wurde.

Hinweis

Falls das Gerät außerhalb der Arbeitszeit in den Unterbereich gebracht wurde, wird kein Ereignis veröffentlicht, und der Baustellenleiter erhält keine Benachrichtigungen.

Position 4 (47.637988,-122.1338344)

  1. Klicken Sie in der Postman-App auf New (Neu).

  2. Wählen Sie im Fenster Create New (Neu erstellen) die Option HTTP Request (HTTP-Anforderung) aus.

  3. Geben Sie einen Request name (Anforderungsname) für die Anforderung ein, z. B. Standort 4.

  4. Wählen Sie als HTTP-Methode GET aus.

  5. Geben Sie die folgende URL ein. Die Anforderung sollte der folgenden URL ähneln. (Ersetzen Sie {udid} durch die udid, die Sie im Abschnitt Hochladen von GeoJSON-Geofencingdaten gespeichert haben.)

    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. Wählen Sie Send (Senden) aus.

  7. Die Antwort sollte in etwa wie das folgende GeoJSON-Fragment aussehen:

    {
      "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
    }
    

In der obigen GeoJSON-Antwort befindet sich das Gerät weiterhin innerhalb des Geofence für den Hauptbereich, aber hat den Geofence für den Unterbereich verlassen. Beachten Sie hierbei aber, dass der Wert userTime nach dem in den Geofencedaten definierten Ablauftermin (expiredTime) liegt. Der Parameter isEventPublished wird deshalb auf false festgelegt, und der Baustellenleiter erhält keine E-Mail-Benachrichtigung.

Position 5 (47,63799, -122,134505)

  1. Klicken Sie in der Postman-App auf New (Neu).

  2. Wählen Sie im Fenster Create New (Neu erstellen) die Option HTTP Request (HTTP-Anforderung) aus.

  3. Geben Sie einen Request name (Anforderungsname) für die Anforderung ein, z. B. Standort 5.

  4. Wählen Sie als HTTP-Methode GET aus.

  5. Geben Sie die folgende URL ein. Die Anforderung sollte der folgenden URL ähneln. (Ersetzen Sie {udid} durch die udid, die Sie im Abschnitt Hochladen von GeoJSON-Geofencingdaten gespeichert haben.)

    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. Wählen Sie Send (Senden) aus.

  7. Die Antwort sollte in etwa wie das folgende GeoJSON-Fragment aussehen:

    {
      "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
    }
    

In der obigen GeoJSON-Antwort wurde das Gerät aus dem Geofence für den Hauptbereich entfernt. Der Parameter isEventPublished wird daher auf true festgelegt, und der Baustellenleiter erhält eine E-Mail-Benachrichtigung mit dem Hinweis, dass das Gerät aus einem Geofencebereich entfernt wurde.

Sie können auch E-Mail-Benachrichtigungen mithilfe von Ereignisraster- und Logik-Apps senden. Weitere Informationen finden Sie unter Ereignishandler in Azure Event Grid.

Bereinigen von Ressourcen

Es sind keine zu bereinigenden Ressourcen vorhanden.

Nächste Schritte