Construir um sistema automatizado para calcular o Índice de Coerência Cicloviária (ICC) de cidades ou áreas urbanas a partir de dados abertos do OpenStreetMap (OSM).
O índice deve medir o quanto a infraestrutura cicloviária existente é adequada à função da via onde está localizada, considerando uma regra simples de coerência entre classe viária e tipologia cicloviária.
O projeto deve permitir calcular, para cada cidade ou área analisada, uma nota final entre 0 e 1, ou entre 0 e 100, indicando a proporção ponderada da malha viária que possui infraestrutura cicloviária adequada.
O ICC não mede apenas a quantidade total de ciclovias ou ciclofaixas. Ele mede se a infraestrutura cicloviária está disponível nos lugares onde ela é necessária, conforme a função da via.
A lógica básica é:
- vias estruturais exigem maior proteção;
- vias alimentadoras exigem proteção intermediária;
- vias locais admitem qualquer estrutura cicloviária reconhecida.
Assim, uma cidade não deve ser bem avaliada apenas por possuir muitos quilômetros de infraestrutura cicloviária se essa infraestrutura estiver concentrada em vias locais e ausente nas vias mais importantes ou mais críticas.
Nome principal recomendado:
Índice de Coerência Cicloviária (ICC)
Definição sintética:
O Índice de Coerência Cicloviária mede a proporção ponderada da malha viária urbana que possui infraestrutura cicloviária mínima adequada ao tipo de via, dando maior peso às vias estruturais.
Definição simples:
O índice avalia se as ciclovias e ciclofaixas estão onde deveriam estar, de acordo com a importância da via.
O sistema deve permitir calcular o ICC para:
- uma cidade inteira;
- um município;
- uma área urbana delimitada por polígono;
- recortes internos, como bairros, zonas, regionais ou áreas de planejamento.
A fonte principal será o OpenStreetMap (OSM).
Dados necessários:
- malha viária;
- infraestrutura cicloviária mapeada;
- limites territoriais da área analisada.
Ferramentas possíveis:
- Overpass API (preferida);
- Geofabrik;
- pyrosm;
- osmnx;
- osmium;
- PostGIS;
- GeoPandas;
- Shapely;
- NetworkX, se necessário.
A unidade principal de análise deve ser o segmento da malha viária.
Cada segmento de via deve receber os seguintes atributos derivados:
- identificador único;
- geometria;
- comprimento em metros;
- classe OSM original;
- classe viária adaptada;
- presença ou ausência de infraestrutura cicloviária adequada;
- tipologia cicloviária associada;
- status de coerência/adequação;
- classe de ponderação.
O agente deve criar uma classificação adaptada das vias OSM em três classes:
- Estrutural
- Alimentadora
- Local
A classe estrutural representa vias de maior importância na circulação urbana.
Sugestão inicial de mapeamento OSM:
motorwaytrunkprimary- respectivas variações
_link, quando fizerem sentido no contexto urbano
A classe alimentadora representa vias intermediárias, que conectam bairros e distribuem fluxos.
Sugestão inicial de mapeamento OSM:
secondarytertiary
A classe local representa vias de acesso local, ruas residenciais e vias de baixo fluxo.
Sugestão inicial de mapeamento OSM:
residentialunclassified, quando em contexto urbano
Salvo decisão metodológica contrária, excluir:
living_streetservice,pedestrian,footwaypath,stepstrack, salvo contexto urbano específico;- vias privadas, se
access=private; - vias em construção, se
highway=construction; - geometrias inválidas ou sem comprimento relevante.
A infraestrutura cicloviária deve ser classificada em tipologias compatíveis com o CicloMapa ou com a taxonomia adotada pelo projeto.
Classes mínimas sugeridas:
- Ciclovia
- Ciclofaixa
- Outra estrutura cicloviária
- Sem estrutura cicloviária reconhecida
Representa infraestrutura segregada ou separada do tráfego motorizado.
Possíveis tags OSM:
highway=cyclewaycycleway=trackcycleway:left=trackcycleway:right=trackcycleway:both=trackcycleway=separate, quando houver geometria separada correspondentebicycle=designatedem via exclusiva, conforme contextosegregated=yes, quando associado a infraestrutura cicloviária
Representa faixa cicloviária na pista, usualmente delimitada por pintura.
Possíveis tags OSM:
cycleway=lanecycleway:left=lanecycleway:right=lanecycleway:both=lanecycleway=opposite_lane
Representam estruturas ou condições cicláveis menos protegidas, aceitas apenas em vias locais no cálculo inicial.
Possíveis tags OSM:
cycleway=shared_lanecycleway=sharrowbicycle=designatedem vias compartilhadashighway=pathcombicycle=designated, se aplicável- ciclorrotas ou vias compartilhadas reconhecidas em base complementar
Todos os segmentos que não apresentarem tags confiáveis de infraestrutura cicloviária devem ser classificados como sem estrutura reconhecida.
A coerência é definida pela relação entre a classe da via e a tipologia cicloviária mínima exigida.
| Classe da via | Estrutura mínima adequada | Estruturas consideradas adequadas |
|---|---|---|
| Estrutural | Ciclovia | Ciclovia |
| Alimentadora | Ciclofaixa | Ciclovia ou ciclofaixa |
| Local | Qualquer estrutura cicloviária reconhecida | Ciclovia, ciclofaixa ou outras estruturas |
Regras:
- Em vias estruturais, apenas ciclovias contam como adequadas.
- Em vias alimentadoras, ciclovias e ciclofaixas contam como adequadas.
- Em vias locais, qualquer estrutura cicloviária reconhecida conta como adequada.
- Infraestruturas inferiores à exigência da classe da via devem ser ignoradas no numerador, embora possam ser registradas para diagnóstico.
Exemplo:
Se uma cidade possui 100 km de vias estruturais, sendo 10 km com ciclovia e 5 km com ciclofaixa, apenas os 10 km com ciclovia entram como adequados. A disponibilidade adequada estrutural será 10 / 100 = 0,10.
Para cada classe viária k, calcular:
L_k: comprimento total das vias daquela classe;A_k: comprimento das vias daquela classe com infraestrutura adequada;D_k: disponibilidade adequada daquela classe.
Fórmula:
D_k = A_k / L_k
Onde:
D_kvaria de 0 a 1;- se
L_k = 0, o sistema deve tratar o caso de forma explícita, evitando divisão por zero.
Tratamento sugerido para L_k = 0:
- registrar a classe como inexistente no território;
- redistribuir o peso proporcionalmente entre as demais classes, ou
- manter o peso e atribuir nulo, conforme decisão metodológica.
A opção recomendada para comparabilidade é redistribuir os pesos entre classes existentes, mas o sistema deve permitir configurar esse comportamento.
O índice final deve combinar as disponibilidades adequadas por classe com pesos definidos metodologicamente.
Pesos iniciais:
- 60% para vias estruturais;
- 25% para vias alimentadoras;
- 15% para vias locais.
Fórmula:
ICC = 0,60 * D_estrutural + 0,25 * D_alimentadora + 0,15 * D_local
Ou, de forma geral:
ICC = Σ (w_k * D_k)
Onde:
w_ké o peso da classe viária;D_ké a disponibilidade adequada da classe;- a soma dos pesos deve ser igual a 1.
Para nota de 0 a 100:
ICC_100 = ICC * 100
Suponha uma cidade com:
| Classe | Total de vias | Estrutura adequada | D_k |
|---|---|---|---|
| Estrutural | 100 km | 10 km de ciclovia | 0,10 |
| Alimentadora | 200 km | 40 km de ciclovia/ciclofaixa | 0,20 |
| Local | 700 km | 140 km de qualquer estrutura | 0,20 |
Cálculo:
ICC = 0,60 * 0,10 + 0,25 * 0,20 + 0,15 * 0,20
ICC = 0,06 + 0,05 + 0,03
ICC = 0,14
ICC_100 = 14
Resultado: a cidade teria ICC = 0,14, ou 14/100.
O sistema deve associar infraestrutura cicloviária aos segmentos de via que ela atende.
Há dois casos principais.
Quando a infraestrutura está registrada como tag do próprio segmento viário, por exemplo cycleway=lane ou cycleway=track, a associação é direta.
Procedimento:
- identificar a tag cicloviária no segmento;
- classificar a tipologia;
- aplicar a regra de coerência conforme a classe viária;
- marcar o segmento como adequado ou inadequado.
Quando a infraestrutura aparece como highway=cycleway, ela deve ser associada à via que atende.
Procedimento recomendado:
- selecionar ciclovias separadas;
- criar buffer de busca em torno da ciclovia ou da via;
- identificar vias próximas candidatas;
- filtrar por distância máxima;
- filtrar por paralelismo aproximado, quando possível;
- usar nome da via, quando disponível, como critério auxiliar;
- associar a ciclovia à via mais provável;
- marcar o trecho correspondente da via como atendido por ciclovia.
Critérios sugeridos:
- distância máxima inicial: 20 m a 30 m em contexto urbano;
- preferência por vias com classe estrutural ou alimentadora quando a ciclovia estiver paralela a múltiplas vias;
- evitar associar ciclovias de parques ou orlas a vias próximas se elas não servirem diretamente a uma via de tráfego.
O algoritmo deve registrar incertezas de associação.
O numerador deve representar a extensão de vias atendidas por infraestrutura adequada, não a soma bruta da extensão da infraestrutura.
Regra importante:
O cálculo deve somar o comprimento dos segmentos viários considerados adequadamente atendidos, e não simplesmente o comprimento das geometrias cicloviárias.
Isso evita que uma via com ciclovia bidirecional em geometria separada ou com duas ciclofaixas laterais seja contada duas vezes.
Cada segmento viário deve contribuir no máximo com 100% de seu comprimento para o numerador da respectiva classe.
Para maior precisão, o agente deve segmentar vias quando apenas parte de um segmento estiver coberta por infraestrutura adequada.
Exemplo:
- um segmento viário tem 1.000 m;
- apenas 400 m são acompanhados por ciclovia;
- apenas 400 m devem entrar no numerador, não o segmento inteiro.
Soluções possíveis:
- usar interseção linear entre buffers;
- projetar trechos de ciclovia sobre a via associada;
- dividir segmentos viários em trechos menores;
- usar PostGIS com
ST_LineSubstring,ST_Intersection,ST_Buffer,ST_DWithine funções de projeção linear.
Para uma primeira versão, pode-se aceitar aproximação por segmento inteiro, desde que a limitação seja documentada. Para versão robusta, usar cobertura parcial.
O agente deve implementar um pipeline com as seguintes etapas:
- Entrada da área de análise;
- Download ou leitura dos dados OSM;
- Limpeza e padronização das geometrias;
- Projeção para sistema métrico adequado;
- Extração da malha viária;
- Classificação das vias em estrutural, alimentadora e local;
- Extração da infraestrutura cicloviária;
- Classificação da tipologia cicloviária;
- Associação entre infraestrutura separada e via atendida;
- Marcação dos segmentos adequados;
- Cálculo de
L_k,A_keD_k; - Aplicação dos pesos;
- Cálculo do ICC final;
- Geração de tabelas, mapas e arquivos de saída;
- Registro de logs e alertas de qualidade dos dados.
O sistema deve aceitar ao menos uma das seguintes entradas:
- nome da cidade;
- código ou identificador territorial;
- polígono GeoJSON;
- arquivo shapefile ou geopackage;
- bounding box;
- relação OSM do município, quando disponível.
Parâmetros configuráveis:
- pesos do índice;
- mapeamento OSM para classe viária;
- mapeamento OSM para tipologia cicloviária;
- distância máxima de associação;
- regras para redistribuição de pesos;
- inclusão ou exclusão de determinadas classes OSM;
- unidade de saída: 0 a 1 ou 0 a 100.
O sistema deve gerar:
Campos mínimos:
- cidade ou área;
- data de extração dos dados OSM;
- extensão total de vias estruturais;
- extensão adequada em vias estruturais;
- disponibilidade adequada estrutural;
- extensão total de vias alimentadoras;
- extensão adequada em vias alimentadoras;
- disponibilidade adequada alimentadora;
- extensão total de vias locais;
- extensão adequada em vias locais;
- disponibilidade adequada local;
- ICC final;
- ICC em escala 0–100.
Arquivos sugeridos:
- GeoPackage com segmentos viários classificados;
- GeoJSON com trechos adequados e inadequados;
- camada de infraestrutura cicloviária classificada;
- camada de associações entre ciclovias separadas e vias atendidas.
Gerar mapas com:
- vias estruturais sem ciclovia;
- vias alimentadoras sem ciclovia ou ciclofaixa;
- vias locais com e sem infraestrutura;
- trechos adequados e inadequados;
- distribuição espacial da coerência cicloviária.
Gerar relatório automático em Markdown, HTML ou PDF com:
- metodologia;
- parâmetros usados;
- tabela de resultados;
- mapas;
- limitações;
- data da base OSM;
- recomendações de interpretação.
Criar testes automatizados para garantir que:
- uma via estrutural com ciclovia seja adequada;
- uma via estrutural com ciclofaixa seja inadequada;
- uma via alimentadora com ciclofaixa seja adequada;
- uma via alimentadora com ciclovia seja adequada;
- uma via local com qualquer estrutura reconhecida seja adequada;
- uma via sem estrutura seja inadequada;
- a fórmula de ponderação retorne o valor esperado;
- não haja dupla contagem de segmentos;
- a ausência de uma classe viária seja tratada corretamente.
O resultado depende da completude e qualidade do mapeamento no OSM. O relatório deve sempre registrar a data de extração e alertar para possíveis lacunas.
A classificação OSM pode variar entre cidades. O sistema deve permitir ajustes locais sem alterar o código.
A associação de highway=cycleway a uma via próxima pode gerar erros. O sistema deve registrar associações incertas e permitir auditoria posterior.
É necessário cuidado para não penalizar indevidamente cidades que possuam longos trechos de rodovias rurais dentro do limite municipal. Como sinalizar isso?
Infraestruturas existentes mas ausentes do OSM serão consideradas inexistentes pelo sistema. Isso deve ser tratado como limitação da fonte.
Além do ICC final, o sistema deve apresentar:
- disponibilidade adequada estrutural;
- disponibilidade adequada alimentadora;
- disponibilidade adequada local;
- extensão de ciclovias em vias estruturais;
- extensão de ciclofaixas em vias estruturais, mesmo quando inadequadas;
- extensão de vias estruturais sem infraestrutura adequada;
- ranking de corredores prioritários para intervenção;
- percentual do índice perdido por classe.
Esses indicadores ajudam a interpretar o resultado e orientar políticas públicas.
O sistema pode gerar uma lista de trechos prioritários para intervenção.
Critério inicial:
- vias estruturais sem ciclovia;
- vias estruturais com apenas ciclofaixa;
- vias alimentadoras sem ciclovia ou ciclofaixa;
- vias locais sem qualquer estrutura, se relevante.
A saída pode conter:
- nome da via;
- classe viária;
- extensão inadequada;
- infraestrutura existente;
- infraestrutura mínima recomendada;
- prioridade.
O MVP deve:
- receber uma cidade ou polígono;
- baixar dados OSM;
- classificar vias em três classes;
- identificar infraestrutura cicloviária na própria via;
- associar
highway=cyclewaypor proximidade simples; - calcular
D_estrutural,D_alimentadora,D_locale ICC; - exportar uma tabela CSV;
- exportar um GeoPackage com os segmentos classificados;
- gerar um relatório Markdown simples.
A versão avançada deve incluir:
- matching por distância e paralelismo;
- segmentação parcial de vias;
- interface CLI;
- dashboard web;
- execução em lote para várias cidades;
- comparação temporal com diferentes datas do OSM;
- integração com CicloMapa ou bases locais;
- validação visual interativa;
- API para consulta pública;
- relatório automatizado com mapas.
Exemplo de uso desejado:
icc calculate --city "Recife, Pernambuco, Brazil" --output outputs/recifeOu:
icc calculate --polygon data/areas/recife.geojson --config config/default.yaml --output outputs/recifeExecução em lote:
icc batch --cities data/cities.csv --config config/default.yaml --output outputs/batchNome: Índice de Coerência Cicloviária Sigla: ICC Unidade: número adimensional entre 0 e 1, ou nota entre 0 e 100 Fonte: OpenStreetMap Unidade territorial: município, cidade, área urbana ou polígono definido Periodicidade possível: conforme atualização da base OSM Fenômeno medido: disponibilidade de infraestrutura cicloviária adequada à classe da via Classes consideradas: estrutural, alimentadora e local Pesos: 60%, 25% e 15%, respectivamente Interpretação: quanto maior o valor, maior a coerência entre a rede viária e a infraestrutura cicloviária disponível.
D_E = A_E / L_E
D_A = A_A / L_A
D_L = A_L / L_L
ICC = 0,60 * D_E + 0,25 * D_A + 0,15 * D_L
ICC_100 = ICC * 100
Onde:
D_E: disponibilidade adequada em vias estruturais;D_A: disponibilidade adequada em vias alimentadoras;D_L: disponibilidade adequada em vias locais;A_E: extensão de vias estruturais com ciclovia;A_A: extensão de vias alimentadoras com ciclovia ou ciclofaixa;A_L: extensão de vias locais com qualquer estrutura cicloviária reconhecida;L_E: extensão total de vias estruturais;L_A: extensão total de vias alimentadoras;L_L: extensão total de vias locais.
O agente deve priorizar clareza metodológica, código reprodutível e parametrização. Todas as decisões metodológicas devem ficar explícitas em arquivos de configuração e no relatório final.
O sistema deve ser construído de forma incremental:
- primeiro calcular corretamente para uma cidade;
- depois melhorar o matching espacial;
- depois permitir análise em lote;
- depois gerar mapas e relatórios;
- por fim, empacotar como ferramenta reutilizável.
O mais importante é garantir que o índice final represente exatamente a pergunta metodológica central:
Quanto da malha viária possui infraestrutura cicloviária adequada à função da via, considerando maior peso para as vias estruturais?