Bus Sun Side API Online
Safar davomida avtobusning qaysi tomoni quyosh yoki soya oladi va soya yoki manzara uchun qaysi o'rindiqlar eng yaxshi. Safar 5 daqiqalik qadamlar bilan o'tiladi: marshrutdan joylashuv va yo'nalish, o'sha joy va vaqtdagi quyosh holati, so'ng tanlangan avtobus joylashuvi bo'yicha har bir o'rindiq uchun baho. Litsenziyalangan reyslar reyestrimizdagi marshrutdan (route_id), ikki nuqtadan (from/to) foydalaning yoki o'rindiqlar sxemasi, marshrut xaritasi va vaqt shkalasini rasm sifatida ham olish uchun o'z marshrutingizni POST orqali yuboring (bekatlar yoki polyline). Natijalar geometriya va quyosh holatiga asoslangan baho; haqiqiy soya pardalar, binolar, relyef va ob-havoga ham bog'liq.
GET https://nakordoni.eu/api/v2/data/bus-sun-side
— kvota sinfi: heavy
| Parametr | Tavsif |
|---|---|
route_id | Avtobus marshrutlari reyestrimizdagi marshrut id'si (nakordoni.eu avtobus sahifalaridagi id'lar bilan bir xil). route_id yoki from+to dan foydalaning. |
dir | direct (standart) yoki return. |
date | Safar sanasi YYYY-MM-DD (standart bugun). Quyosh holati sanaga bog'liq. |
dep | Marshrutning mahalliy vaqti bo'yicha jo'nash vaqti HH:MM (standart: reyestrdagi jadval). |
from | Erkin marshrut: boshlang'ich nuqta lat,lon (to bilan birga). |
to | Erkin marshrut: yakuniy nuqta lat,lon (from bilan birga). |
depart | Erkin marshrut: jo'nash YYYY-MM-DDTHH:MM, boshlang'ich nuqtaning mahalliy vaqti. |
lang | Joy nomlari va matnlar tili, 25 til (en, uk, pl, de, …). Standart en. |
bus_model | bus-sun-catalog dagi avtobus modeli id'si (standart standard_coach). Quyidagi har qanday maydon modelni almashtiradi. |
rows | Seat rows, 8-20. |
layout | O'rindiqlar joylashuvi: 2+2, 2+1 yoki 1+2 (yo'lakning chap+o'ng tomoni). |
door_side | right (kontinental Yevropa) yoki left. |
windshield | large yoki normal — oldingi qatorlar old oyna orqali qancha quyosh oladi. |
rear_window | none, small yoki large — oxirgi qatorlardagi quyosh. |
window_height | standard yoki panoramic (baland yon oynalar). |
deck | single, upper yoki lower (ikki qavatli avtobuslar). |
mid_door | 1 yoki 0 — o'rta eshik bor (u yerdagi o'rindiqlar olib tashlanadi). |
timeline | 0 = vaqt shkalasi kiritilmaydi (15 daqiqalik qatorlar). |
track | 0 = vaqtli trek nuqtalari kiritilmaydi. |
weather | 1 (standart) yoki 0. 1 bilan, safar keyingi 3 kun (72 h) ichida bo'lsa, safar bo'ylab ob-havo prognozidan foydalaniladi; keyingi safarlar va weather=0 ochiq osmondan foydalanadi. |
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. |
Javob maydonlari — javob konvertidagi data obyekti ichida. [] ro‘yxatni bildiradi, ya’ni data.items[].name har bir elementning name maydonidir. Qiymatimiz bo‘lmagan maydon null bo‘ladi, umuman bo‘lmaydi yoki bo‘sh ro‘yxat qaytadi — o‘rniga hech qachon soxta qiymat qo‘ymaymiz.
| Maydon | Tavsif |
|---|---|
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. |
Kodsiz sinab ko‘ring: quyoshli tomon rejalashtirgichi bu API’ni istalgan yo‘nalish yoki o‘z safaringiz uchun ishga tushiradi va o‘rindiqlar sxemasi, xarita, vaqt chizig‘i, rasmlar hamda so‘rov kodini ko‘rsatadi. Rejalashtirgichni ochish →
Your route (POST)
O'z marshrutingizni JSON tanasi sifatida POST orqali xuddi shu URL'ga yuboring. Javobda GET bilan bir xil maydonlar, shuningdek input (marshrut qanday o'qilgani), images (o'rindiqlar sxemasi, marshrut xaritasi va vaqt shkalasi) va embed_html bo'ladi.
Geometriyasiz bekatlar bizning yo'l marshrutizatorimiz bilan ulanadi; marshrut qurib bo'lmaydigan qism to'g'ri chiziq sifatida chiziladi va input.legs_straight da hisoblanadi. Vaqtlar: vaqti ko'rsatilgan kamida ikkita bekat yoki route.depart bilan route.duration_min yoki route.speed_kmh. Safar 72 h gacha davom etishi mumkin.
| Body field | Tavsif |
|---|---|
route.stops | Tartib bo'yicha 2-200 bekat: {lat, lon, name?, arr?, dep?, day?}. arr / dep — mahalliy vaqt HH:MM; day = route.date dan keyingi kunlar (yarim tundan o'tgan vaqtlar avtomatik o'tkaziladi). |
route.geometry | Sizning yo'lingiz: GeoJSON LineString, MultiLineString, Feature yoki FeatureCollection ([lon, lat] tartibi) yoki kodlangan polyline satri. 5000 nuqtagacha. stops bilan birga bekatlar vaqtni, geometriya esa yo'lni beradi. |
route.polyline_precision | Kodlangan polyline uchun 5 (standart) yoki 6. |
route.date | Birinchi bekat vaqtining YYYY-MM-DD sanasi (standart bugun). |
route.depart | Jo'nash YYYY-MM-DDTHH:MM, bekatlarda vaqt bo'lmasa yoki faqat geometriya yuborsangiz. |
route.duration_min | Safar davomiyligi daqiqalarda, depart bilan birga (aks holda vaqt speed_kmh dan hisoblanadi). |
route.speed_kmh | depart bilan birga o'rtacha tezlik, standart 65. |
route.timezone | Yuborilayotgan vaqtlarning IANA vaqt mintaqasi (standart: birinchi nuqta mamlakatining mintaqasi). |
bus | Avtobus: katalogdagi bus_model va/yoki seats, rows, layout, door_side, windshield, rear_window, window_height, deck, mid_door — GET parametrlari bilan bir xil maydonlar. Standart standard_coach. |
images | Qaysi rasmlar yaratilsin: seat_map, route_map, timeline dan istalgani (standart uchalasi ham); [] = hech biri. |
format | png (standart), webp yoki jpg: har bir rasm URL'ining fayl turi. svg: PNG fayllar, o'rindiqlar sxemasi esa qo'shimcha ravishda ichki SVG sifatida qaytariladi (seat_map.svg). |
theme | light (default) or dark. |
lang | Rasmdagi yozuvlar va matnlar tili, 25 til (standart en). |
width | Rasm kengligi px da, 240-1600 (standart: tabiiy o'lcham). |
embed_html | true (standart) = embed_html ham qaytariladi; false = null. |
timeline / track | false = bu ro'yxat javobga kiritilmaydi. |
weather | true (standart) yoki false: safar bo'ylab ob-havo prognozidan foydalanish (keyingi 3 kun); false = faqat ochiq osmon. 1 va 0 ham qabul qilinadi. |
Noto'g'ri yoki yetishmayotgan maydon HTTP 400 qaytaradi, error.field esa uning yo'lini o'z ichiga oladi, masalan route.stops[2].lat yoki 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
Har bir rasmning tasodifiy fayl nomli o'z URL'i bor (.png, .webp yoki .jpg). URL'lar kalit talab qilmaydi va 12 soat amal qiladi (expires_at); uzoqroq kerak bo'lsa, fayllarni nusxalab oling. embed_html — o'rindiqlar sxemasi ichki SVG ko'rinishida va nakordoni.eu manba qatori bilan mustaqil figure; ko'rsatishda manba qatorini saqlang.
Quyida: yuqoridagi namunaviy tana uchun rasmlar (mikroavtobus, Poznan – Varshava, 21-iyun).



Bus catalogue
bus_model ushbu umumiy transport sinflaridan birini qabul qiladi (aniq markalarni emas). Yuborilgan har qanday avtobus maydoni modelni almashtiradi; seats layout bo'yicha rows ga aylantiriladi. Xuddi shu ro'yxat bus-sun-catalog orqali JSON sifatida mavjud.
| 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 bilan (standart; POST tanasida "weather": true) javob keyingi 3 kun (72 h) uchun safar bo'ylab soatlik ob-havo prognozidan foydalanadi; safarning keyingi qismlarida ochiq osmon olinadi. Bunda summary.sun_*_min prognoz bo'yicha tortiladi, har bir timeline qatori wx {code, f, temp, precip} oladi, weather {used, window_h, covered_pct, sunny_min, cloudy_min, rain_min, max_temp, note_key} esa safarning qancha qismini prognoz qamraganini ko'rsatadi. recommend_clear — ochiq osmon uchun javob; prognoz soya tomonini o'zgartirsa, weather_changes_answer true bo'ladi. Prognoz asosan bulutli yoki yomg'irli bo'lsa, recommend.reason_key mostly_cloudy, shade_side esa any bo'ladi. recommend.tip_key hot_sun_side quyoshli tomonda 28 °C yoki undan yuqori kutilayotganini bildiradi.
Quota and accuracy
GET, shuningdek "images": [] bilan POST og'ir sinfning 1 birligi hisoblanadi; rasm yaratuvchi POST 2 hisoblanadi. bus-sun-catalog — arzon chaqiruv. Xuddi shu POST tanasi saqlangan javobni 6 soatgacha qaytaradi (ob-havo prognozi ishlatilgan bo'lsa, 1 soat).
Natija marshrut geometriyasi va quyosh holatiga asoslangan baho. Pardalar, tonlangan oynalar, binolar, daraxtlar, relyef va o'zgargan marshrut bizga noma'lum. Bulut va yomg'ir faqat keyingi 3 kundagi safarlar uchun ob-havo prognozidan olinadi; keyingi safarlar uchun ochiq osmon taxmin qilinadi. Quyosh past bo'lsa, safar qisqa bo'lsa, marshrut tez-tez burilsa yoki prognoz asosan bulutli bo'lsa, confidence pastroq bo'ladi.
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"
Yangilandi