Documentation Index
Fetch the complete documentation index at: https://mintlify.com/danitocsc/transporte-unrc-web-public/llms.txt
Use this file to discover all available pages before exploring further.
PublicStopsMap es el componente de mapa interactivo de la vista pública. Utiliza MapLibre GL JS (no React-Leaflet) para renderizar tiles vectoriales de CartoDB Voyager, las polilíneas de cada ruta piloto, marcadores de paradas con estilos diferenciados y la posición GPS del usuario con una línea punteada hacia la parada más cercana. Al ser un componente 'use client' que accede a window y al Canvas de WebGL, siempre debe importarse con { ssr: false }.
El mapa se inicializa una sola vez en el
useEffect de montado. Los marcadores de paradas se vuelven a crear completos cada vez que cambian stops, nearestStopId o selectedStopId, mediante el callback drawStops memoizado con useCallback.Interfaces exportadas
Estas dos interfaces son exportadas desdePublicStopsMap.tsx y reutilizadas en PublicMapPage.tsx y los datos del servidor.
PublicStop
Identificador único de la parada. Usado como clave React, para comparaciones de cercanía (
nearestStopId) y para el lookup de la parada seleccionada.Nombre legible de la parada que se muestra en el panel lateral y en el popup del mapa.
Latitud decimal de la parada (WGS 84). Combinada con
lng como [lat, lng] en los cálculos Haversine.Longitud decimal de la parada (WGS 84). MapLibre GL espera coordenadas en formato
[lng, lat], por lo que el componente invierte el orden al crear los marcadores.ID de la ruta a la que pertenece esta parada. Usado para colorear el ícono SVG del marcador con el color de la ruta correspondiente.
Turno de servicio:
'Matutino', 'Intermedio' o 'Vespertino'. Se muestra en el popup del marcador.Cadena de texto legible con los días de operación de la parada (por ejemplo,
"Lunes a Viernes"). Se muestra en el popup y en el panel lateral.PublicRoute
Identificador único de la ruta. Ejemplos reales:
'route-la-mesa-unrc-001', 'route-centro-unrc-001'.Nombre legible de la ruta para el popup al hacer clic en la polilínea.
Descripción corta de la ruta. Si se proporciona, los primeros 80 caracteres se muestran en el popup de la polilínea.
Color hexadecimal de la polilínea y de los marcadores de paradas de esta ruta (p.ej.
'#e11d48').Arreglo de coordenadas
[lat, lng] que definen la trayectoria de la ruta. El componente las invierte a [lng, lat] al construir el LineString GeoJSON requerido por MapLibre GL.Props del componente
Paradas a renderizar. Puede ser la lista completa o un subconjunto ya filtrado por ruta (el filtrado lo hace
PublicMapPage antes de pasar esta prop).Rutas cuyas polilíneas se dibujan en el mapa. Se procesan una sola vez en el evento
load del mapa.Coordenadas GPS del usuario
[lat, lng]. Si se proporciona, se crea un marcador azul y, si también hay una parada más cercana, se traza una línea punteada hasta ella y el mapa hace zoom para encuadrar ambos puntos.ID de la parada más cercana. Determina cuál marcador recibe el estilo azul
#0ea5e9 con tamaño 36 px.Callback invocado cuando el usuario hace clic en el elemento HTML del marcador. Recibe el objeto
PublicStop completo. En PublicMapPage está conectado a setSelectedStop.ID de la parada actualmente seleccionada. Determina cuál marcador recibe el estilo granate
#7A003C con tamaño 36 px.Tile provider y estilo del mapa
El mapa usa un estilo MapLibre GL con tiles raster de CartoDB Voyager para una apariencia limpia y legible en el contexto universitario:[-116.94, 32.47] y zoom 12.
Marcador de la UNRC
Al inicializar el mapa se añade un marcador fijo en las coordenadas de la universidad:"UNRC Unidad Tijuana — Destino del servicio".
Estilos de marcadores de paradas
La funcióncreateStopElement construye el elemento HTML del marcador dinámicamente. Los parámetros visuales se calculan en drawStops según el estado de la parada:
| Estado | Color de fondo (bg) | Borde (border) | Tamaño (size) |
|---|---|---|---|
| Parada más cercana | #0ea5e9 (azul) | #fff | 36 px |
| Parada seleccionada | #7A003C (granate) | #fff | 36 px |
| Parada regular | #374151 (gris oscuro) | #9ca3af | 28 px |
Popup con el nombre de la parada, turno y días de servicio. El evento click en el elemento HTML llama a onStopClick(stop) y detiene la propagación.
Polilíneas de rutas
Las rutas se dibujan una sola vez en el eventoload del mapa como capas de tipo line en MapLibre GL:
Marcador de ubicación del usuario y línea a la parada más cercana
CuandouserLocation cambia, el componente:
- Elimina el marcador de usuario anterior (si existe).
- Elimina la capa y fuente
'nearest-line'(si existen). - Crea un nuevo marcador con un círculo azul sólido de 18 px con popup
"Tu ubicación". - Si existe una parada más cercana, dibuja una línea punteada azul (
#0ea5e9,line-dasharray: [6, 4]) entre el usuario y esa parada. - Llama a
map.fitBoundspara encuadrar ambos puntos con 60 px de padding.
Si el estilo del mapa aún no ha terminado de cargar cuando
userLocation cambia, la línea se añade dentro del listener map.on('load', ...) para garantizar que las fuentes y capas estén disponibles.Importación correcta
Por requerir acceso al DOM y a WebGL, este componente nunca debe importarse directamente en un módulo conssr: true. La forma canónica usada en PublicMapPage: