Preparativos
Carga de los paquetes
library(sf)
library(leaflet)
library(leaflet.extras)
library(leafem)
library(dplyr)
Carga de los datos
# Carga de la capa de cantones
cantones <-
st_read(
"https://raw.githubusercontent.com/gf0604-procesamientodatosgeograficos/2021i-datos/main/ign/delimitacion-territorial-administrativa/cr_cantones_simp_wgs84.geojson",
quiet = TRUE
)
# Carga de la capa de provincias
provincias <-
st_read(
"https://raw.githubusercontent.com/gf0604-procesamientodatosgeograficos/2021i-datos/main/ign/delimitacion-territorial-administrativa/cr_provincias_simp_wgs84.geojson",
quiet = TRUE
)
# Carga de los datos de primates
primates <-
st_read(
"https://raw.githubusercontent.com/gf0604-procesamientodatosgeograficos/2021i-datos/main/gbif/primates-cr-registros.csv",
options = c(
"X_POSSIBLE_NAMES=decimalLongitude",
"Y_POSSIBLE_NAMES=decimalLatitude"
),
quiet = TRUE
)
# Asignación del sistema de coordenadas
st_crs(primates) = 4326
Limpieza
primates <-
primates %>%
mutate(coordinateUncertaintyInMeters = as.numeric(coordinateUncertaintyInMeters)) %>%
mutate(eventDate = as.Date(eventDate, "%Y-%m-%d"))
cat("Cantidad original de registros: ", nrow(primates))
## Cantidad original de registros: 4509
# Descartar registros con alta incertidumbre en la ubicación
primates <-
primates %>%
filter(!is.na(coordinateUncertaintyInMeters) & coordinateUncertaintyInMeters <= 1000)
cat("Cantidad de registros después de descartar los de alta incertidumbre en la ubicación: ", nrow(primates))
## Cantidad de registros después de descartar los de alta incertidumbre en la ubicación: 2444
# Agregar columnas de provincia y de cantón
primates <-
primates %>%
st_join(cantones["provincia"]) %>%
st_join(cantones["canton"])
# Descartar registros con provincia = NA
primates <-
primates %>%
filter(!is.na(provincia))
cat("Cantidad de registros después de descartar los que no tienen provincia: ", nrow(primates))
## Cantidad de registros después de descartar los que no tienen provincia: 2387
Procesamiento y visualización
Mapa de cantidad de registros por provincia
# Creación de conjunto de datos con la cantidad de registros por provincia
provincias_registros <-
provincias %>%
st_join(primates) %>%
group_by(provincia.x) %>%
summarize(registros = n_distinct(gbifID, na.rm = TRUE)) %>%
rename(provincia = provincia.x)
# Mapa
# Paleta de colores
colores_registros <-
colorNumeric(palette = "YlGnBu",
domain = provincias_registros$registros,
na.color = "transparent")
# Mapa Leaflet
leaflet() %>%
addTiles(group = "OSM") %>%
addPolygons(
data = provincias_registros,
fillColor = ~ colores_registros(provincias_registros$registros),
fillOpacity = 0.7,
stroke = TRUE,
color = "black",
weight = 1,
popup = paste(
paste(
"<strong>Provincia:</strong>",
provincias_registros$provincia
),
paste(
"<strong>Cantidad de registros:</strong>",
provincias_registros$registros
),
sep = '<br/>'
),
group = "Provincias - registros"
) %>%
addCircleMarkers(
data = primates,
stroke = F,
radius = 2,
fillColor = 'black',
fillOpacity = 1,
popup = paste(
primates$species,
primates$provincia,
primates$canton,
primates$eventDate,
paste0("<a href='", primates$occurrenceID, "'>Más información</a>"),
sep = '<br/>'
),
clusterOptions = markerClusterOptions(),
group = "Registros de primates"
) %>%
addLayersControl(baseGroups = c("OSM"),
overlayGroups = c("Provincias - registros", "Registros de primates")) %>%
addLegend(
position = "bottomleft",
pal = colores_registros,
values = provincias_registros$registros,
group = "Provincias - registros",
title = "Cantidad de registros"
)
Mapa de cantidad de especies por provincia
# Creación de conjunto de datos con la cantidad de especies por provincia
provincias_especies <-
provincias %>%
st_join(primates) %>%
group_by(provincia.x) %>%
summarize(especies = n_distinct(species, na.rm = TRUE)) %>%
rename(provincia = provincia.x)
# Mapa
# Paleta de colores
colores_especies <-
colorNumeric(palette = "YlOrRd",
domain = provincias_especies$especies,
na.color = "transparent")
# Mapa Leaflet
leaflet() %>%
addTiles(group = "OSM") %>%
addPolygons(
data = provincias_especies,
fillColor = ~ colores_especies(provincias_especies$especies),
fillOpacity = 0.7,
stroke = TRUE,
color = "black",
weight = 1,
popup = paste(
paste(
"<strong>Provincia:</strong>",
provincias_especies$provincia
),
paste(
"<strong>Cantidad de especies:</strong>",
provincias_especies$especies
),
sep = '<br/>'
),
group = "Provincias - especies"
) %>%
addCircleMarkers(
data = primates,
stroke = F,
radius = 2,
fillColor = 'black',
fillOpacity = 1,
popup = paste(
primates$species,
primates$provincia,
primates$canton,
primates$eventDate,
paste0("<a href='", primates$occurrenceID, "'>Más información</a>"),
sep = '<br/>'
),
clusterOptions = markerClusterOptions(),
group = "Registros de primates"
) %>%
addLayersControl(baseGroups = c("OSM"),
overlayGroups = c("Provincias - especies", "Registros de primates")) %>%
addLegend(
position = "bottomleft",
pal = colores_especies,
values = provincias_especies$especies,
group = "Provincias - especies",
title = "Cantidad de especies"
)
Mapa de cantidad de especies por cantón
# Creación de conjunto de datos con la cantidad de especies por cantón
cantones_especies <-
cantones %>%
st_join(primates) %>%
group_by(canton.x) %>%
summarize(especies = n_distinct(species, na.rm = TRUE)) %>%
rename(canton = canton.x)
# Mapa
# Paleta de colores
colores_especies <-
colorNumeric(palette = "YlOrRd",
domain = cantones_especies$especies,
na.color = "transparent")
# Mapa Leaflet
leaflet() %>%
addTiles(group = "OSM") %>%
addPolygons(
data = cantones_especies,
fillColor = ~ colores_especies(cantones_especies$especies),
fillOpacity = 0.7,
stroke = TRUE,
color = "black",
weight = 1,
popup = paste(
paste(
"<strong>Cantón:</strong>",
cantones_especies$canton
),
paste(
"<strong>Cantidad de especies:</strong>",
cantones_especies$especies
),
sep = '<br/>'
),
group = "Cantones - especies"
) %>%
addCircleMarkers(
data = primates,
stroke = F,
radius = 2,
fillColor = 'black',
fillOpacity = 1,
popup = paste(
primates$species,
primates$provincia,
primates$canton,
primates$eventDate,
paste0("<a href='", primates$occurrenceID, "'>Más información</a>"),
sep = '<br/>'
),
clusterOptions = markerClusterOptions(),
group = "Registros de primates"
) %>%
addLayersControl(baseGroups = c("OSM"),
overlayGroups = c("Cantones - especies", "Registros de primates")) %>%
addLegend(
position = "bottomleft",
pal = colores_especies,
values = cantones_especies$especies,
group = "Cantones - especies",
title = "Cantidad de especies"
)
Mapa de calor de registros
# Mapa Leaflet
leaflet() %>%
addTiles(group = "OSM") %>%
addProviderTiles(providers$CartoDB.DarkMatter, group = "CartoDB.DarkMatter") %>%
addHeatmap(
data = primates,
lng = ~decimalLongitude,
lat = ~decimalLatitude,
radius = 10,
blur = 20,
group = "Mapa de calor"
) %>%
addCircleMarkers(
data = primates,
stroke = F,
radius = 2,
fillColor = 'black',
fillOpacity = 1,
popup = paste(
primates$species,
primates$provincia,
primates$canton,
primates$eventDate,
paste0("<a href='", primates$occurrenceID, "'>Más información</a>"),
sep = '<br/>'
),
clusterOptions = markerClusterOptions(),
group = "Registros de primates"
) %>%
addLayersControl(baseGroups = c("CartoDB.DarkMatter", "OSM"),
overlayGroups = c("Mapa de calor", "Registros de primates"))
Mapa con controles de búsqueda en OSM, botón de reinicio y coordenadas
# Mapa Leaflet
leaflet() %>%
addTiles(group = "OSM") %>%
addCircleMarkers(
data = primates,
stroke = F,
radius = 2,
fillColor = 'black',
fillOpacity = 1,
popup = paste(
primates$species,
primates$provincia,
primates$canton,
primates$eventDate,
paste0("<a href='", primates$occurrenceID, "'>Más información</a>"),
sep = '<br/>'
),
clusterOptions = markerClusterOptions(),
group = "Registros de primates"
) %>%
addLayersControl(baseGroups = c("OSM"),
overlayGroups = c("Registros de primates")) %>%
addResetMapButton() %>%
addSearchOSM() %>%
addMouseCoordinates() %>%
addScaleBar(position = "bottomleft", options = scaleBarOptions(imperial = FALSE)) %>%
addMiniMap(position = "bottomleft")