Sistema de mapeo interactivo para la Universidad Catolica del Norte (UCN) - Campus Coquimbo, que permite la navegacion y busqueda de ubicaciones dentro del campus universitario mediante Progressive Web App (PWA).
Elige una de las siguientes opciones según tu sistema operativo:
Opción A: Docker (Recomendado para Windows/Mac)
- Docker Desktop (Incluye Docker Compose)
- En Windows: Asegúrate de tener WSL 2 activado.
Opción B: Podman (Recomendado para Linux)
- Podman 4.x o superior
- Podman Compose
-
Clonar repositorio
git clone https://github.com/esteban-escudero/InteractiveMapUCN.git cd InteractiveMapUCN -
Configurar variables de entorno
cp .env.example .env # El archivo .env ya viene preconfigurado para desarrollo -
Iniciar servicios
Si usas Docker:
# Opción recomendada para desarrollo (con hot-reload y correcciones de entorno) docker compose -f compose.yaml -f compose.dev.yaml up -dSi usas Podman:
podman compose up -d
# Docker
docker compose ps
# Podman
podman ps| Servicio | URL | Descripcion |
|---|---|---|
| Frontend | http://localhost:3000 | Aplicacion web (Mapa) |
| Backend | http://localhost:5000 | API REST |
| Database | localhost:5433 | PostgreSQL + PostGIS |
Para Docker:
# Ver logs en tiempo real
docker compose logs -f
# Detener servicios
docker compose down
# Reiniciar todo desde cero (útil si hay errores)
docker compose down -v
docker compose -f compose.yaml -f compose.dev.yaml up -d --force-recreatePara Podman:
# Ver logs
podman compose logs -f
# Detener servicios
podman compose downInteractiveMapUCN es una Progressive Web App (PWA) de tipo Sistema de Información Geográfica (SIG/GIS) Web diseñada para facilitar la orientación y navegación dentro del campus Coquimbo de la UCN. Los usuarios podrán acceder directamente desde su navegador web sin necesidad de instalación de aplicaciones nativas.
Aplicación nativa: se refiere a una app que está desarrollada específicamente para un sistema operativo o plataforma en particular, usando sus lenguajes y herramientas propias. ¿Qué la hace "nativa"?:
- Se instala directamente en el dispositivo.
- Accede de forma directa al hardware (cámara, GPS, sensores, etc.).
- Tiene mejor rendimiento y una experiencia de usuario más fluida.
- Sigue las guías visuales y de comportamiento del sistema operativo.
- Categoría: Sistema de Información Geográfica (SIG/GIS) Web
- Arquitectura: Progressive Web App (PWA) Full-Stack
- PWA (Progressive Web App): Aplicación web que utiliza tecnologías web modernas para ofrecer una experiencia similar a una aplicación nativa, incluyendo instalación, funcionamiento offline y notificaciones push.
- Full-Stack: Arquitectura que incluye tanto el frontend (interfaz de usuario) como el backend (servidor y base de datos) desarrollados de manera integrada.
- Acceso Universal: No requiere descarga desde tiendas de aplicaciones, accesible directamente desde cualquier navegador web
- Multiplataforma: Funciona en iOS, Android, Windows y macOS sin desarrollo separado
- Actualización Simplificada: Las actualizaciones se despliegan en el servidor, los usuarios siempre tienen la versión más reciente
- Bajo Costo de Desarrollo: Un solo código base para todas las plataformas
- Soporte Offline: Capacidad de funcionar con conexión limitada mediante Service Workers
- Instalación Directa: Los usuarios pueden "instalar" la PWA en su pantalla de inicio
- Optimización para Campus: Ideal para entorno educativo con múltiples dispositivos y usuarios temporales
- Menor Barrera de Entrada: Estudiantes y visitantes pueden acceder inmediatamente sin descargas
- Dominio: Educación Superior / Campus Universitario
- Campus: Coquimbo, Chile
- Acceso: Navegador Web
- Complejidad: Medio-Alto
- Orientación en campus universitario
- Búsqueda de ubicaciones (edificios, salas, servicios)
- Geolocalización en tiempo real
- Cálculo de rutas inteligentes con dos perfiles (peatonal y accesible)
- Navegación asistida desde ubicación actual
- Gestión administrativa de edificios, salas y rutas
- Acceso público sin autenticación para usuarios
- Mapa Interactivo: Visualización del campus usando Leaflet con capas personalizadas
- PWA: Funciona como app nativa, instalable, con soporte offline
- Búsqueda Inteligente: Encuentra edificios y salas por nombre con autocompletado
- Geolocalización GPS: Muestra tu ubicación actual en el mapa con marcador animado
- Navegación desde Mi Ubicación: Calcula rutas desde tu posición actual al destino
- Cálculo de Rutas Inteligente: 2 perfiles de rutas con algoritmo de Dijkstra
- Peatonal: Ruta estándar para caminar
- Accesible: Adaptada para personas con movilidad reducida (evita obstáculos/escaleras)
- Colores por Categoría: Edificios coloreados según su tipo (académico, administrativo, servicios, etc.)
- Navegación por URL: Permite compartir rutas directas mediante enlaces (ej:
/rutas/G5-35) - Modo Oscuro: Interfaz adaptable para mayor comodidad
- Diseño Responsive: Optimizado para móviles y tablets
- Sistema de Autenticación: Login seguro con JWT
- Gestión de Edificios: CRUD completo con soporte para polígonos y puntos
- Estadísticas: Visualización rápida del conteo de salas y planos registrados
- Gestión de Salas: Administración de salas por edificio con diseño de grid 3 columnas
- Gestión de Imágenes: Subida y administración de planos por edificio y piso
- Análisis de Proximidad: Herramientas para analizar distancias entre edificios y rutas
- Análisis Espacial: Cálculo de rutas óptimas y análisis geoespacial avanzado
- Gestión de Rutas: Creación y edición de rutas con múltiples segmentos (polylines)
- Gestión de Usuarios: Administración de cuentas de administradores
- Panel de Control: Vista completa de edificios, rutas y estadísticas
- Material Icons: Interfaz moderna con iconos de Material Design
La elección de cada componente del stack se basó en el equilibrio entre rendimiento, escalabilidad y soporte para datos geoespaciales.
| Tecnología | Justificación Técnica | Alternativas Consideradas | ¿Por qué no la alternativa? |
|---|---|---|---|
| Node.js + Express | Alto rendimiento en I/O (Input / Output (Entrada / Salida)) asíncrono para geolocalización en tiempo real y consistencia de lenguaje (Full-stack JS). Node.js: Entorno de ejecución para JavaScript del lado del servidor, basado en el motor V8 de Chrome. Express: Framework minimalista para Node.js que simplifica la creación de APIs y aplicaciones web. | Python (Django/FastAPI), PHP (Laravel) | Python es excelente pero menos ágil para prototipado rápido en este contexto; PHP tiene menor rendimiento en concurrencia masiva de sockets/geolocalización. |
| PostgreSQL + PostGIS | Estándar de la industria para SIG. Soporta tipos de datos espaciales nativos y topología compleja. PostgreSQL: Sistema de gestión de bases de datos relacional de código abierto. PostGIS: Extensión espacial que añade soporte para objetos geográficos a PostgreSQL. | MongoDB, MySQL | MongoDB es bueno para documentos pero carece de la precisión y funciones de análisis topológico de PostGIS; MySQL tiene soporte espacial limitado en comparación. |
| Turf.js | Permite realizar cálculos geométricos (distancias, áreas, buffers) de forma nativa en JS, compartiendo lógica entre Front y Back. Turf.js: Librería JavaScript para análisis espacial que funciona tanto en navegador como en Node.js. | JSTS, GDAL | JSTS es una traducción compleja de Java; GDAL requiere bindings nativos pesados que complican el despliegue en contenedores ligeros. |
| JWT (Auth) | Autenticación stateless ideal para PWAs y escalabilidad sin sesiones en servidor. JWT (JSON Web Token): Token de autenticación estándar que permite transmitir información de forma segura entre cliente y servidor como un objeto JSON codificado. Objeto JSON: Un objeto JSON es una colección de pares clave:valor que representa datos estructurados de forma legible para humanos y máquinas, encerrado entre llaves {} y usando comas para separar los pares clave-valor, siendo fundamental para el intercambio de datos entre sistemas y aplicaciones web. Es un formato ligero, independiente del lenguaje, que se basa en la sintaxis de los objetos de JavaScript, permitiendo anidar otros objetos o listas (arrays) dentro de él. | Cookies/Sessions, OAuth2 | Las sesiones requieren persistencia en servidor; OAuth2 fue descartado por añadir complejidad innecesaria para un sistema de admin único. |
| Tecnología | Justificación Técnica | Alternativas Consideradas | ¿Por qué no la alternativa? |
|---|---|---|---|
| React 18 | Arquitectura basada en componentes que facilita la sincronización del estado del mapa con los paneles de información. Biblioteca JavaScript para construir interfaces de usuario basada en componentes reutilizables, desarrollada por Facebook. | Vue.js, Angular | Vue es similar, pero React ofrece un ecosistema más maduro para librerías de mapas (React-Leaflet); Angular es demasiado pesado para una PWA enfocada en móviles. |
| Leaflet | Librería ligera (38kb), de código abierto y optimizada para rendimiento móvil. Librería JavaScript de código abierto para mapas interactivos compatible con móviles. | Google Maps API, OpenLayers | Google Maps es privativo y de pago; OpenLayers tiene una curva de aprendizaje muy pronunciada y un peso excesivo para dispositivos de gama baja. |
| PWA (Workbox) | Permite instalación y funcionamiento offline, esencial para navegación en zonas de campus con baja señal. Conjunto de librerías y herramientas de Google para facilitar el desarrollo de Service Workers y capacidades offline en PWAs. | App Nativa (Swift/Kotlin), Flutter | Una app nativa requiere descarga desde tiendas y mayor costo de desarrollo; la PWA ofrece acceso instantáneo vía URL. |
| Tecnología | Justificación Técnica | Alternativas Consideradas | ¿Por qué no la alternativa? |
|---|---|---|---|
| Nginx | Excelente manejando conexiones concurrentes y actuando como terminación SSL/Reverse Proxy. Servidor web de alto rendimiento que también funciona como proxy inverso (recibe las solicitudes del cliente y las redirige a los servidores internos, ocultando la infraestructura real), balanceador de carga (distribuye el tráfico entre varios servidores para mejorar el rendimiento y evitar sobrecargas) y servidor de caché (almacena respuestas frecuentes para reducir el tiempo de respuesta y el consumo de recursos del backend). | Apache, Traefik | Apache consume más recursos por conexión; Traefik es potente pero Nginx es el estándar más documentado para este stack. |
| Docker | Garantiza que el sistema funcione igual en desarrollo y producción ("Write once, run anywhere"). Plataforma de contenedores que permite empaquetar aplicaciones y sus dependencias en unidades estandarizadas para ejecución consistente en cualquier entorno. | Despliegue Manual, Heroku | El despliegue manual varía entre servidores; Heroku es de pago y limita la configuración de PostGIS a bajo nivel. |
El sistema sigue una arquitectura desacoplada para separar responsabilidades y facilitar el mantenimiento.
graph TD
User["Usuario / Admin"] -->|HTTPS| Nginx["Nginx Reverse Proxy"]
Nginx -->|Static Assets| Frontend["Frontend React PWA"]
Nginx -->|/api| Backend["Backend Node.js Express"]
Backend -->|SQL / Geo Queries| DB[("PostgreSQL + PostGIS")]
Backend -->|Read/Write| FS["File System<br/>(Images)"]
Explicación del Diagrama de Arquitectura:
Este diagrama representa la arquitectura desacoplada del sistema Mapa Interactivo UCN:
-
Usuario/Admin → Nginx Reverse Proxy:
- Los usuarios y administradores acceden al sistema mediante HTTPS
- Nginx actúa como puerta de entrada única para todas las solicitudes
-
Nginx → Frontend React PWA:
- Las solicitudes para archivos estáticos (HTML, CSS, JS, imágenes) son servidas directamente por el frontend
- El frontend es una Progressive Web App (PWA) construida con React
-
Nginx → Backend Node.js Express:
- Las solicitudes que comienzan con
/apison redirigidas al backend - El backend está construido con Node.js y Express
- Las solicitudes que comienzan con
-
Backend → PostgreSQL + PostGIS:
- El backend realiza consultas SQL y consultas geoespaciales a la base de datos
- PostgreSQL con la extensión PostGIS almacena todos los datos espaciales
-
Backend → File System (Images):
- El backend también maneja la lectura/escritura de archivos de imágenes en el sistema de archivos
- Esto incluye planos de edificios y otras imágenes estáticas
Ventajas de esta arquitectura:
- Separación clara de responsabilidades: Cada componente tiene un propósito específico
- Escalabilidad: Cada capa puede escalarse independientemente
- Seguridad: Nginx actúa como firewall de aplicación
- Mantenibilidad: Cambios en un componente no afectan necesariamente a los otros
MVC (Modelo-Vista-Controlador): Patrón de arquitectura de software que separa la lógica de negocio (Model), la interfaz de usuario (Vista) y el control de flujo (Controlador).
Implementa una división en capas para aislar la lógica de negocio del acceso a datos:
- Routes Layer: Define los endpoints y aplica middlewares (como validación de JWT). Endpoints: URLs específicas que responden a solicitudes HTTP en una API. Middlewares: Funciones intermedias que procesan solicitudes antes de que lleguen al controlador final.
- Controller Layer: Maneja la comunicación HTTP y formatea las respuestas. Controller: Componente que recibe solicitudes HTTP, interactúa con los servicios y devuelve respuestas.
- Service Layer: Contiene la lógica de negocio pura y algoritmos complejos (e.g., Dijkstra). Service Layer: Capa que encapsula la lógica de negocio independiente de la API y la base de datos.
- Data Access Layer (Models): Interactúa directamente con PostgreSQL/PostGIS. Models: Representaciones de las entidades de negocio y su interacción con la base de datos.
Estructurado para una alta interactividad:
- Context Providers: Gestión de estado global (Autenticación, Mapa). Context Providers: Mecanismo de React para compartir datos entre componentes sin pasar props manualmente.
- Custom Hooks: Encapsulan la lógica de geolocalización y cálculos (
useMap,useRoute). Custom Hooks: Funciones personalizadas de React que encapsulan y reutilizan lógica de estado y efectos. - PWA Core: Service Workers para soporte offline y manifiesto para instalación. Service Workers: Scripts que se ejecutan en segundo plano para manejar solicitudes de red y almacenamiento en caché. Manifiesto: Archivo JSON que describe la PWA (nombre, iconos, colores, etc.) para instalación.
El motor PostgreSQL + PostGIS es la pieza central para el manejo de datos espaciales con SRID 4326 (WGS 84).
SRID 4326: Identificador del Sistema de Referencia Espacial WGS 84, utilizado por GPS y sistemas de mapeo global.
erDiagram
edificio ||--o{ plano : "posee"
edificio ||--o{ sala : "contiene"
administrador ||--o{ refresh_tokens : "gestiona"
ruta {
GEOMETRY geometria_ruta
VARCHAR tipo_ruta
}
edificio {
GEOMETRY ubicacion
VARCHAR tipo
}
Explicación del Diagrama ER (Entity-Relationship):
Este diagrama representa las principales entidades y sus relaciones en la base de datos:
-
edificio (entidad):
- Contiene los edificios del campus
- Atributos:
ubicacion(GEOMETRY - Polygon),tipo(VARCHAR - tipo de edificio) - Relaciones:
||--o{ plano: Un edificio puede tener cero o muchos planos||--o{ sala: Un edificio contiene cero o muchas salas
-
plano (entidad):
- Almacena los planos/pisos de cada edificio
- Relación:
edificio ||--o{ plano(un edificio posee múltiples planos)
-
sala (entidad):
- Representa las salas, oficinas y espacios dentro de los edificios
- Relación:
edificio ||--o{ sala(un edificio contiene múltiples salas)
-
ruta (entidad):
- Almacena los segmentos de rutas para navegación
- Atributos:
geometria_ruta(GEOMETRY - LineString),tipo_ruta(VARCHAR - peatonal/accesible)
-
administrador (entidad):
- Contiene las cuentas de administradores del sistema
- Relación:
||--o{ refresh_tokens(un administrador gestiona múltiples refresh tokens)
-
refresh_tokens (entidad):
- Almacena los tokens de refresco para la autenticación JWT
- Relación:
administrador ||--o{ refresh_tokens(gestión de tokens por administrador)
| Tabla | Tipo Geometría | Descripción |
|---|---|---|
edificio |
Polygon |
Contornos de estructuras físicas y metadatos. |
| Polygon: Tipo de dato espacial que representa un área cerrada definida por una serie de puntos. | ||
sala |
Point |
Ubicación exacta de oficinas, laboratorios y servicios. |
| Point: Tipo de dato espacial que representa una ubicación específica con coordenadas X e Y (o latitud/longitud). | ||
ruta |
LineString |
Segmentos de red para navegación peatonal y accesible. |
| LineString: Tipo de dato espacial que representa una secuencia de puntos conectados formando una línea. | ||
plano |
N/A | Gestión de imágenes por piso/edificio. |
-
ST_Distance: Cálculo de distancias reales en metros. ST_Distance: Función PostGIS que calcula la distancia más corta entre dos geometrías en unidades de medida específicas. -
ST_Contains: Determinación de puntos dentro de edificios. ST_Contains: Función PostGIS que determina si una geometría contiene completamente a otra. -
ST_AsGeoJSON: Conversión nativa para visualización en Leaflet. ST_AsGeoJSON: Función PostGIS que convierte geometrías al formato GeoJSON para uso en aplicaciones web.
El proyecto podría significar un impacto tangible en la comunidad universitaria:
- Inclusión Real: Implementación efectiva de rutas para movilidad reducida.
- Modernización: Primer SIG web especializado para el Campus Coquimbo.
- Rendimiento: Tiempos de cálculo de ruta menores a 200ms mediante optimización de grafos.
- Disponibilidad: Acceso público sin autenticación para usuarios.
- Flexibilidad: Interfaz responsive para dispositivos móviles y tablets.
- Escalabilidad: Podría ser implementado en otros campus universitarios.
El cálculo de rutas es el núcleo tecnológico del proyecto. Se utiliza el algoritmo de Dijkstra sobre un grafo dinámico generado a partir de datos espaciales.
- Dijkstra: Algoritmo clásico para encontrar el camino más corto entre nodos en un grafo con pesos no negativos.
- Grafo: Estructura de datos compuesta por nodos (vértices) conectados por aristas con pesos asociados.
flowchart LR
A[Inicio] --> B{"Validar Puntos"}
B -->|Válido| D["Obtener Rutas DB"]
D --> E["Construir Grafo"]
E --> F["Filtrar Tipo (Peatonal/Accesible)"]
F --> G["Ejecutar Dijkstra"]
G --> H["Generar GeoJSON"]
H --> I[Fin]
Explicación del Diagrama de Flujo de Navegación:
Este diagrama describe el proceso completo para calcular una ruta entre dos puntos:
-
Inicio: El proceso comienza cuando un usuario solicita calcular una ruta
-
Validar Puntos:
- Se verifica que ambos puntos (origen y destino) sean válidos
- Se comprueba que estén dentro del campus
- Si no son válidos, el proceso termina con un error
-
Obtener Rutas DB:
- Se consulta la base de datos para obtener todos los segmentos de ruta disponibles
- Esto incluye rutas peatonales y accesibles
- Se filtran por área geográfica relevante
-
Construir Grafo:
- Los segmentos de ruta se convierten en un grafo matemático
- Nodos = intersecciones/puntos de conexión
- Aristas = segmentos de ruta con peso = distancia
-
Filtrar Tipo:
- Según la selección del usuario, se filtra por:
- Peatonal: Todas las rutas disponibles
- Accesible: Solo rutas marcadas como accesibles (sin escaleras, con rampas)
- Según la selección del usuario, se filtra por:
-
Ejecutar Dijkstra:
- Se aplica el algoritmo de Dijkstra al grafo filtrado
- Encuentra el camino más corto entre origen y destino
- Considera pesos (distancias) para optimización
-
Generar GeoJSON:
- La ruta calculada se convierte al formato GeoJSON
- GeoJSON es estándar para representar datos geográficos en la web
- Incluye geometría LineString y metadatos
-
Fin:
- La ruta se devuelve al frontend para visualización
- Se muestra en el mapa interactivo de Leaflet
El acceso administrativo está protegido mediante un flujo de autenticación robusto basado en JWT y validación de sesiones.
sequenceDiagram
participant Admin
participant Frontend
participant API (Node.js)
participant DB (PostGIS)
Admin->>Frontend: Login Credentials
Frontend->>API: POST /auth/login
API->>DB: Verify & Compare Hash
DB-->>API: Validated
API-->>Frontend: Set JWT Token
Frontend->>Admin: Redirect to Dashboard
Explicación del Diagrama de Secuencia de Autenticación:
Este diagrama muestra el proceso completo de autenticación de un administrador:
-
Admin → Frontend: Login Credentials
- El administrador ingresa sus credenciales (usuario y contraseña) en la interfaz del frontend
-
Frontend → API: POST /auth/login
- El frontend envía las credenciales al backend mediante una solicitud HTTP POST al endpoint
/auth/login - Las credenciales se envían de forma segura (HTTPS)
- El frontend envía las credenciales al backend mediante una solicitud HTTP POST al endpoint
-
API → DB: Verify & Compare Hash
- El backend (Node.js + Express) recibe las credenciales
- Consulta la base de datos para encontrar el usuario
- Compara el hash de la contraseña proporcionada con el hash almacenado
- Hash: Función criptográfica que transforma datos de entrada en una cadena de longitud fija, ideal para almacenar contraseñas de forma segura.
-
DB → API: Validated
- La base de datos responde indicando si las credenciales son válidas
- Si son válidas, procede con la generación del token
-
API → Frontend: Set JWT Token
- El backend genera un token JWT (JSON Web Token) firmado
- El token contiene información del usuario y tiempo de expiración
- Se envía al frontend en la respuesta HTTP
-
Frontend → Admin: Redirect to Dashboard
- El frontend almacena el token JWT de forma segura (HttpOnly cookie o localStorage)
- Redirige al administrador al panel de control/dashboard
- En solicitudes futuras, el token se incluye en el header Authorization
Este diagrama ilustra cómo el sistema interactúa con el usuario para proporcionar navegación en tiempo real:
sequenceDiagram
autonumber
actor User as Usuario
participant Frontend as Frontend (React PWA)
participant API as Backend (Node.js)
participant DB as Base de Datos (PostGIS)
User->>Frontend: Selecciona Origen y Destino
User->>Frontend: Elige tipo de ruta (Peatonal/Accesible)
Frontend->>API: POST /api/routes/calculate
Note over API: Carga todas las rutas de la DB
API->>DB: query: SELECT * FROM rutas
DB-->>API: Listado de geometrías (LineStrings)
rect rgba(0, 0, 0, 0)
Note over API: Procesamiento del Grafo
API->>API: Construir Grafo desde geometrías
API->>API: Fusionar nodos cercanos (Intersecciones)
API->>API: Identificar nodos más cercanos a origen/destino
API->>API: Ejecutar Algoritmo de Dijkstra
end
API-->>Frontend: GeoJSON (Ruta, Distancia, Tiempo)
Frontend->>Frontend: Renderiza ruta con Leaflet
Frontend-->>User: Visualiza el camino óptimo en el mapa
Explicación del Diagrama de Secuencia de Búsqueda de Rutas:
- Selección de Puntos: El usuario interactúa con el mapa o el buscador para definir dónde empieza y termina su recorrido, indicando además su preferencia de accesibilidad.
- Solicitud de Cálculo: El frontend envía las coordenadas y el perfil elegido al backend mediante un endpoint dedicado.
- Obtención de Datos: El servidor recupera todos los segmentos de ruta almacenados en PostGIS que coinciden con el tipo de navegación solicitado.
- Construcción del Grafo: Las geometrías (LineStrings) se transforman en una estructura de red (grafo). Se realiza un proceso de "fusión" para asegurar que los segmentos que se tocan o están muy cerca (intersecciones) queden conectados correctamente.
- Optimización con Dijkstra: Se identifica el punto de la red más cercano al origen y al destino del usuario, y se aplica el algoritmo para encontrar la ruta con la menor distancia total.
- Respuesta y Visualización: El resultado se envía en formato GeoJSON, que incluye la línea exacta que el usuario debe seguir, junto con la distancia total y el tiempo estimado. El mapa de Leaflet dibuja esta línea automáticamente.
| Término | Descripción |
|---|---|
| PWA (Progressive Web App) | Aplicación web que utiliza tecnologías web modernas para ofrecer una experiencia similar a una aplicación nativa. |
| SIG/GIS (Sistema de Información Geográfica) | Sistema para capturar, almacenar, analizar y gestionar datos referenciados geográficamente. |
| Full-Stack | Desarrollo que abarca tanto el frontend (cliente) como el backend (servidor) de una aplicación. |
| JWT (JSON Web Token) | Estándar abierto para crear tokens de acceso que permiten transmitir información entre partes de forma segura. |
| Leaflet | Librería JavaScript de código abierto para mapas interactivos compatibles con dispositivos móviles. |
| Dijkstra | Algoritmo para encontrar el camino más corto entre nodos en un grafo con pesos no negativos. |
| PostGIS | Extensión espacial para PostgreSQL que añade soporte para objetos geográficos. |
| GeoJSON | Formato estándar para representar estructuras geográficas simples usando JSON. |
| CRUD | Acrónimo de Create, Read, Update, Delete - operaciones básicas de persistencia de datos. |
| Responsive Design | Enfoque de diseño web que hace que las páginas se vean bien en todos los dispositivos. |
| Service Worker | Script que se ejecuta en segundo plano en el navegador, permitiendo funcionalidades offline. |
| Reverse Proxy | Servidor que actúa como intermediario entre clientes y servidores backend. |
| SRID 4326 | Sistema de referencia espacial WGS 84, utilizado por GPS y sistemas de mapeo global. |
| I/O asíncrono | Modelo de programación que no bloquea la ejecución mientras espera operaciones de entrada/salida. |
| API (Application Programming Interface) | Conjunto de reglas y especificaciones que permiten que diferentes aplicaciones se comuniquen entre sí. |
| Estado (State) | Datos que determinan la condición o situación actual de una aplicación en un momento dado. |
| Componente | Unidad independiente y reutilizable de código que define parte de la interfaz de usuario. |
| Container (Docker) | Instancia ejecutable de una imagen de Docker que contiene una aplicación y su entorno de ejecución. |
| HTTP (Hypertext Transfer Protocol) | Protocolo de comunicación utilizado para transferir datos en la web. |
| HTTPS | Versión segura de HTTP que utiliza cifrado SSL/TLS. |
| JSON (JavaScript Object Notation) | Formato ligero de intercambio de datos basado en texto, fácil de leer y escribir para humanos y de parsear y generar para máquinas. |
| API RESTful | Arquitectura de software que utiliza HTTP para crear servicios web escalables y mantenibles. |
| Stateless | Característica de un sistema donde cada solicitud es independiente y no depende de solicitudes anteriores. |
| Middleware | Software que actúa como puente entre diferentes aplicaciones, servicios o componentes. |
| Endpoint | Punto final de comunicación en una API, usualmente una URL específica. |
| Polygon | En geometría, figura plana cerrada formada por segmentos de línea recta conectados. |
| Point | En geometría, ubicación exacta en un espacio definido por coordenadas. |
| LineString | En geometría, secuencia de puntos conectados formando una línea. |
| Grafo | Estructura de datos que consiste en un conjunto de nodos (vértices) conectados por aristas. |
| Algoritmo | Conjunto de instrucciones paso a paso para resolver un problema o realizar una tarea. |
| Hash | Función criptográfica que convierte datos de entrada en una cadena de longitud fija. |
| SSL/TLS | Protocolos de seguridad que proporcionan comunicaciones seguras en una red. |
| CDN (Content Delivery Network) | Red de servidores distribuidos geográficamente que entrega contenido web de forma eficiente. |
| Firewall | Sistema de seguridad que controla el tráfico de red entrante y saliente según reglas establecidas. |
| Rate Limiting | Técnica para controlar la cantidad de solicitudes que un usuario puede hacer en un período de tiempo. |
| Lazy Loading | Técnica de programación que retrasa la carga de objetos o recursos hasta que son necesarios. |
| Gzip | Método de compresión de datos que reduce el tamaño de archivos para transferencia más rápida. |
| Balanceador de Carga | Dispositivo o software que distribuye el tráfico de red entre múltiples servidores. |
| Cache | Almacenamiento temporal de datos para acceso rápido en futuras solicitudes. |
| Índice Espacial | Estructura de datos que optimiza las consultas a datos geográficos en una base de datos. |
| WGS 84 | Sistema geodésico mundial de 1984, estándar utilizado por GPS y sistemas de navegación. |
| Proxy | Un proxy (o servidor proxy) es un intermediario entre tu dispositivo e Internet, actuando como una puerta de enlace que intercepta tus solicitudes, las reenvía a su destino y devuelve la respuesta, ofreciendo beneficios como seguridad, privacidad (ocultando tu IP), control de acceso (filtrando contenido), y mejora del rendimiento mediante el caché. Existen proxies directos (protegen al usuario) y proxies inversos (protegen servidores, balanceando carga). |