Torna al blog BIM e IFC
Gemelli digitali · 2026-10-10 · 9 min
Autobus in tempo reale su un modello IFC: gemello digitale di un terminal bus via MQTT
Al terminal di Elielinaukio, accanto alla stazione centrale di Helsinki, ogni stallo di un modello IFC si illumina quando un autobus vero vi sosta, con il numero di linea sopra. I dati provengono dal feed MQTT pubblico di HSL, ricevuto direttamente dal browser.
La stazione centrale di Helsinki e il terminal bus di Elielinaukio come modelli IFC sulla mappa 3D, con i numeri di linea degli autobus in tempo reale sospesi sopra gli stalli
Un terminal bus è un buon banco di prova per un gemello digitale (digital twin), perché ciò che sta facendo cambia di minuto in minuto. Diciassette stalli, autobus che entrano ed escono, porte che si aprono e si chiudono. Se il modello riesce a mostrarlo in tempo reale, da dati pubblici, può mostrare quasi tutto.
Questa scena lo fa per Elielinaukio, il terminal sul lato ovest della stazione centrale di Helsinki. Ogni stallo del modello IFC si illumina finché un autobus vero vi sosta, con il suo numero di linea sospeso sopra. Le posizioni provengono da HSL, l'autorità dei trasporti di Helsinki, che pubblica la posizione di ogni veicolo circa una volta al secondo via MQTT, e il browser vi si sottoscrive direttamente.
In sintesi
- MQTT su WebSocket permette a una pagina web di ricevere le posizioni dei veicoli in tempo reale senza alcun server proprio in mezzo, purché il broker lo consenta. Quello di HSL lo consente.
- Sottoscriviti in modo mirato. Una porzione geografica dell'albero dei topic fa arrivare al browser solo gli autobus del terminal.
- Gli stalli sono associati agli id di fermata dell'azienda di trasporto, e i colori seguono regole sui campi del messaggio: porte aperte, in sosta, in movimento o nessun autobus.
- I modelli federati restano allineati quando ogni satellite viene ruotato secondo la propria georeferenziazione. Qui il riferimento della Cattedrale è ruotato di 3° rispetto a quello del terminal.
Provalo: gli autobus di Helsinki, adesso
Apre il terminal, la stazione e la Cattedrale sulla mappa. Gli stalli si illuminano all'arrivo degli autobus veri. Di notte ce ne sono pochi, quindi gli stalli restano grigi a lungo.

Apri il visualizzatore IFC interattivo
Cosa stai guardando
Tre modelli IFC georeferenziati (ETRS89 / GK25, EPSG:3879) sulla città di OpenStreetMap: la Stazione centrale di Eliel Saarinen con le sue banchine, la Cattedrale in Piazza del Senato e il terminal bus con i suoi 17 stalli (dal 20 al 36), pali, cartelli e pensilina. Due livelli in tempo reale dell'Istituto meteorologico finlandese mostrano qualità dell'aria e meteo.
Gli stalli mentre gli autobus arrivano e partono: ogni palo e ogni cartello prende il colore di ciò che sta facendo l'autobus a quella fermata.
| Colore dello stallo | Regola sul messaggio HSL | Significato |
|---|
| Verde | porte aperte (drst = 1) | Salita dei passeggeri |
| Blu | velocità inferiore a 0,5 m/s | In sosta allo stallo |
| Ambra | qualsiasi altra lettura alla fermata | In entrata o in uscita |
| Grigio | nessuna lettura da 45 s | Nessun autobus |
Vince la prima regola che corrisponde. Il numero di linea (desi) è sospeso sopra lo stallo.
Perché MQTT e non GTFS-Realtime
GTFS-Realtime è il formato abituale per i dati di trasporto pubblico in tempo reale, e HSL lo pubblica. Ma quel feed non invia le intestazioni CORS che servono a un browser per leggerlo da un altro sito, quindi usarlo richiederebbe di gestire un proxy. Il feed di posizionamento ad alta frequenza è diverso: è MQTT su WebSocket, pubblico, senza chiave e raggiungibile da qualsiasi pagina web.
Per questo scopo è anche più ricco. Ogni messaggio riguarda un autobus, circa una volta al secondo, con la sua linea, la velocità, lo stato delle porte e la fermata a cui si trova[hfp]. Il topic dice dov'è l'autobus, quindi una sottoscrizione può essere ristretta a una porzione della città:
/hfp/v2/journey/ongoing/vp/bus/+/+/+/+/+/+/+/+/60;24/19/73/#
La sottoscrizione livello per livello: ogni + accetta qualsiasi valore, e il geohash restringe il flusso alla cella attorno al terminal.
L'ultima parte, 60;24/19/73, è una cella della griglia geografica di HSL attorno al terminal. Il browser riceve gli autobus di quella cella e nient'altro. Legge i messaggi una volta al secondo e tiene il più recente per ogni fermata. Un autobus tra due fermate, senza fermata nel messaggio, viene ignorato.
Da un id di fermata a uno stallo
HSL identifica le fermate per numero, il modello IFC per nome. L'elenco delle fermate pubblicato da HSL unisce i due: oggi nove dei diciassette stalli hanno una fermata HSL, e ciascuno di essi è un binding. Gli elementi si trovano per nome, "Bay 20" e così via. Così si trovano il palo e i tre cartelli di ogni stallo.
| Stallo | Id fermata HSL |
|---|
| 20 | 1020128 |
| 22 | 1020131 |
| 23 | 1020133 |
| 24 | 1020135 |
| 25 | 1020132 |
| 26 | 1020239 |
| 28 | 1020243 |
| 29 | 1020245 |
| 30 | 1020130 |
Dall'elenco delle fermate GTFS di HSL, letto una volta quando è stata scritta la scena. Gli altri otto stalli non hanno una fermata e restano grigi.
La scheda di uno stallo di notte: senza autobus allo stallo, la sezione in tempo reale lo dice invece di mostrare una lettura vecchia, accanto ai dati IFC del palo.
{
"id": "hsl-hfp-elielinaukio",
"url": "wss://mqtt.hsl.fi:443/",
"topics": ["/hfp/v2/journey/ongoing/vp/bus/+/+/+/+/+/+/+/+/60;24/19/73/#"],
"mapping": { "idField": "VP.stop", "timeField": "VP.tst" }
}
Questa sorgente di dispositivi è tutto ciò che serve per leggere un'altra flotta o un'altra area: un broker che parla MQTT su WebSocket, i topic e quale campo del messaggio identifica il dispositivo. Il resto della scena resta uguale.
Qualità dell'aria e meteo
I due livelli della mappa provengono dai dati aperti dell'Istituto meteorologico finlandese[fmi], letti nel browser come semplici feature WFS: 11 stazioni di qualità dell'aria e 7 stazioni meteo attorno alla città al momento del controllo. La qualità dell'aria è oraria e può arrivare con fino a 40 minuti di ritardo; il meteo ogni 10 minuti.
Tre modelli, una mappa
La stazione, la Cattedrale e il terminal sono file separati, e ciascuno porta la propria georeferenziazione. Gli assi locali della Cattedrale sono ruotati di 3° rispetto a quelli del terminal, che ancora la mappa. Se il viewer si limitasse a spostare gli altri modelli al loro posto senza ruotarli, la Cattedrale starebbe storta di 3°, con circa 2 m di scarto agli angoli.
Il viewer ruota ogni modello nel proprio riferimento, attorno al proprio centro. Misurati rispetto al contorno OpenStreetMap della Cattedrale, i muri ora distano 0,56 m e hanno 0,37° di scarto. Quel residuo dipende da quanto accuratamente il modello e OSM disegnano ciascuno l'edificio.
Limiti da dire apertamente
- I modelli sono illustrativi, disegnati da fonti pubbliche. Non sono rilievi.
- Solo nove stalli hanno una fermata HSL, quindi gli altri otto non si illuminano mai.
- Di notte circolano pochi autobus, e gli stalli restano grigi a lungo.
- Il terreno globale qui risulta circa 18 m sopra il sistema altimetrico finlandese, quindi i modelli poggiano sulla superficie del terreno anziché alle loro quote dichiarate. Le loro quote relative restano invariate.
- Una scheda in background riceve i messaggi meno spesso, perché i browser rallentano i timer nelle schede nascoste.
Lo stesso formato di scena alimenta una piazza cittadina con dati di bike sharing e di ricarica nel gemello open data di Barcellona, e due stazioni di Tokyo con dati di treni e tram nei gemelli del trasporto di Tokyo da ODPT. Per un gemello alimentato da un sensore anziché da un feed di trasporto, vedi LiDAR in tempo reale in un gemello digitale web.
Riferimenti
- Posizionamento ad alta frequenza — Digitransit (HSL). I topic MQTT e i campi dei messaggi usati dal terminal.
- Dati aperti — Finnish Meteorological Institute. Osservazioni di qualità dell'aria e meteo, lette qui come semplici feature WFS.
Autobus in tempo reale su un modello IFC: gemello digitale di un terminal bus via MQTT