fly.imetroll.com
ADS-B proxy (OpenSky) dla komponentu Delphi TAircraft / TPlanes.
Policy: tylko samoloty w żądanym obszarze. Nigdy nie zwraca całego świata. Brak obszaru → HTTP 400.
Auth jak weather: ?key= na /v1/* (poza /v1/health i /v1/areas).
Endpointy
| Method / path | Auth | Opis |
GET /v1/health | public | Status + policy + tryby select |
GET /v1/areas | public | Katalog nazwanych obszarów (id → bbox) |
GET /v1/states | key= | Samoloty tylko w obszarze (OpenSky lub sample) |
GET /v1/sample/states | key= | Sample przefiltrowany do obszaru (też wymaga select) |
GET /v1/tracks | key= | Trasa + seria wysokości dla icao24 |
Wybór obszaru (wymagany) – 3 tryby
| Tryb | GET params | Opis |
| rectangle | lamin lomin lamax lomax | Prostokąt WGS84 (south, west, north, east). Max ~40°×60°. |
| radius | lat lon radius_km | Środek + promień [km]. Alias: clat/clon/radius. Max 1500 km. Odpowiedź filtruje haversine (koło). |
| named | area=id | Id z /v1/areas (np. pl, warsaw). |
GET /v1/states?lamin=49&lomin=14&lamax=55&lomax=25&key=YOUR_KEY
GET /v1/states?lat=52.23&lon=21.01&radius_km=80&key=YOUR_KEY
GET /v1/states?area=pl&key=YOUR_KEY
GET /v1/states – parametry wejściowe
| Parametr | Typ | Tryb | Opis |
lamin | float | rectangle | Południe (−90…90) |
lomin | float | rectangle | Zachód (−180…180) |
lamax | float | rectangle | Północ |
lomax | float | rectangle | Wschód |
lat / clat | float | radius | Środek – szerokość |
lon / clon | float | radius | Środek – długość |
radius_km | float | radius | Promień w kilometrach (0…1500] |
area | string | named | Id obszaru z katalogu |
key | string | wszystkie | Klucz API (nginx) |
GET /v1/states – pola JSON (odpowiedź)
| Pole | Typ | Opis |
time | int | Unix time snapshot |
source | string | opensky | sample |
count | int | Liczba samolotów w obszarze |
bbox | object | Obszar zapytania (patrz niżej) |
bbox.mode | string | rectangle | radius |
bbox.lamin/lomin/lamax/lomax | float | Envelope (zawsze; dla radius = bbox opisujący koło) |
bbox.lat/lon/radius_km | float | Tylko mode=radius |
bbox.area | string? | Named id gdy użyto area= |
note | string? | Uwaga (np. fallback sample) |
aircraft[] | array | Stany tylko w obszarze |
aircraft[].icao24 | string | Hex ICAO24 (lowercase) |
aircraft[].callsign | string | Callsign |
aircraft[].origin_country | string | Kraj |
aircraft[].lat / lon | float | Pozycja WGS84 |
aircraft[].baro_altitude | float? | Wysokość baro [m] |
aircraft[].geo_altitude | float? | Wysokość geo [m] |
aircraft[].on_ground | bool | Na ziemi |
aircraft[].velocity | float? | Prędkość [m/s] |
aircraft[].true_track | float? | Kurs [°] |
aircraft[].vertical_rate | float? | V/S [m/s] |
aircraft[].squawk | string? | Squawk |
aircraft[].time_position | int? | Czas pozycji |
aircraft[].last_contact | int? | Ostatni kontakt |
GET /v1/tracks
| Param / pole | Opis |
icao24 (GET, wymagany) | Identyfikator ICAO24 |
time (opcjonalny) | Unix time (0 = bieżący lot) |
path[] | {t, lat, lon, alt, track, on_ground} |
Błędy
| HTTP | Kiedy |
| 400 | Brak obszaru, zły zakres, nieznany area, bbox/radius za duży, brak icao24 |
| 401 | Brak / zły key= |
| 404 | Nieznana ścieżka |
Delphi TAircraft – Active = automatyczne zapytanie po wyborze obszaru
Aircraft1.Active = True na mapie: każdy wybór obszaru myszą/palcem (nav selectArea /
BeginAreaSelect) albo podanie współrzędnych (ApplyCoords / ApplyCoordsText /
ApplyBounds / ApplyAreaId) od razu wysyła zapytanie do fly (RefreshAsync).
Trwające zapytanie dla starego obszaru jest porzucane. Active = False → tylko zmiana Area
(wywołaj Request sam).
Aircraft1.ApiKey := '...';
Aircraft1.RequireApiKey := True;
Aircraft1.Active := True; // + IntervalSec odświeżanie
// A) rysowanie (pan/drag zablokowane) → Map area select → fly
Aircraft1.BeginAreaSelect; // lub BeginAreaSelect(aakRadius) = koło
// B) współrzędne: lat/lon + opcjonalny promień [km] (0 = Area.RadiusKm, domyślnie 80)
Aircraft1.ApplyCoords(52.23, 21.01, 50); // → GET /v1/states?lat=52.23&lon=21.01&radius_km=50
Aircraft1.ApplyCoordsText(Edit1.Text); // "52.23, 21.01, 50" | "52,23; 21,01" | "lat=52.2 lon=21 r=30"
// C) prostokąt ze współrzędnych / named
Aircraft1.ApplyBounds(49, 14, 55, 25); // lamin lomin lamax lomax
Aircraft1.ApplyAreaId('warsaw'); // area=warsaw
// Właściwości: UseMapAreaSelection, AutoRequestOnAreaSelect (True), ShowAreaOnMap (True), OnAreaApplied
// Map.OnAreaSelected pozostaje Twoim zdarzeniem – TAircraft słucha osobno (multicast).
Help: TAircraft