01 El reto
Tres preguntas,un mapa.
Una empresa de transporte intermunicipal necesita un sistema de software para gestionar sus buses y parqueaderos dentro de los límites de Cundinamarca, Colombia. Diseñamos un sistema de información geográfica sobre PostGIS y el mapa dinámico de OpenStreetMap, documentado con el modelo de vistas arquitectónicas 4+1, y lo entregamos como sistema web y como app móvil en Cordova.
a
Disponibilidad de cupos
“¿Cuántos cupos libres hay ahora en cada terminal?”
Cada llegada abre un parking_stay; cada salida lo cierra. v_parking_availability compara las estadías abiertas con la capacidad máxima de cada parqueadero, y un trigger bloquea el parqueadero para que nunca se sobrepase.
b
Ubicación de buses
“¿Dónde está el bus CB-127?”
No se necesita GPS: el bus se ubica en el parqueadero de su estadía abierta. Mientras un viaje está en ruta, PostGIS estima su posición sobre el trayecto con ST_LineInterpolatePoint según el tiempo transcurrido.
c
Puestos por bus
“¿Quedan puestos en el de las 13:05 a Ubaté?”
Cada ticket guarda un número de puesto de un viaje. Puestos disponibles = capacidad del bus − tiquetes vendidos. La base de datos rechaza puestos duplicados, puestos inexistentes y ventas después de la salida.
#RequisitoCómo se resuelveDónde
R1SIG con PostGIS + OpenStreetMapSupabase (PostgreSQL 17 + PostGIS) con geometrías SRID 4326; Leaflet dibuja los mosaicos de OSM.database/ · app/
R2Modelo de vistas 4+1Vistas de escenarios, lógica, de procesos, de desarrollo y física, con diagramas.§03 · docs/ARCHITECTURE.md
R3Diseño de la base de datos9 tablas, 6 vistas, índices espaciales GiST, triggers y funciones RPC.§04 · 01–06 *.sql
R4Solo dentro de CundinamarcaPolígonos del departamento + Bogotá D.C. desde OSM; un trigger con ST_Covers rechaza cualquier parqueadero por fuera.02_functions.sql
R5Ubicación del bus por parqueaderoparking_stay abierta → ubicación; no requiere rastreo en tiempo real.v_bus_location
R6Datos del bus: origen, destino, horas, permanenciatrip guarda origen, destino, hora de salida, hora de llegada y tiempo de permanencia en el parqueadero.Registrar → Nuevo viaje
R7El administrador registra llegadas y salidasapi_register_arrival / api_register_departure, solo para su propio parqueadero.Pestaña Registrar
R8Mapa: ubicación, cupos, salidas, horarios de conductoresAnillos de ocupación, buses parqueados con su próxima salida y turnos de servicio de conductores por terminal.Terminales · Conductores
R9App móvil con CordovaEl mismo código empaquetado con Cordova + plugin de geolocalización.§06 · mobile/
R10GeocodificaciónGeocodificación directa/inversa con Nominatim + KNN de PostGIS para la “terminal más cercana”.api_nearest_lots