Bus Sun Side API Online
Коя страна на автобуса получава слънце или сянка по време на пътуване и кои места са най-добри за сянка или за гледка. Пътуването се обхожда на стъпки от 5 минути: позиция и посока от маршрута, положение на слънцето на това място и в този час, след това оценка за всяко място според избраното разположение на автобуса. Използвайте маршрут от нашия регистър на лицензирани линии (route_id), две точки (from/to) или изпратете собствен маршрут чрез POST (спирки или polyline), за да получите също схема на местата, карта на маршрута и времева линия като изображения. Резултатите са оценка въз основа на геометрията и положението на слънцето; реалната сянка зависи и от пердета, сгради, релеф и времето.
GET https://nakordoni.eu/api/v2/data/bus-sun-side
— клас квота: heavy
| Параметър | Описание |
|---|---|
route_id | Id на маршрута от нашия регистър на автобусни маршрути (същите id като на автобусните страници на nakordoni.eu). Използвайте route_id или from+to. |
dir | direct (по подразбиране) или return. |
date | Дата на пътуването YYYY-MM-DD (по подразбиране днес). Положението на слънцето зависи от датата. |
dep | Час на тръгване HH:MM по местното време на маршрута (по подразбиране: разписанието от регистъра). |
from | Свободен маршрут: начална точка lat,lon (заедно с to). |
to | Свободен маршрут: крайна точка lat,lon (заедно с from). |
depart | Свободен маршрут: тръгване YYYY-MM-DDTHH:MM, местно време на началната точка. |
lang | Език на имената на места и текстовете, 25 езика (en, uk, pl, de, …). По подразбиране en. |
bus_model | Id на модела автобус от bus-sun-catalog (по подразбиране standard_coach). Всяко поле по-долу презаписва модела. |
rows | Seat rows, 8-20. |
layout | Разположение на местата: 2+2, 2+1 или 1+2 (вляво+вдясно от пътеката). |
door_side | right (континентална Европа) или left. |
windshield | large или normal — колко слънце получават първите редове през предното стъкло. |
rear_window | none, small или large — слънце на последните редове. |
window_height | standard или panoramic (високи странични прозорци). |
deck | single, upper или lower (двуетажни автобуси). |
mid_door | 1 или 0 — има средна врата (премахва местата там). |
timeline | 0 = изпуска времевата линия (редове по 15 минути). |
track | 0 = изпуска точките от трасето с час. |
weather | 1 (по подразбиране) или 0. С 1 се използва прогноза за времето по протежение на пътуването, когато то е в рамките на следващите 3 дни (72 h); за по-късни пътувания и weather=0 се приема ясно небе. |
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. |
Полета на отговора — вътре в обекта data в плика на отговора. [] означава списък, така че data.items[].name е полето name на всеки елемент. Поле може да е null, да липсва или да е празен списък, когато нямаме стойност — никога не подставяме заместител.
| Поле | Описание |
|---|---|
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. |
Опитайте без код: планерът за слънчевата страна изпълнява този API за всеки маршрут или ваше пътуване и показва схема на местата, карта, времева линия, изображения и кода на заявката. Отвори планера →
Your route (POST)
Изпратете собствен маршрут като JSON тяло чрез POST на същия URL. Отговорът има същите полета като GET плюс input (как е прочетен маршрутът), images (схема на местата, карта на маршрута и времева линия) и embed_html.
Спирките без геометрия се свързват с нашия пътен маршрутизатор; участък, който не може да бъде маршрутизиран, се изчертава като права линия и се отчита в input.legs_straight. Часове: поне две спирки с час или route.depart с route.duration_min или route.speed_kmh. Пътуването може да е до 72 h.
| Body field | Описание |
|---|---|
route.stops | 2-200 спирки по ред: {lat, lon, name?, arr?, dep?, day?}. arr / dep са местно време HH:MM; day = дни след route.date (часовете след полунощ се прехвърлят автоматично). |
route.geometry | Вашият път: GeoJSON LineString, MultiLineString, Feature или FeatureCollection (ред [lon, lat]) или кодиран низ polyline. До 5000 точки. Заедно със stops спирките дават часовете, а геометрията — пътя. |
route.polyline_precision | 5 (по подразбиране) или 6, за кодирана polyline. |
route.date | YYYY-MM-DD на часа на първата спирка (по подразбиране днес). |
route.depart | Тръгване YYYY-MM-DDTHH:MM, когато спирките нямат часове или изпращате само геометрия. |
route.duration_min | Продължителност на пътуването в минути, заедно с depart (иначе времето се изчислява от speed_kmh). |
route.speed_kmh | Средна скорост заедно с depart, по подразбиране 65. |
route.timezone | Часова зона IANA на изпратените часове (по подразбиране: зоната на държавата на първата точка). |
bus | Автобусът: bus_model от каталога и/или seats, rows, layout, door_side, windshield, rear_window, window_height, deck, mid_door — същите полета като параметрите на GET. По подразбиране standard_coach. |
images | Кои изображения да се създадат: всякакви от seat_map, route_map, timeline (по подразбиране и трите); [] = нито едно. |
format | png (по подразбиране), webp или jpg: типът файл на всеки URL на изображение. svg: файлове PNG, а схемата на местата се връща и вградена като SVG (seat_map.svg). |
theme | light (default) or dark. |
lang | Език на надписите в изображенията и текстовете, 25 езика (по подразбиране en). |
width | Ширина на изображението в px, 240-1600 (по подразбиране: естествен размер). |
embed_html | true (по подразбиране) = връща и embed_html; false = null. |
timeline / track | false = този списък се изпуска от отговора. |
weather | true (по подразбиране) или false: използва прогнозата за времето по протежение на пътуването (следващите 3 дни); false = само ясно небе. Приемат се също 1 и 0. |
Грешно или липсващо поле дава HTTP 400, като error.field съдържа пътя му, например route.stops[2].lat или 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
Всяко изображение има собствен URL със случайно име на файл (.png, .webp или .jpg). URL адресите не изискват ключ и са валидни 12 часа (expires_at); копирайте файловете, ако ви трябват по-дълго. embed_html е самостоятелен figure със схемата на местата като вграден SVG и ред с посочване на източника nakordoni.eu; запазете посочването при показване.
По-долу: изображенията за примерното тяло по-горе (микробус, Познан – Варшава, 21 юни).



Bus catalogue
bus_model приема един от тези общи класове превозни средства (не конкретни марки). Всяко изпратено поле на автобуса презаписва модела; seats се превръща в rows според layout. Същият списък е достъпен като JSON от 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
С weather=1 (по подразбиране; в тялото на POST "weather": true) отговорът използва почасова прогноза за времето по протежение на пътуването за следващите 3 дни (72 h); за по-късните части на пътуването се приема ясно небе. Тогава summary.sun_*_min се претеглят според прогнозата, всеки ред от timeline получава wx {code, f, temp, precip}, а weather {used, window_h, covered_pct, sunny_min, cloudy_min, rain_min, max_temp, note_key} показва каква част от пътуването е покрила прогнозата. recommend_clear е отговорът при ясно небе; weather_changes_answer е true, когато прогнозата променя страната на сянката. Когато прогнозата е предимно облачна или дъждовна, recommend.reason_key е mostly_cloudy, а shade_side е any. recommend.tip_key hot_sun_side означава, че за слънчевата страна се прогнозират 28 °C или повече.
Quota and accuracy
GET, както и POST с "images": [], се отчитат като 1 единица от тежкия клас; POST, който създава изображения, се отчита като 2. bus-sun-catalog е евтино извикване. Същото тяло на POST връща запазения отговор до 6 часа (1 час, когато е използвана прогноза за времето).
Резултатът е оценка въз основа на геометрията на маршрута и положението на слънцето. Пердетата, тонираните стъкла, сградите, дърветата, релефът и промененият маршрут не са ни известни. Облаците и дъждът идват от прогноза за времето само за пътувания през следващите 3 дни; за по-късни пътувания се приема ясно небе. confidence е по-нисък, когато слънцето е ниско, пътуването е кратко, маршрутът често завива или прогнозата е предимно облачна.
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"
Обновено