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"
Ενημερώθηκε