Aplicacion web completa para distribuir camiones de reciclaje y optimizar sus rutas diarias en St. Joseph, MO. El sistema expone un backend en Python que consume la API de optimizacion de Mapbox y un frontend ligero que visualiza las rutas, genera enlaces a Google Maps y guarda el historial.
- Alta de empresas y autenticacion con tokens JWT.
- Registro dinamico de camiones con direcciones de inicio y fin.
- Carga de puntos de recoleccion (hasta 9 paradas por camion, tal como exige Google Maps).
- Asignacion automatica de zonas mediante clustering geografico y calculo de rutas optimizadas con Mapbox.
- Generacion de enlaces para compartir las rutas en Google Maps.
- Historial persistente de ejecuciones con posibilidad de consulta y eliminacion.
software/
|- backend/
| |- app/
| | |- main.py # FastAPI y puntos de montaje
| | |- config.py # Configuracion via .env / pydantic-settings
| | |- database.py # Conexion SQLAlchemy (SQLite por defecto)
| | |- models.py # Modelos ORM: usuarios y historial
| | |- schemas.py # Modelos Pydantic para requests/responses
| | |- security.py # Hashing + JWT
| | |- services/ # Integracion Mapbox + motor de optimizacion
| | \- routers/ # Rutas de autenticacion y optimizacion
| |- requirements.txt
| |- .env.example
| \- seed.py
\- frontend/
|- index.html
|- styles.css
|- app.js
\- config.js
- Python 3.11 o superior.
- No se requiere Node: el frontend es estatico y se sirve con cualquier servidor web.
- Token de Mapbox con acceso a Optimized Trips y Geocoding.
cd backend
python3 -m venv .venv
source .venv/bin/activate # en Windows: .venv\Scripts\activate
pip install -r requirements.txt
cp .env.example .envEdita .env y establece MAPBOX_TOKEN, SECRET_KEY y demas variables segun tu entorno. Puedes definir varias URLs permitidas para CORS usando ALLOWED_ORIGINS separadas por comas (por ejemplo, agrega la URL de Vercel).
python seed.pyEl comando crea backend/data/optimizer.db y registra el usuario [email protected] con contrasena changeme123.
uvicorn app.main:app --host 0.0.0.0 --port 8000 --reloadEndpoint de salud: GET http://localhost:8000/health.
- Edita
frontend/config.jsy reemplazaYOUR_MAPBOX_TOKENpor tu token real. AjustaapiBaseUrla la URL del backend. - Sirve la carpeta como sitio estatico, por ejemplo:
cd frontend
python3 -m http.server 5173Visita http://localhost:5173 en tu navegador.
- Registro: crea tu empresa con el formulario de alta y luego inicia sesion.
- Configura el dia: agrega camiones (nombre, direccion de salida, direccion final) y las direcciones a visitar.
- Optimiza: pulsa "Optimizar rutas". El sistema geocodifica, agrupa las paradas por zonas y llama a Mapbox Optimized Trips para cada camion.
- Resultados:
- Se muestra un resumen con distancia y duracion agregadas.
- Se despliega la asignacion por camion con enlaces a Google Maps (maximo 9 paradas por camion mas origen/destino).
- El mapa dibuja los recorridos optimizados con Mapbox GL.
- El historial guarda la ejecucion con fecha y enlaces para futuras consultas.
| Metodo | Ruta | Descripcion |
|---|---|---|
| POST | /api/auth/register |
Alta de empresa (email unico) |
| POST | /api/auth/login |
Inicio de sesion (devuelve token bearer) |
| POST | /api/routes/optimize |
Ejecuta la doble optimizacion y guarda historial |
| GET | /api/routes/history |
Lista las ultimas ejecuciones del usuario |
| DELETE | /api/routes/history/{id} |
Elimina una ejecucion del historial |
- Doble optimizacion: utiliza clustering k-means (NumPy) para repartir paradas entre camiones respetando el limite de 9 paradas, y luego solicita a Mapbox la ruta optimizada de cada grupo.
- Seguridad: contrasenas cifradas con bcrypt y autenticacion via JWT Bearer.
- Persistencia: SQLite por defecto; basta con cambiar
DATABASE_URLpara usar otro motor compatible. - Google Maps: cada ruta genera un enlace
https://www.google.com/maps/dircon origen, destino y hasta nueve waypoints.
cd backend
pip install -r requirements.txt
pip install -r requirements-dev.txt
pytestLos tests utilizan una base SQLite temporal y stubs para Mapbox, por lo que no consumen la cuota del token ni modifican datos reales.
- Incorporar gestion completa de usuarios (cambio de contrasena, recuperacion, roles).
- Agregar validaciones de geocodificacion desde la interfaz (sugerencias de direcciones).
- Ampliar reportes diarios y estadisticas por zona o camion.
- Automatizar despliegue (Docker Compose, CI/CD) segun las necesidades de la empresa.
Con este codigo tienes un punto de partida funcional para la operacion de reciclaje en St. Joseph.