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(tidyverse)
library(lubridate) # Para manejar fechas mƔs fƔcilmente

geo_datos = read_delim(
  "/Users/jesusposso/Documents/Maestria/2025-2/Proyecto_Aplicado_II/callevent.csv",
  delim = "|",        # Especifica que el separador es el tabulador
  locale = locale(dec = ".",encoding = 'UTF-16') # Especifica que el decimal es la coma
)
# 1. Definir la lista de causas que quieres incluir y el rango de fechas
causas_a_filtrar = c('Desconocida', 
                     'Incidente Cancelado', 
                     'Exc_Vendaval', 
                     'Alta vegetación', 
                     'Descargas atmosfericas')

# Definir el rango de fechas (ejemplo: todo enero de 2024)
fecha_inicio = ymd('2025-01-01') # ymd() es de lubridate
fecha_fin = ymd('2025-12-31')   # ymd() es de lubridate

# 2. Pre-procesar la columna de tiempo (Similar al pd.to_datetime)
# AsegĆŗrate de que 'EVENT_TIME' sea un objeto de fecha y hora
geo_datos = geo_datos %>%
  mutate(
    # Convierte la columna a formato datetime. El argumento 'tz' es opcional.
    EVENT_TIME = ymd_hms(EVENT_TIME) # Ajusta la función (ymd, ymd_hms, etc.)
  )


# 3. Aplicar el Filtrado y la Selección en una sola cadena de operaciones (pipe)
callevent_Map = geo_datos %>%
  # Paso 1: Filtrar todas las condiciones
  filter(
    # Condición 1: CAUSE en la lista
    CAUSE %in% causas_a_filtrar,
    # Condición 2 y 3: LATITUDE y LONGITUDE diferentes de 0
    LATITUDE != 0,
    LONGITUDE != 0,
    # Condición 4: EVENT_TIME dentro del rango de fechas
    EVENT_TIME >= fecha_inicio,
    EVENT_TIME <= fecha_fin
  ) %>%
  # Paso 2: Seleccionar las columnas finales
  select(LATITUDE, LONGITUDE, CAUSE)

# El resultado 'callevent_Map' contiene el marco de datos filtrado y con solo las 3 columnas.
# 2. Se grafica del archivo excel todos los registros de latitud y longitud mediante leaflet
# 1. Crear la paleta de colores (ejecutar antes de leaflet)
pal <- colorFactor(
  palette = 'Dark2',
  domain = callevent_Map$CAUSE
)

# 2. Se grafica el mapa con colores y leyenda
leaflet(callevent_Map) %>% 
  addTiles() %>% 
  addCircleMarkers(
    # Aplicar la paleta 'pal' a la columna 'CAUSE'
    color = pal(callevent_Map$CAUSE),
    lng = ~LONGITUDE, # Notación tidyeval (opcional pero recomendada)
    lat = ~LATITUDE,  # Notación tidyeval (opcional pero recomendada)
    radius = 2,       # AumentƩ ligeramente el radio para que se vea el color
    stroke = FALSE,   # Elimina el borde negro
    fillOpacity = 0.8 # Hace los cĆ­rculos ligeramente transparentes
  ) %>%
  # 3. AƱadir la Leyenda
  addLegend(
    pal = pal,
    values = ~CAUSE,
    title = "Causa del Evento",
    opacity = 1
  )