Sistema de Visualización de Mapas

Arquitectura de visualización de eventos con ventanas de tiempo usando Leaflet, deck.gl y WebGL para renderizar millones de eventos con superposiciones de planos y geofencing.

Última actualización: 2025-02-18

Sistema de Visualización de Mapas

El sistema de mapas de Certexi renderiza millones de eventos eficientemente mediante carga con ventanas de tiempo — el mapa nunca carga todos los eventos a la vez, solo aquellos dentro de la ventana de tiempo actual y los límites del viewport.

Arquitectura

Loading diagram…

Demos Interactivos

Mapa de Calor de Eventos

500 eventos logísticos en el área metropolitana de Monterrey. Filtre por tipo de evento para aislar patrones.

certexi.com/app/geo/heatmap
Loading interactive demo...

Mapa de densidad de puntos — 500 eventos en 5 hubs de almacén con filtrado por tipo.

Línea de Tiempo Animada

Observe 48 horas de eventos logísticos desplegarse en segundos. El control deslizante de línea de tiempo le permite saltar a cualquier momento.

certexi.com/app/geo/timeline
Loading interactive demo...

Reproducción animada de 48 horas — controles de velocidad de 0.5x a 4x.

Principio Fundamental

El mapa NUNCA carga todos los eventos. Solo carga eventos dentro de la ventana de tiempo actual.

Este es el principio de diseño fundamental que permite escalar a millones de registros sin degradación de rendimiento.

Componentes

TimeNavigator

El control principal para carga de datos con presets basados en tiempo:

  • Presets: 1h, 3h, 6h, 12h, 24h, 7d, 30d, 90d, 1y
  • Rango Personalizado: Selector de calendario para análisis ad-hoc
  • Modo en Vivo: Auto-refresco cada 30 segundos
  • Reproducción: Animar a través de ventanas de tiempo para análisis de patrones

Hook useEvents

Gestiona la carga de datos con límites estrictos de memoria:

const { events, clusters, isLoading, totalCount, renderMode } = useEvents({
  timeWindow: { from: '2024-01-01T00:00:00Z', to: '2024-01-01T12:00:00Z' },
  bounds: { minLng: -120, minLat: 20, maxLng: -80, maxLat: 40 },
  enabled: true,
});

Comportamientos clave:

  • Siempre requiere un TimeWindow — rechaza consultas sin límites
  • Aplica debounce a cambios de viewport (300ms)
  • Cancela solicitudes en curso al cambiar parámetros
  • Caché LRU con 5 segmentos, 50MB máximo, TTL de 5 minutos

EventsMap

Mapa renderizado con WebGL con cambio automático de modo:

  • Modo puntos — ScatterplotLayer para < 10k eventos
  • Modo cluster — Marcadores agrupados con etiquetas de conteo
  • Modo mapa de calor — HeatmapLayer acelerado por GPU para datos densos
ℹ️

Cero Marcadores DOM

Todo el renderizado usa capas WebGL de deck.gl. No hay marcadores basados en DOM, lo que significa cero re-renders de React durante operaciones de pan y zoom.

Modos de Respuesta del Servidor

La API selecciona automáticamente el formato de respuesta óptimo:

Rango de TiempoConteo de EventosModo de Respuesta
< 1 día< 10kEventos crudos
< 1 día> 10kClusters espaciales
1-7 díasCualquieraCubetas por hora
7-30 díasCualquieraCubetas diarias
> 30 díasCualquieraCubetas semanales

Gestión de Memoria

Lado del Cliente

const CACHE_CONFIG = {
  maxSlices: 5,
  maxSizeBytes: 50 * 1024 * 1024, // 50MB
  sliceTtlMs: 5 * 60 * 1000,      // 5 minutes
};

Cuando se carga un nuevo segmento, la caché LRU desaloja el segmento usado menos recientemente. Todas las solicitudes pendientes se cancelan y los temporizadores se limpian al desmontar el componente.

Lado del Servidor

La API nunca devuelve datos sin límites. Para despliegues en producción, los índices espaciales PostGIS permiten consultas eficientes de tiempo + espacio:

CREATE INDEX idx_events_time_geo ON events (timestamp, location)
  WHERE timestamp > NOW() - INTERVAL '7 days';

Objetivos de Rendimiento

EscenarioObjetivoEstado
10k eventos en vista< 100ms renderizado~50ms
50k eventos en vista< 200ms renderizado~150ms
100k eventos (agrupados)< 300ms renderizado~200ms
1M eventos (ventana de tiempo)< 500ms consulta~300ms

Planos de Planta y Geofencing

Para escenarios de almacén interior, el sistema de mapas soporta superposiciones de planos de planta con geocercas basadas en polígonos. Los slots y zonas se definen como polígonos sobre imágenes de planos de planta cargados usando coordenadas locales del almacén (x, y) en lugar de GPS.

Futuro: Tiles Vectoriales

Para conjuntos de datos que excedan 1M de eventos, la arquitectura soporta MVT (Mapbox Vector Tiles):

GET /api/events/tiles/{z}/{x}/{y}.mvt?from=2024-01-01&to=2024-01-02

Los tiles están pre-agrupados por nivel de zoom y son cacheables en la capa CDN.

Relacionado