API Bus Sun Side Online
Która strona autokaru ma słońce, a która cień w trakcie podróży i które miejsca są najlepsze dla cienia lub widoku. Podróż jest analizowana w krokach co 5 minut: pozycja i kierunek z trasy, położenie słońca w tym miejscu i czasie, a następnie szacunek dla każdego miejsca według wybranego układu autobusu. Użyj trasy z naszego rejestru licencjonowanych tras (route_id), dwóch punktów (from/to) lub wyślij własną trasę przez POST (przystanki lub polyline), aby otrzymać także mapę miejsc, mapę trasy i oś czasu jako obrazy. Wyniki to szacunek na podstawie geometrii i położenia słońca; rzeczywisty cień zależy też od zasłon, budynków, ukształtowania terenu i pogody.
GET https://nakordoni.eu/api/v2/data/bus-sun-side
— klasa limitu: heavy
| Parametr | Opis |
|---|---|
route_id | Id trasy z naszego rejestru tras autobusowych (te same id co na stronach autobusowych nakordoni.eu). Użyj route_id albo from+to. |
dir | direct (domyślnie) lub return. |
date | Data podróży YYYY-MM-DD (domyślnie dzisiaj). Położenie słońca zależy od daty. |
dep | Godzina odjazdu HH:MM w czasie lokalnym trasy (domyślnie: rozkład z rejestru). |
from | Trasa dowolna: punkt początkowy lat,lon (razem z to). |
to | Trasa dowolna: punkt końcowy lat,lon (razem z from). |
depart | Trasa dowolna: odjazd YYYY-MM-DDTHH:MM, czas lokalny punktu początkowego. |
lang | Język nazw miejsc i tekstów, 25 języków (en, uk, pl, de, …). Domyślnie en. |
bus_model | Id modelu autobusu z bus-sun-catalog (domyślnie standard_coach). Każde pole poniżej nadpisuje model. |
rows | Seat rows, 8-20. |
layout | Układ miejsc: 2+2, 2+1 lub 1+2 (lewa+prawa strona przejścia). |
door_side | right (Europa kontynentalna) lub left. |
windshield | large lub normal — ile słońca pierwsze rzędy dostają przez przednią szybę. |
rear_window | none, small lub large — słońce w ostatnich rzędach. |
window_height | standard lub panoramic (wysokie okna boczne). |
deck | single, upper lub lower (autokary piętrowe). |
mid_door | 1 lub 0 — są środkowe drzwi (usuwa tamtejsze miejsca). |
timeline | 0 = pomiń oś czasu (wiersze co 15 minut). |
track | 0 = pomiń punkty śladu z czasem. |
weather | 1 (domyślnie) lub 0. Przy 1 używana jest prognoza pogody wzdłuż trasy, gdy podróż przypada w najbliższych 3 dniach (72 h); późniejsze podróże i weather=0 zakładają bezchmurne niebo. |
animation | 1 (default) or 0. With 0, the animation block (sun and coach position every 5 minutes) is left out. POST body: animation true|false. |
Pola odpowiedzi — wewnątrz obiektu data w kopercie odpowiedzi. [] oznacza listę, więc data.items[].name to pole name każdego elementu. Pole bywa null, nieobecne lub jest pustą listą, gdy nie mamy wartości — nigdy nie wstawiamy atrapy.
| Pole | Opis |
|---|---|
data.date / data.tz | Travel date and the time zone of the times in the answer. |
data.route | id, num, from, to, dir, dep, arr, km (registry route) — or the stops you sent (POST). |
data.basis | How the timed path was built: timetable (registry or your stop times), router (our road route between points) or geometry (your polyline). |
data.bus | The bus profile used: model, layout, rows, door_side, windshield, rear_window, window_height, deck, mid_door. |
data.summary | trip_min, daylight_min, night_min and minutes with the sun on the left, right, ahead and behind (weather-weighted when a forecast was used). |
data.recommend | shade_side, sun_side, shade_pct, best_shade_seats[], best_sun_seats[], confidence (high | medium | low), reason_key; tip_key hot_sun_side when the sunny side is forecast at 28 °C or more. reason_key mostly_cloudy (shade_side any) when the forecast is mostly cloud or rain. |
data.recommend_clear | The same recommendation for a clear sky (no weather). |
data.weather_changes_answer | true when the forecast changes the shade side compared with recommend_clear. |
data.weather | used, window_h (72), covered_pct, sunny_min, cloudy_min, rain_min, max_temp, note_key (forecast_used | partly_forecast | mostly_cloudy | rain_expected | clear_sky_only). |
data.zones | front / middle / back: left and right sun exposure 0-100 and rows [first, last] of that part. |
data.seats | layout, rows, cols[], grid[][]: every seat — id (e.g. 4C), side, pos (window | aisle), exp (sun exposure 0-100), door (true next to a door). |
data.timeline[] | One row per 15 min: t, lat, lon, hd (heading), az / el (sun azimuth / elevation), side (left | right | ahead | behind | none), w (sun strength); wx {code, f, temp, precip} when a forecast was used. |
data.track[] | Track points [lat, lon, sun side] for drawing the route (leave out with track=0). |
data.input | POST only: how your route was read — source, timed_by, stops, points, legs_routed, legs_straight, timezone. |
data.images | POST only: seat_map, route_map, timeline — each {url, format, expires_at}; url = https://api.nakordoni.dev/images/<random name>.<png | webp | jpg> (body format, default png). Files are kept 12 hours. format svg: PNG files plus the seat map as inline SVG (seat_map.svg). |
data.embed_html | POST only: a self-contained HTML figure with the seat map (inline SVG) to paste into a page; null with embed_html=false. |
Wypróbuj bez kodu: planer strony słonecznej w autobusie uruchamia to API dla dowolnej trasy lub Twojej własnej podróży i pokazuje plan miejsc, mapę, oś czasu, obrazy oraz kod wywołania. Otwórz planer →
Your route (POST)
Wyślij własną trasę jako treść JSON metodą POST na ten sam URL. Odpowiedź ma te same pola co GET oraz input (jak odczytano trasę), images (mapa miejsc, mapa trasy i oś czasu) i embed_html.
Przystanki bez geometrii są łączone naszym routerem drogowym; odcinek, którego nie da się wyznaczyć, jest rysowany jako linia prosta i liczony w input.legs_straight. Czasy: co najmniej dwa przystanki z godziną albo route.depart z route.duration_min lub route.speed_kmh. Podróż może trwać do 72 h.
| Body field | Opis |
|---|---|
route.stops | 2-200 przystanków w kolejności: {lat, lon, name?, arr?, dep?, day?}. arr / dep to czas lokalny HH:MM; day = liczba dni po route.date (godziny przechodzące przez północ przenoszą się automatycznie). |
route.geometry | Twoja ścieżka: GeoJSON LineString, MultiLineString, Feature lub FeatureCollection (kolejność [lon, lat]) albo zakodowany ciąg polyline. Do 5000 punktów. Razem ze stops przystanki podają czasy, a geometria — ścieżkę. |
route.polyline_precision | 5 (domyślnie) lub 6, dla zakodowanej polyline. |
route.date | YYYY-MM-DD czasu pierwszego przystanku (domyślnie dzisiaj). |
route.depart | Odjazd YYYY-MM-DDTHH:MM, gdy przystanki nie mają godzin lub wysyłasz tylko geometrię. |
route.duration_min | Czas podróży w minutach, razem z depart (w przeciwnym razie czas wynika z speed_kmh). |
route.speed_kmh | Średnia prędkość razem z depart, domyślnie 65. |
route.timezone | Strefa czasowa IANA wysyłanych godzin (domyślnie: strefa kraju pierwszego punktu). |
bus | Autobus: bus_model z katalogu i/lub seats, rows, layout, door_side, windshield, rear_window, window_height, deck, mid_door — te same pola co parametry GET. Domyślnie standard_coach. |
images | Które obrazy utworzyć: dowolne z seat_map, route_map, timeline (domyślnie wszystkie trzy); [] = żadne. |
format | png (domyślnie), webp lub jpg: typ pliku każdego URL obrazu. svg: pliki PNG, a mapa miejsc jest dodatkowo zwracana inline jako SVG (seat_map.svg). |
theme | light (default) or dark. |
lang | Język etykiet na obrazach i tekstów, 25 języków (domyślnie en). |
width | Szerokość obrazu w px, 240-1600 (domyślnie: rozmiar naturalny). |
embed_html | true (domyślnie) = zwróć także embed_html; false = null. |
timeline / track | false = pomiń tę listę w odpowiedzi. |
weather | true (domyślnie) lub false: użyj prognozy pogody wzdłuż trasy (najbliższe 3 dni); false = tylko bezchmurne niebo. Akceptowane są też 1 i 0. |
Błędne lub brakujące pole daje HTTP 400 z error.field ustawionym na jego ścieżkę, na przykład route.stops[2].lat lub bus.seats.
curl -X POST "https://nakordoni.eu/api/v2/data/bus-sun-side" \
-H "Authorization: Bearer NKD-DEV-XXXX-XXXX-XXXX" \
-H "Content-Type: application/json" \
-d '{
"route": {
"stops": [
{
"name": "Poznań Dworzec Autobusowy",
"lat": 52.4011,
"lon": 16.911,
"dep": "08:00"
},
{
"name": "Konin",
"lat": 52.223,
"lon": 18.2511,
"arr": "09:20",
"dep": "09:25"
},
{
"name": "Łódź Kaliska",
"lat": 51.7573,
"lon": 19.4306,
"arr": "10:55",
"dep": "11:05"
},
{
"name": "Warszawa Zachodnia",
"lat": 52.219,
"lon": 20.965,
"arr": "13:10"
}
],
"date": "2026-06-21",
"timezone": "Europe/Warsaw"
},
"bus": {
"bus_model": "minibus"
},
"images": [
"seat_map",
"route_map",
"timeline"
],
"format": "png",
"theme": "light",
"lang": "en",
"weather": true
}'
const res = await fetch('https://nakordoni.eu/api/v2/data/bus-sun-side', {
method: 'POST',
headers: { 'Authorization': 'Bearer NKD-DEV-XXXX-XXXX-XXXX', 'Content-Type': 'application/json' },
body: JSON.stringify({
route: { stops: [
{ name: 'Poznań', lat: 52.4011, lon: 16.911, dep: '08:00' },
{ name: 'Warszawa', lat: 52.219, lon: 20.965, arr: '11:30' } ],
date: '2026-06-21', timezone: 'Europe/Warsaw' },
bus: { bus_model: 'comfort_coach_2_1' },
images: ['seat_map'], format: 'svg', lang: 'pl'
})
});
const { data } = await res.json();
console.log(data.recommend.shade_side, data.recommend.best_shade_seats);
document.querySelector('#seats').innerHTML = data.embed_html; // or <img src="data.images.seat_map.url">
Images and embed_html
Każdy obraz ma własny URL z losową nazwą pliku (.png, .webp lub .jpg). URL nie wymagają klucza i są ważne 12 godzin (expires_at); skopiuj pliki, jeśli potrzebujesz ich dłużej. embed_html to samodzielny figure z mapą miejsc jako inline SVG i linią z podaniem źródła nakordoni.eu; zachowaj podanie źródła przy wyświetlaniu.
Poniżej: obrazy dla przykładowej treści żądania powyżej (minibus, Poznań – Warszawa, 21 czerwca).



Bus catalogue
bus_model przyjmuje jedną z tych ogólnych klas pojazdów (nie konkretne marki). Każde wysłane pole autobusu nadpisuje model; seats jest przeliczane na rows według layout. Ta sama lista jest dostępna jako JSON z bus-sun-catalog.
| bus_model | layout | rows | door_side | windshield | rear_window | window_height | deck | mid_door | typical_seats |
|---|---|---|---|---|---|---|---|---|---|
standard_coachStandard touring coach (12-13 m, 2+2) |
2+2 | 13 | right | large | small | standard | single | true | 49-53 |
panoramic_coachCoach with panoramic (tall) side windows, 2+2 |
2+2 | 13 | right | large | small | panoramic | single | true | 49-53 |
midi_coachMidi coach (9-10 m, 2+2) |
2+2 | 9 | right | large | small | standard | single | false | 33-37 |
comfort_coach_2_1Comfort coach with 2+1 seating |
2+1 | 12 | right | large | small | standard | single | true | 33-36 |
minibusMinibus (7-8 m, 2+1) |
2+1 | 6 | right | normal | large | standard | single | false | 16-20 |
double_deck_upperDouble-deck coach, upper deck |
2+2 | 15 | right | large | small | panoramic | upper | false | 56-64 on the upper deck |
double_deck_lowerDouble-deck coach, lower deck |
2+2 | 5 | right | normal | none | standard | lower | true | 12-20 on the lower deck |
Allowed values:
layout 2+2 | 2+1 | 1+2 · rows {"min":4,"max":20,"custom_min":8} · door_side right | left · windshield large | normal · rear_window none | small | large · window_height standard | panoramic · deck single | upper | lower · mid_door true | false
Weather
Przy weather=1 (domyślnie; w treści POST "weather": true) odpowiedź korzysta z godzinowej prognozy pogody wzdłuż trasy na najbliższe 3 dni (72 h); dla późniejszych części podróży przyjmowane jest bezchmurne niebo. summary.sun_*_min są wtedy ważone prognozą, każdy wiersz timeline dostaje wx {code, f, temp, precip}, a weather {used, window_h, covered_pct, sunny_min, cloudy_min, rain_min, max_temp, note_key} pokazuje, jaką część podróży objęła prognoza. recommend_clear to odpowiedź dla bezchmurnego nieba; weather_changes_answer ma wartość true, gdy prognoza zmienia stronę cienia. Gdy prognoza to głównie chmury lub deszcz, recommend.reason_key ma wartość mostly_cloudy, a shade_side — any. recommend.tip_key hot_sun_side oznacza, że po słonecznej stronie prognozowane jest 28 °C lub więcej.
Quota and accuracy
GET oraz POST z "images": [] liczą się jako 1 jednostka klasy ciężkiej; POST tworzący obrazy liczy się jako 2. bus-sun-catalog to tanie wywołanie. Ta sama treść POST zwraca zapisaną odpowiedź do 6 godzin (1 godzina, gdy użyto prognozy pogody).
Wynik to szacunek na podstawie geometrii trasy i położenia słońca. Zasłony, przyciemniane szyby, budynki, drzewa, ukształtowanie terenu i zmieniona trasa nie są nam znane. Chmury i deszcz pochodzą z prognozy pogody tylko dla podróży w najbliższych 3 dniach; dla późniejszych podróży przyjmowane jest bezchmurne niebo. confidence jest niższe, gdy słońce jest nisko, podróż jest krótka, trasa często skręca lub prognoza jest głównie pochmurna.
curl "https://nakordoni.eu/api/v2/data/bus-sun-side?route_id=521&dir=direct&date=2026-06-21&bus_model=standard_coach&lang=en" \ -H "Authorization: Bearer NKD-DEV-XXXX-XXXX-XXXX"
Zaktualizowano