Wie Geofencing-Zonen funktionieren
Dieser Artikel bietet eine ausführliche technische Erklärung der Funktionsweise von Zonen in Levy Fleets, einschließlich der Durchsetzungspipeline, Fahrtende-Validierung, Ereignisprotokollierung und Kundenbenachrichtigungen.
Architekturübersicht
Levy Fleets verwendet Zonen in zwei Hauptkontexten:
1. Live-Telemetrie-Durchsetzung
Wenn ein Fahrzeug während einer aktiven Fahrt GPS-Koordinaten (Breitengrad/Längengrad) sendet, führt das System folgende Schritte aus:
- Lädt alle Geschwindigkeitsbegrenzungs- und Sperrzonen für das Unterkonto des Fahrzeugs
- Bewertet, ob der Fahrzeugstandort innerhalb von Zonenpolygonen liegt
- Sendet IoT-Befehle, um die Geschwindigkeit anzupassen oder den Motor nach Bedarf zu deaktivieren
- Protokolliert Zoneneintritts-/-austrittsereignisse
- Sendet Kundenbenachrichtigungen
2. Fahrtende-Validierung
Wenn ein Kunde versucht, eine Fahrt zu beenden, führt das System folgende Schritte aus:
- Lädt alle Park-, Parkverbots- und Sperrzonen
- Bewertet, ob der Endstandort die Parkanforderungen erfüllt
- Blockiert oder erlaubt das Fahrtende basierend auf der Zonenzugehörigkeit
Echtzeitverarbeitung
Die Zonendurchsetzung wird bei jeder GPS-Telemetrie-Aktualisierung von Fahrzeugen während aktiver Fahrten ausgeführt. Dies gewährleistet eine sofortige Reaktion auf Zoneneintritte und -austritte.
Zonendatenstruktur
Zonen werden mit den folgenden Schlüsseleigenschaften gespeichert:
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
id | UUID | Eindeutiger Identifikator |
subaccount_id | UUID | Das Unterkonto (Standort), zu dem diese Zone gehört |
name | TEXT | Für Menschen lesbarer Zonenname |
type | ENUM | parking, no_parking, no_go, speed_limit, charging, bonus, service_area |
geojson | JSONB | GeoJSON Feature mit Polygon-Geometrie |
speed_limit_kph | INTEGER | Geschwindigkeitsbegrenzung (1-80 km/h, nur für Typ speed_limit) |
parking_reward_points | INTEGER | Punkte, die für das Parken hier vergeben werden (Bonuszonen) |
is_preferred_parking | BOOLEAN | Ob dies ein bevorzugter Parkstandort ist |
rebalancing_multiplier | DECIMAL | Punkte-Multiplikator für Rebalancing-Anreize |
GeoJSON-Format
Zonengrenzen werden als GeoJSON Feature-Objekte gespeichert:
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[-122.4194, 37.7749],
[-122.4180, 37.7749],
[-122.4180, 37.7735],
[-122.4194, 37.7735],
[-122.4194, 37.7749]
]
]
}
}
Koordinatenformat
Koordinaten sind im Format [Längengrad, Breitengrad] (GeoJSON-Standard), nicht [Breitengrad, Längengrad]. Dies ist eine häufige Fehlerquelle beim Importieren von Zonendaten.
Echtzeit-Durchsetzungsablauf
Die Durchsetzungspipeline wird bei jeder GPS-Telemetrie-Aktualisierung von Fahrzeugen während aktiver Fahrten ausgeführt.
Schritt 1: Auslösebedingungen
Die Durchsetzung wird ausgelöst, wenn:
- Eine GPS-Aktualisierung von einem Fahrzeug empfangen wird
- Das Fahrzeug eine aktive Fahrt hat (
ride_status = 'in_progress') - Das Fahrzeug eine gültige IoT-IMEI konfiguriert hat
- Gültige Koordinaten bereitgestellt werden (endliche Breiten- und Längengrade)
Schritt 2: Zonenladen
Das System fragt alle speed_limit und no_go Zonen für das Unterkonto des Fahrzeugs ab, die nicht gelöscht sind.
Schritt 3: Punkt-im-Polygon-Auswertung
Für jede Zone verwendet das System einen Strahlenverfolgungsalgorithmus, um zu bestimmen, ob der Fahrzeugstandort innerhalb des Polygons liegt:
- Einen Strahl vom Punkt ins Unendliche werfen
- Zählen, wie oft der Strahl Polygonkanten kreuzt
- Ungerade Anzahl = innen, Gerade Anzahl = außen
Das System bewertet die aktuelle Position des Fahrzeugs gegen alle geladenen Zonen und kategorisiert sie:
- Geschwindigkeitszonen: Alle speed_limit-Zonen, die das Fahrzeug enthalten
- Sperrzonen: Alle no_go-Zonen, die das Fahrzeug enthalten
Schritt 4: Aktive Einschränkungen bestimmen
Für überlappende Geschwindigkeitszonen:
- Das System berechnet die effektive Geschwindigkeitsbegrenzung für jede Zone
- Wenn die Zone einen
speed_limit_kph-Wert hat, wird dieser verwendet - Andernfalls wird auf die Einstellung
slow_speed_zone_limit_kphdes Unterkontos zurückgegriffen - Das niedrigste Limit unter allen überlappenden Zonen wird angewendet
Für Sperrzonen:
- Jede Sperrzone, die das Fahrzeug enthält, löst eine Motorabschaltung aus
- Es muss nur eine Sperrzone übereinstimmen, damit die Durchsetzung erfolgt
Schritt 5: IoT-Befehlsversand
Basierend auf der Auswertung werden IoT-Befehle an das Fahrzeug gesendet, um Geschwindigkeitsbegrenzungen durchzusetzen oder den Motor zu deaktivieren.
Schritt 6: Befehlsdeduplizierung
Um unnötigen IoT-Verkehr zu vermeiden, werden Befehle dedupliziert:
- Wenn das Fahrzeug bereits in derselben Zone mit derselben Geschwindigkeitsbegrenzung ist, wird kein Befehl gesendet
- Der aktuelle Zonenstatus des Fahrzeugs wird verfolgt:
current_speed_limit_zone_idcurrent_speed_limit_kphcurrent_no_go_zone_idengine_disabled_by_zone
Schritt 7: Statusaktualisierungen
Nach erfolgreichem Befehlsversand wird der Fahrzeugdatensatz mit dem neuen Zonenstatus und dem Durchsetzungszeitstempel aktualisiert.
Fahrtende-Validierung
Wenn ein Kunde versucht, eine Fahrt zu beenden, validiert das System seinen Standort gegen Zonenregeln.
Validierungsablauf
- Alle Zonen laden (nicht nach Typ gefiltert)
- Standortdaten abrufen:
devicePoint: GPS-Koordinaten des Kundentelefons (aus dem Anfragekörper)vehiclePoint: Letzte bekannte GPS-Koordinaten des Fahrzeugs (aus der vehicles-Tabelle)
- Validierungsmodus bestimmen aus Unterkontoeinstellungen
- Zonenzugehörigkeit auswerten für jeden relevanten Punkt
- Ergebnis zurückgeben (erlauben oder mit Fehlercode blockieren)
Validierungsregeln
Für jeden zu validierenden Punkt:
- Prüfen, ob der Punkt in IRGENDEINER Parkzone ist (
type = 'parking') - Prüfen, ob der Punkt in IRGENDEINER Sperrzone ist (
type = 'no_go') - Prüfen, ob der Punkt in IRGENDEINER Parkverbotszone ist (
type = 'no_parking')
Ergebnisformel:
valid = inParking && !inNoGo && !inNoParking
Zonenpriorität
Bei überlappenden Zonen gilt folgende Priorität:
- Sperrzonen - Blockieren immer, unabhängig von anderen Zonen
- Parkverbotszonen - Blockieren Parken auch innerhalb einer Parkzone
- Parkzonen - Nur gültig, wenn nicht in einer Sperr- oder Parkverbotszone
Parkzonenvalidierungsmodi
Unterkontoeinstellungen steuern, wie die Parkvalidierung funktioniert. Konfigurieren Sie dies unter Einstellungen -> Sonstiges -> Parkzonenvalidierungsmodus.
Nur Fahrzeug (Standard)
- Nur der GPS-Standort des Fahrzeugs wird geprüft
- Der Telefonstandort des Kunden wird ignoriert
- Fallback auf Telefonstandort, wenn der Fahrzeugstandort nicht verfügbar ist
Anwendungsfall: Am zuverlässigsten für fahrzeugzentrierte Operationen, bei denen das Telefon-GPS in Innenräumen ungenau sein kann.
Beide
- Sowohl Fahrzeug ALS AUCH Kundentelefon müssen in einer gültigen Parkzone sein
- Wenn eines fehlt, wird die Anfrage mit
location_data_missingabgelehnt - Restriktivster Modus
Anwendungsfall: Hochsicherheitsumgebungen, in denen Sie sicherstellen möchten, dass der Kunde physisch beim Fahrzeug ist.
Hybrid
- Entweder Fahrzeug ODER Kundentelefon kann in einer gültigen Parkzone sein
- Freizügigster Modus
- Besteht, wenn ein verfügbarer Punkt die Anforderung erfüllt
Anwendungsfall: Bereiche mit schlechter GPS-Abdeckung oder wenn Flexibilität bevorzugt wird.
Zonenereignisprotokollierung
Jeder Zoneneintritt und -austritt während aktiver Fahrten wird für Prüfungs- und Analysezwecke protokolliert.
Erfasste Ereignisdaten
| Feld | Beschreibung |
|---|---|
ride_uuid | Die Fahrt, während der das Ereignis aufgetreten ist |
zone_id | Die Zone, die betreten/verlassen wurde |
zone_type | Typ der Zone (speed_limit, no_go, parking) |
event_type | enter oder exit |
occurred_at | Zeitstempel des Ereignisses |
vehicle_latitude | Fahrzeugstandort zum Ereigniszeitpunkt |
vehicle_longitude | Fahrzeugstandort zum Ereigniszeitpunkt |
enforcement_action | Durchgeführte Aktion (speed_limited, engine_disabled, engine_enabled, speed_restored) |
speed_limit_applied | Angewendete Geschwindigkeitsbegrenzung (für Geschwindigkeitszonen) |
previous_speed_limit | Vorherige Geschwindigkeitsbegrenzung (für Übergänge) |
iot_command_sent | Tatsächlich gesendeter IoT-Befehlsstring |
iot_command_success | Ob der Befehl bestätigt wurde |
Ereignisse anzeigen
Zonenereignisse können eingesehen werden:
- Auf der Fahrtdetailseite (Dashboard -> Fahrten -> [Fahrt] -> Zonen-Tab)
- Über Datenbankabfragen für Analysen
- Über die Partner-API für externe Integrationen
Kundenbenachrichtigungen
Kunden erhalten Push-Benachrichtigungen beim Betreten oder Verlassen von Zonen mit Durchsetzung.
Geschwindigkeitszonenbenachrichtigungen
Beim Betreten:
Titel: "Langsamzone aktiviert"
Text: "Ihr Fahrzeug ist jetzt auf 10 km/h in der Innenstadt-Fußgängerzone begrenzt."
Beim Verlassen:
Titel: "Langsamzone verlassen"
Text: "Sie haben die Innenstadt-Fußgängerzone verlassen. Ihre Höchstgeschwindigkeit ist wiederhergestellt."
Sperrzonenbenachrichtigungen
Beim Betreten:
Titel: "Sperrzone betreten"
Text: "Fahrtsteuerung im Privatgrundstücksbereich pausiert. Bewegen Sie sich in einen genehmigten Bereich, um fortzufahren."
Beim Verlassen:
Titel: "Sperrzone verlassen"
Text: "Sie haben den Privatgrundstücksbereich verlassen. Fahrtsteuerung ist wiederhergestellt."
Benachrichtigungsdeduplizierung
Um Benachrichtigungsspam zu verhindern:
- Eine 60-Sekunden-Abklingzeit gilt pro Zonen-/Ereigniskombination
- Doppelte Benachrichtigungen innerhalb dieses Fensters werden unterdrückt
- Benachrichtigungen werden für Prüfungszwecke protokolliert
GPS-Genauigkeitsüberlegungen
Die GPS-Genauigkeit variiert je nach Umgebung und beeinflusst das Zonenverhalten.
Typische Genauigkeitsbereiche
| Umgebung | GPS-Genauigkeit |
|---|---|
| Offener Himmel | 3-5 Meter |
| Stadtschlucht | 10-30 Meter |
| In der Nähe von Gebäuden | 5-15 Meter |
| Innenräume/überdacht | 20-50+ Meter oder kein Signal |
Hystereseschutz
Um "Flackern" an Zonengrenzen aufgrund von GPS-Rauschen zu verhindern, implementiert das System eine Hysterese:
Sperrzonenaustritts-Hysterese:
- Das Fahrzeug muss GPS-Punkte außerhalb der Zone für mindestens 15 Sekunden streamen, bevor die Motorleistung wiederhergestellt wird
- Verhindert falsche Austritte durch eine einzelne GPS-Messung, die nach außen driftet
- Wird über den
no_go_enforced_at-Zeitstempel auf dem Fahrzeug verfolgt
GPS-Puffer
Beim Entwerfen von Zonen lassen Sie 5-10 Meter Spielraum an kritischen Grenzen, um GPS-Genauigkeitsschwankungen zu berücksichtigen.
Designempfehlungen
- Pufferzonen: 5-10 Meter Spielraum an kritischen Grenzen lassen
- Polygon-Einfachheit: Einfachere Formen sind weniger von GPS-Jitter betroffen
- Zonengröße: Sehr kleine Zonen (< 20m Radius) werden möglicherweise nicht zuverlässig durchgesetzt
- Testen: Zonengrenzen mit echten Geräten vor Ort validieren
Caching und Leistung
Geschwindigkeitsbegrenzungs-Caching
Die Einstellung slow_speed_zone_limit_kph des Unterkontos wird 60 Sekunden gecacht:
- Reduziert Datenbankabfragen während der Hochfrequenz-Telemetrieverarbeitung
- Cache ist pro Unterkonto
- Änderungen an Einstellungen brauchen bis zu 60 Sekunden zur Verbreitung
Fahrzeugmodell-Geschwindigkeits-Caching
Die Höchstgeschwindigkeit des Fahrzeugmodells wird 5 Minuten gecacht:
- Wird beim Wiederherstellen der Geschwindigkeit nach Verlassen von Geschwindigkeitszonen verwendet
- Cache ist pro Fahrzeugmodell-ID
Zonenladen
Zonen werden bei jedem Durchsetzungsaufruf neu geladen (nicht gecacht):
- Stellt sicher, dass Zonenänderungen sofort wirksam werden
- Abfragen sind mit Indizes auf subaccount_id, type und deleted_at optimiert
Leistungstipps
- Zonenanzahl begrenzen: Weniger Zonen = schnellere Auswertung
- Einfache Polygone: Weniger Eckpunkte = schnellere Punkt-im-Polygon-Prüfungen
- Überlappende Zonen vermeiden: Reduziert die Anzahl der benötigten Auswertungen
Szenario-Handbuch
Szenario 1: Fahrt mit Parkvalidierung beenden
Einrichtung:
- Validierungsmodus:
both - Eine Parkzone deckt die Straße ab
- Eine Parkverbotszone deckt eine Laderampe innerhalb der Parkzone ab
Aktion: Kunde versucht, die Fahrt an der Laderampe zu beenden
Ergebnis:
- Gerätepunkt: in Parkzone, in Parkverbotszone
- Fahrzeugpunkt: in Parkzone, in Parkverbotszone
- Validierung:
inParking=true,inNoParking=true - Ergebnis:
valid = true && !true = false - API gibt Fehler
not_in_parking_zonezurück - Kunde muss Fahrzeug umparken
Szenario 2: Geschwindigkeitszonenübergang
Einrichtung:
- Zone A: speed_limit = 12 km/h
- Zone B: speed_limit = 8 km/h
- Unterkonto slow_speed_zone_limit_kph = 10 km/h
Aktion: Fahrzeug bewegt sich von außerhalb der Zonen -> Zone A -> Zone A+B Überlappung -> Zone B -> außerhalb
Ergebnis:
- Außerhalb -> Zone A: Geschwindigkeitsbefehl gesendet mit Limit = min(12, 10) = 10 km/h
- Zone A -> A+B: Geschwindigkeitsbefehl gesendet mit Limit = min(8, 10) = 8 km/h
- A+B -> Zone B: Keine Änderung (immer noch 8 km/h, dedupliziert)
- Zone B -> Außerhalb: Geschwindigkeit wiederhergestellt auf Fahrzeugmodell-Maximum (z.B. 25 km/h)
Szenario 3: Überlappende Geschwindigkeits- und Sperrzonen
Einrichtung:
- Geschwindigkeitszone, die einen Park abdeckt (10 km/h)
- Sperrzone, die eine Baustelle innerhalb des Parks abdeckt
Aktion: Fahrzeug fährt in die Baustelle
Ergebnis:
- Geschwindigkeitsbegrenzung angewendet: 10 km/h (aus Geschwindigkeitszone)
- Motor deaktiviert (aus Sperrzone)
- Beide Ereignisse protokolliert
- Kunde erhält Sperrzonenbenachrichtigung
- Fahrzeug muss die Sperrzone verlassen UND 15 Sekunden warten, bevor der Motor wiederhergestellt wird
- Geschwindigkeitsbegrenzung bleibt bei 10 km/h, bis das Fahrzeug auch die Geschwindigkeitszone verlässt
Szenario 4: GPS-Drift an Zonengrenze
Einrichtung:
- Sperrzonengrenze
- Fahrzeug befindet sich physisch am Rand
- GPS-Messungen schwanken zwischen innen/außen
Aktion: GPS-Messungen wechseln: innen -> außen -> innen -> außen (schnell)
Ergebnis:
- Erste "innen"-Messung: Motor deaktiviert, Timer startet
- Erste "außen"-Messung: Hystereseprüfung - Timer nicht abgelaufen, Motor bleibt deaktiviert
- Zweite "innen"-Messung: Immer noch in Zone, Motor bleibt deaktiviert
- Zweite "außen"-Messung: Hystereseprüfung - wenn >15s außen, Motor wiederhergestellt
Die 15-Sekunden-Hysterese verhindert, dass der Motor aufgrund von GPS-Rauschen schnell ein- und ausschaltet.
Servicegebiet und Außerhalb-der-Zone-Warnungen
Servicegebiet-Zonen definieren die Betriebsgrenze Ihrer Flotte und lösen Warnungen aus, wenn Fahrzeuge diesen Bereich verlassen.
Außerhalb-der-Zone-Warnungen konfigurieren
Funktion aktivieren:
- Gehen Sie zu Dashboard -> Einstellungen
- Navigieren Sie zum Abschnitt Sonstiges
- Aktivieren Sie Außerhalb-der-Zone-Warnung
E-Mail-Empfänger konfigurieren:
- Gehen Sie zu Einstellungen -> Warnungen
- Aktivieren Sie Außerhalb-der-Zone-Warnungen unter Betriebswarnungen
- Stellen Sie die E-Mail für kritische Warnungen ein
Warnungsauslösebedingungen
Eine Außerhalb-der-Zone-Warnung wird gesendet, wenn:
- Ein Fahrzeug eine aktive Fahrt hat
- Der GPS-Standort des Fahrzeugs außerhalb aller service_area-Zonen für das Unterkonto ist
- Die Einstellung
out_of_zone_alert_enabledtrue ist - Die E-Mail-Benachrichtigung
out_of_zone_alertsaktiviert ist
Warnungsinhalt
Die E-Mail enthält:
- Fahrzeugnummer
- Letzter bekannter Standort
- Zeitpunkt der Erkennung
- Link zur Anzeige der Fahrt im Dashboard
Pufferzonenkonfiguration
Die Pufferzonen-Einstellung fügt einen GPS-Genauigkeitsspielraum um Zonengrenzen hinzu.
Zweck
GPS-Signale können je nach Umgebung um 5-15 Meter variieren. Die Pufferzonen-Einstellung hilft, diese Varianz zu berücksichtigen, indem sie:
- Spielraum um Zonengrenzen hinzufügt
- Falsch-positive Ergebnisse an Zonenkanten reduziert
- Die Durchsetzungszuverlässigkeit verbessert
Konfiguration
Stellen Sie die Pufferzone unter Einstellungen -> Sonstiges ein:
- Standard: 10 Meter
- Empfohlener Bereich: 5-15 Meter
| GPS-Umgebung | Empfohlener Puffer |
|---|---|
| Offene Bereiche | 5 Meter |
| Urban/Innenstadt | 10-15 Meter |
| In der Nähe hoher Gebäude | 15+ Meter |
| Innenräume/überdacht | Erwägen Sie, die Durchsetzung zu deaktivieren |
Zonenanzeige in der mobilen App
Zonen werden auf der Karte der Kunden-App mit spezifischen Farben und Verhaltensweisen angezeigt.
Zonensichtbarkeit
| Zonentyp | In App sichtbar | Farbe |
|---|---|---|
| Parken | Ja | Grün (halbtransparent) |
| Parkverbot | Ja | Gelb/Orange (halbtransparent) |
| Sperrzone | Ja | Rot (halbtransparent) |
| Geschwindigkeitsbegrenzung | Ja | Gelb (wie Parkverbot) |
| Laden | Nein | - |
| Bonus | Nein | - |
| Servicegebiet | Nein | - |
Verhalten der mobilen App
Zonenladen:
- Zonen werden vom mobilen API-Endpunkt abgerufen
- 5 Minuten gecacht, um API-Aufrufe zu reduzieren
- Aktualisiert, wenn die App in den Vordergrund kommt
Zonenrendering:
- Als farbige Polygon-Overlays auf der Karte angezeigt
- Strichfarbe (Rand) ist gesättigter als Füllung
- Strichbreite: 2 Pixel
Behandlung ungültiger Koordinaten:
- Die mobile App validiert Zonenkoordinaten vor dem Rendern
- Prüft auf gültige Arrays mit mindestens 3 Koordinaten
- Validiert, dass jeder Punkt eine Zahl und endlich ist
- Überspringt stillschweigend Zonen mit ungültiger Geometrie
Zonenanalysen und Berichterstattung
Levy Fleets bietet umfassende Analysen für Zoneninteraktionen.
Zonenstatistiken
Zonenstatistiken liefern aggregierte Daten:
| Metrik | Beschreibung |
|---|---|
total_entries | Anzahl der Zoneneintritts-Ereignisse |
total_exits | Anzahl der Zonenaustritts-Ereignisse |
unique_rides | Unterschiedliche Fahrten, die diese Zone betreten haben |
avg_duration_seconds | Durchschnittliche in der Zone verbrachte Zeit |
total_enforcement_actions | Anzahl der gesendeten IoT-Befehle |
Dashboard-Analysen
Zonenanalysen sind an mehreren Dashboard-Stellen sichtbar:
-
Fahrtdetailseite -> Zonen-Tab
- Chronologische Liste der Zonenereignisse
- Eintritts-/Austrittszeiten
- Durchgeführte Durchsetzungsmaßnahmen
- Dauer in jeder Zone
-
Zonenverwaltungsseite
- Zonennutzungszahlen (bei Erweiterung)
- Letzter Aktivitätszeitstempel
Zonendaten exportieren
Zonenereignisdaten können exportiert werden über:
- Direkte Datenbankabfragen für erweiterte Analysen
- Fahrten-CSV-Exporte (enthalten Zonenereignisse, wenn verfügbar)
- Partner-API für Integration mit externen BI-Tools
Was kommt als Nächstes?
- Zonen erstellen und verwalten - Wie Sie Zonen erstellen und konfigurieren
- Geschwindigkeitsbegrenzungszonen - Detaillierte Anleitung zur Geschwindigkeitsbegrenzungsdurchsetzung
- Dashboard-Übersicht - Vollständige Dashboard-Anleitung
Technische Kompetenz
Das Verständnis, wie Zonen unter der Haube funktionieren, hilft Ihnen, effektivere Geofencing-Strategien zu entwickeln und Probleme zu beheben, wenn sie auftreten. Nutzen Sie dieses Wissen, um Ihre Zonenkonfiguration für Ihre spezifischen betrieblichen Anforderungen zu optimieren.