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
- Ein Azure Maps-Konto
- Ein Abonnementschlüssel
- Ein Azure Storage-Konto
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
Melden Sie sich beim Azure-Portal an.
Wählen Sie im Azure-Portal oben links die Option Ressource erstellen aus.
Geben Sie im Feld "Suchdienst s" und "Marketplace" "Logic App" ein.
Wählen Sie in den Ergebnissen Logik-App aus. Wählen Sie anschließend Erstellen.
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.
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.
Wählen Sie die Option Zu Ressource wechseln aus, nachdem die Bereitstellung erfolgreich abgeschlossen wurde.
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.
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.
Wählen Sie + Neuer Schritt aus.
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.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.
Tipp
Sie können GeoJSON-Antwortdaten, z. B.
geometryId
oderdeviceId
, 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.Wählen Sie links oben im Logik-App-Designer die Option Speichern aus.
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:
Wählen Sie in Ihrem Azure Maps-Konto Abonnements aus.
Wählen Sie Ihren Abonnementnamen aus.
Wählen Sie im Einstellungsmenü Ereignisse aus.
Wählen Sie auf der Seite „Ereignisse“ die Option + Ereignisabonnement aus.
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.
Wählen Sie Erstellen aus.
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.
Geräteposition 1 (47,638237,-122,132483)
Klicken Sie in der Postman-App auf New (Neu).
Wählen Sie im Fenster Create New (Neu erstellen) die Option HTTP Request (HTTP-Anforderung) aus.
Geben Sie einen Request name (Anforderungsname) für die Anforderung ein, z. B. Standort 1.
Wählen Sie als HTTP-Methode GET aus.
Geben Sie die folgende URL ein. Die Anforderung sollte der folgenden URL ähneln. (Ersetzen Sie
{udid}
durch dieudid
, 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.
Wählen Sie Send (Senden) aus.
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)
Klicken Sie in der Postman-App auf New (Neu).
Wählen Sie im Fenster Create New (Neu erstellen) die Option HTTP Request (HTTP-Anforderung) aus.
Geben Sie einen Request name (Anforderungsname) für die Anforderung ein, z. B. Standort 2.
Wählen Sie als HTTP-Methode GET aus.
Geben Sie die folgende URL ein. Die Anforderung sollte der folgenden URL ähneln. (Ersetzen Sie
{udid}
durch dieudid
, 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
Wählen Sie Send (Senden) aus.
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)
Klicken Sie in der Postman-App auf New (Neu).
Wählen Sie im Fenster Create New (Neu erstellen) die Option HTTP Request (HTTP-Anforderung) aus.
Geben Sie einen Request name (Anforderungsname) für die Anforderung ein, z. B. Standort 3.
Wählen Sie als HTTP-Methode GET aus.
Geben Sie die folgende URL ein. Die Anforderung sollte der folgenden URL ähneln. (Ersetzen Sie
{udid}
durch dieudid
, 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
Wählen Sie Send (Senden) aus.
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)
Klicken Sie in der Postman-App auf New (Neu).
Wählen Sie im Fenster Create New (Neu erstellen) die Option HTTP Request (HTTP-Anforderung) aus.
Geben Sie einen Request name (Anforderungsname) für die Anforderung ein, z. B. Standort 4.
Wählen Sie als HTTP-Methode GET aus.
Geben Sie die folgende URL ein. Die Anforderung sollte der folgenden URL ähneln. (Ersetzen Sie
{udid}
durch dieudid
, 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
Wählen Sie Send (Senden) aus.
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)
Klicken Sie in der Postman-App auf New (Neu).
Wählen Sie im Fenster Create New (Neu erstellen) die Option HTTP Request (HTTP-Anforderung) aus.
Geben Sie einen Request name (Anforderungsname) für die Anforderung ein, z. B. Standort 5.
Wählen Sie als HTTP-Methode GET aus.
Geben Sie die folgende URL ein. Die Anforderung sollte der folgenden URL ähneln. (Ersetzen Sie
{udid}
durch dieudid
, 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
Wählen Sie Send (Senden) aus.
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.