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
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.
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.
A tela inicial apresenta o aplicativo e leva direto para o mapa.
No mapa, cada rua aparece colorida de acordo com o seu nível de risco, do verde (mais seguro) ao vermelho (mais arriscado).
Ao buscar um trajeto, o sistema mostra as três rotas lado a lado para a pessoa comparar e decidir.
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.
Python 3.13eFlaskpara o backend e as páginas.SQLAlchemycomSQLite(desenvolvimento) ePostgreSQL(produção).bcrypteFlask-Loginpara senhas e autenticação.PandaseGeoPandaspara tratar e cruzar os dados geográficos.MapLibre GL JSe tiles doCartoDBpara o mapa interativo.Nominatim(OpenStreetMap) para transformar endereços em coordenadas.Render.compara o deploy automático a partir do GitHub.GitHub Actionspara rodar os testes a cada alteração no código.
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:5000O mapa funciona sem nenhuma chave de API, já que usa MapLibre com os tiles do CartoDB.
| 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 |
Projeto desenvolvido na PUC-SP, no curso de Ciência de Dados e Inteligência Artificial:
- Alexander Haug
- Carlos Calil



