Voltar ao blog de BIM e IFC
Gêmeos digitais · 2026-10-10 · 9 min
Ônibus ao vivo em um modelo IFC: gêmeo digital de um terminal de ônibus via MQTT
No terminal Elielinaukio, ao lado da Estação Central de Helsinque, cada baia de um modelo IFC acende quando um ônibus real para nela, com o número da linha acima. Os dados vêm do feed MQTT público da HSL, recebido diretamente pelo navegador.
A Estação Central de Helsinque e o terminal de ônibus Elielinaukio como modelos IFC no mapa 3D, com números de linha de ônibus ao vivo flutuando sobre as baias
Um terminal de ônibus é um bom teste para um gêmeo digital, porque o que ele faz muda a cada minuto. Dezessete baias, ônibus entrando e saindo, portas abrindo e fechando. Se o modelo consegue mostrar isso ao vivo, a partir de dados públicos, consegue mostrar quase tudo.
Esta cena faz isso para o Elielinaukio, o terminal no lado oeste da Estação Central de Helsinque. Cada baia do modelo IFC acende enquanto um ônibus real está parado nela, com o número da linha flutuando acima. As posições vêm da HSL, a autoridade de transporte de Helsinque, que publica a posição de cada veículo cerca de uma vez por segundo via MQTT, e o navegador assina esse feed diretamente.
O essencial
- O MQTT sobre WebSocket permite que uma página web receba posições de veículos ao vivo sem nenhum servidor próprio no meio, desde que o broker permita. O da HSL permite.
- Assine de forma restrita. Uma fatia geográfica da árvore de tópicos faz com que apenas os ônibus do terminal cheguem ao navegador.
- As baias são vinculadas aos ids de parada da agência de transporte, e as cores seguem regras sobre campos da mensagem: portas abertas, parado, em movimento ou sem ônibus.
- Modelos federados permanecem alinhados quando cada satélite é girado conforme o seu próprio georreferenciamento. Aqui, o sistema de eixos da Catedral está 3° desalinhado em relação ao do terminal.
Experimente: os ônibus de Helsinque, agora
Abre o terminal, a estação e a Catedral no mapa. As baias acendem conforme chegam ônibus reais. À noite há poucos, então as baias ficam cinza por longos períodos.

Abrir o visualizador IFC interativo
O que você está vendo
Três modelos IFC georreferenciados (ETRS89 / GK25, EPSG:3879) sobre a cidade do OpenStreetMap: a Estação Central de Eliel Saarinen, com suas plataformas, a Catedral na Praça do Senado e o terminal de ônibus, com suas 17 baias (de 20 a 36), postes, placas e cobertura. Duas camadas ao vivo do Instituto Meteorológico da Finlândia mostram a qualidade do ar e o tempo.
As baias conforme os ônibus chegam e saem: cada poste e cada placa assume a cor do que o ônibus daquela parada está fazendo.
| Cor da baia | Regra na mensagem da HSL | Significado |
|---|
| Verde | portas abertas (drst = 1) | Embarque |
| Azul | velocidade abaixo de 0,5 m/s | Parado na baia |
| Âmbar | qualquer outra leitura na parada | Entrando ou saindo |
| Cinza | nenhuma leitura há 45 s | Sem ônibus |
Vale a primeira regra que corresponder. O número da linha (desi) flutua acima da baia.
Por que MQTT e não GTFS-Realtime
O GTFS-Realtime é o formato usual para dados de transporte público ao vivo, e a HSL o publica. Mas esse feed não envia os cabeçalhos CORS de que um navegador precisa para lê-lo a partir de outro site, então usá-lo exigiria manter um proxy. O feed de posicionamento de alta frequência é diferente: é MQTT sobre WebSocket, público, sem chave e acessível a partir de qualquer página web.
Ele também é mais rico para esse fim. Cada mensagem é um ônibus, cerca de uma vez por segundo, com sua linha, velocidade, estado das portas e a parada em que está[hfp]. O tópico diz onde o ônibus está, então uma assinatura pode ser recortada para uma fatia da cidade:
/hfp/v2/journey/ongoing/vp/bus/+/+/+/+/+/+/+/+/60;24/19/73/#
A assinatura nível por nível: cada + aceita qualquer valor, e o geohash restringe o fluxo à célula ao redor do terminal.
A última parte, 60;24/19/73, é uma célula da grade geográfica da HSL em torno do terminal. O navegador recebe os ônibus dessa célula e mais nada. Ele lê as mensagens uma vez por segundo e guarda a mais recente de cada parada. Um ônibus entre paradas, sem parada na mensagem, é ignorado.
De um id de parada a uma baia
A HSL identifica as paradas por número, e o modelo IFC, por nome. A lista de paradas publicada pela HSL junta os dois: nove das dezessete baias têm hoje uma parada da HSL, e cada uma delas é um vínculo (binding). Os elementos são encontrados pelo nome, “Bay 20” e assim por diante. Isso encontra o poste e as três placas de cada baia.
| Baia | ID de parada da HSL |
|---|
| 20 | 1020128 |
| 22 | 1020131 |
| 23 | 1020133 |
| 24 | 1020135 |
| 25 | 1020132 |
| 26 | 1020239 |
| 28 | 1020243 |
| 29 | 1020245 |
| 30 | 1020130 |
Da lista de paradas GTFS da HSL, lida uma vez quando a cena foi escrita. As outras oito baias não têm parada e ficam cinza.
O cartão de uma baia à noite: sem ônibus na baia, a seção ao vivo diz isso em vez de mostrar uma leitura antiga, ao lado dos dados IFC do poste.
{
"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" }
}
Esta fonte de dispositivos é tudo o que é preciso para ler outra frota ou outra área: um broker que fale MQTT sobre WebSocket, os tópicos e o campo da mensagem que identifica o dispositivo. O resto da cena permanece igual.
Qualidade do ar e tempo
As duas camadas do mapa vêm dos dados abertos do Instituto Meteorológico da Finlândia[fmi], lidos no navegador como simples feições WFS: 11 estações de qualidade do ar e 7 estações meteorológicas ao redor da cidade quando conferimos. A qualidade do ar é horária e pode chegar com até 40 minutos de atraso; o tempo é atualizado a cada 10 minutos.
Três modelos, um mapa
A estação, a Catedral e o terminal são arquivos separados, e cada um traz o seu próprio georreferenciamento. Os eixos locais da Catedral estão girados 3° em relação aos do terminal, que ancora o mapa. Se o visualizador apenas movesse os outros modelos para o lugar sem girá-los, a Catedral ficaria 3° torta, cerca de 2 m fora do lugar nos cantos.
O visualizador gira cada modelo para o seu próprio sistema de eixos, em torno do seu próprio centro. Medidas em relação ao contorno da Catedral no OpenStreetMap, as paredes agora ficam a 0,56 m dele e com 0,37° de desvio. Esse resíduo é a precisão com que o modelo e o OSM desenham o edifício.
Limites que vale a pena dizer em voz alta
- Os modelos são ilustrativos, desenhados a partir de fontes públicas. Não são levantamentos.
- Apenas nove baias têm uma parada da HSL, então as outras oito nunca acendem.
- À noite circulam poucos ônibus, e as baias ficam cinza por longos períodos.
- O terreno global usado aqui fica cerca de 18 m acima do sistema de altitudes finlandês, então os modelos ficam sobre a superfície do terreno, e não nas alturas declaradas. As alturas relativas entre eles são mantidas.
- Uma aba em segundo plano recebe mensagens com menos frequência, porque os navegadores desaceleram os temporizadores em abas ocultas.
O mesmo formato de cena movimenta uma praça da cidade com dados de bicicletas compartilhadas e de recarga no gêmeo de dados abertos de Barcelona e duas estações de Tóquio com dados de trens e bondes em gêmeos do transporte de Tóquio com ODPT. Para um gêmeo alimentado por um sensor, e não por um feed de transporte, veja LiDAR em tempo real em um gêmeo digital na web.
Referências
- Posicionamento de alta frequência — Digitransit (HSL). Os tópicos MQTT e os campos de mensagem usados pelo terminal.
- Dados abertos — Finnish Meteorological Institute. Observações de qualidade do ar e de meteorologia, lidas aqui como simples feições WFS.
Ônibus ao vivo em um modelo IFC: gêmeo digital de um terminal de ônibus via MQTT