SIG-Bus
Plugin QGIS para leitura de GTFS, integração de demanda de passageiros e geração de relatórios por linha.
Versão 0.8.4 (experimental)
O Problema
O QGIS não possui suporte nativo para o formato GTFS além da leitura básica de geometrias. Para um engenheiro de transportes analisar a rede de ônibus de Belo Horizonte — cruzando geometria de rotas, horários e demanda de passageiros — o processo era inteiramente manual: importar arquivos separados, construir junções e tratar inconsistências entre os identificadores de linhas do sistema de bilhetagem e os do feed GTFS.
Os dados de demanda, publicados pela PBH no portal de dados abertos, chegam em CSV com coordenadas e códigos de linha próprios. Sem uma ferramenta dedicada, a combinação desses dados com o GTFS exigia conhecimento avançado em SIG e programação — uma barreira alta para quem precisava apenas gerar análises operacionais de linha.
A Solução — Evolução do Projeto
Início da pesquisa como iniciação científica no CEFET-MG (aplicação ao edital em 2019), com foco no desenvolvimento de ferramentas de análise de transporte público baseadas em dados abertos.
Estruturação do código como plugin PyQGIS, com interface gráfica em Qt Designer. Implementação do leitor GTFS nativo (adaptado do CTU GeoForAll Lab sob GPL v2+), sem dependências externas além do próprio QGIS.
Apresentação do projeto na Semana de Ciência e Tecnologia do CEFET-MG, com demonstração da integração GTFS + demanda e geração dos mapas de carga por linha.
A v0.2 consolidou a base do plugin (leitura do GTFS para GeoPackage, importação da demanda e alocação por trecho) e adicionou o relatório PDF, uma página A4 por sentido, com dois mapas sobrepostos à geometria da rota: carga graduada e clusterização de trechos por K-means.
Gráfico de tempo por faixa em que cada barra é uma viagem, com Modo Viagens (uma faixa por linha e sentido) e Modo Blocos, que infere a alocação da frota encadeando viagens de um mesmo veículo por uma heurística gulosa de frota mínima, respeitando o intervalo de recolhimento (layover). Necessário porque o GTFS da BHTrans não traz `block_id`. O headway entre viagens também é exibido. A v0.4 refinou o diagrama e reorganizou a interface em abas.
Assistente "Construir GTFS" para criar uma linha do zero (paradas, tabela de horários por frequência) e ajustar viagem por viagem no Diagrama de Blocos antes de salvar. Geocodificação dos endereços das paradas em cascata: Google (opcional, chave guardada nas configurações do usuário do QGIS, não no projeto), Nominatim e Photon, com um corretor de nomes de rua via Overpass (OSM) para ruas grafadas incorretamente.
Ajuste da tabela de horários de uma linha diretamente sobre o feed carregado, com um único editor combinando diagrama de blocos e matriz de horários, validação e exportação de volta para um feed GTFS. Ver o post sobre a edição de horários.
Sem mudança funcional: a documentação passou a ser um site em sigbus.dcamargo.com.br, para o qual o Gerenciador de Complementos do QGIS agora aponta.
Funcionalidades Principais
Importação e validação de GTFS: O plugin lê feeds GTFS diretamente de arquivos ZIP, valida a integridade dos dados e gera calendários sintéticos quando o feed não inclui o arquivo `calendar.txt`. Os dados são convertidos para GeoPackage com camadas espaciais indexadas para consulta eficiente.
Integração de demanda por parada: Carrega o CSV de embarques da BHTrans e vincula os pontos de demanda às paradas GTFS por junção espacial, restrita ao padrão de serviço dominante de cada linha para evitar associações incorretas com rotas paralelas próximas.
Horários por parada (horarios_paradas): Ao filtrar uma linha, o plugin gera automaticamente uma camada de pontos com os horários de todas as viagens da rota selecionada — `arrival_time`, `departure_time`, `stop_sequence`, `trip_id`, `shape_id` e `direction_id` para cada parada. A camada é construída por junção direta no banco GeoPackage e permite visualizar a distribuição dos serviços ao longo do dia.
Alocação de demanda por trecho (tramos_demanda): Gera uma camada de linhas com a carga acumulada de passageiros e a contagem de viagens por trecho, para o período horário selecionado. A carga segue o princípio de conservação de fluxo, produzindo um limite superior da ocupação real — adequado para comparação relativa entre trechos e períodos.
Análise horária: Toda a análise pode ser restrita a um intervalo horário específico (0h a 23h) ou executada para o dia completo, com seleção da forma de rota dominante quando uma linha opera múltiplas variantes geométricas.
Relatório PDF com clusterização: Desde a v0.2, o plugin gera um relatório com dois mapas (carga acumulada e agrupamento dos trechos por cluster de demanda), com estilos graduados aplicados automaticamente ao final do processamento.
Diagrama de Blocos: Gráfico de tempo por faixa em que cada barra é uma viagem, com Modo Viagens (uma faixa por linha e sentido) e Modo Blocos, que infere a alocação da frota encadeando viagens de um mesmo veículo por uma heurística gulosa de frota mínima, respeitando o layover. O headway entre viagens é exibido no diagrama, que suporta zoom, deslocamento e exportação para PNG ou SVG.
Edição GTFS: Ajusta as viagens de uma linha selecionada diretamente no feed, sem precisar descompactar o .zip nem editar o `stop_times.txt` na mão. O deslocamento pode ser aplicado à viagem inteira ou só ao horário de partida ou chegada, com as paradas intermediárias redistribuídas proporcionalmente. O feed é validado antes da exportação. Ver o post sobre a edição de horários.
Construir GTFS e geocodificação: Assistente para criar uma linha do zero (paradas, tabela de horários por frequência) e ajustar viagem por viagem no Diagrama de Blocos antes de salvar. Geocodificação dos endereços das paradas em cascata: Google (opcional, chave guardada nas configurações do usuário do QGIS, não no projeto), Nominatim e Photon, com um corretor de nomes de rua via Overpass (OSM). Nominatim e Photon têm limite de 1 requisição por segundo, então geocodificar uma linha inteira leva minutos.
Stack Tecnológica
Python PyQGIS GDAL GeoPackage / SQLite Qt Designer
Impacto
O plugin elimina a etapa manual de integração entre dados de rede (GTFS) e dados de demanda (bilhetagem), permitindo que engenheiros e pesquisadores de transportes passem diretamente à análise operacional. Aplicado à rede de ônibus de Belo Horizonte, o SIG-Bus viabiliza estudos de carga por linha, identificação de trechos críticos e análise da distribuição horária de passageiros — tudo dentro do ambiente QGIS, sem dependências externas.