Definicion de las librerias que se van ha utilizar.
library(leaflet)
library(leaflet.extras)
library(leafem)
library(htmlwidgets)
library(sf)
En la siguiente lineas de codigos realizas lo siguiente:
CVEGEO
.CVEGEO
y se convierten
a númerico, para despues hacer un merge
con otro
data.frame.sf
para leer el archivo
shp
con las geometrías de los municipios de Hidalgo.cve_mun
,
nom_mun
y la geometría se agrega de manera automatica.cve_mun
a numerico para que
coincida con CVEGEO
del primer data.frame.merge
) entre los datos económicos
y el shapefile usando clave_mun
y CVEGEO
como
claves.ice_2015
,
ice_2020A
y ice_2024B
, cada uno ordenado según
su índice de complejidad para poder hacer la variable de
ranking
en cada uno.#setwd("C:/Users/eagel/OneDrive/Escritorio/Lalo/Escuela/Practicas/Chamba/Leaflet")
datos = read.csv("C:/Users/eagel/OneDrive/Escritorio/Lalo/Escuela/Practicas/Chamba/Leaflet/Complejidad_Economica_Hidalgo.csv")
datos = datos |> dplyr::mutate(CVEGEO = as.numeric(substr(x = CVEGEO, start = 3, stop = 5)))
geometrias = sf::read_sf("C:/Users/eagel/OneDrive/Escritorio/Lalo/Escuela/Practicas/Chamba/Leaflet/municipiosjair/municipiosjair.shp")
geometrias = geometrias |> dplyr::select(CVE_MUN, NOM_MUN) |> dplyr::mutate(CVE_MUN = as.numeric(CVE_MUN))
datos = merge(x = datos, y = geometrias, by.x = "CVEGEO", by.y = "CVE_MUN", all.x = T)
ice_2015 = datos |> dplyr::select(CVEGEO, ICE_Personal_2015., NOM_MUN, geometry) |> sf::st_as_sf()
ice_2020A = datos |> dplyr::select(CVEGEO, ICE_Personal_2020A, NOM_MUN, geometry) |> sf::st_as_sf()
ice_2024B = datos |> dplyr::select(CVEGEO, ICE_Personal_2024B, NOM_MUN, geometry) |> sf::st_as_sf()
ice_2015 = ice_2015[order(ice_2015$ICE_Personal_2015., decreasing = T), ]
ice_2015$ranking = c(1:nrow(ice_2015))
ice_2020A = ice_2020A[order(ice_2020A$ICE_Personal_2020A, decreasing = T), ]
ice_2020A$ranking = c(1:nrow(ice_2020A))
ice_2024B = ice_2024B[order(ice_2024B$ICE_Personal_2024B, decreasing = T), ]
ice_2024B$ranking = c(1:nrow(ice_2024B))
Se define una paleta de colores usando la función
colorNumeric
de la librería leaflet
. Esta
función crea una escala de colores basada en valores numéricos. Para
cada año, se genera una función de color que asigna tonos según el valor
máximo y mínimo de la complejidad económica. Los pasos de la escala se
calculan como:
\[ \text{paso} = \frac{\text{valor_maximo} - \text{valor_minimo}}{84} \]
El 84 representa es por el numero de municipios del estado.
paleta_2015 = colorNumeric(palette = c("green", "yellow", "red"), domain = seq(min(ice_2015$ICE_Personal_2015.), max(ice_2015$ICE_Personal_2015.) ,(max(ice_2015$ICE_Personal_2015.) - min(ice_2015$ICE_Personal_2015.))/84), reverse = T)
paleta_2020A = colorNumeric(palette = c("green", "yellow", "red"), domain = seq(min(ice_2020A$ICE_Personal_2020A), max(ice_2020A$ICE_Personal_2020A) ,(max(ice_2020A$ICE_Personal_2020A) - min(ice_2020A$ICE_Personal_2020A))/84), reverse = T)
paleta_2024B = colorNumeric(palette = c("green", "yellow", "red"), domain = seq(min(ice_2024B$ICE_Personal_2024B), max(ice_2024B$ICE_Personal_2024B) ,(max(ice_2024B$ICE_Personal_2024B) - min(ice_2024B$ICE_Personal_2024B))/84), reverse = T)
Para generar un mapa en R usando leaflet
, podemos
utilizar el siguiente código: leaflet() |> addTiles()
.
Esto crea un mapa interactivo con una capa base de
addTiles()
.
Para agregar elementos geométricos, debemos conocer el tipo de
geometría con el que estamos trabajando. Puede ser:
polygons
(polígonos),
lines
(líneas),
points
(puntos),
rasters
(raster), etc.
Por ejemplo, para agregar polígonos, usamos
addPolygons()
con los siguientes parámetros:
label
: Texto que aparece cuando
pasamos el mouse sobre el objeto.popup
: Información que se muestra al
hacer clic sobre el objeto.group
: Permite organizar capas para
facilitar su gestión.color
: Define el color del borde del
objeto, utilizando una paleta predefinida.Donde en este caso, notemos que en el apartado
popup
vamos a escribir como en
HTML
por eso pasamos esa funcion con el
lapply
.
El apartado addLayersControl
permite gestionar las capas
del mapa. Sus principales parámetros son:
baseGroups
: Capas base que no pueden
superponerse.overlayGroups
: Capas que pueden
visualizarse juntas.position
: Define la posición del
selector de capas en el mapa.options
: Se usa principalmente
layersControlOptions
donde en este parametro a nosotros nos
interesa usar collapsed = FALSE
para mostrar el selector
expandido.El apartado hideGroup
se utiliza para
que algunas capas del mapa estén ocultas al iniciarlo.
group
: Define las capas que empezarán
ocultas.El apartado addSearchFeatures
permite
realizar búsquedas dentro del mapa. Sus parámetros principales son:
targetGroups
: Especifica el data.frame
en el que se realizará la búsqueda, utilizando el label
para identificar la información.options
: Aquí se usan las
searchFeaturesOptions
, que incluyen:
zoom
: Acerca el mapa al objeto
encontrado.openPopup
: Hace unpopup
sobre el objeto hallado.position
: Determina la ubicación de la
opción de búsqueda en el mapa.hideMarkerOnCollapse
: Actualmente no
conozco su función exacta.El apartado addLogo
permite pegar un
logo dentro del mapa. Sus parámetros principales son: -
img
: Link o direccion local de la imagen.
- position
: La posicion dentro del mapa. -
src
: Indica si sera local la imagen o
desde la web se cargara.
mapa_web = leaflet() |>
addTiles() |>
addPolygons(data = ice_2024B,
label = ice_2024B$NOM_MUN,
popup = paste("Municipio:", "<b>", ice_2024B$NOM_MUN ,"</b>", "<br>", "Indice de Complejidad: ", "<b>" , round(ice_2024B$ICE_Personal_2024B , digits = 2) ,"</b>", "<br>", "Ranking:", "<b>", ice_2024B$ranking ,"</b>") |> lapply(FUN = function(x) { htmltools::HTML(x)}),
group = "2024B",
color = paleta_2024B(ice_2024B$ICE_Personal_2024B)) |>
addPolygons(data = ice_2020A,
label = ice_2020A$NOM_MUN,
popup = paste("Municipio:", "<b>", ice_2020A$NOM_MUN ,"</b>", "<br>", "Indice de Complejidad: ", "<b>" , round(ice_2020A$ICE_Personal_2020A, digits = 2) ,"</b>", "<br>", "Ranking:", "<b>", ice_2020A$ranking ,"</b>") |> lapply(FUN = function(x) { htmltools::HTML(x)}),
group = "2020A",
color = paleta_2020A(ice_2020A$ICE_Personal_2020A)) |>
addPolygons(data = ice_2015,
label = ice_2015$NOM_MUN,
popup = paste("Municipio:", "<b>", ice_2015$NOM_MUN ,"</b>", "<br>", "Indice de Complejidad: ", "<b>" , round(ice_2015$ICE_Personal_2015., digits = 2) ,"</b>", "<br>", "Ranking:", "<b>", ice_2015$ranking ,"</b>") |> lapply(FUN = function(x) { htmltools::HTML(x)}),
group = "2015",
color = paleta_2015(ice_2015$ICE_Personal_2015.) ) |>
addLayersControl(baseGroups = c("2024B", "2020A", "2015"), # OverlayGROUPS pueden ser ambos
position = "topright",
options = layersControlOptions(collapsed = F)) |>
hideGroup(group = c("2020A", "2015")) |>
addSearchFeatures(targetGroups = c("2024B"),
options = searchFeaturesOptions(
zoom = 16, # Realiza Zoom
openPopup = T, #Simula clic
position = "bottomleft",
hideMarkerOnCollapse = FALSE
)) |>
addLogo(img = "sigeh3.png", position = "bottomleft", src = "local")
Vizualizacion del mapa
mapa_web