Bus Sun Side API Online
Səfər zamanı avtobusun hansı tərəfi günəş və ya kölgə alır və kölgə və ya mənzərə üçün hansı oturacaqlar ən yaxşısıdır. Səfər 5 dəqiqəlik addımlarla keçilir: marşrutdan mövqe və istiqamət, həmin yerdə və vaxtda günəşin mövqeyi, sonra seçilmiş avtobus düzülüşü üzrə hər oturacaq üçün təxmin. Lisenziyalı reyslər reyestrimizdən marşrut (route_id), iki nöqtə (from/to) istifadə edin və ya oturacaq sxemi, marşrut xəritəsi və zaman xəttini şəkil kimi də almaq üçün öz marşrutunuzu POST ilə göndərin (dayanacaqlar və ya polyline). Nəticələr həndəsə və günəşin mövqeyinə əsaslanan təxmindir; real kölgə həm də pərdələrdən, binalardan, relyefdən və havadan asılıdır.
GET https://nakordoni.eu/api/v2/data/bus-sun-side
— kvota sinfi: heavy
| Parametr | Təsvir |
|---|---|
route_id | Avtobus marşrutları reyestrimizdən marşrut id-si (nakordoni.eu avtobus səhifələrindəki id-lərlə eyni). route_id və ya from+to istifadə edin. |
dir | direct (standart) və ya return. |
date | Səfər tarixi YYYY-MM-DD (standart bu gün). Günəşin mövqeyi tarixdən asılıdır. |
dep | Marşrutun yerli vaxtı ilə yola düşmə vaxtı HH:MM (standart: reyestrdəki cədvəl). |
from | Sərbəst marşrut: başlanğıc nöqtəsi lat,lon (to ilə birlikdə). |
to | Sərbəst marşrut: son nöqtə lat,lon (from ilə birlikdə). |
depart | Sərbəst marşrut: yola düşmə YYYY-MM-DDTHH:MM, başlanğıc nöqtəsinin yerli vaxtı. |
lang | Yer adlarının və mətnlərin dili, 25 dil (en, uk, pl, de, …). Standart en. |
bus_model | bus-sun-catalog-dan avtobus modeli id-si (standart standard_coach). Aşağıdakı istənilən sahə modeli əvəz edir. |
rows | Seat rows, 8-20. |
layout | Oturacaq düzülüşü: 2+2, 2+1 və ya 1+2 (keçidin sol+sağ tərəfi). |
door_side | right (kontinental Avropa) və ya left. |
windshield | large və ya normal — ön sıralar qabaq şüşədən nə qədər günəş alır. |
rear_window | none, small və ya large — son sıralarda günəş. |
window_height | standard və ya panoramic (hündür yan pəncərələr). |
deck | single, upper və ya lower (ikimərtəbəli avtobuslar). |
mid_door | 1 və ya 0 — orta qapı var (oradakı oturacaqları çıxarır). |
timeline | 0 = zaman xətti daxil edilmir (15 dəqiqəlik sətirlər). |
track | 0 = vaxtlı trek nöqtələri daxil edilmir. |
weather | 1 (standart) və ya 0. 1 ilə, səfər növbəti 3 gün (72 h) ərzindədirsə, səfər boyunca hava proqnozundan istifadə olunur; sonrakı səfərlər və weather=0 açıq səmadan istifadə edir. |
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. |
Cavab sahələri — cavab zərfindəki data obyektinin içində. [] siyahını bildirir, yəni data.items[].name hər elementin name sahəsidir. Dəyəri olmayan sahə null olur, ümumiyyətlə görünmür və ya boş siyahı qaytarır — heç vaxt doldurucu qoymuruq.
| Sahə | Təsvir |
|---|---|
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. |
Kodsuz sınayın: günəşli tərəf planlaşdırıcısı bu API-ni istənilən marşrut və ya öz səfəriniz üçün işə salır və oturacaq sxemini, xəritəni, xronologiyanı, şəkilləri və sorğunun kodunu göstərir. Planlaşdırıcını aç →
Your route (POST)
Öz marşrutunuzu JSON gövdəsi kimi POST ilə eyni URL-ə göndərin. Cavabda GET ilə eyni sahələr, üstəlik input (marşrutun necə oxunduğu), images (oturacaq sxemi, marşrut xəritəsi və zaman xətti) və embed_html olur.
Həndəsəsiz dayanacaqlar yol marşrutlaşdırıcımızla birləşdirilir; marşrutlaşdırıla bilməyən hissə düz xətt kimi çəkilir və input.legs_straight-da sayılır. Vaxtlar: vaxtı göstərilmiş ən azı iki dayanacaq və ya route.duration_min ya da route.speed_kmh ilə route.depart. Səfər 72 h-a qədər davam edə bilər.
| Body field | Təsvir |
|---|---|
route.stops | Ardıcıllıqla 2-200 dayanacaq: {lat, lon, name?, arr?, dep?, day?}. arr / dep yerli vaxtdır HH:MM; day = route.date-dən sonrakı günlər (gecəyarısını keçən vaxtlar avtomatik keçirilir). |
route.geometry | Yolunuz: GeoJSON LineString, MultiLineString, Feature və ya FeatureCollection ([lon, lat] sırası) və ya kodlanmış polyline sətri. 5000 nöqtəyə qədər. stops ilə birlikdə dayanacaqlar vaxtları, həndəsə isə yolu verir. |
route.polyline_precision | Kodlanmış polyline üçün 5 (standart) və ya 6. |
route.date | Birinci dayanacaq vaxtının YYYY-MM-DD tarixi (standart bu gün). |
route.depart | Dayanacaqların vaxtı olmadıqda və ya yalnız həndəsə göndərdikdə yola düşmə YYYY-MM-DDTHH:MM. |
route.duration_min | Dəqiqə ilə səfər müddəti, depart ilə birlikdə (əks halda vaxt speed_kmh-dən hesablanır). |
route.speed_kmh | depart ilə birlikdə orta sürət, standart 65. |
route.timezone | Göndərdiyiniz vaxtların IANA saat qurşağı (standart: birinci nöqtənin ölkəsinin qurşağı). |
bus | Avtobus: katalogdan bus_model və/və ya seats, rows, layout, door_side, windshield, rear_window, window_height, deck, mid_door — GET parametrləri ilə eyni sahələr. Standart standard_coach. |
images | Hansı şəkillər yaradılsın: seat_map, route_map, timeline-dan istənilən (standart hər üçü); [] = heç biri. |
format | png (standart), webp və ya jpg: hər şəkil URL-nin fayl növü. svg: PNG fayllar, oturacaq sxemi isə əlavə olaraq daxili SVG kimi qaytarılır (seat_map.svg). |
theme | light (default) or dark. |
lang | Şəkil etiketlərinin və mətnlərin dili, 25 dil (standart en). |
width | Şəkil eni px ilə, 240-1600 (standart: təbii ölçü). |
embed_html | true (standart) = embed_html də qaytarılır; false = null. |
timeline / track | false = həmin siyahı cavaba daxil edilmir. |
weather | true (standart) və ya false: səfər boyunca hava proqnozundan istifadə et (növbəti 3 gün); false = yalnız açıq səma. 1 və 0 da qəbul edilir. |
Səhv və ya çatışmayan sahə HTTP 400 qaytarır, error.field isə onun yolunu göstərir, məsələn route.stops[2].lat və ya 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
Hər şəklin təsadüfi fayl adı olan öz URL-i var (.png, .webp və ya .jpg). URL-lər açar tələb etmir və 12 saat etibarlıdır (expires_at); daha uzun müddət lazımdırsa, faylları kopyalayın. embed_html oturacaq sxemini daxili SVG kimi və nakordoni.eu mənbə sətrini ehtiva edən müstəqil figure-dur; göstərərkən mənbə sətrini saxlayın.
Aşağıda: yuxarıdakı nümunə gövdə üçün şəkillər (mikroavtobus, Poznan – Varşava, 21 iyun).



Bus catalogue
bus_model bu ümumi nəqliyyat siniflərindən birini qəbul edir (konkret markaları deyil). Göndərdiyiniz istənilən avtobus sahəsi modeli əvəz edir; seats layout üzrə rows-a çevrilir. Eyni siyahı bus-sun-catalog vasitəsilə JSON kimi mövcuddur.
| 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 ilə (standart; POST gövdəsində "weather": true) cavab növbəti 3 gün (72 h) üçün səfər boyunca saatlıq hava proqnozundan istifadə edir; səfərin sonrakı hissələri üçün açıq səma götürülür. Bu halda summary.sun_*_min proqnoza görə çəkilir, hər timeline sətri wx {code, f, temp, precip} alır, weather {used, window_h, covered_pct, sunny_min, cloudy_min, rain_min, max_temp, note_key} isə səfərin nə qədərini proqnozun əhatə etdiyini göstərir. recommend_clear açıq səma üçün cavabdır; proqnoz kölgə tərəfini dəyişəndə weather_changes_answer true olur. Proqnoz əsasən buludlu və ya yağışlı olduqda recommend.reason_key mostly_cloudy, shade_side isə any olur. recommend.tip_key hot_sun_side günəşli tərəfdə 28 °C və ya daha çox proqnozlaşdırıldığını bildirir.
Quota and accuracy
GET, həmçinin "images": [] ilə POST ağır sinfin 1 vahidi sayılır; şəkil yaradan POST 2 sayılır. bus-sun-catalog ucuz çağırışdır. Eyni POST gövdəsi saxlanmış cavabı 6 saata qədər qaytarır (hava proqnozu istifadə olunubsa, 1 saat).
Nəticə marşrut həndəsəsi və günəşin mövqeyinə əsaslanan təxmindir. Pərdələr, tündləşdirilmiş şüşələr, binalar, ağaclar, relyef və dəyişdirilmiş marşrut bizə məlum deyil. Bulud və yağış yalnız növbəti 3 gündəki səfərlər üçün hava proqnozundan gəlir; sonrakı səfərlər üçün açıq səma fərz edilir. Günəş alçaqda olduqda, səfər qısa olduqda, marşrut tez-tez döndükdə və ya proqnoz əsasən buludlu olduqda confidence daha aşağı olur.
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"
Yeniləndi