library(sf)
# Define la ruta al archivo .shp
ruta_shapefile <- "C:/Users/Fabio/OneDrive/Desktop/Analisis de informacion geografica y espacial/Actividad 2/Shapefile/ne_50m_admin_0_countries.shp"
# Carga el shapefile
world <- st_read(ruta_shapefile)
## Reading layer `ne_50m_admin_0_countries' from data source
## `C:\Users\Fabio\OneDrive\Desktop\Analisis de informacion geografica y espacial\Actividad 2\Shapefile\ne_50m_admin_0_countries.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 242 features and 168 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -180 ymin: -89.99893 xmax: 180 ymax: 83.59961
## Geodetic CRS: WGS 84
library(terra)
# Ruta a los archivos descargados
ruta_temp <- list.files("C:/Users/Fabio/OneDrive/Desktop/Analisis de informacion geografica y espacial/Actividad 2/wc2.1_10m_tavg", pattern = ".tif$", full.names = TRUE)
ruta_prec <- list.files("C:/Users/Fabio/OneDrive/Desktop/Analisis de informacion geografica y espacial/Actividad 2/wc2.1_10m_prec", pattern = ".tif$", full.names = TRUE)
# Cargar todos los meses (12 bandas)
tmean_stack <- rast(ruta_temp)
prec_stack <- rast(ruta_prec)
# Calcular promedio de temperatura y precipitación total anual
tmean_ann <- mean(tmean_stack)
prec_ann <- sum(prec_stack)
# Guardar si lo deseas
writeRaster(tmean_ann, "tmean.tif", overwrite=TRUE)
writeRaster(prec_ann, "prec.tif", overwrite=TRUE)
# Visualización opcional
plot(tmean_ann, main = "Temperatura media anual")

plot(prec_ann, main = "Precipitación anual")

1. Utilizando los datos de clima de línea base a nivel global,
genere un código en R que permita construir mapas de aptitud en términos
climáticos para la caña de azúcar (con base en los rangos óptimos).
Grafique los mapas con una escala de colores adecuada.
# Rango óptimo
aptitud_temp <- (tmean_ann >= 22.5 & tmean_ann <= 28)
aptitud_prec <- (prec_ann >= 1500 & prec_ann <= 3500)
aptitud_total <- aptitud_temp * aptitud_prec
levels(aptitud_temp) <- data.frame(value = c(0, 1), category = c("No apto", "Apto"))
plot(aptitud_temp, main="Mapa de Aptitud Temperatura para Caña de Azúcar",col=c("grey90", "#EE6A50"))

levels(aptitud_prec) <- data.frame(value = c(0, 1), category = c("No apto", "Apto"))
plot(aptitud_prec, main="Mapa de Aptitud Precipitación para Caña de Azúcar", col=c("grey90", "#436EEE"))

levels(aptitud_total) <- data.frame(value = c(0, 1), category = c("No apto", "Apto"))
plot(aptitud_total, main="Mapa de Aptitud Climática para Caña de Azúcar", col=c("grey90", "#7AC5CD"))

Se observa una alta aptitud en regiones tropicales y subtropicales,
como partes del norte de Sudamérica, Centroamérica, África central, el
sudeste asiático y algunas islas del Pacífico. Esta visualización
permite identificar de manera efectiva las zonas geográficas con mayor
potencial productivo para el cultivo sostenible de caña de azúcar,
sirviendo como herramienta útil para la planificación agrícola a escala
global.
2. Identifique 2 o 3 países con áreas de alto potencial para la caña
de azúcar y realice un corte para estas zonas con el shape global.
Grafique los mapas con una escala de colores adecuada.
# Seleccionar países de interés
paises_interes <- world %>% filter(NAME %in% c("Brazil", "India", "Thailand"))
# Modo gráfico
tmap_mode("plot")
## ℹ tmap mode set to "plot".
# Mapa
tm_shape(world) +
tm_borders(col = "#4D4D4D") + # Bordes de todos los países
tm_shape(paises_interes) +
tm_fill(col = "#EE7942", alpha = 0.6) + # Relleno con transparencia fija
tm_borders(col = "#030303", lwd = 1.5) + # Bordes destacados
tm_text("NAME", size = 0.7, col = "black") + # Nombres de los países
tm_layout(
main.title = "Países con Alto Potencial para la Caña de Azúcar",
legend.outside = TRUE,
frame = FALSE
)
##
## ── tmap v3 code detected ───────────────────────────────────────────────────────
## [v3->v4] `tm_polygons()`: use 'fill' for the fill color of polygons/symbols
## (instead of 'col'), and 'col' for the outlines (instead of 'border.col').[v3->v4] `tm_polygons()`: use `fill_alpha` instead of `alpha`.[v3->v4] `tm_layout()`: use `tm_title()` instead of `tm_layout(main.title = )`[tip] Consider a suitable map projection, e.g. by adding `+ tm_crs("auto")`.

# --- 3. Recortar raster de aptitud a los países ---
apt_paises_crop <- crop(aptitud_total, vect(paises_interes))
apt_paises_mask <- mask(apt_paises_crop, vect(paises_interes))
# --- 4. Mapa con sintaxis tmap v4 ---
tmap_mode("plot")
## ℹ tmap mode set to "plot".
tm_shape(apt_paises_mask) +
tm_raster(
col.scale = tm_scale_categorical(
values = c("grey90", "#008000"),
labels = c("No apto", "Apto")
),
col.legend = tm_legend(title = "Aptitud climática")
) +
tm_shape(paises_interes) +
tm_borders(lwd = 1, col = "black") +
tm_title("Zonas Aptas para Caña de Azúcar en Países Seleccionados") +
tm_layout(legend.outside = TRUE, frame = FALSE)

Los resultados muestran que Brasil, India y Tailandia cuentan con
extensas zonas climáticamente aptas para el cultivo de caña de azúcar,
cumpliendo con los rangos óptimos de temperatura y precipitación. Estos
países no solo poseen condiciones ambientales favorables, sino también
una tradición agrícola que refuerza su potencial productivo. La
visualización geoespacial permite identificar regiones específicas
dentro de cada nación que son prioritarias para la expansión o
intensificación del cultivo, apoyando la toma de decisiones en
planificación agrícola y sostenibilidad.
Por medio de alguna métrica de similaridad (ejemplo: distancia
euclidiana) genere un código en R que permita identificar mapas de
similaridad a nivel global para los sitios identificados en 3. Grafique
los mapas con una escala de colores adecuada.
library(terra)
library(RColorBrewer)
library(rasterVis) # Si prefieres usar levelplot()
library(tmap)
# Crear tabla con coordenadas
locationsvalle <- data.frame(
name = c("Palmira", "Tuluá", "Zarzal"),
lat = c(3.5379, 4.0847, 4.3901),
lon = c(-76.3030, -76.1954, -76.0711)
)
# Convertir a objeto espacial
puntos <- vect(locationsvalle, geom = c("lon", "lat"), crs = "EPSG:4326")
# Extraer temperatura media y precipitación anual en cada punto
valores <- extract(c(tmean_ann, prec_ann), puntos)[, -1]
colnames(valores) <- c("temp", "prec")
# Inicializar listas para mapas
similarity_maps_temp <- list()
similarity_maps_prec <- list()
# Crear mapas de similaridad para cada punto
for (i in 1:nrow(locationsvalle)) {
nombre <- locationsvalle$name[i]
t_ref <- valores$temp[i]
p_ref <- valores$prec[i]
similarity_maps_temp[[nombre]] <- app(tmean_ann, function(x) abs(x - t_ref))
similarity_maps_prec[[nombre]] <- app(prec_ann, function(x) abs(x - p_ref))
}
library(tmap)
tmap_mode("plot")
## ℹ tmap mode set to "plot".
for (name in names(similarity_maps_temp)) {
print(
tm_shape(similarity_maps_temp[[name]]) +
tm_raster(
col.scale = tm_scale_continuous(
values = "brewer.yl_or_rd"
),
col.legend = tm_legend(title = paste("Diferencia Temp con", name))
) +
tm_title(paste("Similaridad Temperatura -", name)) +
tm_layout(legend.outside = TRUE)
)
}
## [plot mode] fit legend/component: Some legend items or map compoments do not
## fit well, and are therefore rescaled.
## ℹ Set the tmap option `component.autoscale = FALSE` to disable rescaling.

## [plot mode] fit legend/component: Some legend items or map compoments do not
## fit well, and are therefore rescaled.
## ℹ Set the tmap option `component.autoscale = FALSE` to disable rescaling.

## [plot mode] fit legend/component: Some legend items or map compoments do not
## fit well, and are therefore rescaled.
## ℹ Set the tmap option `component.autoscale = FALSE` to disable rescaling.

tmap_mode("plot")
## ℹ tmap mode set to "plot".
for (name in names(similarity_maps_prec)) {
print(
tm_shape(similarity_maps_prec[[name]]) +
tm_raster(
col.scale = tm_scale_continuous(
values = "brewer.blues",
),
col.legend = tm_legend(title = paste("Diferencia Prec con", name))
) +
tm_title(paste("Similaridad Precipitación -", name)) +
tm_layout(legend.outside = TRUE)
)
}
## [plot mode] fit legend/component: Some legend items or map compoments do not
## fit well, and are therefore rescaled.
## ℹ Set the tmap option `component.autoscale = FALSE` to disable rescaling.

## [plot mode] fit legend/component: Some legend items or map compoments do not
## fit well, and are therefore rescaled.
## ℹ Set the tmap option `component.autoscale = FALSE` to disable rescaling.

## [plot mode] fit legend/component: Some legend items or map compoments do not
## fit well, and are therefore rescaled.
## ℹ Set the tmap option `component.autoscale = FALSE` to disable rescaling.

5. Compare los mapas generados por ambas aproximaciones y
concluya.
Los mapas generados muestran patrones globales de similaridad
climática con respecto a tres municipios representativos del Valle del
Cauca: Palmira, Tuluá y Zarzal. Al calcular la diferencia absoluta en
temperatura media anual y precipitación total anual, se identificaron
regiones del mundo que presentan condiciones más cercanas a cada
localidad. En términos de temperatura, se observa que las zonas
tropicales cercanas al ecuador tienden a tener valores similares, lo
cual es consistente con la ubicación geográfica del Valle del
Cauca.
En cuanto a la precipitación, la variabilidad es mucho mayor. Las
regiones más húmedas del sudeste asiático, la cuenca amazónica y ciertas
áreas del África ecuatorial presentan patrones comparables, pero de
forma mucho más localizada.
Estos mapas no solo son útiles para análisis agroclimáticos y
planificación territorial, sino que también pueden apoyar estudios de
transferencia de tecnologías agrícolas, migración de cultivos o
evaluación de impactos del cambio climático mediante comparación
multiespacial de climas análogos.