library(cartography)
## This project is in maintenance mode.
## Core functionalities of `cartography` can be found in `mapsf`.
## https://riatelab.github.io/mapsf/
##
## Adjuntando el paquete: 'cartography'
## The following object is masked from 'package:terra':
##
## north
mtq_pencil <- getPencilLayer(x = provincias)
plot(st_geometry(mtq_pencil), col = 1:18)
plot(st_geometry(provincias), add = TRUE)
Este plot fue realizado con lenguaje R, paquete cartography y la función getPencilLayer
# Crear una paleta de colores basada en el campo único de cada provincia (ej., "nombre_provincia")
pal <- colorFactor(palette = "Set3", domain = mtq_pencil$fna)
# head(mtq_pencil)
# Crear el mapa con leaflet
leaflet() %>%
addTiles('https://wms.ign.gob.ar/geoserver/gwc/service/tms/1.0.0/mapabase_gris@EPSG%3A3857@png/{z}/{x}/{-y}.png') %>%
setView(lng =-65.39,lat =-26.01, zoom = 7)%>%
addPolygons(
data = st_transform(mtq_pencil, 4326), # Transformar al sistema de coordenadas EPSG 4326
color = ~pal(fna),
fillOpacity = 0.8,
weight = 7, # Grosor del borde
popup = ~fna # Opcional: muestra el nombre en un popup
) %>%
addPolygons(
data = st_transform(provincias, 4326),
fillOpacity = 0.001 # Transformar al sistema de coordenadas EPSG 4326
#color = "black" # Transparencia del relleno para que no cubra completamente el contorno de "boceto"
)
library(leaflet)
# Crear una paleta de colores basada en el campo único de cada provincia (ej., "nombre_provincia")
pal <- colorFactor(palette = "Set3", domain = prov$fna)
leaflet() %>%
addTiles('https://wms.ign.gob.ar/geoserver/gwc/service/tms/1.0.0/mapabase_gris@EPSG%3A3857@png/{z}/{x}/{-y}.png') %>%
setView(lng =-65.39,lat =-26.01, zoom = 7)%>%
addPolygons(data = prov,
fillColor = ~pal(fna), # Asigna un color distinto a cada provincia
fillOpacity = 0.6,
color = "black", # Color del borde de cada polÃgono
weight = 1, # Grosor del borde
popup = ~fna # Opcional: muestra el nombre en un popup
)
Mapa temático de sÃmbolos proporcionales también conocido como gráfico de sÃmbolos proporcionales o mapa de sÃmbolos proporcionales. Es un tipo de mapa en el que se utilizan sÃmbolos (como cÃrculos, cuadrados u otros iconos) para representar datos cuantitativos de una región o área geográfica. La caracterÃstica principal de este mapa es que el tamaño de cada sÃmbolo es proporcional al valor de la variable representada en esa ubicación.
#install.packages("cartography")
# mtq <- st_read("martinique.shp")
plot(st_geometry(provincias2))
propSymbolsLayer(x = provincias2, var = "totalPoblación",
legend.title.txt = "Población",
col = "#a7dfb4")
Un gráfico de barras es una representación visual de datos en la que se utilizan barras rectangulares, cuya longitud o altura es proporcional al valor que representan. Cada barra corresponde a una categorÃa o grupo, y su tamaño facilita la comparación entre diferentes categorÃas. Es útil para mostrar la distribución de un conjunto de datos y comparar cantidades de manera clara y directa.
# Mostrar los gráficos
grafico_poblacion
### Cartograma de VÃas Estratégicas
# Organizar los gráficos en una cuadrÃcula de 3x3 con gridExtra
#grid.arrange(grobs = plots, ncol = 3, nrow = 3,
# widths = c(1, 1, 1), # Puedes modificar estas proporciones
# heights = c(1, 1, 1) # También puedes modificar las proporciones aquÃ
# )
Un gráfico de torta (o gráfico circular) es una representación visual de datos en forma de un cÃrculo dividido en segmentos, donde cada segmento muestra la proporción de un valor respecto al total. Cada porción del gráfico representa una categorÃa y su tamaño es proporcional a su valor relativo. Es útil para mostrar distribuciones o porcentajes de un todo
df2bis <- df2
# Eliminar "Provincia de" del nombre de las provincias en df2bis
df2bis$fna <- gsub("^Provincia de ", "", df2bis$fna)
# Gráfico de torta para el total de población
grafico_torta <- plot_ly(
df2bis,
labels = ~fna, # Las provincias como etiquetas
values = ~totalPoblación, # Los valores de la población total
type = "pie", # Tipo de gráfico torta
textinfo = "label+percent", # Mostrar etiqueta y porcentaje en cada segmento
textfont = list(size = 14), # Tamaño de la fuente del texto
marker = list(colors = "steelblue") # Color del gráfico (puedes usar una paleta de colores también)
) %>%
layout(
title = "Distribución del Total de Población por Provincia",
height = 400 # Ajusta la altura del gráfico
)
## Warning: Specifying width/height in layout() is now deprecated.
## Please specify in ggplotly() or plot_ly()
# Mostrar el gráfico
grafico_torta
Un cartograma es un tipo de mapa en el que se distorsionan las geometrÃas de las áreas en función de un atributo especÃfico, como población, ingresos o cualquier otro dato cuantitativo.
En lugar de mostrar las áreas geográficas de forma precisa, se ajustan proporcionalmente a los valores del atributo que se está representando. Esto permite visualizar la distribución de datos de manera más clara y comparativa, destacando las áreas con mayor o menor cantidad del atributo en cuestión.
#provincias2$totalPoblación
# Crear el cartograma para la vÃa actual
provincias_cartograma <- cartogram_cont(provincias2, weight = "totalPoblación")
# Crear el gráfico con ggplot2
ggplot(provincias_cartograma) +
geom_sf(aes(fill = totalPoblación)) +
labs(
fill = "totalPoblación",
title = paste("Cartograma de Población Total") # TÃtulo con nombre personalizado
) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5))
# Crear el gráfico con ggplot2
ggplot(provincias_cartograma) +
geom_sf(aes(fill = totalSituacionCalle)) +
labs(
fill = "totalSituacionCalle",
title = paste("Cartograma: Cantidad de Personas en Situación de Calle") # TÃtulo con nombre personalizado
) +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5))
grafico_situacion_calle
cat$URL <- paste0('<a href="', cat$URL, '" target="_blank">', cat$URL, '</a>')
# Crear el datatable y evitar escape en la columna de URL
datatable(cat, escape = FALSE, options = list(pageLength = 10))
Mapa de elevación (DEM) para la región NOA, utilizando un bounding box de la región. Para obtener el mapa de elevación (DEM) es la función get_elev_raster del paquete elevatr en R. get_elev_raster accede a servicios en lÃnea, como el servidor de datos de elevación de Amazon Web Services (AWS) o similares, que proporcionan modelos de elevación digital globales (por ejemplo, SRTM o ASTER).
# Definir el sistema de proyección en WGS84
ll_proj <- "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"
# Cargar y filtrar provincias
provincias <- st_read("./provincia.shp")
## Reading layer `provincia' from data source
## `D:\Users\lr826\Desktop\eval\ultimos\casoNOA\provincia.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 24 features and 8 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -74 ymin: -90 xmax: -25 ymax: -21.78086
## Geodetic CRS: WGS 84
provincias <- provincias %>%
filter(fna %in% c("Provincia de Jujuy", "Provincia de Salta", "Provincia de Santiago del Estero", "Provincia de Tucumán", "Provincia de Catamarca"))
# Unir provincias y transformar a EPSG:4326
region <- st_union(provincias)
region <- st_transform(region, 4326)
# Obtener el bounding box de la región
bbox <- st_bbox(region)
# Descargar el DEM utilizando las coordenadas del bounding box
dem <- get_elev_raster(locations = data.frame(x = c(bbox["xmin"], bbox["xmax"]),
y = c(bbox["ymin"], bbox["ymax"])),
prj = ll_proj, z = 8, clip = "bbox")
## Mosaicing & Projecting
## Clipping DEM to bbox
## Note: Elevation units are in meters.
# Convertir el raster a EPSG:4326 si es necesario
if (as.character(crs(dem)) != ll_proj) {
dem <- projectRaster(dem, crs = ll_proj)
}
# Reducir la resolución del raster (resample a menor resolución)
dem_resampled <- aggregate(dem, fact = 4) # Reduce la resolución dividiendo las celdas en 4
# Guardar el raster con resolución reducida como archivo PNG
png_filename <- tempfile(fileext = ".png")
writeRaster(dem_resampled, png_filename, format = "PNG", overwrite = TRUE)
# Cargar el raster y el contorno en un mapa leaflet
leaflet() %>%
addTiles() %>%
addRasterImage(dem_resampled, colors = terrain.colors(10), opacity = 0.7) %>%
addPolygons(data = region, color = "black", weight = 2, fill = FALSE) %>%
addLegend(pal = colorNumeric(terrain.colors(10), values(dem_resampled), na.color = "transparent"),
values = values(dem_resampled),
title = "Elevación (m)")
Los nuevos MDE tienen una resolución espacial de 5m y una precisión vertical submétrica,
# Reemplaza 'ruta/al/archivo.img' con la ubicación de tu archivo .img
raster_data <- rast("2366-04-2-d.img")
# Reducir la resolución del raster (ajusta 'fact' según sea necesario)
raster_data_lowres <- aggregate(raster_data, fact = 10, fun = mean)
# Convertir a WGS84 si es necesario
raster_data_wgs84 <- project(raster_data_lowres, "EPSG:4326")
library(dplyr)
library(leaflet)
# Crear el mapa Leaflet y agregar el raster de menor resolución
leaflet() %>%
addTiles() %>% # Agregar una capa base
addRasterImage(raster_data_wgs84,
colors = terrain.colors(20), # Paleta de colores
opacity = 0.7) %>% # Ajustar la opacidad
addLegend(pal = colorNumeric(terrain.colors(20), values(raster_data_wgs84), na.color = "transparent"),
values = values(raster_data_wgs84),
title = "Elevación (m)",
position = "bottomright") %>%
setView(lng = mean(ext(raster_data_wgs84)[c(1, 2)]),
lat = mean(ext(raster_data_wgs84)[c(3, 4)]),
zoom = 13)
# Generar pendientes a partir del raster reducido
slope <- terrain(raster_data_wgs84, v = "slope", unit = "degrees")
# 4. Definir la lÃnea de muestreo para el perfil (por ejemplo, entre dos puntos)
# Asegúrate de que estas coordenadas estén en el sistema WGS84
puntos <- data.frame(lon = c(-65.61, -65.58), lat = c(-22.10, -22.10)) # Ajusta las coordenadas
linea <- st_sfc(st_linestring(as.matrix(puntos)), crs = 4326) # Crear la lÃnea
# 5. Asegurarse de que la lÃnea esté en el mismo sistema de coordenadas que el raster
linea_wgs84 <- st_transform(linea, crs = st_crs(raster_data_wgs84)) # Transformar la lÃnea al CRS del raster
# 3. Convertir el raster a WGS84 si es necesario
raster_data_wgs84 <- project(raster_data_lowres, "EPSG:4326")
# 4. Definir la lÃnea de muestreo para el perfil (por ejemplo, entre dos puntos)
# Asegúrate de que estas coordenadas estén en el sistema WGS84
puntos <- data.frame(lon = c(-65.58, -65.56), lat = c(-21.10, -21.09)) # Ajusta las coordenadas
# 4. Definir la lÃnea de muestreo para el perfil (por ejemplo, entre dos puntos)
# Asegúrate de que estas coordenadas estén en el sistema WGS84
puntos <- data.frame(lon = c(-65.58, -65.56), lat = c(-21.10, -21.09)) # Ajusta las coordenadas
linea <- st_sfc(st_linestring(as.matrix(puntos)), crs = 4326) # Crear la lÃnea
# 5. Asegurarse de que la lÃnea esté en el mismo sistema de coordenadas que el raster
linea_wgs84 <- st_transform(linea, crs = st_crs(raster_data_wgs84)) # Transformar la lÃnea al CRS del raster
# 6. Usar st_segmentize para dividir la lÃnea en segmentos más pequeños (para mejorar la extracción de puntos)
linea_segmentada <- st_segmentize(linea_wgs84, dfMax = 0.001) # Ajusta la distancia mÃnima de los segmentos
# 7. Extraer los puntos a lo largo de la lÃnea segmentada
# Esta vez se usa st_coordinates en la lÃnea segmentada para obtener los puntos
puntos_muestreo <- st_coordinates(linea_segmentada) # Coordenadas de los puntos segmentados
puntos_vect <- vect(puntos_muestreo) # Convertir a un objeto de tipo 'vect' para 'terra'
# 8. Extraer el perfil de elevación en estos puntos
elevaciones <- extract(raster_data_wgs84, puntos_vect)
# 9. Graficar el perfil de elevación
perfil <- elevaciones[, 2] # Extraemos las elevaciones (el valor de la segunda columna)
distancia <- seq(0, by = 10, length.out = length(perfil)) # Distancia entre puntos
# Filtrar valores NA
perfil <- perfil[!is.na(perfil)]
distancia <- distancia[1:length(perfil)]
# Graficar el perfil de elevación
if(length(perfil) > 0) {
plot(distancia, perfil, type = "l", col = "blue", lwd = 2,
xlab = "Distancia (m)", ylab = "Elevación (m)",
main = "Perfil de Elevación")
} else {
message("No se encontraron datos de elevación en el perfil.")
}
## No se encontraron datos de elevación en el perfil.
Capa de Elevación
Capa de Pendiente
Capa de Curvas de Nivel
# Crear contornos (curvas de nivel) a partir del raster reducido
contours <- as.contour(raster_data_wgs84, levels = seq(0, max(values(raster_data_wgs84), na.rm = TRUE), by = 50))
# Crear el mapa Leaflet y agregar el raster de elevación, pendientes, y contornos
leaflet() %>%
addTiles() %>% # Capa base
addRasterImage(raster_data_wgs84,
colors = terrain.colors(20),
opacity = 0.7,
group = "Elevación") %>%
addRasterImage(slope,
colors = colorNumeric(c("lightblue", "darkblue"), values(slope), na.color = "transparent"),
opacity = 0.5,
group = "Pendiente") %>%
addPolylines(data = contours,
color = "brown",
weight = 1,
opacity = 0.7,
group = "Curvas de Nivel") %>%
addLayersControl(
overlayGroups = c("Elevación", "Pendiente", "Curvas de Nivel"),
options = layersControlOptions(collapsed = FALSE)
) %>%
addLegend(pal = colorNumeric(terrain.colors(20), values(raster_data_wgs84), na.color = "transparent"),
values = values(raster_data_wgs84),
title = "Elevación (m)",
position = "bottomright") %>%
addLegend(pal = colorNumeric(c("lightblue", "darkblue"), values(slope), na.color = "transparent"),
values = values(slope),
title = "Pendiente (°)",
position = "bottomleft") %>%
setView(lng = mean(ext(raster_data_wgs84)[c(1, 2)]),
lat = mean(ext(raster_data_wgs84)[c(3, 4)]),
zoom = 13)
Enlace al metadato de regiones agroecológicas de INTA
# head(mtq_pencil)
# Crear el mapa con leaflet
leaflet() %>%
addTiles('https://wms.ign.gob.ar/geoserver/gwc/service/tms/1.0.0/mapabase_gris@EPSG%3A3857@png/{z}/{x}/{-y}.png') %>%
setView(lng =-65.39,lat =-26.01, zoom = 6)%>%
addPolygons(data = agroEco,
fillColor = ~pal1(reg_agro), # Asigna un color distinto a cada provincia
fillOpacity = 0.6,
color = "black", # Color del borde de cada polÃgono
weight = 1, # Grosor del borde
popup = ~reg_agro # Opcional: muestra el nombre en un popup
)%>%
addLegend("bottomright",
pal = pal1,
values = agroEco$reg_agro,
title = "NOA: Regiones Agroecológicas",
opacity = 0.6)
Enlace al metadato de cuencas hÃdricas de INTA
# head(mtq_pencil)
# Crear el mapa con leaflet
leaflet() %>%
addTiles('https://wms.ign.gob.ar/geoserver/gwc/service/tms/1.0.0/mapabase_gris@EPSG%3A3857@png/{z}/{x}/{-y}.png') %>%
setView(lng =-65.39,lat =-26.01, zoom = 6)%>%
addPolygons(data = cuencas,
fillColor = ~pal2(nom_macro_), # Asigna un color distinto a cada provincia
fillOpacity = 0.6,
color = "black", # Color del borde de cada polÃgono
weight = 1, # Grosor del borde
popup = paste("<b>Cuenca:</b> ", cuencas$nom_macro_, "<br/>",
"<b>Nombre:</b> ", cuencas$nombre_1, "<br/>")
)%>%
addLegend("bottomright",
pal = pal2,
values = cuencas$nom_macro_,
title = "NOA: Cuencas HÃdricas",
opacity = 0.6)
## Warning in RColorBrewer::brewer.pal(max(3, n), palette): n too large, allowed maximum for palette Set3 is 12
## Returning the palette you asked for with that many colors
## Warning in RColorBrewer::brewer.pal(max(3, n), palette): n too large, allowed maximum for palette Set3 is 12
## Returning the palette you asked for with that many colors
Enlace al metadato de Unidades Geológicas 1M
wfs1 <- "WFS:https://sigam.segemar.gov.ar/geoserver217/wfs"
layer <- "sigam:e1M.NOA.Geol"
#sigam:e1M.NOA.Fallas
geol <- st_read(wfs1, layer)
## Reading layer `sigam:e1M.NOA.Geol' from data source
## `WFS:https://sigam.segemar.gov.ar/geoserver217/wfs' using driver `WFS'
## Simple feature collection with 1532 features and 4 fields
## Geometry type: MULTISURFACE
## Dimension: XY
## Bounding box: xmin: -69.25234 ymin: -27.99997 xmax: -65.63704 ymax: -21.77727
## Geodetic CRS: WGS 84
geol <- geol %>%
st_cast(to = "GEOMETRYCOLLECTION") %>%
st_collection_extract(type = "POLYGON")
pal3 <- colorFactor(palette = "Set3", domain = geol$unidad)
# Crear el dataframe con los datos proporcionados
library(dplyr)
# Definir las coordenadas de los salares y proyectos
data <- data.frame(
Nombre = c("Salar del Rincón",
"Proyecto del Salar Cauchari Olaroz",
"Salar de Olaroz",
"Salar de Arizaro",
"Salar del Hombre Muerto",
"Salar de Antofalla"),
Latitud = c(-24.171111, -23.716667, -23.475556, -24.725, -25.35, -25.6836),
Longitud = c(-67.096111, -66.75, -66.665833, -67.673611, -67.07, -67.6856)
)
p.sf <- st_as_sf(data, coords = c("Longitud", "Latitud"), crs = 4326)
# head(mtq_pencil)
# Crear el mapa con leaflet
leaflet() %>%
addTiles('https://wms.ign.gob.ar/geoserver/gwc/service/tms/1.0.0/mapabase_gris@EPSG%3A3857@png/{z}/{x}/{-y}.png') %>%
setView(lng =-65.39,lat =-26.01, zoom = 7)%>%
addPolygons(data = geol,
fillColor = ~pal3(unidad), # Asigna un color distinto a cada provincia
fillOpacity = 0.6,
color = "black", # Color del borde de cada polÃgono
weight = 1, # Grosor del borde
popup = paste("<b>Unidad:</b> ", geol$unidad, "<br/>",
"<b>Edad:</b> ", geol$edad, "<br/>",
"<b>Tipo de Roca:</b> ", geol$tipoderoca, "<br/>"))%>%
addMarkers(data = p.sf, popup = ~p.sf$Nombre)%>%
addControl(
html = paste0(
"<div style='background-color: white; padding: 8px; border-radius: 5px; max-width: 300px;'>",
"<h4 style='margin: 0; text-align: center;'>NOA: GeologÃa</h4>",
"<div style='display: flex; flex-wrap: wrap; gap: 4px; font-size: 0.8em;'>",
paste0("<div style='flex: 1 1 45%; display: flex; align-items: center;'>",
"<span style='background-color:", pal3(unique(geol$unidad)),
"; width: 10px; height: 10px; display: inline-block; margin-right: 4px;'></span>",
unique(geol$unidad), "</div>", collapse = ""),
"</div>",
"</div>"
),
position = "bottomright"
)
## Warning in RColorBrewer::brewer.pal(max(3, n), palette): n too large, allowed maximum for palette Set3 is 12
## Returning the palette you asked for with that many colors
## Warning in RColorBrewer::brewer.pal(max(3, n), palette): n too large, allowed maximum for palette Set3 is 12
## Returning the palette you asked for with that many colors
https://geography.utk.edu/creating-satellite-timelapse-with-streamlit-and-earth-engine/ Aplicación en python
Un timelapse es una técnica de video que permite mostrar el paso del tiempo de forma acelerada, comprimiendo eventos que ocurren lentamente (como el movimiento de las nubes, el crecimiento de una planta o el cambio de las estaciones) en un corto periodo de tiempo.
#nlevels(asen$tipo_asentamiento)
# Crear el mapa y agregar los marcadores de color según el atributo
leaflet() %>%
addTiles('https://wms.ign.gob.ar/geoserver/gwc/service/tms/1.0.0/mapabase_gris@EPSG%3A3857@png/{z}/{x}/{-y}.png') %>%
setView(lng = -65.39, lat = -26.01, zoom = 7) %>%
addCircleMarkers(data = asen,
color = ~pal(tipo_asentamiento),
fillOpacity = 1,
radius = 3)%>%
addLegend("bottomright",
pal = pal,
values = asen$tipo_asentamiento,
title = "NOA: Asentamientos Humanos",
opacity = 0.6)