knitr::opts_chunk$set(echo = TRUE, comment = NA)
# 1. Cargar librerías
#library(rnaturalearth)     # Para obtener mapas a distintas escalas.
library(mapview)           # Para la visualización interactiva y rápida.
library(leafsync)          # Para la sincronización de múltiples mapas.
library(geoR)
library(readxl)
library(raster)
library(gstat)
library(sf)                # Estándar moderno para datos vectoriales (reemplaza a 'sp').
library(terra)             # Estándar moderno y eficiente para datos ráster (reemplaza a 'raster').
library(leaflet)           # Para la creación de mapas interactivos.
library(ggplot2) 
library(tidyterra) 
library(patchwork)         # Para combinar gráficos
library(RColorBrewer)
library(knitr)
library(kableExtra)
library(dplyr) # Para la función %>% (pipe)
library(lubridate)
library(leaflet.extras)
library(spatstat)

Introducción

La movilidad urbana es un componente esencial para el funcionamiento eficiente de las ciudades, y su gestión adecuada requiere del análisis constante de los eventos que afectan la circulación vehicular. En este contexto, los datos crowdsourcing provenientes de plataformas como Waze se han convertido en una fuente de información valiosa para comprender en tiempo real las dinámicas de tráfico y los incidentes que ocurren en la red vial.

El presente trabajo analiza los eventos reportados por Waze durante el día 26, incluyendo peligros en las vías (PELIGRO), congestión (CONGESTIÓN), accidentes (ACCIDENTE) y cierres de vías (VÍA CERRADA). A través de herramientas de análisis espacial como spatstat y terra, así como la visualización interactiva mediante leaflet, se busca identificar patrones espaciales, zonas críticas y tendencias en la ocurrencia de estos eventos. Este análisis permite obtener una visión integral de los factores que afectan la movilidad urbana y sirve como base para proponer estrategias que contribuyan a mejorar la seguridad vial, optimizar la infraestructura y promover una gestión más eficiente del tráfico.

Marco Teórico

  • Datos Crowdsourcing y Movilidad Urbana El crowdsourcing aplicado a la movilidad urbana consiste en la recopilación de información en tiempo real proporcionada por los propios usuarios de la vía mediante plataformas digitales. Aplicaciones como Waze generan datos de alta frecuencia y amplio alcance, lo que permite identificar incidentes de tráfico, congestiones, peligros o cierres de vías de forma dinámica. Esta información es valiosa para las autoridades, dado que complementa los sistemas tradicionales de monitoreo, ofreciendo mayor cobertura espacial y temporal.

  • Análisis Espacial de Eventos de Tráfico El análisis espacial se refiere al estudio de la distribución geográfica de fenómenos y su relación con el territorio. En el caso de incidentes de tráfico, herramientas como spatstat permiten crear patrones de puntos, estimar densidades y detectar conglomerados espaciales. Por su parte, terra facilita el manejo de datos geográficos raster y vectoriales para evaluar el comportamiento espacial de los eventos.

El uso de estas herramientas posibilita identificar zonas donde ciertos eventos —como accidentes, peligros o congestiones— tienden a concentrarse, lo que sugiere la existencia de factores ambientales, infraestructurales o sociales que influyen en su ocurrencia.

  • Visualización Geográfica Interactiva Las herramientas de visualización interactiva, especialmente leaflet, permiten representar datos espaciales de manera dinámica, facilitando la exploración por parte de usuarios y tomadores de decisiones. Los mapas interactivos permiten identificar patrones visuales y comparar diferentes tipos de eventos superpuestos en un mismo espacio geográfico. Esta capacidad de exploración es fundamental en estudios de movilidad, ya que facilita la comprensión intuitiva de la distribución de incidentes, sus puntos críticos y su relación con la infraestructura vial existente.

  • Gestión del Tráfico y Planeación Urbana La información derivada del análisis espacial y la visualización interactiva es clave para la toma de decisiones en la gestión del tráfico. Conocer dónde se presentan los mayores niveles de congestión, dónde ocurren con frecuencia los accidentes o qué zonas registran más peligros en la vía permite a las autoridades:

    • optimizar rutas alternas,
    • mejorar la infraestructura vial,
    • implementar medidas preventivas,
    • monitorear la movilidad en tiempo real.

El uso de datos crowdsourcing como insumo para estas decisiones contribuye a una movilidad más segura, eficiente y sostenible, alineándose con las tendencias modernas de ciudades inteligentes.

Análisis general

1. Cargue y lectura del dataser

# 1. Se carga el archivo de excel con read_excel
geo_datos = read_excel("/Users/jesusposso/Documents/Maestria/2025-2/SIG/M2U2/Actividad4/Trama_Waze.xlsx")

# 2. Se Define una función dinámica para normalizar la coordenada
# La función toma la coordenada, el número de dígitos deseado (ej. 2 para decenas, 1 para unidades)
normalize_dynamic <- function(coord_vector, desired_digits) {
  # Forzar a numérico y obtener el valor absoluto, ignorando NA/corruptos
  abs_coords <- abs(as.numeric(coord_vector))

  # Calcular el número de dígitos en la parte entera para cada coordenada
  # Utiliza floor(log10(abs_coord)) + 1 para obtener el número de dígitos
  current_digits <- floor(log10(abs_coords)) + 1

  # Calcular el exponente para la división: exponente = dígitos_actuales - dígitos_deseados
  # Usamos pmax para asegurarnos de que el exponente sea al menos 0 (no dividimos por un factor menor a 1)
  exponent <- pmax(0, current_digits - desired_digits)

  # Calcular el factor de división (10 elevado al exponente)
  division_factor <- 10^exponent

  # Aplicar la división: coord / division_factor
  # Si el exponente fue 0 (o la coordenada ya era pequeña), el factor es 1 y el valor no cambia
  return(coord_vector / division_factor)
}

# 3. Aplicar la corrección dinámica al DataFrame
data_dinamico <- geo_datos %>%
  mutate(
    # Longitud: Deseamos 2 dígitos en la parte entera (Decenas, ej. -74)
    longitud_x_corregida = normalize_dynamic(location_x, desired_digits = 2),

    # Latitud: Deseamos 1 dígito en la parte entera (Unidades, ej. 4 o 5)
    longitud_y_corregida = normalize_dynamic(location_y, desired_digits = 1)
  ) %>%

  # Paso B: Aplicar el filtro para quedarnos solo con Latitud <= 4
  # Excluye aquellas coordenadas que son > 4 (que corresponden a otras zonas geográficas)
  filter(longitud_y_corregida > 4 | is.na(longitud_y_corregida))

# 4. Se asegura el formato de fecha en la columna creation_Date con la creacion de la columna fecha y se traduce los tipos de eventos

# Convertir la columna de fechas a formato adecuado
data_dinamico$fecha = as.Date(data_dinamico$creation_Date, format ="%Y-%m-%d %H:%M")
# Cambiar los nombres de los tipos de eventos a español
data_dinamico$tipo_evento <- recode(data_dinamico$type,
                                 "ACCIDENT" = "ACCIDENTE",
                                 "HAZARD" = "PELIGRO",
                                 "JAM" = "CONGESTIÓN",
                                 "ROAD_CLOSED" = "VÍA CERRADA")

# 5. Se grafica del archivo excel todos los registros de latitud y longitud mediante leaflet
leaflet() %>% 
  addTiles() %>% 
  addCircleMarkers(
    lng = data_dinamico$longitud_x_corregida,
    lat = data_dinamico$longitud_y_corregida,
    radius = 0.2,
    color = "black")

1.2. Análisis Temporal de los Eventos

Para el análisis temporal de los eventos, se utilizará el dataset previamente cargado, correspondiente a la información de eventos de Waze del día 26 de septiembre de 2024 del municipio de Chía. El objetivo de esta primera visualización es identificar los tipos de eventos registrados durante dicha fecha y la cantidad total de ocurrencias. Para este proceso se emplea la librería lubridate, luego del correcto cargue y la traducción realizada al dataset.

Este análisis es fundamental para determinar si existe algún patrón temporal que evidencie picos de ocurrencia, los cuales podrían indicar horarios de mayor congestión en el municipio de Chía. Asimismo, se busca identificar eventos de tipo “peligro”, con el fin de reconocer calles o avenidas que puedan requerir mantenimiento en la malla vial. También se pretende verificar la presencia de vías cerradas, lo cual permitiría proponer alternativas para redirigir el tráfico de manera eficiente.

# Convertir la fecha y extraer la hora y el día
fecha_hora = ymd_hms(data_dinamico$creation_Date)
hora = hour(fecha_hora)
dia = day(fecha_hora)

# Agregar la columna de hora a los datos
data_dinamico$hora = hora

# Mostrar la tabla de frecuencia de tipos de eventos
table(data_dinamico$tipo_evento)

  ACCIDENTE  CONGESTIÓN     PELIGRO VÍA CERRADA 
        122        3151         702        1021 



Se evidencia que, durante ese día, se registraron 122 accidentes, 351 reportes de congestiones, 702 alertas de peligros y 1.021 reportes de vías cerradas. Estos eventos se encuentran debidamente categorizados en las cuatro tipologías mencionadas, lo cual garantiza una base de datos suficientemente robusta para llevar a cabo un análisis detallado.

1.3. Distribución de Eventos

En esta sección se presenta un análisis descriptivo de los diferentes tipos de eventos registrados en los datos de Waze. Para ello, se genera una visualización mediante un gráfico de barras, en el cual se representa la frecuencia de cada categoría de evento, incluyendo trancones, peligros, accidentes y cierres de vías.

Este análisis resulta fundamental para identificar qué tipos de eventos se registran con mayor frecuencia y cuáles requieren una atención prioritaria. Asimismo, ofrece una visión general del comportamiento de los reportes realizados por los usuarios, lo cual puede contribuir a la optimización de recursos y a la toma de decisiones en la gestión del tráfico.

# Calcular la frecuencia de cada tipo de evento en Trama_Waze
frecuencia_eventos <- data_dinamico %>%
  group_by(tipo_evento) %>%                 # Agrupar por tipo de evento
  summarise(Frecuencia = n()) %>%     # Contar la frecuencia de cada tipo
  arrange(desc(Frecuencia))           # Ordenar por frecuencia descendente

# Crear un gráfico de barras con ggplot2 usando los datos de Trama_Waze
ggplot(frecuencia_eventos, aes(x = tipo_evento, y = Frecuencia, fill = tipo_evento)) +
  geom_bar(stat = "identity") +
  theme_minimal() +
  labs(title = "Distribución de Tipos de Eventos en Trama Waze", 
       x = "Tipo de Evento", y = "Frecuencia") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +  # Rotar etiquetas para mejor visualización
  scale_fill_brewer(palette = "Set2")  # Utilizar una paleta de colores predefinida



2. Análisis por cada Evento

Se realizará inicialmente una visualización general de los eventos, y posteriormente se llevará a cabo un análisis espacial. Para ello, se generará un mapa de densidad para cada tipo de evento, con el propósito de contrastar sus distribuciones y evaluar si presentan relaciones incluyentes o excluyentes entre sí. Este enfoque permitirá obtener una conclusión detallada sobre la dinámica de los eventos registrados durante ese día en el municipio de Chía.

2.1. Evento Peligro

En este apartado se filtran los eventos de tipo “PELIGRO” registrados específicamente el día 26. El propósito de este proceso es reducir el volumen de información y concentrar el análisis en los incidentes asociados a riesgos viales, permitiendo así un estudio más profundo y detallado de este tipo de eventos.

Este filtrado resulta fundamental para enfocar el análisis en los eventos que representan un potencial peligro en la vía, lo que facilita la identificación de las zonas más críticas y contribuye a una mejor toma de decisiones en la gestión de la seguridad vial.

# Identificar eventos PELIGRO del día 26
pos <- which(data_dinamico$tipo_evento == "PELIGRO" & dia == 26)
peligro26 <- data_dinamico[pos,]

2.1.1 Visualización de Eventos PELIGRO

Una vez filtrados los eventos de tipo PELIGRO, se procede a su visualización en un mapa interactivo empleando la librería leaflet. Esta herramienta permite explorar de manera detallada las ubicaciones exactas de los peligros reportados, representando cada evento sobre el mapa geográfico y agrupando los puntos en clusters para optimizar la legibilidad y evitar la sobresaturación visual.

La interacción con el mapa facilita la identificación de zonas con mayor concentración de eventos, permitiendo reconocer posibles patrones espaciales en la distribución de los peligros. Esto contribuye a un análisis más preciso de las áreas que requieren atención prioritaria en materia de seguridad vial.

# Crear un mapa interactivo con leaflet
m26_peligro <- leaflet() %>% 
  addTiles() %>% 
  addCircleMarkers(
    lng = peligro26$longitud_x_corregida,
    lat = peligro26$longitud_y_corregida,
    clusterOptions = markerClusterOptions(),
    label = peligro26$hora,
    # PARTE CLAVE: Definir el estilo de la etiqueta
    labelOptions = labelOptions(
      noHide = TRUE,          # Hace que la etiqueta sea visible sin necesidad de pasar el mouse
      direction = "center",   # Coloca el texto centrado sobre el marcador
      textOnly = TRUE,        # Asegura que solo se vea el texto
      style = list(
        "color" = "blue",
        "font-size" = "10px",   # Ajusta el tamaño de la fuente si es necesario
        "font-weight" = "bold"
      )
    )
  ) %>%
  addControl(html = "<h3>Mapa de Riesgos</h3>", position = "topleft")

# Mostrar el mapa
m26_peligro

2.1.2 Análisis Espacial de la Distribución de Riesgos

En esta sección se lleva a cabo un análisis espacial de los eventos de tipo PELIGRO registrados el día 26, empleando herramientas especializadas como spatstat y terra. El propósito es examinar la distribución geográfica de los incidentes y generar mapas de calor que permitan identificar las áreas con mayor concentración de riesgos.

Este tipo de análisis espacial resulta fundamental para reconocer patrones de distribución y delimitar zonas de alto riesgo, información que resulta clave para la toma de decisiones en la gestión del tráfico, así como para la planificación urbana y vial orientada a la prevención y mitigación de incidentes.

zona <- owin(xrange = c(-74.04331, -73.9929), yrange = c(4.885736, 4.948562))
# Crear un patrón de puntos espaciales a partir de los eventos VÍA CERRADA
patron_peligros <- ppp(x = peligro26$longitud_x_corregida, y = peligro26$longitud_y_corregida, window = zona)

# Graficar el test de cuadrantes
plot(quadratcount(patron_peligros), main = "Patrón de Puntos y Test de Cuadrantes")

# Superponer los puntos sobre los cuadrantes
points(patron_peligros, col = "red")

# Gráfico independiente: Función K-Estimación
plot(Kest(patron_peligros), main = "Función K-Estimación")

2.1.3 Mapa de densidad Distribución de Riesgos

En esta sección se lleva a cabo un análisis espacial de los eventos de tipo PELIGRO registrados el día 26, empleando herramientas especializadas como spatstat y terra. El propósito es examinar la distribución geográfica de los incidentes y generar mapas de calor que permitan identificar las áreas con mayor concentración de riesgos.

Este tipo de análisis espacial resulta fundamental para reconocer patrones de distribución y delimitar zonas de alto riesgo, información que resulta clave para la toma de decisiones en la gestión del tráfico, así como para la planificación urbana y vial orientada a la prevención y mitigación de incidentes.

# Crear un mapa interactivo con leaflet y addHeatmap
leaflet(peligro26) %>%
  addProviderTiles("OpenStreetMap") %>%  # Añadir la capa base del mapa
  addHeatmap(
    lng = ~longitud_x_corregida, lat = ~longitud_y_corregida,               # Especificar las columnas de longitud y latitud
    intensity = ~hora,                     # Intensidad opcional basada en la hora (o cualquier otra variable)
    blur = 20,                             # Nivel de desenfoque del mapa de calor
    max = 0.08,                            # Ajustar el valor máximo para la intensidad
    radius = 15                            # Radio de cada punto en el mapa de calor
  ) %>%
  addLegend("bottomright",                 # Añadir leyenda
            title = "Mapa de Calor de Riesgos",
            colors = c("blue", "green", "yellow", "red"),
            labels = c("Bajo", "Moderado", "Alto", "Muy Alto"))



2.2. Evento Cierres de Vías

A continuación, se procederá a analizar los eventos de cierre de vías. Este estudio permitirá identificar las zonas donde se registraron restricciones de tránsito, así como evaluar su posible impacto en la movilidad y en la dinámica vehicular del municipio.

# Identificar eventos PELIGRO del día 26
pos <- which(data_dinamico$tipo_evento == "VÍA CERRADA" & dia == 26)
via_cerrada_26 <- data_dinamico[pos,]

2.2.1 Visualización de Eventos Cierres de Vías

En esta sección se presenta un mapa interactivo que visualiza los eventos de cierre de vías (VÍA CERRADA) registrados el día 26. Mediante el uso de la librería leaflet, se representan las ubicaciones de estos eventos mediante marcadores sobre el mapa, permitiendo que el usuario haga clic en cada uno de ellos para consultar información detallada, como la hora del reporte y las coordenadas exactas.

Este mapa interactivo facilita la exploración geográfica de las zonas afectadas por los cierres de vías, constituyendo una herramienta visual de gran valor para la planificación y gestión del tráfico en la ciudad, especialmente en la identificación de puntos críticos y posibles rutas alternativas.

# Crear un mapa interactivo con leaflet
m26_via_cerrada <- leaflet() %>% 
  addTiles() %>% 
  addCircleMarkers(
    lng = via_cerrada_26$longitud_x_corregida,
    lat = via_cerrada_26$longitud_y_corregida,
    clusterOptions = markerClusterOptions(),
    label = via_cerrada_26$hora) %>%
  addControl(html = "<h3>Mapa de Cierre de Vías</h3>", position = "topleft")

# Mostrar el mapa
m26_via_cerrada

2.2.2 Análisis Espacial de la Distribución de Cierres de Vías

Esta sección se enfoca en el análisis espacial de los eventos de cierre de vías, utilizando herramientas especializadas como spatstat y terra. El propósito es examinar la distribución geográfica de los cierres reportados el día 26 y determinar si existen patrones de concentración que permitan comprender mejor su comportamiento espacial.

Este tipo de análisis aporta información valiosa sobre la extensión y localización de las zonas afectadas, lo cual resulta útil para identificar áreas críticas que puedan requerir intervenciones inmediatas, así como para apoyar procesos de planificación vial a mediano y largo plazo.

zona <- owin(xrange = c(-74.04331, -73.9929), yrange = c(4.885736, 4.948562))
# Crear un patrón de puntos espaciales a partir de los eventos VÍA CERRADA
patron_via_cerrada <- ppp(x = via_cerrada_26$longitud_x_corregida, y = via_cerrada_26$longitud_y_corregida, window = zona)

# Graficar el test de cuadrantes
plot(quadratcount(patron_via_cerrada), main = "Patrón de Puntos y Test de Cuadrantes")

# Superponer los puntos sobre los cuadrantes
points(patron_via_cerrada, col = "red")

# Gráfico independiente: Función K-Estimación
plot(Kest(patron_via_cerrada), main = "Función K-Estimación")

2.2.3 Mapa de densidad de la Distribución de Cierres de Vías

En este apartado se genera un segundo mapa de densidad basado en los eventos de cierre de vías (VÍA CERRADA), esta vez con un enfoque más detallado en las áreas de mayor afectación. El mapa resalta las zonas donde se concentra el mayor número de eventos, permitiendo identificar los sectores en los que los cierres de vías ocurren con mayor frecuencia.

El uso de esta visualización es fundamental para comprender la severidad e impacto espacial de los cierres de vías sobre la movilidad urbana, así como para apoyar la toma de decisiones en materia de gestión del tráfico y planificación de rutas alternativas.

# Crear un mapa interactivo con leaflet y addHeatmap
leaflet(via_cerrada_26) %>%
  addProviderTiles("OpenStreetMap") %>%  # Añadir la capa base del mapa
  addHeatmap(
    lng = ~longitud_x_corregida, lat = ~longitud_y_corregida,               # Especificar las columnas de longitud y latitud
    intensity = ~hora,                     # Intensidad opcional basada en la hora (o cualquier otra variable)
    blur = 20,                             # Nivel de desenfoque del mapa de calor
    max = 0.08,                            # Ajustar el valor máximo para la intensidad
    radius = 15                            # Radio de cada punto en el mapa de calor
  ) %>%
  addLegend("bottomright",                 # Añadir leyenda
            title = "Mapa de Calor de Cierres de Vías",
            colors = c("blue", "green", "yellow", "red"),
            labels = c("Bajo", "Moderado", "Alto", "Muy Alto"))



2.3. Evento Accidentes

En esta sección se lleva a cabo un análisis detallado de los eventos de accidentes (ACCIDENTE) registrados el día 26. Para ello, se filtran exclusivamente los reportes correspondientes a esa fecha, con el propósito de examinar su distribución espacial y evaluar su impacto en la movilidad del municipio.

El análisis de accidentes es esencial para identificar zonas de alto riesgo y orientar la implementación de medidas de seguridad vial, como la instalación de señalización preventiva, el reforzamiento del control de tráfico o la mejora de la infraestructura vial en los puntos críticos. Este tipo de información resulta clave para apoyar la toma de decisiones y reducir la ocurrencia de incidentes en el futuro.

# Identificar eventos PELIGRO del día 26
pos <- which(data_dinamico$tipo_evento == "ACCIDENTE" & dia == 26)
accidente_26 <- data_dinamico[pos,]

2.3.1 Visualización de Eventos Accidentes

En esta sección se presenta un mapa interactivo que muestra los eventos de accidentes (ACCIDENTE) registrados el día 26. Al igual que en las visualizaciones anteriores, se utiliza la librería leaflet para representar sobre el mapa los puntos donde ocurrieron los incidentes, permitiendo que el usuario haga clic en cada marcador para acceder a información detallada de cada accidente.

Este mapa interactivo constituye una herramienta visual útil para comprender la distribución espacial de los accidentes, facilitando la identificación de zonas con mayor concentración de incidentes y destacando los sectores donde podrían implementarse acciones de mejora en seguridad vial.

# Crear un mapa interactivo con leaflet
m26_accidente <- leaflet() %>% 
  addTiles() %>% 
  addCircleMarkers(
    lng = accidente_26$longitud_x_corregida,
    lat = accidente_26$longitud_y_corregida,
    clusterOptions = markerClusterOptions(),
    label = accidente_26$hora) %>%
  addControl(html = "<h3>Mapa de Accidentes</h3>", position = "topleft")

# Mostrar el mapa
m26_accidente

2.3.2 Análisis Espacial de la Distribución de Accidentes

En esta sección se lleva a cabo un análisis espacial de los accidentes ocurridos el día 26, utilizando herramientas especializadas como spatstat y terra. El objetivo es examinar la distribución geográfica de estos incidentes y determinar si existen patrones espaciales que permitan entender mejor su comportamiento en el territorio.

Este tipo de análisis resulta fundamental para identificar áreas con mayor frecuencia de accidentes, lo cual facilita la planificación de estrategias de mitigación, como el fortalecimiento de la señalización, la implementación de medidas de control vial o la mejora de la infraestructura en las zonas críticas, con el fin de reducir la probabilidad de futuros incidentes.

zona <- owin(xrange = c(-74.04331, -73.9929), yrange = c(4.885736, 4.948562))
# Crear un patrón de puntos espaciales a partir de los eventos VÍA CERRADA
patron_accidente_26 <- ppp(x = accidente_26$longitud_x_corregida, y = accidente_26$longitud_y_corregida, window = zona)

# Graficar el test de cuadrantes
plot(quadratcount(patron_accidente_26), main = "Patrón de Puntos y Test de Cuadrantes")

# Superponer los puntos sobre los cuadrantes
points(patron_accidente_26, col = "red")

# Gráfico independiente: Función K-Estimación
plot(Kest(patron_accidente_26), main = "Función K-Estimación")

2.3.3 Mapa de densidad de la Distribución de Accidentes

En esta sección se genera un mapa de densidad basado en la distribución espacial de los accidentes (ACCIDENTE) registrados el día 26. Esta visualización permite resaltar las zonas con mayor concentración de incidentes, facilitando la identificación de sectores considerados como áreas de alto riesgo dentro de la ciudad.

El uso de mapas de densidad en el análisis de accidentes es fundamental para visualizar las áreas más afectadas y apoyar la planificación de intervenciones orientadas a mejorar la seguridad vial. Este tipo de representación espacial permite detectar patrones de ocurrencia que no serían evidentes mediante tablas o listados de datos, proporcionando así una comprensión más profunda del fenómeno.

# Crear un mapa interactivo con leaflet y addHeatmap
leaflet(accidente_26) %>%
  addProviderTiles("OpenStreetMap") %>%  # Añadir la capa base del mapa
  addHeatmap(
    lng = ~longitud_x_corregida, lat = ~longitud_y_corregida,               # Especificar las columnas de longitud y latitud
    intensity = ~hora,                     # Intensidad opcional basada en la hora (o cualquier otra variable)
    blur = 20,                             # Nivel de desenfoque del mapa de calor
    max = 0.08,                            # Ajustar el valor máximo para la intensidad
    radius = 15                            # Radio de cada punto en el mapa de calor
  ) %>%
  addLegend("bottomright",                 # Añadir leyenda
            title = "Mapa de Calor de Accidente",
            colors = c("blue", "green", "yellow", "red"),
            labels = c("Bajo", "Moderado", "Alto", "Muy Alto"))



2.4. Evento Congestión

En esta sección se lleva a cabo el análisis de los eventos de congestión (CONGESTIÓN) registrados el día 26. Para ello, se filtran los reportes correspondientes exclusivamente a esa fecha y se examina su distribución espacial y temporal, con el fin de identificar cómo y dónde se concentraron los episodios de congestión a lo largo del día.

El análisis de la congestión es esencial para la planificación y gestión del tráfico urbano, ya que permite reconocer las zonas con mayor densidad vehicular y los periodos críticos de movilidad. Esta información puede emplearse para optimizar la programación semafórica, ajustar estrategias operativas y definir rutas alternas que contribuyan a mitigar los problemas de tránsito y mejorar la movilidad en la ciudad.

# Identificar eventos PELIGRO del día 26
pos <- which(data_dinamico$tipo_evento == "CONGESTIÓN" & dia == 26)
congestion_26 <- data_dinamico[pos,]

2.4.1 Visualización de Eventos Congestión

En esta sección se presenta un mapa interactivo que muestra los eventos de congestión (CONGESTIÓN) registrados el día 26. Mediante el uso de la librería leaflet, se visualizan los puntos donde se reportaron congestiones, permitiendo que los usuarios interactúen con los marcadores para obtener información detallada sobre cada evento.

Este mapa constituye una herramienta valiosa para explorar visualmente las áreas de la ciudad más afectadas por el tráfico, proporcionando información relevante para planificadores urbanos y autoridades encargadas de la gestión del tránsito. Su uso facilita la identificación de zonas críticas y apoya la toma de decisiones orientadas a mejorar la movilidad.

# Crear un mapa interactivo con leaflet
m26_congestion <- leaflet() %>% 
  addTiles() %>% 
  addCircleMarkers(
    lng = congestion_26$longitud_x_corregida,
    lat = congestion_26$longitud_y_corregida,
    clusterOptions = markerClusterOptions(),
    label = congestion_26$hora) %>%
  addControl(html = "<h3>Mapa de Congestión</h3>", position = "topleft")

# Mostrar el mapa
m26_congestion

2.4.2 Análisis Espacial de la Distribución de Congestión

Esta sección se centra en el análisis espacial de los eventos de congestión (CONGESTIÓN) registrados el día 26, utilizando herramientas especializadas como spatstat y terra. El propósito es examinar la distribución geográfica de estos eventos y determinar si existen patrones recurrentes de congestión en áreas específicas de la ciudad.

Este tipo de análisis resulta fundamental para identificar las zonas con mayor carga vehicular, lo que permite a las autoridades diseñar e implementar mejoras en la infraestructura, ajustar la gestión de rutas y adoptar estrategias orientadas a reducir la congestión y mejorar la movilidad urbana.

zona <- owin(xrange = c(-74.04331, -73.9929), yrange = c(4.885736, 4.948562))
# Crear un patrón de puntos espaciales a partir de los eventos VÍA CERRADA
patron_congestion <- ppp(x = congestion_26$longitud_x_corregida, y = congestion_26$longitud_y_corregida, window = zona)

# Graficar el test de cuadrantes
plot(quadratcount(patron_congestion), main = "Patrón de Puntos y Test de Cuadrantes")

# Superponer los puntos sobre los cuadrantes
points(patron_congestion, col = "red")

# Gráfico independiente: Función K-Estimación
plot(Kest(patron_congestion), main = "Función K-Estimación")

2.4.3 Mapa de densidad de la Distribución de Congestión

En esta sección se genera un mapa de densidad basado en los eventos de congestión (CONGESTIÓN) registrados el día 26. Esta representación permite resaltar las áreas con mayor densidad de tráfico, ofreciendo una visualización clara de los puntos críticos de congestión dentro de la ciudad.

El mapa de densidad constituye una herramienta de gran utilidad para planificadores urbanos y autoridades de tránsito, ya que facilita la identificación de los focos más problemáticos y apoya la evaluación de posibles soluciones orientadas a mejorar la fluidez del tráfico y la movilidad general.

# Crear un mapa interactivo con leaflet y addHeatmap
leaflet(congestion_26) %>%
  addProviderTiles("OpenStreetMap") %>%  # Añadir la capa base del mapa
  addHeatmap(
    lng = ~longitud_x_corregida, lat = ~longitud_y_corregida,               # Especificar las columnas de longitud y latitud
    intensity = ~hora,                     # Intensidad opcional basada en la hora (o cualquier otra variable)
    blur = 20,                             # Nivel de desenfoque del mapa de calor
    max = 0.08,                            # Ajustar el valor máximo para la intensidad
    radius = 15                            # Radio de cada punto en el mapa de calor
  ) %>%
  addLegend("bottomright",                 # Añadir leyenda
            title = "Mapa de Calor de Congestión",
            colors = c("blue", "green", "yellow", "red"),
            labels = c("Bajo", "Moderado", "Alto", "Muy Alto"))



2.5 Consolidación de mapas

En esta última sección se consolidan los mapas interactivos desarrollados previamente para visualizar, en una sola interfaz, los eventos de peligros (PELIGRO), accidentes (ACCIDENTE), congestión (CONGESTIÓN) y cierres de vías (VÍA CERRADA). Esta integración facilita la comparación simultánea de los diferentes tipos de eventos dentro del mismo espacio geográfico.

La sincronización de estos mapas permite a los usuarios obtener una visión global y unificada de los principales problemas de tráfico y riesgos presentes en la ciudad. Además, esta visualización integrada resulta especialmente útil para la planificación de soluciones coordinadas, ya que permite identificar áreas donde convergen múltiples tipos de eventos y priorizar intervenciones que aborden de manera integral las distintas afectaciones a la movilidad.

# Sincronizar los mapas interactivos de distintos tipos de eventos
leafsync::sync(m26_peligro, m26_accidente, m26_congestion, m26_via_cerrada)



3. Conclusión

El análisis realizado sobre los datos proporcionados por Waze correspondientes al día 26 permite obtener una visión integral de los eventos que afectan la movilidad urbana, incluyendo peligros en las vías (PELIGRO), congestión (CONGESTIÓN), accidentes (ACCIDENTE) y cierres de vías (VÍA CERRADA). Mediante el uso de herramientas de análisis espacial y la generación de mapas interactivos, fue posible identificar patrones relevantes en la distribución espacial y temporal de estos eventos.

3.1. Puntos Clave

  • Distribución de Eventos: El análisis evidencia que los trancones y los peligros en las vías constituyen los eventos más frecuentes. Esta tendencia subraya la necesidad de fortalecer la gestión del tráfico mediante acciones coordinadas y estrategias preventivas focalizadas en las zonas con mayor recurrencia.

  • Zonas Críticas: Los mapas de densidad permiten identificar áreas con alta concentración de accidentes y cierres de vías. Estos hallazgos indican que dichas zonas podrían beneficiarse de mejoras en la infraestructura vial, tales como mayor señalización, intervenciones de seguridad o rediseños de la red vial para optimizar la circulación.

  • Congestión: El estudio de los eventos de congestión revela puntos donde el tráfico se mantiene crítico durante las horas pico. Esto resalta la importancia de implementar soluciones como la optimización semafórica, el ajuste de ciclos de luz y la creación de rutas alternas para descongestionar sectores específicos de la ciudad.

  • Riesgos en las Vías: La visualización espacial de los eventos clasificados como PELIGRO permite identificar zonas con alta probabilidad de incidentes asociados a riesgos en la vía. Estos patrones sugieren la necesidad de desarrollar campañas de sensibilización para los conductores, así como posibles intervenciones en infraestructura orientadas a mitigar riesgos y mejorar la seguridad vial.

3.2. Recomendaciones

  • Planificación de Rutas Alternativas: Dado el alto volumen de trancones y cierres de vías en determinadas zonas, se recomienda el diseño e implementación de rutas alternativas, acompañado de una mejora en la señalización vial que permita desviar el tráfico de manera eficiente desde las áreas más congestionadas.

  • Mejoras en la Infraestructura Vial: Las zonas con mayor concentración de accidentes y eventos de peligro deben ser priorizadas para intervenciones específicas, que pueden incluir mantenimiento preventivo y correctivo de la vía, instalación de cámaras de vigilancia, incremento de la señalización y, cuando sea pertinente, reubicación de pasos peatonales para mejorar la seguridad de los usuarios.

  • Monitoreo Continuo: Es fundamental mantener un monitoreo permanente de los datos proporcionados por Waze en tiempo real. Esto permitiría detectar eventos a medida que ocurren y garantizar una respuesta rápida y eficaz ante situaciones de emergencia, accidentes o congestión en la red vial.

3.3. Conclusión Final

El uso de datos crowdsourcing, como los proporcionados por Waze, constituye una herramienta de alto valor para las entidades responsables de la gestión del tráfico. La posibilidad de visualizar y analizar eventos en tiempo real no solo facilita una respuesta ágil ante incidentes, sino que también fortalece la planificación estratégica orientada a mejorar la infraestructura vial y elevar los estándares de seguridad en la movilidad urbana.

La integración de este tipo de análisis en los sistemas de gestión del tráfico municipales permitiría avanzar hacia una movilidad más segura, eficiente y sostenible, al facilitar la toma de decisiones basadas en datos y la implementación de medidas preventivas en zonas críticas.