Komponenty Delphi pomoc
Start › Komponenty Delphi › TAircraft

TAircraft

Middleware ADS-B: forma/mapa ↔ TAircraft ↔ fly.imetroll.com (GET + key=) → samoloty na mapie, InfoWindow, trasa + wykres wysokości.

VCLFMXniewidoczny
▶ Zobacz na żywo – demo HTML

Opis

Komponent niewidoczny z palety „Maps” – middleware jak TWeather, ale dla ruchu lotniczego. Domyślny serwer https://fly.imetroll.com (proxy OpenSky z auth key=). Mapa z AircraftInfo=True rysuje ruchome ikony samolotów (wbudowane SVG lub własne). Klik → TMapInfoWindow + przycisk Pokaż trasę → /v1/tracks + okno z wykresem wysokości. Alias typu: TPlanes = TAircraft.

Moduł: MapCommon.Aircraft (+ Aircraft.Types / Client / Overlay) · Klasa bazowa: TComponent · Platformy: VCL + FMX

TAircraft – podgląd poglądowy
Samoloty nad Polską (fly.imetroll.com / OpenSky): ikona + callsign, klik → InfoWindow, Pokaż trasę → polyline + chart. Podgląd poglądowy (nie zrzut z Delphi) – prawdziwa strona mapy komponentu w ramce imitującej formę.

Demo na żywo

Live ADS-B nad PL (fly.imetroll.com + key=): samoloty, klik → info, Pokaż trasę → chart.

Zaznacz prostokąt / koło lub wpisz lat, lon[, km] → automatyczne zapytanie fly; InfoWindow + trasa/wykres.

▶ Active + obszar / współrzędne

Funkcje

Server: https://fly.imetroll.com -- GET/JSON tables on fly index.
No reinvented draw: uses map StartAreaSelection / nav selectArea (pan-lock).
RTL module; Maps palette; MapComponentsRT.

Właściwości

WłaściwośćOpis
ApiKey / Key, RequireApiKey, ApiKeyParamLike TWeather -- key= on query.
BaseURLDefault https://fly.imetroll.com
Area.Kind / South|West|North|EastaakRectangle -> bbox to fly.
Area.CenterLat/Lon + RadiusKmaakRadius -> lat/lon/radius_km to fly.
Area.AreaIdNamed area (pl, warsaw, ...) -> area= to fly.
UseMapAreaSelection, AutoRequestOnAreaSelectZaznaczenie mapy → Area; przy Active=True → RefreshAsync (domyślnie oba True).
ShowAreaOnMapApplyCoords / ApplyBounds rysują obszar na mapie.
IntervalSec, Active, Display.*, Map, InfoWindowTimer, icons, links.
RouteWindowSize, RouteColor, ProviderRoute / apFlyProxy|apSample.

Zdarzenia

ZdarzenieOpis
OnDataReady(JSON)Po udanym states.
OnAircraftClick(State)Klik ikony samolotu.
OnRouteReady(Track, RouteJSON)Po pobraniu trasy.
OnAreaAppliedArea podmienione z mapy / współrzędnych (przed zapytaniem).
OnErroraekUnauthorized / sieć / HTTP / parse.

Metody

MetodaOpis
Request / Refresh / RefreshAsyncFetch states (always Area -> fly).
BeginAreaSelect / CancelAreaSelectStart/stop existing map area draw (pan-lock).
ApplyMapAreaProstokąt/koło z mapy → Area (+ zapytanie gdy Active).
ApplyCoords(Lat, Lon, RadiusKm=0)Obszar ze współrzędnych (promień opcjonalny; 0 = Area.RadiusKm, 80 km). Active → RefreshAsync.
ApplyCoordsText(S): BooleanParsuje „52.23, 21.01, 50” / „52,23; 21,01” z TEdit → ApplyCoords.
ApplyBounds(S, W, N, E) / ApplyAreaId(id)Prostokąt / nazwany obszar fly. Active → RefreshAsync.
ShowRoute / ShowRouteAsync / ClearRouteTrack + chart.
UpdateDisplay / ClearDisplay / DetectLinkedComponentsMap / InfoWindow.

Przykłady

TAircraft + mapa + InfoWindow + key=

Aircraft1.ApiKey := GetEnvironmentVariable('AIRCRAFT_API_KEY'); // &key=
Aircraft1.RequireApiKey := True;
Aircraft1.BaseURL := 'https://fly.imetroll.com';
// Area: rectangle OR radius OR AreaId -- server never dumps whole world
Aircraft1.Area.Kind := aakRectangle;
Aircraft1.Area.South := 49; Aircraft1.Area.West := 14;
Aircraft1.Area.North := 55; Aircraft1.Area.East := 25;
// or: Aircraft1.Area.Kind := aakRadius; CenterLat/Lon + RadiusKm
// or: Aircraft1.Area.AreaId := 'pl';
Aircraft1.UseMapAreaSelection := True;   // map selectArea -> Area
Aircraft1.AutoRequestOnAreaSelect := True; // Active=True: new area -> RefreshAsync at once
Aircraft1.IntervalSec := 10;
TileMap1.Aircraft := Aircraft1;
TileMap1.AircraftInfo := True;
Aircraft1.InfoWindow := MapInfoWindow1;
Aircraft1.Active := True;
// Active: draw on map -> fly query at once (pan-lock): Aircraft1.BeginAreaSelect; // or BeginAreaSelect(aakRadius)
// Active: coordinates -> fly query at once:
Aircraft1.ApplyCoords(52.23, 21.01, 50);      // lat/lon/radius_km=50
Aircraft1.ApplyCoordsText(EditCoords.Text);    // "52.23, 21.01, 50" | "52,23; 21,01"

Klik i trasa

procedure TForm1.AircraftClick(Sender: TObject; const State: TAircraftState);
begin
  // InfoWindow już wypełnione przez TAircraft; opcjonalnie:
  Memo1.Lines.Add(State.Callsign + ' ' + State.Icao24);
end;

procedure TForm1.BtnShowRouteClick(Sender: TObject);
begin
  Aircraft1.ShowRouteAsync(LastIcao24); // trasa + wykres wysokości na mapie
end;

Active: zaznaczenie obszaru lub współrzędne → automatyczne zapytanie

Aircraft1.Active = True na mapie: wybór obszaru (przycisk nawigacji Zaznacz obszar, BeginAreaSelect; mysz lub palec, pan/drag mapy zablokowany) albo współrzędne (ApplyCoords / ApplyCoordsText / ApplyBounds / ApplyAreaId) od razu wysyła zapytanie (RefreshAsync) do fly.imetroll.com/v1/states. Zapytanie trwające dla starego obszaru jest porzucane / anulowane. Active = False → zmienia się tylko Area; zapytanie wywołujesz sam (Request).

Źródło obszaruTAircraft.AreaZapytanie (Active=True)
Prostokąt narysowany na mapieaakRectangle + South/West/North/Eastlamin lomin lamax lomax
Koło narysowane na mapieaakRadius + CenterLat/Lon + RadiusKmlat lon radius_km
ApplyCoords(Lat, Lon, RadiusKm)aakRadius + CenterLat/Lon + RadiusKmlat lon radius_km
ApplyCoords(Lat, Lon) (bez promienia)aakRadius + CenterLat/Lon + RadiusKm, RadiusKm = Area.RadiusKm (domyślnie 80 km)lat lon radius_km
ApplyCoordsText(Edit1.Text)"52.23, 21.01, 50" · "52,23; 21,01; 50" · "52.23 21.01 50km" · "lat=52.2 lon=21 r=30" (promień opcjonalny); False = nie rozpoznano (+ OnError)
ApplyBounds(S, W, N, E)aakRectanglelamin lomin lamax lomax
ApplyAreaId(id)Area.AreaIdarea=warsaw
Właściwość / zdarzenieOpis
UseMapAreaSelection (True)Zaznaczenie na mapie podmienia Area.
AutoRequestOnAreaSelect (True)Przy Active=True: nowy obszar → RefreshAsync. False = tylko Area.
ShowAreaOnMap (True)ApplyCoords / ApplyBounds rysują obszar na mapie (bez ponownego areaSelected).
OnAreaAppliedPo podmianie Area (przed zapytaniem).

Map.OnAreaSelected pozostaje Twoim zdarzeniem: TAircraft, TBoats i TWeather słuchają tej samej mapy równolegle (TMapCore.AddAreaSelectedListener, multicast) – jedno zaznaczenie może zasilić wszystkie trzy.

Aircraft1.Active := True;
Aircraft1.BeginAreaSelect;                      // rysuj na mapie → zapytanie
Aircraft1.ApplyCoords(52.23, 21.01, 50);            // współrzędne + promień [km] → zapytanie
if not Aircraft1.ApplyCoordsText(Edit1.Text) then ShowMessage('lat, lon[, km]');

fly.imetroll.com -- GET and JSON

Area-scoped only. Missing area -> HTTP 400. Never dumps the whole world.

ModeGETTAircraft
rectanglelamin lomin lamax lomaxArea.Kind=aakRectangle + South/West/North/East
radiuslat lon radius_kmArea.Kind=aakRadius + CenterLat/Lon + RadiusKm
namedarea=plArea.AreaId:='pl'
EndpointAuthDescription
GET /v1/healthpublicStatus
GET /v1/areaspublicNamed id catalogue
GET /v1/stateskey=Aircraft in area only
GET /v1/sample/stateskey=Sample filtered to area
GET /v1/tracks?icao24=key=Track + altitudes
JSON (states)Description
time, source, count, note?Meta
bbox.moderectangle | radius
bbox.lamin/lomin/lamax/lomaxEnvelope
bbox.lat/lon/radius_kmWhen mode=radius
aircraft[].icao24, callsign, origin_country, lat, lonId + position
baro_altitude, geo_altitude, on_ground, velocity, true_track, vertical_rate, squawkFlight state

Full tables: fly.imetroll.com.

Pełna lista API

Generowana z deklaracji w kodzie (Source/*.pas): wszystkie opublikowane właściwości i zdarzenia TAircraft (także dziedziczone), właściwości publiczne i metody publiczne.

Właściwości opublikowane (19)

WłaściwośćTypDomyślnieOpis
ActiveBooleanFalse
BaseURLstringAdres serwera Nominatim
ApiKeystringKlucz API – tylko w kodzie, używany przez {apikey}
Keystring
ApiKeyParamstring
RequireApiKeyBooleanTrue
ProviderTAircraftProviderapFlyProxy
AreaTAircraftAreaZaznaczony obszar (kształt, punkty, prostokąt, koło)
DisplayTAircraftDisplay
IntervalSecIntegerAIRCRAFT_DEFAULT_INTERVAL_SEC
TimeoutMsIntegerAIRCRAFT_DEFAULT_TIMEOUT_MS
MapTComponent
InfoWindowTMapInfoWindow
AutoLinkComponentsBooleanTrueAutomatycznie łącz pierwszy dostawcę wyszukiwania / TMapAreas / TEditMap z formy
RouteWindowSizeTAircraftRouteWindowSizearwsLarge
RouteColorstring
UseMapAreaSelectionBooleanTrue
AutoRequestOnAreaSelectBooleanTrue
ShowAreaOnMapBooleanTrue

Zdarzenia (5)

ZdarzenieTypOpis
OnAreaAppliedTNotifyEvent
OnDataReadyTAircraftDataReadyEvent
OnErrorTAircraftErrorEventKażdy błąd (ErrorKind, HTTP, komunikat PL/EN)
OnAircraftClickTAircraftClickEvent
OnRouteReadyTAircraftRouteReadyEvent

Właściwości publiczne – tylko w kodzie (6)

WłaściwośćTypOpis
DataTAircraftSnapshot
LastTrackTAircraftTrack
BusyBooleanTrwa zapytanie
LastErrorKindTAircraftErrorKind
LastErrorstring
LastRefreshTDateTime

Metody publiczne (19)

MetodaOpis
function Refresh: BooleanPonownie wczytuje hierarchię i pliki
function Request: Boolean
procedure RefreshAsync
procedure Cancel
function DataJSON: string
procedure DetectLinkedComponentsWyszukuje na formie i łączy dostawcę / TMapAreas / TEditMap
function MapCore: TMapCoreIMapCoreProvider – rdzeń dla TEditMapRaster
procedure UpdateDisplay
procedure ClearDisplay
function ShowRoute(const Icao24: string): Boolean
procedure ShowRouteAsync(const Icao24: string)
procedure ClearRoute
function FindAircraft(const Icao24: string; out S: TAircraftState): Boolean
procedure BeginAreaSelect
procedure CancelAreaSelect
procedure ApplyCoords(const Lat, Lon: Double; const RadiusKm: Double = 0)
function ApplyCoordsText(const Text: string): Boolean
procedure ApplyBounds(const South, West, North, East: Double)
procedure ApplyAreaId(const AreaId: string)

Pełny opis wszystkich właściwości: dokumentacja komponentów map.

Zobacz też