Ferramenta desenvolvida com Python para importação de rede viária e rotas de ônibus de uma cidade a partir de dados do OpenStreetMap para o banco de dados PostgreSQL com as extensões PostGIS e pgRouting.
Baseada no trabalho final apresentado por mim na disciplina de Programação de Computadores Aplicada a Transportes, ministrada pelo professor Alexandre Hering Coelho no Programa de Pós-Graduação em Engenharia de Transportes e Gestão Territorial (PPGTG) da Universidade Federal de Santa Catarina (UFSC).
- Busca no Nominatim a cidade informada pelo usuário
- Faz o download a partir do OpenStreetMap da rede viária em toda a extensão da cidade
- Segmenta todas as linhas de n vértices em n-1 linhas de 2 vértices (origem e destino do arco)
- Cria as extensões, tabelas e colunas necessárias no banco
- Preenche as colunas de custo e custo no sentido oposto da via
- Cria a topologia de rede utilizando a função pgr_createTopology do pgRouting
- Busca no Nominatim a cidade informada pelo usuário
- Faz o download de todas as relations de rotas de ônibus na extensão da cidade (inclusive rotas intermunicipais)
- Cria tabelas rotas, rotas_vias e rotas_paradas no banco
- Preenche as tabelas a partir do processamento dos dados obtidos do OpenStreetMap
- Python 3.9.2
- PostgreSQL 14
- PostGIS 3.2.2
- pgRouting 3.3.0
- Crie um banco no PostgreSQL com o nome de sua preferência.
- Garanta que você está com as extensões PostGIS e pgRouting instaladas nas versões testadas:
CREATE EXTENSION postgis;
CREATE EXTENSION pgrouting;
- Edite o arquivo .env com as configurações do seu banco e com SRID apropriado para a cidade escolhida
- Execute o arquivo ExtrairMalhaViaria.py
python3 ExtrairMalhaViaria.py
- Execute o arquivo ExtrairRotasOnibus.py
python3 ExtrairRotasOnibus.py
select * from rotas;
SELECT rotas_vias.sequencia, vias.osmid, ST_LineMerge(ST_Union(vias.geom))
FROM rotas JOIN rotas_vias ON rotas.osmid_rota = rotas_vias.osmid_rota JOIN vias ON rotas_vias.osmid_via = vias.osmid
WHERE nome_rota ilike '%circular - bairro%'
GROUP BY rotas_vias.sequencia, vias.osmid
ORDER BY rotas_vias.sequencia
(É possível visualizar a geometria no mapa embutido do pgAdmin ou do dBeaver, ou executando a consulta dentro do QGIS)