Geofences clientseitig zur Verfolgung mobiler Assets mit Nav SDK auslösen

In diesem Dokument wird beschrieben, was clientseitiges Geofencing ist, wann es verwendet wird und wie es auf Anwendungsfälle in einer mobilen App angewendet wird. Außerdem wird gezeigt, wie Sie mit dem Google Navigation SDK auf Android-Geräten ein Beispiel implementieren.

Nav SDK mit Geofence-Erkennung
Nav SDK mit Geofence-Erkennung

Unternehmen müssen häufig wissen, wann ein Mobilgerät einen bestimmten Bereich betritt oder verlässt. Dies wird durch die Beibehaltung virtueller geografischer Grenzen oder Geofences erreicht, sodass Software Ereignisse auslösen kann, wenn ein Gerät eine Grenze überschreitet.

Zu wissen, wann ein bestimmtes Fahrzeug eine Grenze überquert, ist für verschiedene Anwendungsfälle wichtig, z. B.:

  • Kundeninteraktion: Unternehmen können mithilfe von Geofencing Push-Benachrichtigungen an Endnutzer über Sonderangebote, Veranstaltungen oder neue Produkte senden.
  • Sicherheit und Sicherheit: Unternehmen können mithilfe von Geofencing virtuelle Umrandungen um sensible Bereiche wie Rechenzentren oder Lagerhäuser erstellen und Sicherheitspersonal warnen, wenn jemand den Bereich betritt oder verlässt.
  • Verkehr: Unternehmen können mithilfe von Geofencing den Standort von Fahrzeugen ermitteln und Routen und Fahrpläne optimieren.

Daher ist es wichtig, dass Sie wissen, wie Sie diese Zonen (Polygone) innerhalb einer clientseitigen App darstellen können. Diese App sollte den Gerätestandort erfassen und prüfen, ob ein bestimmter Geofence überschritten wurde.

Umfang

In diesem Dokument geht es um die clientseitige Implementierung von Geofencing . Das bedeutet, dass die Client-App Folgendes haben muss:

  1. Die Polygone, die es auf Sicherheitsverletzungen prüfen muss
  2. Echtzeitstandort des Nutzers
  3. Logisch, um zu prüfen, ob sich der aktuelle Standort innerhalb oder außerhalb der Polygone befindet.

Dieser Leitfaden enthält Beispiele für Android, es gibt jedoch ähnliche Möglichkeiten, dies unter iOS zu tun. Der Android-Standortdienst hat eine integrierte Implementierung für kreisförmige Geofences, die hier zu sehen sind. Der Referenzcode und die Beschreibung unten sind ein Ausgangspunkt für komplexere Implementierungen.

Das Navigation SDK ist eine native Android / iOS-Bibliothek, die der Treiber-App hinzugefügt wird. Es ist verantwortlich für:

  • Orte, die an Straßen ausgerichtet sind, von der App abrufen, in der sie ausgeführt wird. Dies ist präziser als FusedLocationProvider (FLP) von Android, da das System das Straßennetz von Google nutzt, um Standorte zum nächstgelegenen Straßenabschnitt auszurichten. Dadurch ist die voraussichtliche Ankunftszeit viel genauer und es werden auch andere Informationen vom FLP bereitgestellt.
  • Die detaillierte Routenführung ermöglicht es den Fahrern, effizient von A nach B zu gelangen, wobei die Verkehrslage in Echtzeit und andere Einschränkungen der Route berücksichtigt werden.
  • Ereignisse über Event-Listener und registrierte Callbacks auslösen

Listener

Das Navigation SDK verfügt über viele Listener, die Sie verwenden können. Hier einige Beispiele:

In diesem Leitfaden werden nur der RoadSnappedLocationProvider und sein LocationListener verwendet.

Clientseitige Geofencing-Lösung

Gehen wir nun die Schritte zum Erstellen einer clientseitigen Geofencing-Funktion durch. Im folgenden Beispiel wird das Navigation SDK im detaillierten Routenmodus ausgeführt. Dabei wird in der Route ein Polygon definiert, das unseren Geofence darstellt.

Funktionsdiagramm
Funktionsdiagramm

  1. Geofences werden in BigQuery gespeichert und von Ihrem Back-End abgerufen.
  2. Das Back-End überträgt die Geofences regelmäßig an die Laufwerk-Apps.
  3. Der Fahrer navigiert und die Fahrer-App prüft regelmäßig die Geofences auf einen Trigger.
  4. Die Treiber-App benachrichtigt das Back-End über ein Trigger-Ereignis, damit es ausgeführt werden kann.

Während sich das Fahrzeug auf der Route bewegt, prüft die App regelmäßig, ob das Polygon durchbrochen wurde. Wenn die App feststellt, dass sie einen Geofence überschritten hat, wird auf der Benutzeroberfläche die Meldung Geofence gehackt angezeigt.

Abhängigkeiten für Android-Maps-Utils konfigurieren

Diese Lösung verwendet Android-Maps-Utils, eine Open-Source-Bibliothek mit Dienstprogrammen, die für eine Vielzahl von Anwendungen nützlich sind, die die Google Maps Android API verwenden.

Diese Bibliothek ist öffentlich und wird auf GitHub gehostet unter:

  • Android: https://github.com/googlemaps/android-maps-utils
  • iOS: https://github.com/googlemaps/google-maps-ios-utils

Um diese Bibliothek in Ihre Android-App aufzunehmen (Umfang dieses Dokuments), müssen Sie die Datei build.gradle entsprechend ändern. Hinweis: Diese build.gradle-Datei ist für das Modul (die App), das Sie erstellen, und nicht auf Projektebene.

dependencies {
   ...
   // Utilities for Maps SDK for Android (requires Google Play Services)
   implementation 'com.google.maps.android:android-maps-utils:2.3.0'
}

Nachdem Sie Gradle mit Ihrer neuesten build.gradle-Datei synchronisiert haben, können Sie com.google.maps.android.PolyUtil in Ihre Java-Datei importieren:

import com.google.android.gms.maps.model.PolygonOptions;
import com.google.maps.android.PolyUtil;

Geofences definieren

Beachten Sie, dass hier auch PolygonOptions importiert wird. Der Grund ist, dass das Polygon so dargestellt wird:

mPolygonOptions = new PolygonOptions()
       .add(new LatLng(29.4264525,-98.4948758))
       .add(new LatLng(29.4267029,-98.4948758))
       .add(new LatLng(29.4273742,-98.4945822))
       .add(new LatLng(29.4264562,-98.4943592))
       .fillColor(0x0000ff36)
       .strokePattern(Arrays.asList(new Dash(45.0f), new Gap(10.0f)))
       .strokeColor(Color.BLUE)
       .strokeWidth(5);

Wie Sie oben sehen können, definieren wir hier ein festes Polygon mit vordefinierten Koordinaten- (Breitengrad, Längengrad)-Paaren. In realen Szenarien stammen diese Koordinaten und Polygondefinitionen jedoch meist von einem Back-End-Endpunkt und werden wahrscheinlich per Fernzugriff abgerufen. Das bedeutet, dass die Polygone direkt von der App erstellt werden müssen.

Weitere Informationen dazu, was in PolygonOptions festgelegt werden kann, finden Sie hier.

Sie sollten das/die Polygone beim Erstellen Ihres Fragments oder Ihrer Aktivität definieren. Beispiel:

protected void onCreate(Bundle savedInstanceState) {
   ...
   mPolygonOptions = new PolygonOptions()
           .add(new LatLng(29.4264525,-98.4948758))
           .add(new LatLng(29.4267029,-98.4948758))
           .add(new LatLng(29.4273742,-98.4945822))
           .add(new LatLng(29.4264562,-98.4943592))
           .fillColor(0x0000ff36)
           .strokePattern(Arrays.asList(new Dash(45.0f), new Gap(10.0f)))
           .strokeColor(Color.BLUE)
           .strokeWidth(5);

   ...// more code here
}

Auf Standortaktualisierungen warten

Nachdem Sie Ihre Geofences definiert haben, müssen Sie nur einen Listener für Standortaktualisierungen erstellen, um das oben erwähnte Ereignis im Navigation SDK namens RoadSnappedLocationProvider zu abonnieren, das den letzten Standort des Geräts zurückgibt.

mLocListener = new RoadSnappedLocationProvider.LocationListener() {
   @Override
   public void onLocationChanged(Location snapped) {
       LatLng snappedL = new LatLng(snapped.getLatitude(), snapped.getLongitude());
       if(PolyUtil.containsLocation(snappedL, mPolygonOptions.getPoints(), true) && !mGeofenceBreached){
           Log.d("Geofence", "Vehicle has breached the polygon");
       }
   }
   @Override
   public void onRawLocationUpdate(Location location) {
   }
};

Unter Android-Maps-Utils können Sie dann mithilfe von PolyUtil.containsLocation prüfen, ob sich der empfangene Standort innerhalb des vordefinierten Polygons befindet. Im folgenden Beispiel wird das vordefinierte Polygon verwendet, das den Geofence darstellt. In der Praxis wäre jedoch eine Schleife erforderlich.

Ein alternativer Ansatz

Dieses Dokument konzentriert sich auf eine clientseitige Anwendung, die auf einen Verstoß gegen benutzerdefinierte Geofences (Polygone) prüft. Es gibt jedoch Szenarien, in denen Sie solche Prüfungen in Ihrem Back-End durchführen möchten.

Das bedeutet, dass die App Standortaktualisierungen an ein Back-End meldet und dieses Back-End dann prüft, ob das Fahrzeug ein bestimmtes Polygon gebrochen hat, und dass die Client-App die Validierung nicht durchführt.

Eine mögliche Lösung wäre:

[Ausführungsumgebung] Serverseitige Geofencing-Architektur

Beispielarchitektur für einen serverseitigen Ansatz für das Geofencing

Serverseitige Lösung
Serverseitige Lösung

  1. Die Treiber-App sendet über das Driver SDK Standortaktualisierungen an Fleet Engine. Standortaktualisierungen und In-App-Navigation erfolgen über das Navigation SDK.
  2. Fleet Engine gibt diese Aktualisierungen an Cloud Logging oder Pub/Sub aus.
  3. Das Back-End erfasst diese Standortsignale.
  4. Geofences werden zur Analyse durch das Back-End in BigQuery gespeichert.
  5. Beim Auslösen des Geofence werden Benachrichtigungen an die Treiber-App gesendet.

In dieser Architektur werden Driver SDK und Fleet Engine verwendet. Fleet Engine kann Pub/Sub-Aktualisierungen ausgeben und Logeinträge in Cloud Logging generieren. In beiden Fällen kann der Fahrzeugstandort abgerufen werden.

Das Back-End könnte dann die PubSub-Warteschlange überwachen oder Protokolle lesen und auf Fahrzeugupdates achten. Bei einer Aktualisierung (oder je nach Wichtigkeit alle paar Sekunden oder Minuten) könnte das Back-End BigQuery GIS-Funktionen aufrufen, um festzustellen, ob sich ein bestimmtes Fahrzeug innerhalb oder außerhalb von Geofences befindet. Wenn ein oder mehrere Geofences gehackt wurden, kann das Backend agieren und interne Pipelines oder andere relevante Workflows auslösen.

Fazit

Geofencing ist ein leistungsstarkes Tool, das für verschiedene Zwecke eingesetzt werden kann. Unternehmen können mithilfe von Geofencing relevante Anzeigen und Werbung auf Endnutzer ausrichten, standortbasierte Dienste anbieten sowie die Sicherheit und Sicherheit verbessern.

Das Navigation SDK bietet nützliche Ereignis-Listener, die viele wichtige Momente während einer Fahrt erkennen können. Unternehmen benötigen oft benutzerdefinierte Geofences für bestimmte Anwendungsfälle. In diesem Dokument haben wir gezeigt, wie Sie dies erreichen können. Die Möglichkeiten sind jedoch endlos. Wir freuen uns auf deine Ideen.

Nächste Aktionen

Weitere Informationen: