Bus Sun Side API Online
Bir yolculukta otobüsün hangi tarafının güneş ya da gölge aldığı ve gölge veya manzara için en iyi koltukların hangileri olduğu. Yolculuk 5 dakikalık adımlarla izlenir: güzergâhtan konum ve yön, o yerde ve saatte güneşin konumu, ardından seçilen otobüs düzeni için koltuk başına bir tahmin. Lisanslı hat kaydımızdaki bir güzergâhı (route_id), iki noktayı (from/to) kullanın ya da koltuk planı, güzergâh haritası ve zaman çizelgesini görsel olarak da almak için kendi güzergâhınızı POST ile gönderin (duraklar veya polyline). Sonuçlar geometri ve güneşin konumuna dayalı bir tahmindir; gerçek gölge perdelere, binalara, araziye ve havaya da bağlıdır.
GET https://nakordoni.eu/api/v2/data/bus-sun-side
— kota sınıfı: heavy
| Parametre | Açıklama |
|---|---|
route_id | Otobüs güzergâhı kaydımızdaki güzergâh id'si (nakordoni.eu otobüs sayfalarındaki id'lerin aynısı). route_id veya from+to kullanın. |
dir | direct (varsayılan) veya return. |
date | Yolculuk tarihi YYYY-MM-DD (varsayılan bugün). Güneşin konumu tarihe bağlıdır. |
dep | Güzergâhın yerel saatine göre kalkış saati HH:MM (varsayılan: kayıttaki tarife). |
from | Serbest güzergâh: başlangıç noktası lat,lon (to ile birlikte). |
to | Serbest güzergâh: bitiş noktası lat,lon (from ile birlikte). |
depart | Serbest güzergâh: kalkış YYYY-MM-DDTHH:MM, başlangıç noktasının yerel saati. |
lang | Yer adlarının ve metinlerin dili, 25 dil (en, uk, pl, de, …). Varsayılan en. |
bus_model | bus-sun-catalog içindeki otobüs modeli id'si (varsayılan standard_coach). Aşağıdaki her alan modeli geçersiz kılar. |
rows | Seat rows, 8-20. |
layout | Koltuk düzeni: 2+2, 2+1 veya 1+2 (koridorun sol+sağ tarafı). |
door_side | right (kıta Avrupası) veya left. |
windshield | large veya normal — ön sıraların ön camdan ne kadar güneş aldığı. |
rear_window | none, small veya large — son sıralardaki güneş. |
window_height | standard veya panoramic (yüksek yan pencereler). |
deck | single, upper veya lower (iki katlı otobüsler). |
mid_door | 1 veya 0 — orta kapı var (oradaki koltukları kaldırır). |
timeline | 0 = zaman çizelgesini çıkar (15 dakikalık satırlar). |
track | 0 = zaman damgalı iz noktalarını çıkar. |
weather | 1 (varsayılan) veya 0. 1 ile, yolculuk önümüzdeki 3 gün (72 h) içindeyse yolculuk boyunca hava tahmini kullanılır; sonraki yolculuklar ve weather=0 açık gökyüzü kullanır. |
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. |
Yanıt alanları — yanıt zarfındaki data nesnesinin içinde. [] bir listeyi gösterir; yani data.items[].name her öğenin name alanıdır. Değerimiz olmayan bir alan null olur, hiç bulunmaz ya da boş liste döner — asla yer tutucu koymayız.
| Alan | Açıklama |
|---|---|
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. |
Kod yazmadan deneyin: güneşli taraf planlayıcısı bu API’yi herhangi bir hatta veya kendi yolculuğunuzda çalıştırır; koltuk planı, harita, zaman çizelgesi, görseller ve çağrı kodunu gösterir. Planlayıcıyı aç →
Your route (POST)
Kendi güzergâhınızı JSON gövdesi olarak POST ile aynı URL'ye gönderin. Yanıt, GET ile aynı alanlara ek olarak input (güzergâhınızın nasıl okunduğu), images (koltuk planı, güzergâh haritası ve zaman çizelgesi) ve embed_html içerir.
Geometrisi olmayan duraklar karayolu yönlendiricimizle birleştirilir; yönlendirilemeyen bir kesim düz çizgi olarak çizilir ve input.legs_straight içinde sayılır. Saatler: saati olan en az iki durak ya da route.duration_min veya route.speed_kmh ile birlikte route.depart. Bir yolculuk en fazla 72 h sürebilir.
| Body field | Açıklama |
|---|---|
route.stops | Sırayla 2-200 durak: {lat, lon, name?, arr?, dep?, day?}. arr / dep yerel saat HH:MM biçimindedir; day = route.date sonrasındaki gün sayısı (gece yarısını geçen saatler kendiliğinden devreder). |
route.geometry | Yolunuz: GeoJSON LineString, MultiLineString, Feature veya FeatureCollection ([lon, lat] sırası) ya da kodlanmış bir polyline dizesi. En fazla 5000 nokta. stops ile birlikte duraklar saatleri, geometri ise yolu verir. |
route.polyline_precision | Kodlanmış polyline için 5 (varsayılan) veya 6. |
route.date | İlk durak saatinin YYYY-MM-DD tarihi (varsayılan bugün). |
route.depart | Duraklarda saat yoksa veya yalnızca geometri gönderiyorsanız kalkış YYYY-MM-DDTHH:MM. |
route.duration_min | Dakika cinsinden yolculuk süresi, depart ile birlikte (aksi halde süre speed_kmh değerinden gelir). |
route.speed_kmh | depart ile birlikte ortalama hız, varsayılan 65. |
route.timezone | Gönderdiğiniz saatlerin IANA saat dilimi (varsayılan: ilk noktanın ülkesinin dilimi). |
bus | Otobüs: katalogdan bus_model ve/veya seats, rows, layout, door_side, windshield, rear_window, window_height, deck, mid_door — GET parametreleriyle aynı alanlar. Varsayılan standard_coach. |
images | Hangi görsellerin üretileceği: seat_map, route_map, timeline içinden herhangi biri (varsayılan üçü de); [] = hiçbiri. |
format | png (varsayılan), webp veya jpg: her görsel URL'sinin dosya türü. svg: PNG dosyaları ve koltuk planı ayrıca satır içi SVG olarak döndürülür (seat_map.svg). |
theme | light (default) or dark. |
lang | Görsel etiketlerinin ve metinlerin dili, 25 dil (varsayılan en). |
width | Görsel genişliği px cinsinden, 240-1600 (varsayılan: doğal boyut). |
embed_html | true (varsayılan) = embed_html de döndürülür; false = null. |
timeline / track | false = bu liste yanıta eklenmez. |
weather | true (varsayılan) veya false: yolculuk boyunca hava tahminini kullan (önümüzdeki 3 gün); false = yalnızca açık gökyüzü. 1 ve 0 da kabul edilir. |
Hatalı veya eksik bir alan HTTP 400 döndürür ve error.field alanın yolunu içerir, örneğin route.stops[2].lat veya 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
Her görselin rastgele dosya adına sahip kendi URL'si vardır (.png, .webp veya .jpg). URL'ler anahtar gerektirmez ve 12 saat geçerlidir (expires_at); daha uzun süre gerekiyorsa dosyaları kopyalayın. embed_html, koltuk planını satır içi SVG olarak ve bir nakordoni.eu kaynak satırını içeren bağımsız bir figure öğesidir; gösterirken kaynak satırını koruyun.
Aşağıda: yukarıdaki örnek gövde için görseller (minibüs, Poznań – Varşova, 21 Haziran).



Bus catalogue
bus_model bu genel araç sınıflarından birini alır (belirli markaları değil). Gönderdiğiniz her otobüs alanı modeli geçersiz kılar; seats, layout için rows değerine dönüştürülür. Aynı liste bus-sun-catalog üzerinden JSON olarak da mevcuttur.
| 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 ile (varsayılan; POST gövdesinde "weather": true) yanıt, önümüzdeki 3 gün (72 h) için yolculuk boyunca saatlik hava tahminini kullanır; yolculuğun sonraki kısımlarında açık gökyüzü kullanılır. Bu durumda summary.sun_*_min tahmine göre ağırlıklandırılır, her timeline satırı wx {code, f, temp, precip} alır ve weather {used, window_h, covered_pct, sunny_min, cloudy_min, rain_min, max_temp, note_key} yolculuğun ne kadarının tahminle kapsandığını gösterir. recommend_clear açık gökyüzü yanıtıdır; tahmin gölge tarafını değiştirdiğinde weather_changes_answer true olur. Tahmin çoğunlukla bulutlu veya yağmurlu olduğunda recommend.reason_key mostly_cloudy, shade_side ise any olur. recommend.tip_key hot_sun_side, güneşli tarafta 28 °C veya üzeri beklendiği anlamına gelir.
Quota and accuracy
GET ve "images": [] içeren POST, ağır sınıftan 1 birim sayılır; görsel üreten bir POST 2 sayılır. bus-sun-catalog ucuz bir çağrıdır. Aynı POST gövdesi, saklanan yanıtı 6 saate kadar döndürür (hava tahmini kullanıldıysa 1 saat).
Sonuç, güzergâh geometrisi ve güneşin konumuna dayalı bir tahmindir. Perdeler, renkli camlar, binalar, ağaçlar, arazi ve değişen bir güzergâh tarafımızdan bilinmez. Bulut ve yağmur yalnızca önümüzdeki 3 gün içindeki yolculuklar için hava tahmininden gelir; sonraki yolculuklarda açık gökyüzü varsayılır. Güneş alçakta olduğunda, yolculuk kısa olduğunda, güzergâh sık döndüğünde veya tahmin çoğunlukla bulutlu olduğunda confidence daha düşüktür.
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"
Güncellendi