AIS proxy (Digitraffic + sample) dla komponentu Delphi TBoats / TShips. Ten sam kontrakt obszaru co fly.imetroll.com.
Policy: tylko statki 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).
| 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= | Statki tylko w obszarze (Digitraffic; brak pokrycia → sample przefiltrowany do obszaru) |
GET /v1/sample/states | key= | Sample przefiltrowany do obszaru (też wymaga select) |
GET /v1/tracks | key= | Trasa + seria prędkości (SOG) dla mmsi |
| 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. gdansk, baltic, szczecin, finland-gulf). |
GET /v1/states?lamin=53.5&lomin=14&lamax=55.5&lomax=20.5&key=YOUR_KEY GET /v1/states?lat=54.52&lon=18.65&radius_km=30&key=YOUR_KEY GET /v1/states?area=gdansk&key=YOUR_KEY
| 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) |
| Pole | Typ | Opis |
|---|---|---|
time | int | Unix time snapshot |
source | string | digitraffic | sample |
count | int | Liczba statkó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) |
ships[] | array | Statki tylko w obszarze |
ships[].mmsi | string | MMSI |
ships[].name / callsign | string | Nazwa / sygnał |
ships[].ship_type / ship_type_name | int / string | Typ AIS (60 Passenger, 70 Cargo, 80 Tanker…) |
ships[].destination / country | string | Cel / kraj (MID) |
ships[].lat / lon | float | Pozycja WGS84 |
ships[].sog | float? | Prędkość [kn] |
ships[].cog / heading | float? | Kurs / dziób [°] |
ships[].nav_status | int? | Status nawigacyjny AIS |
ships[].draught / imo | float? / int? | Zanurzenie [m] / IMO |
| Param / pole | Opis |
|---|---|
mmsi (GET, wymagany) | MMSI statku |
time (opcjonalny) | Unix time (0 = bieżąca trasa) |
path[] | {t, lat, lon, sog, cog, heading} |
| HTTP | Kiedy |
|---|---|
| 400 | Brak obszaru, zły zakres, nieznany area, bbox/radius za duży, brak mmsi |
| 401 | Brak / zły key= |
| 404 | Nieznana ścieżka |
{
"time": 1728144000,
"source": "sample",
"count": 2,
"bbox": {"mode":"rectangle","lamin":54.25,"lomin":18.4,"lamax":54.9,"lomax":19.7,"area":"gdansk"},
"note": "digitraffic empty in area – sample filtered",
"ships": [
{"mmsi":"261000000","name":"EXAMPLE","callsign":"SPXX","country":"PL",
"destination":"GDANSK","ship_type":70,"ship_type_name":"Cargo",
"lat":54.40,"lon":18.70,"sog":8.5,"cog":120,"heading":118,"nav_status":0,"draught":5.2}
]
}
baltic, baltic-s, pl, pl-coast, gdansk, gdynia, szczecin, swinoujscie, kiel, oresund, finland-gulf, bothnia.
curl 'https://boatsea.imetroll.com/v1/areas' curl 'https://boatsea.imetroll.com/v1/states?area=gdansk&key=YOUR_KEY' curl 'https://boatsea.imetroll.com/v1/states?lat=60.15&lon=24.95&radius_km=20&key=YOUR_KEY' curl 'https://boatsea.imetroll.com/v1/tracks?mmsi=230661000&time=0&key=YOUR_KEY'
Boats1.Active = True na mapie: wybór obszaru (nav selectArea / BeginAreaSelect) lub
współrzędne (ApplyCoords / ApplyCoordsText / ApplyBounds / ApplyAreaId)
od razu wysyłają zapytanie do boatsea. Active = False → tylko Area.
Boats1.ApiKey := '...';
Boats1.Active := True;
Boats1.BeginAreaSelect; // lub BeginAreaSelect(bakRadius) = koło
Boats1.ApplyCoords(54.52, 18.65, 30); // → GET /v1/states?lat=54.52&lon=18.65&radius_km=30
Boats1.ApplyCoordsText('54,52; 18,65'); // promień = Area.RadiusKm (domyślnie 50)
Boats1.ApplyBounds(53.5, 14, 55.5, 20.5);
Boats1.ApplyAreaId('gdansk');
// Area.Kind bakRectangle | bakRadius, Area.AreaId; UseMapAreaSelection, AutoRequestOnAreaSelect, ShowAreaOnMap
Help: TBoats