Mapas dinámicos con Leaflet

library(pacman)
p_load(tidyverse, knitr, htmltools, leafsync, leaflet, sf, leaflet.extras, mapview, ggmap, leafem, printr, readxl)

setwd("C:/Users/Rodrigo Aros/Desktop/Proyecto_UDEC")


# Cargo, limpio y ordeno base de datos  -----------------------------

{
data<- readxl::read_xlsx("ids.xlsx")
data["ID Parte"] <- as.numeric(data$`ID Parte`)

#paso 1 separar ids unicos
separados<- data %>% 
  separate(RP_IDS, paste0("RP_IDS",1:3),sep=';')

#paso 2 armar df ordenado por IDS unicos

df_ordenado<- separados %>%
  gather(variable, valor, RP_IDS1, RP_IDS2, RP_IDS3)

#coercionar columna valor a numeric
df_ordenado["valor"]<- as.numeric(df_ordenado$valor)

#seleccionar valores sin NA
df_ordenado <- df_ordenado %>% 
  filter(valor <= 243)

# cargo base de datos para cruce
df_cruce <- readxl::read_xlsx("df_cruce.xlsx")
df_cruce["ID Parte"] <- as.numeric(df_cruce$`ID Parte`)

df_cruce <- df_cruce[,c(2,9:17)]
names(df_cruce)
df_cruce <- df_cruce[,c(1, 9:10)]

#aplico join
test<- df_ordenado %>% 
  left_join(df_cruce, by=c("valor" = "ID Parte"))
test <- test %>% 
  drop_na(Latitud,Longitud)
}

# Cambio nombres  a lat / lon ---------------------------------------------

names(test)[12:13] <- c("lat", "lon")#cambio nombres lat lon

Se crea mapa en 2 facetas desde Libreria Leaflet: 1 mapa Con puntos de Lugares y Actividades 1 mapa con heatmap según Label de puntos de Lugares y Actividades. Para tratar los puntos de forma de agruparlos en Leaflet creo un objeto para cada uno de los “Label”. Posteriormente el respectivo popup con etiquetas html.

a <- test %>% 
  filter(Label=="Sociabilización")

b <- test %>% 
  filter(Label=="Recreación")

cc <- test %>% 
  filter(Label=="Estudio")

d <- test %>% 
  filter(Label=="Alimentación")

ee <- test %>% 
  filter(Label=="Deportes")

f <- test %>% 
  filter(Label=="Deteriorado")

g <- test %>% 
  filter(Label=="Inseguro")

h <- test %>% 
  filter(Label=="Patrimonial")

ii <- test %>% 
  filter(Label=="Favorito")
popupa <- paste0("<b>", "ID: ", "</b>", as.character(a$`ID Parte`), 
                 "<br>", "<b>", "Genero: ", "</b>", as.character(a$Género),
                 "<br>", "<b>", "fecha: ", "</b>", a$Fecha, 
                 "<br>", "<b>", "Etiqueta: ", "</b>", a$Label,
                 "<br>", "<b>", "Nombre: ", "</b>", a$Nombre,  "<br>")

popupb <- paste0("<b>", "ID: ", "</b>", as.character(b$`ID Parte`), 
                 "<br>", "<b>", "Genero: ", "</b>", as.character(b$Género),
                 "<br>", "<b>", "fecha: ", "</b>", b$Fecha, 
                 "<br>", "<b>", "Etiqueta: ", "</b>", b$Label,
                 "<br>", "<b>", "Nombre: ", "</b>", b$Nombre,  "<br>")

popupcc <- paste0("<b>", "ID: ", "</b>", as.character(cc$`ID Parte`), 
                  "<br>", "<b>", "Genero: ", "</b>", as.character(cc$Género),
                  "<br>", "<b>", "fecha: ", "</b>", cc$Fecha, 
                  "<br>", "<b>", "Etiqueta: ", "</b>", cc$Label,
                  "<br>", "<b>", "Nombre: ", "</b>", cc$Nombre,  "<br>")

popupee <- paste0("<b>", "ID: ", "</b>", as.character(ee$`ID Parte`), 
                  "<br>", "<b>", "Genero: ", "</b>", as.character(ee$Género),
                  "<br>", "<b>", "fecha: ", "</b>", ee$Fecha, 
                  "<br>", "<b>", "Etiqueta: ", "</b>", ee$Label,
                  "<br>", "<b>", "Nombre: ", "</b>", ee$Nombre,  "<br>")

popupf <- paste0("<b>", "ID: ", "</b>", as.character(f$`ID Parte`), 
                 "<br>", "<b>", "Genero: ", "</b>", as.character(f$Género),
                 "<br>", "<b>", "fecha: ", "</b>", f$Fecha, 
                 "<br>", "<b>", "Etiqueta: ", "</b>", f$Label,
                 "<br>", "<b>", "Nombre: ", "</b>", f$Nombre,  "<br>")

popupg <- paste0("<b>", "ID: ", "</b>", as.character(g$`ID Parte`), 
                 "<br>", "<b>", "Genero: ", "</b>", as.character(g$Género),
                 "<br>", "<b>", "fecha: ", "</b>", g$Fecha, 
                 "<br>", "<b>", "Etiqueta: ", "</b>", g$Label,
                 "<br>", "<b>", "Nombre: ", "</b>", g$Nombre,  "<br>")

popuph <- paste0("<b>", "ID: ", "</b>", as.character(h$`ID Parte`), 
                 "<br>", "<b>", "Genero: ", "</b>", as.character(h$Género),
                 "<br>", "<b>", "fecha: ", "</b>", h$Fecha, 
                 "<br>", "<b>", "Etiqueta: ", "</b>", h$Label,
                 "<br>", "<b>", "Nombre: ", "</b>", h$Nombre,  "<br>")

popupii <- paste0("<b>", "ID: ", "</b>", as.character(ii$`ID Parte`), 
                 "<br>", "<b>", "Genero: ", "</b>", as.character(ii$Género),
                 "<br>", "<b>", "fecha: ", "</b>", ii$Fecha, 
                 "<br>", "<b>", "Etiqueta: ", "</b>", ii$Label,
                 "<br>", "<b>", "Nombre: ", "</b>", ii$Nombre,  "<br>")
mapa1 <- leaflet(data = test)
mapa1 <- leaflet(data=test) %>% 
  addTiles(group = "OSM (default)") %>% 
  setView(-72.08027, -36.59806, 15) %>% 
  addProviderTiles(providers$Stamen.Toner, group = "Toner") %>%
  addProviderTiles(providers$CartoDB.Positron, group = "Carto") %>% 
  addCircleMarkers(data = a, lat = a$lat, lng = a$lon, group = "Sociabilización",
                   radius = 5,
                   popup = popupa,
                   color = "blue",
                   weight = 3,
                   fill = "blue") %>% 
  addCircleMarkers(data = b, lat = b$lat, lng = b$lon, group = "Recreación",
                   radius = 5,
                   popup = popupb,
                   color = "red",
                   weight = 3,
                   fill = "red") %>% 
  addCircleMarkers(data = cc, lat = cc$lat, lng = cc$lon, group = "Estudio",
                   radius = 5,
                   popup = popupcc,
                   color = "green",
                   weight = 3,
                   fill = "green") %>% 
  addCircleMarkers(data = ee, lat = ee$lat, lng = ee$lon, group = "Deportes",
                   radius = 5,
                   popup = popupee,
                   color = "black",
                   weight = 3,
                   fill = "black") %>%
  addCircleMarkers(data = f, lat = f$lat, lng = f$lon, group = "Deteriorado",
                   radius = 5,
                   popup = popupf,
                   color = "black",
                   weight = 3,
                   fill = "brown") %>%
  addCircleMarkers(data = g, lat = g$lat, lng = g$lon, group = "Inseguro",
                   radius = 5,
                   popup = popupg,
                   color = "red",
                   weight = 3,
                   fill = "white") %>%
  addCircleMarkers(data = h, lat = h$lat, lng = h$lon, group = "Patrimonial",
                   radius = 5,
                   popup = popuph,
                   color = "orange",
                   weight = 3,
                   fill = "orange") %>% 
  addCircleMarkers(data = ii, lat = ii$lat, lng = ii$lon, group = "Favorito",
                   radius = 5,
                   popup = popupii,
                   color = "violet",
                   weight = 3) %>% 
  addLayersControl(
    baseGroups = c("OSM (default)", "Toner", "Carto"),
    overlayGroups = c("Sociabilización", "Recreación", "Estudio", "Deportes", "Deteriorado",
                      "Inseguro", "Patrimonial", "Favorito"),
    options = layersControlOptions(collapsed = FALSE)) %>% 
  addMiniMap(mapa1,
             position = "bottomright",
             width = 100,
             height = 100,
             collapsedWidth = 19,
             collapsedHeight = 19,
             zoomLevelOffset = -5) %>% 
  garnishMap(mapa1, addScaleBar, addMouseCoordinates, position = "bottomleft")

mapa1
mapa2 <- leaflet() %>%  
  addTiles(group = "OSM (default)") %>% 
  setView(-72.08027, -36.59806, 15) %>% 
  addProviderTiles(providers$Stamen.Toner, group = "Toner") %>%
  addProviderTiles(providers$CartoDB.Positron, group = "Carto") %>% 
  addHeatmap(data = a, lat = a$lat, lng = a$lon, group = "Sociabilización",
             gradient = "RdBu") %>% 
  addHeatmap(data = b, lat = b$lat, lng = b$lon, group = "Recreación",
             gradient = "Spectral") %>% 
  addHeatmap(data = cc, lat = cc$lat, lng = cc$lon, group = "Estudio",
             gradient = "YlOrRd") %>% 
  addHeatmap(data = ee, lat = ee$lat, lng = ee$lon, group = "Deportes") %>% 
  addHeatmap(data = f, lat = f$lat, lng = f$lon, group = "Deteriorado") %>% 
  addHeatmap(data = g, lat = g$lat, lng = g$lon, group = "Inseguro") %>% 
  addHeatmap(data = h, lat = h$lat, lng = h$lon, group = "Patrimonial") %>% 
  addHeatmap(data = ii, lat = ii$lat, lng = ii$lon, group = "Favorito") %>% 
  addLayersControl(
    baseGroups = c("OSM (default)", "Toner", "Carto"),
    overlayGroups = c("Sociabilización", "Recreación", "Estudio",
                      "Deportes", "Deteriorado", "Inseguro",
                      "Patrimonial", "Favorito"),
    options = layersControlOptions(collapsed = FALSE)) %>% 
  addMiniMap(mapa1,
             position = "bottomright",
             width = 100,
             height = 100,
             collapsedWidth = 19,
             collapsedHeight = 19,
             zoomLevelOffset = -5) %>% 
  garnishMap(mapa1, addScaleBar, addMouseCoordinates, position = "bottomleft")

mapa2
prueba <- latticeview(mapa1,mapa2)
prueba