Plataforma web para calcular, publicar e auditar o Indice de Coerencia Cicloviaria por cidade, usando OpenStreetMap como base principal e PostgreSQL para persistencia.
O ICC mede se a infraestrutura cicloviaria mapeada e coerente com a hierarquia da malha viaria. A nota final vai de 0 a 100 e representa a proporcao ponderada da malha adequadamente atendida.
O projeto combina:
- portal publico com home, ranking e detalhe por cidade;
- calculo autenticado de resultados ICC por cidade;
- pipeline OpenStreetMap/Overpass para malha viaria e infraestrutura cicloviaria;
- persistencia em PostgreSQL;
- rotas locais em
/api/auth/*e/api/db/*; - autenticacao por magic link e painel administrativo.
Regras iniciais do MVP:
- vias estruturais exigem ciclovia;
- vias alimentadoras aceitam ciclovia ou ciclofaixa;
- vias locais aceitam qualquer estrutura cicloviaria reconhecida;
- classes sem extensao no municipio redistribuem seu peso;
- ciclovias separadas sao associadas por proximidade no MVP, com aviso de incerteza.
Os pesos iniciais sao:
- estrutural:
0.60; - alimentadora:
0.25; - local:
0.15.
Para cada classe viaria, o sistema calcula:
L_k: extensao total elegivel;A_k: extensao adequada;D_k: disponibilidade adequada.
/pagina inicial do ICC;/sobreexplicacao publica do metodo;/rankingranking ICC com resultados persistidos;/detalhes-cidades/:cityIddetalhe da cidade, decomposicao e mapa;/avaliacaotela autenticada para calcular e publicar ICC;/loginenvio de magic link;/solicitar-acessosolicitacao de acesso;/adminpainel administrativo.
Rotas antigas de formulario IDECICLO permanecem protegidas temporariamente para compatibilidade, mas nao fazem parte do fluxo principal do ICC.
- Entrar em
/avaliacao. - Selecionar UF e cidade via IBGE.
- Rodar o calculo ICC.
- O sistema consulta Overpass para obter malha viaria e infraestrutura cicloviaria.
- O resultado e salvo em
icc_city_results. - Os segmentos de diagnostico sao salvos em
icc_road_segments. - A cidade passa a aparecer no ranking quando houver resultado ICC persistido.
A lista inicial de capitais esta em src/data/iccTargetCities.json.
Comandos:
npm run icc:batch -- --dry-run --limit 3
npm run icc:batch -- --state PE --force
npm run icc:batch -- --only 2611606,3550308 --pause-ms 60000 --retries 3O lote real consulta Overpass e grava no banco. Use --dry-run, --limit, --state ou --only para execucao controlada.
- React
- TypeScript
- Vite
- React Router
- Tailwind CSS
- shadcn/ui
- PostgreSQL
- OpenStreetMap / Overpass
- IBGE para estados e municipios
- Mapbox para mapas no frontend
- Node local para
/api/auth/*e/api/db/*
- Node.js 18 ou superior
- npm
- Docker e Docker Compose
- acesso a internet para IBGE e Overpass
- token Mapbox para mapas interativos
npm install
cp .env.example .env.local
npm run db:up
npm run db:bootstrap
npm run db:seedsudo
npm run devExemplo minimo de ambiente:
DATABASE_URL=postgresql://icc:change_me_local_password@127.0.0.1:54322/icc
DATABASE_URL=postgresql://icc:change_me_local_password@127.0.0.1:54322/icc
APP_URL=http://127.0.0.1:8080
EMAIL_FROM=no-reply@icc.local
MAGIC_LINK_SECRET=change_me_magic_link_secret
AUTH_COOKIE_SECURE=false
POSTGRES_DATABASE=icc
POSTGRES_USER=icc
POSTGRES_PASSWORD=change_me_local_password
POSTGRES_PORT=54322
VITE_MAPBOX_ACCESS_TOKEN=your_mapbox_access_token_hereUse DATABASE_URL para autenticacao, permissoes e tabelas legadas. Use
DATABASE_URL quando os resultados ICC (icc_city_results e
icc_road_segments) estiverem em outro banco PostgreSQL.
npm run dev
npm run build
npm run lint
npm run test:icc
npm run icc:batch -- --dry-run --limit 3
npm run db:up
npm run db:down
npm run db:bootstrap
npm run db:seedsudoO bootstrap completo fica em supabase/bootstrap_full_schema.sql.
Tabelas ICC principais:
icc_city_results: resumo de cada calculo por cidade;icc_road_segments: segmentos viarios classificados e diagnosticados.
As tabelas antigas de cities, segments, forms e reviews continuam no schema para compatibilidade durante a transicao.
- O recorte inicial e municipal; rodovias rurais podem afetar a nota.
- Infraestrutura existente, mas ausente no OSM, e tratada como ausente.
- Matching de ciclovia separada usa proximidade simples no MVP.
- Lotes grandes dependem de disponibilidade e limites do Overpass.
O plano de implantacao incremental esta em docs/plano_implantacao_icc.md.
Veja LICENSE.md.