boatsea.imetroll.com

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).

Endpointy

Method / pathAuthOpis
GET /v1/healthpublicStatus + policy + tryby select
GET /v1/areaspublicKatalog nazwanych obszarów (id → bbox)
GET /v1/stateskey=Statki tylko w obszarze (Digitraffic; brak pokrycia → sample przefiltrowany do obszaru)
GET /v1/sample/stateskey=Sample przefiltrowany do obszaru (też wymaga select)
GET /v1/trackskey=Trasa + seria prędkości (SOG) dla mmsi

Wybór obszaru (wymagany) – 3 tryby

TrybGET paramsOpis
rectanglelamin lomin lamax lomaxProstokąt WGS84 (south, west, north, east). Max ~40°×60°.
radiuslat lon radius_kmŚrodek + promień [km]. Alias: clat/clon/radius. Max 1500 km. Odpowiedź filtruje haversine (koło).
namedarea=idId 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

GET /v1/states – parametry wejściowe

ParametrTypTrybOpis
laminfloatrectanglePołudnie (−90…90)
lominfloatrectangleZachód (−180…180)
lamaxfloatrectanglePółnoc
lomaxfloatrectangleWschód
lat / clatfloatradiusŚrodek – szerokość
lon / clonfloatradiusŚrodek – długość
radius_kmfloatradiusPromień w kilometrach (0…1500]
areastringnamedId obszaru z katalogu
keystringwszystkieKlucz API (nginx)

GET /v1/states – pola JSON (odpowiedź)

PoleTypOpis
timeintUnix time snapshot
sourcestringdigitraffic | sample
countintLiczba statków w obszarze
bboxobjectObszar zapytania (patrz niżej)
bbox.modestringrectangle | radius
bbox.lamin/lomin/lamax/lomaxfloatEnvelope (zawsze; dla radius = bbox opisujący koło)
bbox.lat/lon/radius_kmfloatTylko mode=radius
bbox.areastring?Named id gdy użyto area=
notestring?Uwaga (np. fallback sample)
ships[]arrayStatki tylko w obszarze
ships[].mmsistringMMSI
ships[].name / callsignstringNazwa / sygnał
ships[].ship_type / ship_type_nameint / stringTyp AIS (60 Passenger, 70 Cargo, 80 Tanker…)
ships[].destination / countrystringCel / kraj (MID)
ships[].lat / lonfloatPozycja WGS84
ships[].sogfloat?Prędkość [kn]
ships[].cog / headingfloat?Kurs / dziób [°]
ships[].nav_statusint?Status nawigacyjny AIS
ships[].draught / imofloat? / int?Zanurzenie [m] / IMO

GET /v1/tracks

Param / poleOpis
mmsi (GET, wymagany)MMSI statku
time (opcjonalny)Unix time (0 = bieżąca trasa)
path[]{t, lat, lon, sog, cog, heading}

Błędy

HTTPKiedy
400Brak obszaru, zły zakres, nieznany area, bbox/radius za duży, brak mmsi
401Brak / zły key=
404Nieznana ścieżka

Przykład JSON – GET /v1/states?area=gdansk

{
  "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}
  ]
}

Nazwane obszary (GET /v1/areas)

baltic, baltic-s, pl, pl-coast, gdansk, gdynia, szczecin, swinoujscie, kiel, oresund, finland-gulf, bothnia.

Przykłady curl

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'

Delphi TBoats – Active = automatyczne zapytanie po wyborze obszaru

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