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

Unternehmen müssen oft wissen, wann ein Mobilgerät einen bestimmten Bereich betritt oder verlässt. Dazu werden virtuelle geografische Grenzen oder Geofences festgelegt, mit denen Software Ereignisse auslösen kann, wenn ein Gerät eine Grenze überschreitet.
Zu wissen, wann ein bestimmtes Fahrzeug eine Grenze überschreitet, ist für mehrere Anwendungsfälle wichtig, z. B.:
- Interaktion mit Kunden: Unternehmen können mithilfe von Geofencing Push-Benachrichtigungen an Endnutzer über Sonderangebote, Veranstaltungen oder neue Produkte senden.
- Sicherheit: Unternehmen können mit Geofencing virtuelle Begrenzungen um sensible Bereiche wie Rechenzentren oder Lagerhäuser erstellen und Sicherheitspersonal benachrichtigen, wenn jemand den Bereich betritt oder verlässt.
- Verkehr: Unternehmen können Geofencing verwenden, um den Standort von Fahrzeugen zu verfolgen und Routen und Zeitpläne zu optimieren.
Daher ist es wichtig, dass Sie wissen, wie Sie diese Zonen (Polygone) in einer clientseitigen App darstellen. Diese App sollte den Gerätestandort erfassen und prüfen, ob ein bestimmter Geofence verletzt wurde.
Umfang
In diesem Dokument geht es um die clientseitige Implementierung von Geofencing . Das bedeutet, dass die Client-App Folgendes haben muss:
- Die Polygone, die auf Durchbrüche geprüft werden müssen
- Echtzeitstandort des Nutzers
- Logik, um zu prüfen, ob sich der aktuelle Standort innerhalb oder außerhalb eines der Polygone befindet.
Dieser Leitfaden enthält Beispiele für Android-Geräte, aber es gibt auch entsprechende Möglichkeiten für iOS-Geräte. Der Android-Standortdienst bietet eine integrierte Implementierung für kreisförmige Geofences, die hier zu sehen ist. Der Referenzcode und die Beschreibung unten sind ein Ausgangspunkt für komplexere Implementierungen.
Navigation SDK
Das Navigation SDK ist eine native Android-/iOS-Bibliothek, die der Fahrer-App hinzugefügt wird. Es ist für Folgendes verantwortlich:
- Standorte von an Straßen angepinnten Orten aus der App abrufen, in der sie ausgeführt wird Das ist genauer als der FusedLocationProvider (FLP) von Android, da Standorte anhand des Straßennetzes von Google an das nächste Straßensegment angedockt werden, was die geschätzte Ankunftszeit und andere Informationen von FLP viel genauer macht.
- Eine detaillierte Wegbeschreibung, mit der Fahrer effizient von Punkt A nach Punkt B gelangen können, unter Berücksichtigung von Echtzeit-Verkehrsinformationen und anderen Routenbeschränkungen.
- Ereignisse über Event-Listener und registrierte Callbacks auslösen
Listener
Das Navigation SDK bietet viele Listener, die Sie verwenden können. Beispiele:
- Standortänderungen über den Anbieter RoadSnappedLocation
- Ereignisse für die Umleitung (Nutzer verpasst eine Kehrtwende, Abbiegung nach links usw. und weicht von der empfohlenen Route ab) über ReroutingListener.
- Ankunftsereignisse (Nutzer erreicht das geplante Ziel) über ArrivalListener
- Ereignisse für verbleibende Entfernung und geschätzte Ankunftszeit (benachrichtigt werden, wenn der Fahrer kurz vor dem Ziel ist – basierend auf Metern, benachrichtigt werden, wenn der Fahrer kurz vor dem Ziel ist – basierend auf der Zeit) sind beide über RemainingTimeOrDistanceChangedListener verfügbar.
In dieser Anleitung werden nur der RoadSnappedLocation-Anbieter und sein LocationListener verwendet.
Clientseitige Lösung für Geofencing
Sehen wir uns nun an, wie Sie eine clientseitige Geofencing-Funktion erstellen. Im folgenden Beispiel wird das Navigations-SDK im Modus für Schritt-für-Schritt-Anzeige verwendet und in der Route ist ein Polygon für den Geofence definiert.
- Geofences werden in BigQuery gespeichert und von Ihrem Backend abgerufen.
- Das Backend sendet die Geofences regelmäßig an die Drive-Apps.
- Der Fahrer fährt und die Fahrer-App prüft regelmäßig die Geofences auf einen Trigger.
- Die Fahrer App benachrichtigt das Backend über ein Triggerereignis, damit es entsprechend reagieren kann.
Während sich das Fahrzeug auf der Route bewegt, prüft die App regelmäßig, ob das Polygon verletzt wurde. Wenn die App erkennt, dass ein Geofence überschritten wurde, wird auf der Benutzeroberfläche die Meldung Geofence-Überschreitung 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 mit der Google Maps Android API nützlich sind.
Diese Bibliothek ist öffentlich und wird auf GitHub gehostet. Sie ist unter folgendem Link verfügbar:
- Android: https://github.com/googlemaps/android-maps-utils
- iOS: https://github.com/googlemaps/google-maps-ios-utils
Wenn Sie diese Bibliothek in Ihre Android-App einbinden möchten (Umfang dieses Dokuments), sollten Sie die Datei build.gradle entsprechend ändern. Diese build.gradle-Datei gilt für das Modul (die App), das Sie erstellen, und nicht für das Projekt.
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 aktuellen 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. Das liegt daran, dass damit das Polygon 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, definieren wir hier ein festes Polygon mit vordefinierten Koordinaten – (Breiten-, Längengrad)-Paaren. In der Praxis stammen diese Koordinaten und Polygondefinitionen jedoch in den meisten Fällen von einem Backend-Endpunkt und werden wahrscheinlich aus der Ferne abgerufen. Das bedeutet, dass die Polygone von der App „on the fly“ erstellt werden müssen.
Weitere Informationen dazu, was in PolygonOptions
angegeben werden kann
Sie sollten die Polygone beim Erstellen des Fragments oder der 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 noch einen Listener für Standortaktualisierungen erstellen, um das oben genannte Ereignis im Navigation SDK namens RoadSnappedLocationProvider
zu abonnieren. Dadurch wird der aktuelle Standort des Geräts zurückgegeben.
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) {
}
};
Mit Android-Maps-Utils können Sie mit 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 kann es jedoch mehrere Polygone geben, für die eine Schleife erforderlich ist.
Ein alternativer Ansatz
In diesem Dokument geht es um eine clientseitige Anwendung, die auf einen benutzerdefinierten Geofence-Verstoß (Polygon) prüft. Es gibt jedoch Szenarien, in denen Sie solche Prüfungen in Ihrem Backend vornehmen sollten.
Das bedeutet, dass die App Standortaktualisierungen an ein Backend meldet und dieses Backend dann prüft, ob das Fahrzeug ein bestimmtes Polygon verletzt hat. Die Validierung ist also nicht von der Client-App abhängig.
Eine mögliche Lösung wäre:
[Execution Environment] Serverseitige Geofencing-Architektur
Eine Beispielarchitektur für einen serverseitigen Ansatz für Geofencing.

- Die Fahrer-App sendet mithilfe des Driver SDK Standortaktualisierungen an Fleet Engine. Standortaktualisierungen und die In-App-Navigation erfolgen über das Navigation SDK.
- Die Fleet Engine gibt diese Aktualisierungen in Cloud Logging oder Pub/Sub aus.
- Diese Standortsignale werden vom Backend erfasst.
- Geofences werden in BigQuery gespeichert, um vom Backend analysiert zu werden.
- Wenn der Geofence ausgelöst wird, werden Benachrichtigungen an die Fahrer App gesendet.
In dieser Architektur werden das Driver SDK und die Fleet Engine verwendet. Fleet Engine kann PubSub-Aktualisierungen senden und Logeinträge in Cloud Logging generieren. In beiden Fällen kann die Fahrzeugposition abgerufen werden.
Das Backend könnte dann die PubSub-Warteschlange überwachen oder Protokolle lesen und nach Fahrzeugaktualisierungen suchen. Jedes Mal, wenn eine Aktualisierung erfolgt (oder alle paar Sekunden oder Minuten, je nach Dringlichkeit), könnte das Backend BigQuery-GIS-Funktionen aufrufen, um zu ermitteln, ob sich ein bestimmtes Fahrzeug innerhalb oder außerhalb von Geofences befindet. Wenn ein oder mehrere Geofences verletzt wurden, kann das Backend reagieren und interne Pipelines oder andere relevante Workflows auslösen.
Fazit
Geofencing ist ein leistungsstarkes Tool, das für verschiedene Zwecke eingesetzt werden kann. Mit Geofencing können Unternehmen Endnutzer mit relevanten Anzeigen und Angeboten ansprechen, standortbezogene Dienstleistungen bereitstellen und die Sicherheit verbessern.
Das Navigation SDK bietet nützliche Ereignis-Listener, mit denen viele wichtige Momente während einer Fahrt erkannt werden können. Unternehmen benötigen häufig benutzerdefinierte Geofences für bestimmte Anwendungsfälle. In diesem Dokument haben wir eine Möglichkeit dazu gezeigt, aber die Möglichkeiten sind endlos. Wir sind gespannt auf deine Ideen.
Nächste Aktionen
- Sehen Sie sich das Webinar Mit der Google Maps Platform Neues entdecken, lernen und erstellen an.
Weitere Informationen: