MôjBus.sk - toto som nečakal

Už dlhšiu dobu som rozmýšľal, či niečo takéto niekto na Slovensku vymyslí.
Vôbec som ale nečakal, že sa do toho zapojí aj naša "Trenčianska SADka". Po tom, čo Dopravný podnik Bratislava odmietol interaktívnu mapu všetkých autobusov a následne mesto na zimu predstavilo realtime mapu pluhov som nečakal že nejaká interaktívna mapa hociktorého dopravcu tu bude v najbližších pár rokoch... Fakt som sa zasmial. Už vidím toho bratislavčana ako sedí pri okne, na notebooku má zapnutú mapu pluhov a čaká kým prejde okolo jeho domu. Jéé.

MojBus.sk

Zrovna som bol na stránke SADTN aby som si skontroloval stav na kartičke(taktiež jedna zo super funkcií), všimol som si v novinkách, že sa zapojili do projektu mojbus.sk.
Povedal som si no tak pozrieme sa na to.
SADTN do svojich noviniek napísalo: Spoločnosť SAD Trenčín v spolupráci s Trenčianskym samosprávnym krajom vám prináša novú aplikáciu, ktorá vám dá všetky potrebné informácie a ešte omnoho viac. Nová aplikácia má uľahčiť cestovanie a poskytovať všetky aktuálne informácie o spojeniach, momentálnej polohe autobusu, presnom čase odchodu a príchodu, i prípadnom meškaní. Momentálnej polohe? To ma zaujalo. Neveril som síce v to, že to bude fungovať, myslel som si totiž, že mapa bude obsahovať poslednú polohu autobusu na zastávke, ale opak je pravdou.
Ak kliknete na Spoje -> V blízkom okolí dostanete sa na zoznam 10 autobusov vo vašom okolí. Lokácia sa získava pomocou Geolocation API a keďže táto aplikácia má byť celá iba pre mobilný telefón, môže to fungovať super.
V zozname desiatich autobusov môžete vidieť kam smeruje ale aj aké má meškanie. Veľmi užitočná vec! Síce sa skôr stretávam s tým, že autobusy chodia presne ale aj tak to môže byť užitočné hlavne pre ľudí, ktorí cestujú s MHD.
Po kliknutí v spodnej časti na tlačítko mapa začína tá pravá krása tejto aplikácie.
Mapa autobusov

Ako si môžete všimnúť, mapa obsahuje 10 autobusov, ktoré sú najbližšie pri vás. Mapa sa každých 15 sekúnd obnoví a autobusíky sa posunú.
Super vec! Môžete si takisto pozrieť daný autobus, ktorým idete alebo na ktorý čakáte na zastávke - kde sa nachádza, koľko mešká a ďalšie informácie.
Paráda!
Okrem toho samozrejme táto aplikácia poskytuje vyhľadanie spojov a ďalšie funkcie. Uvidíme ako na tom budú pracovať a aké rôzne funkcie pridajú.

Mapa viac autobusov

V základe aplikácia neumožnuje zobrazenie viac ako 10 autobusov, iba tých ktorí sú neďaleko od vás.
Ako teda na to? Keď sa pozrieme ako funguje aplikácia v Developer konzoli prehliadaču, na karte Network si môžeme všimnúť že script NearBusPos.js odosiela každých 15 sekúnd POST request na server ktorý nám vráti JSON s aktuálnymi údajmi.
XHR POST requesty

Táto funkcia readDataNearBus odošle vaše aktuálne súradnice s vašimi nastaveniami(či chcete na mape MHD alebo aj prímestské spoje. Predvolené nastavenie sú všetky) a počet výsledkov, ktoré má server vrátiť. Vo funkcií je zadefinované, že výsledkov má byť 10.
A tu je ten trik. Pokiaľ si my zmeníme túto hodnotu na vyššiu, server nám začne vracať výsledky a zobrazovať viac autobusov.
Na to aby sme túto hodnotu zmenili nám stačí celú túto funkciu zmeniť v Developer konzoli. Funkcia vyzerá takto

function readDataNearBus(lon, lat) {
    var readNum = 10;
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "Default.aspx/ReadNearestBuses",
        data: "{'count':'" + readNum +
            "','lon':'" + lon +
            "','lat':'" + lat +
            "','regTypleLog':'" + 'NearBus' +
            "','PAL':'" + appSelVar.typDoprPAL +
            "','MHD':'" + appSelVar.typDoprMHD +
            "'}",
        dataType: "json",
        success: function (msg) {
            $.mobile.loading("hide");
            fillDataNearBuses(msg.d);
        },
        error: function (smg) {
            $.mobile.loading("hide");
        }
    });
}
Nás zaujíuma druhý zvýraznený riadok a to var readNum = 10;. Tu je pes zakopaný a táto hodnota nám určuje počet autobusov ktoré server vráti. Pokiaľ celú túto funkciu okopírujeme do Developer konzole do sekcie Console a číslo si zmeníme, dosiahneme tým to, že keď sa bude mapa znovu obnovovať počet výsledkov ktoré sa nám vráti bude to naše číslo.
Ak teda nastavíme var readNum = 1000;. Čakali by sme, že dosiahneme to, že nám server "vráti 1000 výsledkov". Ale nie, server nám v skutočnosti vráti iba tolko autobusov, koľko teraz jazdí a to iba pod tou podmienkou, že dáta, ktoré vráti naspäť nemôžu presiahnúť 25 KB. To je obmedzenie keď si "neustrážite" server začne späť vraciať 500 server errory
Preto pre mňa stabilné číslo bolo okolo 150-200 autobusov. Samozrejme, pokiaľ ich jazdí v tú chvíľu viac, máme smolu. Pretože by údaje presiahli 25 KB a my sme skončili. Autobusy sa pridávajú na mapu v "okruhoch" koľko kilometrov sú od vás vzdialené. Preto napríklad počas dennej špičky neuvidíte autobus ktorý chodí pod Tatrami.
Mapa 204 autobusov

Tak a máme krásnu mapu 204 autobusov, ktoré momentálne jazdia.
Jediná výrazná škoda je to obmedzenie serveru.
A ak by sa nám náhodou nepáčilo, že sa mapa obnovuje tak pomaly, zadaním kódu tableNearBusTimer = setInterval(getLocationNearBus, 15000); si môžeme krásne zmeniť to, kedy sa mapa automaticky obnoví. Tento kód reprezentuje 15 sekúnd. Neodporúčam však zmeniť číslo na nejakú sekundu, pretože zbytočne budete zaťažovať server keďže priemerný interval, ktorý som odpočítal, kedy autobus aktualizuje a odosiela svoju polohu je 10-15 sekúnd(13 v priemere). Preto myslím, že základný interval je okej. Ale ak chcete môžete skúsiť 5 alebo 10 sekúnd.

Super nápad.

Jednoznačne je MôjBus.sk super nápad, ak by ešte pridali možnosť zobraziť mapu všetkých autobusov bez týchto trikov priamo v aplikácií bolo by to super.
Dúfam, že sa na to nevykašlú a budú ju zlepšovať.

A inak
Všetkých zapojených dopravcov v tomto projekte si môžete prezrieť tu.