Transport publiczny · 2026
Aplikacja autobusowa
Autobusy na żywo na mapie miasta - z GPS w każdym pojeździe i panelem dyspozytorskim w rozbudowie, bez kont i logowania
Pierwszy ekran
Zaczyna się od prostego pytania
Ekran startowy nie wita ścianą opcji czy niepotrzebnym logowaniem.
„Cześć! Gdzie dziś jedziemy?”, pole wyszukiwania i dwie rzeczy, których naprawdę używa się na co dzień: ulubione przystanki i lista przystanków w pobliżu, każdy z odległością w metrach.
Tę aplikację zbudowaliśmy dla miasta, w którym mieszkamy. Oficjalnej premiery jeszcze nie było, ale cała sieć już w niej siedzi: 7 linii, 89 przystanków, 264 kursy i 41 wariantów tras.
Wybór technologii
Dlaczego postawiliśmy na mapbox i traccara?
Aplikacja była naszym autorskim pomysłem, to my wyszliśmy z propozycją - a tworząc projekty, stawiamy na to, aby technologia była dobrana optymalnie pod kątem wydajności i kosztów, dlatego postawiliśmy na mapbox i opensource’owe oprogramowanie traccar, które jest pierwszą warstwą backendu.
Szerokie darmowe limity, szeroka dokumentacja i piaskownice developerskie - wszystko, czego potrzebowaliśmy. Przy pobraniu aplikacji pobiera się również skrawek mapy, aktualne kursy i przystanki, dzięki czemu użytkownicy mogą korzystać z większości funkcji aplikacji offline (jedyne, czego nie ma, to realnych pozycji autobusów i ich opóźnień), a po drugie ogranicza to znacznie pobrania map, co wpływa na limity mapbox.
Zostając jeszcze przy wyborach, urządzenia GPS - nie będziemy tego roztrząsać w osobnej sekcji, bo nie na tym chcemy się skupić, więc pokrótce. Do testów na początku zakupiliśmy 2 GPSy z AliExpress, miały one po prostu działać. Obecnie w autobusach zamontowane są profesjonalne GPSy Teltoniki, FMC130.
Kursy, trasy i przystanki
Skąd to wszystko?
Przystanki były najmniejszym problemem, nasze miasto udostępniło nam ich spis z lokalizacjami GPS, co znacznie ułatwiło pracę. Kursy są ogólnodostępne, wystarczyło przenieść je do ustalonego przez nas formatu.
W trasach nie jesteśmy przekonani, czy nasze podejście było optymalne - z naszej listy lokalizacji przystanków, przechodziliśmy przez kurs, biorąc pary i w mapboxie generując polyline, który następnie jeszcze formatowaliśmy, aby pasowało do naszego w projekcie - gdybyśmy mieli robić to jeszcze raz, na pewno kombinowalibyśmy w inny sposób.
Wygenerowane polylines łapaliśmy w segmenty (często autobusy przejeżdżają przez te same odcinki, kosztowało nas to trochę czasu, ale zaoszczędziliśmy kilkaset linii zdublowanych koordynatów polyline, co do tego, czy było to najlepsze rozwiązanie, to wyjdzie z czasem). W każdym razie wszystkie trasy są dokładne i adekwatne z tym, jak kursują autobusy.
Pozycja na żywo
60 klatek na sekundę z danych co 10 sekund
To inżynieryjne serce projektu. Trasa kursu jest narysowana na mapie polylinem, a autobus sunie po niej płynnie, w 60 klatkach na sekundę.
Pozycje pobieramy tylko co 10 sekund. Backend zwraca nam obecną i poprzednią pozycję, ruch symulowany jest interpolacją, ikona autobusu przypięta jest do geometrii trasy, więc autobus nie teleportuje się po ekranie i nie ścina zakrętów przez budynki.
Początkowo zamierzaliśmy do tego podejść jak Uber - pobierać lokalizację i na podstawie prędkości i kursu estymować, gdzie wyświetlać u użytkownika czekającego ikonkę autobusu. Stwierdziliśmy jednak, że nie będzie to najlepsze podejście - podeszliśmy do tego prościej, co kosztowało użytkowników tyle, że w aplikacji widzą realnie pozycje sprzed 10 sekund.
Opóźnienia
Realnie liczone opóźnienie autobusu
Czasami ciężko może nam być oszacować, jak długo zajmie autobusowi dojechanie na dany przystanek z aktualnej pozycji, więc dołożyliśmy dla użytkowników obliczane dynamicznie opóźnienie autobusu.
Nie bierzemy niestety pod uwagę ruchu na mieście, mogłoby nas to sporo kosztować i stwierdziliśmy, że nie będzie to “opłacalne”, tym bardziej w mieście, gdzie przystanki są od siebie co kilometr. Póki co algorytm sprawdza się w porządku, gdyby były z nim jakieś problemy, prawdopodobnie rozważymy skorzystanie z zewnętrznego API, by brać pod uwagę ruch i korki.
Rozkłady
Rozkłady pod ręką
Od teraz mieszkańcy nie będą zmuszeni wchodzić na stronę czy szukać we własnej galerii zrobionego wieki temu zdjęcia z ogromną tabelką kursów - teraz mają to wszystko w swoim telefonie i po paru kliknięciach wiedzą wszystko, czego potrzebują.
Projektując UI i UX aplikacji, postawiliśmy na to, aby była ona jak najprostsza w obsłudze, ponieważ autobusami jeździ również duża grupa osób starszych, o której pamiętamy.
Przystanek
Widok od strony przystanku
Czasami nie chcesz sprawdzać całego rozkładu, po prostu chcesz zobaczyć, o której jest następny odjazd z konkretnego przystanku, klikasz na niego (lub go wyszukujesz) i wszystko wiesz.
Z tego miejsca możesz również szybko zapisać sobie go do ulubionych.
Ulubione
Twoje przystanki, bez zakładania konta
Ulubione przystanki zapisują się prosto na telefonie - do sprawdzenia kursów czy pozycji autobusu nikt nie powinien zakładać konta ani zostawiać maila. Zapisanie przystanku jeszcze mocniej przyśpiesza sprawdzenie odjazdów.
Nasza aplikacja od użytkownika pobiera jedynie jego lokalizację (za zgodą, nie zapisuje jej ani nie wysyła do żadnych zewnętrznych serwerów), aby wiedział, gdzie jest na mapie i jak daleko ma do jakich przystanków - jeśli do miasta przyjedzie turysta, to z naszą aplikacją będzie w stanie sprawnie poruszać się po mieście.
Aplikacja radzi sobie również bez zasięgu, o czym pisaliśmy wcześniej.
Panel dyspozytorski
Aplikacja działa. Teraz rośnie reszta systemu
Część pasażerska jest dopięta i testowana: śledzi prawdziwe autobusy, liczy prawdziwe opóźnienia i spokojnie czeka na oficjalną premierę. Z perspektywy przewoźnika to jednak dopiero połowa. Druga połowa to panel dyspozytorski, który rozbudowujemy teraz - narzędzie ułatwiające codzienną, ręczną robotę.
Od turnusów po historię każdego kursu
Dyspozytor ma flotę na żywo, alerty, które same zgłaszają, że coś idzie nie po rozkładzie. Sercem jest tablica przypisań: kto i którym autobusem jedzie dziś na którym turnusie, rozpisane na dni robocze, soboty i niedziele. Obok edycja rozkładów i kursów, remonty z objazdami, analityka punktualności i prędkości z eksportem do CSV oraz odtwarzanie historii przejazdów na mapie, kurs po kursie.
Celowo prosto pod spodem
Cały ten ruch płynie najprostszą możliwą drogą. Nadajniki GPS w autobusach meldują się serwerowi Traccar, cienki mostek w Node.js trzyma aktualne pozycje w pamięci, a i aplikacja, i panel odpytują go zwykłym REST-em.
To etap w toku: nowe funkcje powstają przy współpracy z dyspozytornią tak, aby to im ułatwić pracę i scalić to w jeden działający system, nie pod efektowną listę na stronie. Premiera całości przyjdzie wtedy, gdy obie połowy będą się spinać - aplikacja dla pasażerów i zaplecze dla ludzi, którzy ten transport prowadzą.
Więcej z projektu
Chcesz podobny projekt?
Opowiedz nam o swoim pomyśle - wspólnie znajdziemy najlepsze rozwiązanie.
Wyceń projekt