Komponenty Delphi pomoc
Start › Komponenty Delphi › TGeoFencing

TGeoFencing

Strefy geograficzne (okręgi i wielokąty) ze zdarzeniami wejścia i wyjścia – osobny pakiet GeoFencing.

VCLFMXniewidoczny
▶ Zobacz na żywo – demo HTML

Opis

Komponent niewidoczny, który śledzi pozycję urządzenia i zgłasza wejście do strefy i wyjście z niej. Strefy to okręgi i wielokąty z histerezą i czasem przebywania; wczytujesz je z pliku JSON albo dodajesz w kodzie. Na Androidzie i iOS może używać natywnych regionów systemu.

Moduł: pakiet GeoFencing (osobny projekt) · Klasa bazowa: TComponent · Platformy: VCL + FMX (Windows, Android, iOS)

TGeoFencing – podgląd poglądowy
Jedna duża strefa wielokątna (zoom), czerwony punkt urządzenia wewnątrz i czarno-czerwony dymek ostrzegawczy (!) nad punktem (OnEnterZone). Podgląd poglądowy (nie zrzut z Delphi) – prawdziwa strona mapy komponentu w ramce imitującej formę.

Demo na żywo

Strefy kołowe i wielokątne, symulacja trasy, histereza i zdarzenia OnEnterZone / OnExitZone na żywo.

▶ Otwórz demo HTML

Funkcje

TGeoFencing to osobny pakiet (projekt GeoFencing) – instalujesz go niezależnie od komponentów map. Moduły z IDE dodają się do uses automatycznie po upuszczeniu komponentu.
Dostawcy Android/iOS/WinRT i edytor stref nie były jeszcze kompilowane w Delphi ani testowane na urządzeniach; logika stref przechodzi testy Free Pascala.

Właściwości

WłaściwośćOpis
ActiveWłącza śledzenie.
ZoneFile, AutoLoadPlik stref JSON i automatyczne wczytanie.
IntervalOdstęp odczytów pozycji w ms (domyślnie 5000).
ProviderNameWymuszenie dostawcy pozycji.
DefaultHysteresisHistereza w metrach dla stref bez własnej.
MaxAccuracy, DesiredAccuracyOdrzucanie niedokładnych odczytów, żądana dokładność.
ReportInitialStateZgłoś stan stref zaraz po starcie.
UseNativeRegions, MaxNativeRegions, RegionRefreshDistanceRegiony systemowe Android/iOS.
BackgroundModePraca w tle.
ShowConsentDialog, ConsentTitle, ConsentTextOkno zgody użytkownika.
ZonesLista stref TGeoZoneList (Id, Name, Enabled, Tag, Hysteresis, DwellSeconds, Radius, Points, AlertKind/Symbol/FontSize/Color/Pulse/PulseColor/IconFile).

Zdarzenia

ZdarzenieOpis
OnEnterZone, OnExitZone(Sender; Zone: TGeoZone; const Lat, Lon: Double; const Timestamp: TDateTime)
OnPositionChangedNowa pozycja (TGeoPosition).
OnZonesLoadedWczytano strefy (liczba, ostrzeżenia).
OnConsentResultDecyzja użytkownika w oknie zgody.
OnErrorBłąd dostawcy lub pliku.

Metody

MetodaOpis
CheckPositionSprawdź pozycję teraz (np. punkt testowy).
LoadZones, SaveZonesPlik ZoneFile.
LoadFromFile, SaveToFile, LoadFromJSON, SaveToJSONStrefy z/do pliku lub tekstu JSON.
InsideZonesStrefy zawierające punkt.
ResetStatesWyzerowanie stanów wejścia/wyjścia.
RequestPermissionsProśba o uprawnienia lokalizacji.

Przykłady

Strefy i zdarzenia

procedure TForm1.FormCreate(Sender: TObject);
begin
  GeoFencing1.Zones.AddCircle('Magazyn', 52.2297, 21.0122, 300, 'depot-1');
  GeoFencing1.Zones.AddPolygon('Plac budowy',
    [GeoPoint(52.2405, 20.9980), GeoPoint(52.2412, 21.0045),
     GeoPoint(52.2370, 21.0060), GeoPoint(52.2362, 20.9992)], 'site-1');
  GeoFencing1.DefaultHysteresis := 25;      // metry – brak „migotania” na granicy
  GeoFencing1.Interval := 5000;
  GeoFencing1.Active := True;               // najpierw okno zgody (ShowConsentDialog)
end;

procedure TForm1.GeoFencing1EnterZone(Sender: TObject; Zone: TGeoZone;
  const Lat, Lon: Double; const Timestamp: TDateTime);
begin
  Memo1.Lines.Add(FormatDateTime('hh:nn:ss', Timestamp) + ' wejście: ' + Zone.Name);
end;

procedure TForm1.GeoFencing1ExitZone(Sender: TObject; Zone: TGeoZone;
  const Lat, Lon: Double; const Timestamp: TDateTime);
begin
  Memo1.Lines.Add(FormatDateTime('hh:nn:ss', Timestamp) + ' wyjście: ' + Zone.Name);
end;

Plik stref (JSON)

{
  "format": "…", "version": 1,
  "zones": [
    { "type": "circle", "id": "depot-1", "name": "Magazyn", "enabled": true,
      "center": { "lat": 52.2297, "lon": 21.0122 }, "radius": 300,
      "hysteresis": 25, "dwell": 30 },
    { "type": "polygon", "id": "site-1", "name": "Plac budowy",
      "points": [ { "lat": 52.2405, "lon": 20.9980 }, { "lat": 52.2412, "lon": 21.0045 },
                  { "lat": 52.2370, "lon": 21.0060 }, { "lat": 52.2362, "lon": 20.9992 } ],
      "hysteresis": 20, "dwell": 0 }
  ]
}

Zobacz też