Dashboard interactivo que modela la transicion logistica del Grupo 20 (19 fincas bananeras, ~5% produccion regional) de un esquema de exportacion directa descentralizada a un modelo Hub & Spoke via Hub Casa Verde → Puerto Antioquia.
Live: gemelo-digital-uraba.vercel.app
Un gemelo digital logistico — una replica virtual del corredor bananero de Uraba que permite simular, visualizar y comparar escenarios de transporte antes de tomar decisiones de infraestructura.
El Grupo 20 (G20) opera 19 fincas bananeras en la region de Uraba, Antioquia. Actualmente cada finca despacha tractomulas individualmente hacia el puerto (modelo directo descentralizado), generando:
- ~154 tractomulas/dia del G20 en la via principal
- Congestion vial acumulada con otros exportadores (Uniban, Banacol, etc.)
- Costos logisticos elevados por combustible, conductor, peajes y desgaste vehicular
- Cero consolidacion de carga
Hub & Spoke: consolidar la carga de las 19 fincas en un punto intermedio (Hub Casa Verde, 7.8680°N, -76.6650°W) y despachar tractomulas consolidadas al puerto.
| Metrica | Valor |
|---|---|
| Reduccion de tractomulas en via principal | ~89% (154 → 17/dia) |
| Ahorro en costo por caja | ~23% ($386 → $298 COP/caja) |
| Ahorro anual estimado | ~$502M COP |
| Distancia Hub → Puerto (OSRM) | 25.4 km / 34.8 min |
| Hub en zona de inundacion | NO (verificado contra IDEAM) |
| Fincas dentro de isocrona 15 min del Hub | ~14-16 de 20 |
- 10+ capas superpuestas con toggle individual:
- Limites municipales (DANE MGN 2024) — 9 municipios
- Limites veredales (UPRA) — 611 veredas
- Aptitud banano SIPRA — 68 poligonos (113,640 ha aptitud alta)
- Red vial OSM — 299 segmentos
- Hidrografia OSM — 759 segmentos (rios, quebradas, canales)
- Zonas de inundacion
- Isocronas desde Hub (15/30/45 min driving)
- Rutas OSRM (caos y hub)
- Ruta Hub → Puerto
- WMS oficiales (UPRA aptitud, IDEAM amenaza)
- Terreno 3D con DEM de Mapbox, hillshade y atmosfera
- Vista top-down 2D para claridad analitica (pitch: 0°)
- Tema oscuro optimizado para visualizacion de datos
Tres sliders interactivos que actualizan el mapa en tiempo real:
| Slider | Rango | Efecto |
|---|---|---|
| Produccion G20 | 50-200% | Escala volumen de cajas/semana, numero de tractomulas |
| Carga regional total | 50-200% | Simula trafico total en la via (todos los exportadores) |
| Competidores | 0-150% | Agrega volumen de Uniban, Banacol, otros |
Visualizacion reactiva:
- Rutas cambian de color segun congestion (verde → amarillo → rojo)
- Ancho de ruta proporcional al volumen de produccion por finca
- Overlay de congestion en red vial OSM
- Marcadores de fincas cambian tamano y color segun produccion
- Semaforo de estado vial (verde/amarillo/rojo)
- Barra de congestion con porcentaje
Modelo parametrico que calcula $/caja desglosado por componente:
| Componente | Directo | Hub | Delta |
|---|---|---|---|
| Combustible | $148 | $108 | -27% |
| Conductor | $82 | $58 | -29% |
| Peajes | $35 | $18 | -49% |
| Desgaste vehicular | $68 | $52 | -24% |
| Consolidacion Hub | -- | $42 | +$42 |
| TOTAL | $386 | $298 | -23% |
Parametros del modelo:
| Parametro | Valor | Fuente |
|---|---|---|
| Costo diesel | $3,200 COP/km | Estimado operador |
| Costo conductor | $28,000 COP/hr | Estimado operador |
| Peaje ruta directa | $35,000 COP/viaje | Estimado |
| Peaje ruta Hub | $18,000 COP/viaje | Estimado |
| Desgaste vehicular | $1,800 COP/km | Estimado |
| Consolidacion Hub | $42 COP/caja | Estimado |
| Cajas por tractomula | 960 | Augura |
Los costos se recalculan en tiempo real al mover los sliders.
Contornos de accesibilidad driving desde Hub Casa Verde:
- 15 min (verde) — 114 puntos de contorno
- 30 min (amarillo) — 437 puntos de contorno
- 45 min (rojo) — 1,163 puntos de contorno
Conteo automatico de fincas dentro de cada anillo usando ray casting (point-in-polygon).
Dos escenarios toggleables con un click:
| Caos (directo) | Hub & Spoke | |
|---|---|---|
| Rutas visibles | 20 rutas finca → puerto | 20 rutas finca → hub + 1 hub → puerto |
| Tractomulas/dia | ~154 | ~17 |
| Costo/caja | $386 COP | $298 COP |
| Visual | Rutas rojas dispersas | Rutas verdes convergentes + trunk animado |
La ruta Hub → Puerto tiene animacion ant march (dash animado con requestAnimationFrame).
- Google Maps Distance Matrix API para obtener tiempos de viaje con trafico actual
- Proxy serverless en Vercel (
/api/traffic.js) para evitar CORS - 20 fincas × 2 destinos (Hub + Puerto) = 40 consultas
- Muestra tiempo en trafico vs. tiempo libre para cada finca
- Navegacion por tabs (Mapa / Controles / Datos)
- 4 breakpoints: 1200px, 900px, 768px, 380px
- Touch targets agrandados (22px thumbs en sliders)
- Panels de ancho completo en movil
- Leyenda compacta
- Auto-restore layout desktop en resize
| ID | Nombre | Lat | Lng | Prod (cajas/sem) | Cluster |
|---|---|---|---|---|---|
| F01 | La Sierra | 7.7927 | -76.6529 | 7,200 | sur |
| F02 | Villa Fresia | 7.7762 | -76.6563 | 5,100 | sur |
| F03 | El Retiro | 7.7655 | -76.6579 | 4,800 | sur |
| F04 | Santa Ana | 7.8067 | -76.6512 | 6,500 | sur |
| F05 | La Esperanza | 7.7965 | -76.6736 | 5,900 | sur |
| F06 | El Paraiso | 7.8422 | -76.6438 | 6,100 | central |
| F07 | La Fortuna | 7.8589 | -76.6486 | 5,500 | central |
| F08 | San Jose | 7.8648 | -76.6375 | 4,900 | central |
| F09 | Chinita | 7.8932 | -76.6515 | 7,800 | norte |
| F10 | Santa Marta | 7.8942 | -76.6510 | 6,700 | norte |
| F11 | La Llave | 7.9061 | -76.6379 | 5,400 | norte |
| F12 | El Progreso | 7.9356 | -76.6561 | 4,600 | norte |
| F13 | Las Dunas | 7.8686 | -76.6521 | 6,300 | hub |
| F14 | Oasis | 7.8649 | -76.6519 | 5,800 | hub |
| F15 | Guadalupe | 7.8790 | -76.6520 | 6,000 | hub |
| F16 | El Eden | 7.8667 | -76.6522 | 5,200 | hub |
| F17 | Monteverde | 7.8282 | -76.6548 | 4,500 | central |
| F18 | Bella Vista | 7.8044 | -76.6853 | 5,600 | sur |
| F19 | Los Almendros | 7.8161 | -76.7119 | 5,100 | central |
| F20 | Rio Claro | 7.8739 | -76.6350 | 4,800 | hub |
Total produccion semanal modelo: ~110,400 cajas/semana (~5.7M cajas/ano)
Nota: Las coordenadas son simuladas y snapped al punto mas cercano de la red vial OSM. Se necesitan las ubicaciones reales de las fincas del G20.
| Nodo | Lat | Lng | Rol |
|---|---|---|---|
| Hub Casa Verde | 7.8680 | -76.6650 | Centro de consolidacion |
| Puerto Antioquia | 7.9230 | -76.7341 | Puerto de exportacion |
| Apartado | 7.8829 | -76.6258 | Cabecera municipal |
| Carepa | 7.7567 | -76.6558 | Cabecera municipal |
| Chigorodo | 7.6647 | -76.6818 | Cabecera municipal |
| Turbo | 8.0926 | -76.7260 | Cabecera municipal |
| Aeropuerto Zungo | 7.8139 | -76.7161 | Infraestructura |
| Embarcadero Rio Leon | 7.9100 | -76.7000 | Infraestructura fluvial |
- 41 rutas con geometria completa (overview=full)
- 1,653 puntos de coordenadas sobre vias reales
- ~34 KB de datos de rutas embebidos en el frontend
- Tipos: 1 ruta hub→puerto, 20 rutas finca→hub, 20 rutas finca→puerto
Distancias promedio:
- Finca → Hub: 1.6 – 20.7 km (media ~8.2 km)
- Finca → Puerto: 9.4 – 42.8 km (media ~26.3 km)
- Hub → Puerto: 25.4 km / 34.8 min
| Parametro | Valor |
|---|---|
| Fincas en G20 | 19 |
| Produccion anual | ~5.7M cajas |
| Participacion regional | ~5% |
| Peso por caja | 20 kg |
| Cajas por pallet | 48 |
| Cajas por tractomula | 960 |
| # | Fuente | Dato | Registros | Formato | Tamano |
|---|---|---|---|---|---|
| 1 | DANE MGN 2024 | Limites municipales | 9 municipios | GeoJSON | 47 KB |
| 2 | UPRA Geoservicios | Limites veredales | 611 veredas | GeoJSON | 2.1 MB |
| 3 | SIPRA/UPRA 2019 | Aptitud banano | 68 poligonos | GeoJSON | 329 KB |
| 4 | OpenStreetMap Overpass | Red vial | 299 segmentos | GeoJSON | 129 KB |
| 5 | OpenStreetMap Overpass | Hidrografia | 759 segmentos (86 rios, 590 quebradas, 83 canales) | GeoJSON | 435 KB |
| 6 | OSRM | Ruteo real | 41 rutas, 1,653 puntos | JSON embebido | 34 KB |
| 7 | Mapbox Isochrone API | Isocronas driving | 3 contornos (15/30/45 min) | GeoJSON (runtime) | API |
| 8 | Google Maps Distance Matrix | Trafico en vivo | 20 fincas × 2 destinos | JSON (runtime) | API |
| 9 | Augura 2023 | Parametros produccion | Benchmark regional | Constantes | — |
| 10 | IDEAM WMS | Amenaza inundacion | Capa raster | WMS tile | — |
| 11 | UPRA WMS | Aptitud uso suelo | Capa raster | WMS tile | — |
| 12 | Mapbox | Terreno DEM | Elevacion | Raster-DEM | — |
| Componente | Tecnologia |
|---|---|
| Frontend | HTML + CSS + JavaScript vanilla (single-page) |
| Mapas | Mapbox GL JS v3.3.0 (dark-v11 style) |
| Tipografia | JetBrains Mono (datos) + Inter (UI) |
| Backend | Vercel serverless function (Node.js) |
| Deploy | Vercel (auto-deploy desde Git) |
| Ruteo | OSRM (router.project-osrm.org) |
| Trafico | Google Maps Distance Matrix API |
| Isocronas | Mapbox Isochrone API |
| Terreno | Mapbox DEM + Hillshade |
| WMS | UPRA + IDEAM |
- Hillshade (terreno sombreado)
- Municipios (fill + line + label)
- Veredas (fill + line)
- SIPRA aptitud banano (fill + line)
- OSM roads (line)
- Waterways (glow + line + label)
- Flood zones (fill + line)
- Isocronas (45/30/15 min — fill + line + labels)
- Chaos routes (glow + line) / Hub routes (line)
- Hub-port route (glow + line + flow animation)
- OSM roads congestion overlay
- Farm markers (glow + circle + popups)
- WMS overlays (UPRA, IDEAM)
Formula BPR (Bureau of Public Roads) simplificada:
lr = (baseCapacity * 0.6 + totalTrucks * PCE) / baseCapacity
congestionFactor = lr^3
Donde:
baseCapacity= 800 vehiculos/hora (estimado via principal Uraba)PCE= 2.5 (Passenger Car Equivalent para tractomula)totalTrucks= tractomulas G20 + carga regional + competidores
| Endpoint | Metodo | Descripcion |
|---|---|---|
/api/traffic.js |
GET | Proxy Google Maps Distance Matrix |
Query params: origins, destinations, mode (default: driving)
Requiere GMAPS_KEY en variables de entorno de Vercel.
gemelo-digital-uraba/
├── index.html # Dashboard single-page (1,410 lineas, 116 KB)
│ # HTML + CSS + JS — tema oscuro, mapa, simulador,
│ # modelo de costos, isocronas, mobile responsive
├── api/
│ └── traffic.js # Vercel serverless proxy para Google Maps API (41 lineas)
├── config.js # Token Mapbox local (gitignored)
├── vercel.json # Config: maxDuration=10s para /api/traffic.js
├── data/
│ ├── osm_roads.geojson # Red vial OSM (299 segmentos, 129 KB) — deployed
│ ├── osm_waterways_web.geojson # Hidrografia OSM (759 segmentos, 435 KB) — deployed
│ ├── sipra_uraba_web.geojson # Aptitud banano SIPRA (68 poligonos, 329 KB) — deployed
│ ├── uraba_municipios_web.geojson # Limites municipales DANE (9 mpios, 47 KB) — deployed
│ ├── uraba_veredas_web.geojson # Limites veredales UPRA (611 veredas, 2.1 MB) — deployed
│ ├── osm_waterways.geojson # Hidrografia completa (gitignored, 812 KB)
│ ├── osm_roads.js # Red vial formato JS (gitignored)
│ ├── osm_roads_compact.js # Red vial compacta (gitignored)
│ ├── osrm_data.js # Rutas OSRM simplificadas (gitignored)
│ ├── osrm_routes.json # Rutas OSRM basicas (gitignored)
│ ├── osrm_routes_full.json # Rutas OSRM completas (gitignored, 176 KB)
│ ├── routes_js.txt # Datos snapped exportados (gitignored, 35 KB)
│ ├── sipra_uraba.geojson # SIPRA original (gitignored, 2.5 MB)
│ ├── sipra_exclusion.geojson # SIPRA exclusion (gitignored, 725 KB)
│ ├── uraba_municipios.geojson # Municipios original (gitignored, 282 KB)
│ ├── uraba_veredas.geojson # Veredas original (gitignored, 13 MB)
│ └── sipra/ # Shapefiles originales SIPRA (gitignored)
├── scripts/
│ └── fetch_osm_roads.py # Script Python para descargar datos OSM via Overpass
├── .gitignore
├── .vercelignore
└── README.md
Archivos deployed a Vercel: index.html, api/traffic.js, vercel.json, y 5 GeoJSON en data/ (archivos *_web.geojson + osm_roads.geojson). Total ~3.1 MB.
- Navegador moderno con WebGL (Chrome, Firefox, Safari, Edge)
- Servidor HTTP local (cualquiera:
npx serve, Python, etc.) - Token de Mapbox (para mapas)
- Token de Google Maps (opcional, para trafico en vivo)
-
Clonar el repositorio:
git clone <repo-url> cd gemelo-digital-uraba
-
Crear
config.jscon tu token de Mapbox:const MAPBOX_TOKEN = 'pk.tu_token_aqui';
-
Servir con cualquier servidor local:
npx serve . # o python3 -m http.server 3000
-
Abrir en
http://localhost:3000(o el puerto que indique tu servidor)
Para habilitar la funcionalidad de trafico en vivo con Google Maps:
- Configurar
GMAPS_KEYen las variables de entorno de Vercel - El endpoint
/api/traffic.jsactua como proxy serverless - Requiere deploy en Vercel (no funciona en localhost sin configuracion adicional)
El proyecto se deploya automaticamente en Vercel via Git push.
git push origin mainConfiguracion relevante:
vercel.json: maxDuration de 10s para la funcion serverless.vercelignore: excluye archivos grandes de datos fuente (shapefiles, GeoJSON originales)- Variable de entorno:
GMAPS_KEY(Google Maps API key)
| # | Commit | Descripcion |
|---|---|---|
| 1 | 05f4681 |
Dashboard MVP inicial con Leaflet.js tema oscuro |
| 2 | 0e6f29d |
Integracion rutas OSRM reales y capas WMS |
| 3 | 3f4b05b |
Red vial OSM, resumen ejecutivo, polish |
| 4 | 5655612 |
Limpiar .DS_Store del tracking |
| 5 | dc31387 |
Migracion a Mapbox GL JS + datos SIPRA reales |
| 6 | b9c2d7c |
Agregar .vercelignore para archivos grandes |
| 7 | 9e65984 |
Fix mapa negro + integrar Google Maps Distance Matrix |
| 8 | c249395 |
Remover API key expuesta del codigo fuente |
| 9 | 2b17a68 |
Agregar README con documentacion |
| 10 | a41b674 |
Rebuild completo con limites municipales + veredales |
| 11 | 847e842 |
Fix token Mapbox revocado |
| 12 | ee5e949 |
Usar token publico Mapbox verificado |
| 13 | c46c745 |
Upgrade: coords snapped, rutas OSRM completas, rios reales, terreno 3D |
| 14 | aed5611 |
Mapa interactivo: vista 2D, visuales reactivos a parametros |
| 15 | d333706 |
Modelo de costos logisticos + isocronas Hub (15/30/45 min) |
| 16 | 32908a8 |
Layout mobile-responsive con navegacion por tabs |
| 17 | a3bbb18 |
Polish mobile: touch targets, gap fixes, estado inicial |
| 18 | 83541cf |
Actualizar README con resumen ejecutivo |
- Coordenadas reales de las 19 fincas del G20 — actualmente simuladas; se necesitan ubicaciones GPS reales
- Produccion real por finca — datos de volumen semanal/mensual por finca para calibrar el modelo
-
Costos reales de operacion — validar
$/km diesel, $ /hr conductor, peajes con datos del operador logistico - Datos de competidores — volumenes reales de Uniban, Banacol, otros para calibrar congestion
- Datos reales ICA/AUGURA — geolocalizacion de plantaciones registradas
- CAPEX del Hub — costo de construccion/adecuacion del centro de consolidacion
- Payback, TIR, VPN — modelo financiero completo con flujo de caja proyectado
- Escenario fluvial — modelar transporte por rio (Embarcadero Rio Leon, 7.9100°N, -76.7000°W) como tercer escenario de comparacion
- Animacion de flujo de camiones — puntos animados moviendose por las rutas en tiempo real
- Comparacion side-by-side — pantalla dividida mostrando caos vs hub simultaneamente
- Modelo multi-hub — evaluar ubicaciones alternativas de Hub o hubs multiples
Observatorio de Datos y Analisis SAS — Sprint 0 MVP