Skip to content

Repository files navigation

🛡️ SafeRoute

Andar por São Paulo nem sempre é uma decisão simples. Dependendo do bairro, do horário e do caminho escolhido, o mesmo trajeto pode ser tranquilo ou arriscado. O SafeRoute nasceu dessa ideia: usar os dados públicos de criminalidade da SSP-SP para ajudar moradores e turistas a escolherem por onde ir com mais segurança.

A aplicação mostra o risco das ruas de São Paulo em um mapa interativo e sugere rotas mais seguras entre dois pontos, levando em conta o horário e o meio de transporte.

Projeto acadêmico desenvolvido na PUC-SP, no curso de Ciência de Dados e Inteligência Artificial.

Demonstração ao vivo: https://saferoute-rqcj.onrender.com

O problema que o projeto resolve

Os dados de segurança pública existem, mas ficam espalhados em planilhas e relatórios difíceis de interpretar. Para uma pessoa comum, isso quase não ajuda na hora de decidir um caminho. Algumas dificuldades concretas:

  • Os dados da SSP-SP vêm em planilhas grandes, sem visualização e difíceis de cruzar com um mapa.
  • Os aplicativos de rota comuns otimizam tempo e distância, mas ignoram a segurança do trajeto.
  • Quem não conhece a cidade não tem como saber quais áreas evitar em determinado horário.

A solução

O SafeRoute transforma esses dados em algo visual e prático. A partir do endereço de origem e destino, o sistema calcula um score de risco para o trajeto e sugere três rotas: uma mais segura, uma equilibrada e uma mais rápida.

O score de risco é uma nota que mede o quão arriscado é um caminho. Ela é calculada a partir das ocorrências da SSP-SP e ajustada pelo horário e pelo meio de transporte escolhido. Por isso, o mesmo trajeto pode receber notas diferentes de dia e de noite.

Principais funcionalidades:

  • Mapa interativo com as ruas coloridas por nível de risco.
  • Cálculo de três rotas alternativas (segura, equilibrada e rápida) entre dois pontos.
  • Filtros por tipo de ocorrência (roubos, furtos e outros) que atualizam o mapa na hora.
  • Ajuste do trajeto conforme o meio de transporte (a pé, bicicleta, carro ou transporte público).
  • Comparação entre "agora" e "mais tarde", já que o risco muda ao longo do dia.
  • Login e conta para salvar rotas favoritas e o histórico de buscas.

Resultados

A tela inicial apresenta o aplicativo e leva direto para o mapa.

Tela inicial do SafeRoute

No mapa, cada rua aparece colorida de acordo com o seu nível de risco, do verde (mais seguro) ao vermelho (mais arriscado).

Mapa de risco das ruas de São Paulo

Ao buscar um trajeto, o sistema mostra as três rotas lado a lado para a pessoa comparar e decidir.

Comparação das três rotas sugeridas

Como foi feito

O sistema é um aplicativo web em Python com Flask, que junta a análise dos dados e a interface em um único projeto. Algumas decisões valeram a pena destacar:

  • Mapa sem dependência de token. O mapa usa MapLibre GL JS com os tiles do CartoDB (as imagens de fundo do mapa). Isso elimina a necessidade de uma chave paga e mantém o projeto totalmente gratuito.
  • Visualização por rua, e não por bolhas. O mapa de calor inicial não representava bem as áreas reconhecidamente perigosas. A solução foi colorir cada rua individualmente pelo seu risco, o que ficou muito mais fiel à realidade.
  • Padrões de projeto aplicados de propósito. O Singleton carrega os dados pesados uma única vez na memória, o Facade reúne as integrações externas (geocodificação e rotas) atrás de uma interface só, e o Strategy permite trocar o algoritmo de cálculo de rota conforme a prioridade escolhida.

Diagrama da arquitetura do SafeRoute

Ferramentas utilizadas

  • Python 3.13 e Flask para o backend e as páginas.
  • SQLAlchemy com SQLite (desenvolvimento) e PostgreSQL (produção).
  • bcrypt e Flask-Login para senhas e autenticação.
  • Pandas e GeoPandas para tratar e cruzar os dados geográficos.
  • MapLibre GL JS e tiles do CartoDB para o mapa interativo.
  • Nominatim (OpenStreetMap) para transformar endereços em coordenadas.
  • Render.com para o deploy automático a partir do GitHub.
  • GitHub Actions para rodar os testes a cada alteração no código.

Como executar

Para rodar o projeto na sua máquina:

# 1. Clonar o repositório
git clone https://github.com/Alexander-Haug/saferoute.git
cd saferoute

# 2. Criar e ativar o ambiente virtual
python -m venv .venv
.venv\Scripts\activate          # Windows
# source .venv/bin/activate     # Linux ou Mac

# 3. Instalar as dependências
pip install -r requirements.txt

# 4. Configurar as variáveis de ambiente
cp .env.example .env
# Gere a SECRET_KEY com:
# python -c "import secrets; print(secrets.token_hex(32))"

# 5. Rodar a aplicação
python app.py
# Acesse http://localhost:5000

O mapa funciona sem nenhuma chave de API, já que usa MapLibre com os tiles do CartoDB.

Estrutura do repositório

Pasta O que contém
routes/ Rotas do Flask: páginas e endpoints da API
models/ Modelos de dados e a lógica de cálculo do score
database/ Banco de dados e acesso aos registros
dados/ Base de ocorrências da SSP-SP usada nas análises
templates/ Páginas HTML renderizadas com Jinja2
static/ Arquivos de CSS, JavaScript e imagens
app.py Ponto de entrada da aplicação Flask
config.py Configurações do projeto

Integrantes

Projeto desenvolvido na PUC-SP, no curso de Ciência de Dados e Inteligência Artificial:

  • Alexander Haug
  • Carlos Calil

About

SafeRoute mapeia o risco das ruas de São Paulo com dados da SSP-SP e sugere rotas mais seguras entre dois pontos, considerando horário e meio de transporte. Aplicação web em Flask. Projeto acadêmico PUC-SP.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages