LiveTN

Una mappa interattiva per vedere dove sono i bus di Trento in tempo reale.

L’idea

L’app di Trentino Trasporti è comoda, tuttavia la sua navigazione tra le corse è piuttosto macchinosa. Ho pensato di costruire una mappa che mostrasse la posizione ATTUALE di tutti i bus, così da poter scegliere più velocemente che bus prendere.

Prova a premere su un autobus per vedere il percorso!

Prova la versione completa →

Tech Stack

Ho scelto SvelteKit per la sua semplicità e per la reattività nativa, perfetta per una web app di questo tipo. Redis è perfetto per gestire le posizioni dei bus in tempo reale, fungendo da cache. Nella nuova versione gli aggiornamenti vengono inviati con SSE, che è molto più efficiente del polling tradizionale. Appena il server ha informazioni aggiornate su un autobus, le invia immediatamente. OpenStreetMap/Leaflet è la scelta naturale per un progetto del genere, offrendo mappe gratuite e personalizzabili.

SvelteKit
Redis
Server-Sent Events
OpenStreetMap

Implementazione e futuro

Il funzionamento è molto semplice. Considerando che le API di Trentino Trasporti non sono state pensate per una mappa live, i bus vengono identificati scannerizzando i capolinea periodicamente. Questi vengono poi aggiornati utilizzando l’API apposita per la posizione di un determinato autobus. I crediti del Reverse Engineering vanno a Matteo Contrini che ha documentato tutto su GitHub

7000+ Chiamate API orarie
595 Fermate a Trento
25 Capolinea

Poiché la quantità di chiamate API è piuttosto elevata, al momento la mappa è limitata a Trento, ma in futuro mi piacerebbe estenderla a tutta la provincia.

Inoltre, quando nessun utente sta guardando la mappa, il server ferma completamente gli aggiornamenti per evitare sovraccarichi inutili. Appena un utente si collega, il server si riattiva quasi istantaneamente.

Affidabilità

La mappa è piuttosto affidabile, la uso io stesso (suppongo che se il creatore di un progetto la usa, sia un buon segno). Tuttavia, la fonte dei dati è un po’ instabile, a volte i bus scompaiono per qualche minuto senza motivo apparente, ma in generale funziona abbastanza bene.