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.
#Datos climáticos
temperatura_global <- worldclim_global(var = "tavg", res = 5, path = "Datos", version = 2.1)
precipitacion_global <- worldclim_global(var = "prec", res = 5, path = "Datos", version = 2.1)
temp_media <- mean(temperatura_global)
## |---------|---------|---------|---------|=========================================
prec_media <- sum(precipitacion_global)
## |---------|---------|---------|---------|=========================================
rango_t_apto <- temp_media >= 22.5 & temp_media <= 28
rango_p_apto <- prec_media >= 1500 & prec_media <= 3500
par(mfrow = c(1, 2))
#Temperatura media mundial
my_palette_t <- colorRampPalette(c("#00F5FF", "#FFF000"))
plot(mean(temperatura_global), col = my_palette_t(20), plg = list(title = "Temp.(C°)"),
main = "Temperatura media")
## |---------|---------|---------|---------|=========================================
plot(rango_t_apto, col = c("grey", "darkgreen"), legend = FALSE, main = "Áreas entre 22.5°C y 28°C")
par(mfrow = c(1, 2))
#Precipitación media mundial
my_palette_p <- colorRampPalette(c("#FFF000","#0000FF"))
plot(sum(precipitacion_global), col = my_palette_p(20), plg = list(title = "Prec.(mm)"),
main = "Precipitación acumulada anual")
## |---------|---------|---------|---------|=========================================
plot(rango_p_apto, col = c("grey", "darkgreen"), legend = FALSE, main = "Áreas entre 1500 mm y 3500 mm")
Identifique 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.
#Colombia
map_colombia <- rnaturalearth::ne_states("colombia", returnclass = "sf")
sextent_c <- terra::ext(map_colombia)
rt_c <- terra::crop(mean(temperatura_global), sextent_c)
## |---------|---------|---------|---------|=========================================
rt_c <- terra::mask(rt_c, vect(map_colombia))
rp_c <- terra::crop(sum(precipitacion_global), sextent_c)
## |---------|---------|---------|---------|=========================================
rp_c <- terra::mask(rp_c, vect(map_colombia))
par(mfrow = c(1, 2))
terra::plot(rt_c, col = my_palette_t(10), plg = list(title = "Temp.(C°)"), main = "Temperatura media")
plot(map_colombia, col = "transparent", border = "black", add = TRUE)
## Warning in plot.sf(map_colombia, col = "transparent", border = "black", :
## ignoring all but the first attribute
temp_media_C <- mean(rt_c)
rango_t_apto_C <- temp_media_C >= 22.5 & temp_media_C <= 28
plot(rango_t_apto_C, col = c("grey", "darkgreen"), legend = FALSE, main = "Áreas entre 22.5°C y 28°C")
par(mfrow = c(1, 2))
terra::plot(rp_c, col = my_palette_p(10), plg = list(title = "Prec. (mm)"), main = "Precipitación acumulada")
plot(map_colombia, col = "transparent", border = "black", add = TRUE)
## Warning in plot.sf(map_colombia, col = "transparent", border = "black", :
## ignoring all but the first attribute
prec_media_C <- sum(rp_c)
rango_p_apto_C <- prec_media_C >= 1500 & prec_media_C <= 3500
plot(rango_p_apto_C, col = c("grey", "darkgreen"), legend = FALSE, main = "Áreas entre 1500 mm y 3500 mm")
Identificar algunos puntos al azar en la región del valle del Cauca y extraer la información de clima. Grafique las series de tiempo de temperatura y precipitación.
# Coordenadas sugeridas (Palmira, Zarzal)
puntos <- data.frame(nombre = c("Palmira", "Zarzal"),lon = c(-76.297, -76.069),lat = c(3.539, 4.391))
puntos_vect <- vect(puntos, geom = c("lon", "lat"), crs = crs(temperatura_global))
temp_ts <- terra::extract(temperatura_global, puntos_vect)
prec_ts <- terra::extract(precipitacion_global, puntos_vect)
temp_long <- temp_ts |> select(-ID) |> mutate(punto = puntos$nombre) |> pivot_longer(-punto, names_to = "mes", values_to = "temp") |> filter(!is.na(temp))
temp_long$mes <- str_sub(temp_long$mes, -2, -1)
temp_long$mes <- as.numeric(as.character(temp_long$mes))
prec_long <- prec_ts |> select(-ID) |> mutate(punto = puntos$nombre) |> pivot_longer(-punto, names_to = "mes", values_to = "prec") |> filter(!is.na(prec))
prec_long$mes <- str_sub(prec_long$mes, -2, -1)
prec_long$mes <- as.numeric(as.character(prec_long$mes))
month_labels <- c("Ene", "Feb", "Mar", "Abr", "May", "Jun","Jul", "Ago", "Sep", "Oct", "Nov", "Dic")
par(mfrow = c(2, 1))
colores <- rainbow(length(unique(temp_long$punto)))
# Gráfico de temperatura
plot(1, type = "n", xlim = c(1, 12), ylim = range(temp_long$temp, na.rm = TRUE),
xlab = "Mes", ylab = "°C", xaxt = "n", main = "Temperatura Media Mensual")
axis(1, at = 1:12, labels = month_labels)
puntos <- unique(temp_long$punto)
for (i in seq_along(puntos)) {
datos_punto <- temp_long[temp_long$punto == puntos[i], ]
lines(datos_punto$mes, datos_punto$temp, col = colores[i], lwd = 2)
}
legend("topright", legend = puntos, col = colores, lwd = 2, cex = 0.8)
# Gráfico de precipitación
plot(1, type = "n", xlim = c(1, 12), ylim = range(prec_long$prec, na.rm = TRUE),
xlab = "Mes", ylab = "mm", xaxt = "n", main = "Precipitación Mensual")
axis(1, at = 1:12, labels = month_labels)
puntos <- unique(prec_long$punto)
for (i in seq_along(puntos)) {
datos_punto <- prec_long[prec_long$punto == puntos[i], ]
lines(datos_punto$mes, datos_punto$prec, col = colores[i], lwd = 2)
}
legend("topright", legend = puntos, col = colores, lwd = 2, cex = 0.8)
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.
# Coordenadas sugeridas (Palmira, Zarzal)
puntos <- data.frame(nombre = c("Palmira", "Zarzal"),lon = c(-76.297, -76.069),lat = c(3.539, 4.391))
puntos_vect <- vect(puntos, geom = c("lon", "lat"), crs = crs(temperatura_global))
val_temp <- terra::extract(temperatura_global, puntos_vect)
val_prec <- terra::extract(precipitacion_global, puntos_vect)
val_temp_df <- as.data.frame(val_temp)[, -1]
val_prec_df <- as.data.frame(val_prec)[, -1]
# --- Para Palmira ---
temp_palmira <- as.numeric(val_temp_df[1, ])
prec_palmira <- as.numeric(val_prec_df[1, ])
dist_temp_palmira <- sqrt(sum((temperatura_global - temp_palmira)^2))
## |---------|---------|---------|---------|========================================= |---------|---------|---------|---------|========================================= |---------|---------|---------|---------|=========================================
dist_prec_palmira <- sqrt(sum((precipitacion_global - prec_palmira)^2))
## |---------|---------|---------|---------|========================================= |---------|---------|---------|---------|========================================= |---------|---------|---------|---------|=========================================
# --- Para Zarzal ---
temp_zarzal <- as.numeric(val_temp_df[2, ])
prec_zarzal <- as.numeric(val_prec_df[2, ])
dist_temp_zarzal <- sqrt(sum((temperatura_global - temp_zarzal)^2))
## |---------|---------|---------|---------|========================================= |---------|---------|---------|---------|========================================= |---------|---------|---------|---------|=========================================
dist_prec_zarzal <- sqrt(sum((precipitacion_global - prec_zarzal)^2))
## |---------|---------|---------|---------|========================================= |---------|---------|---------|---------|========================================= |---------|---------|---------|---------|=========================================
# Mapas de similaridad para Parmira
par(mfrow = c(2, 2))
plot(dist_temp_palmira, main = "Similaridad Temperatura - Palmira",
col = hcl.colors(10, "YlGnBu", rev = TRUE))
plot(dist_prec_palmira, main = "Similaridad Precipitación - Palmira",
col = hcl.colors(10, "YlGnBu", rev = TRUE))
#Mapas de similaridad para Zarzal
plot(dist_temp_zarzal, main = "Similaridad Temperatura - Zarzal",
col = hcl.colors(10, "YlGnBu", rev = TRUE))
plot(dist_prec_zarzal, main = "Similaridad Precipitación - Zarzal",
col = hcl.colors(10, "YlGnBu", rev = TRUE))
Compare los mapas generados por ambas aproximaciones y concluya.
A nivel global, se observa que las regiones cercanas a la línea del Ecuador, incluyendo gran parte de Centroamérica, el norte de América del Sur (especialmente Brasil), la región central del continente africano y los países del sudeste asiático alrededor de Indonesia, presentan condiciones climáticas favorables para el cultivo, tanto en términos de temperatura como de precipitación anual acumulada. Estos resultados destacan la aptitud climática de las zonas tropicales para el desarrollo de cultivos sensibles a estas variables.
En el caso específico de Colombia, se identifica una zona bastante extensa que cumple con los parámetros de aptitud climática para el cultivo de caña de azúcar, tanto en lo referente a los rangos de temperatura como a la precipitación acumulada anual. Esta condición resalta el potencial productivo del país en regiones donde convergen estas variables favorables.
Para el caso de las ciudades seleccionadas en el Valle del Cauca, Palmira y Zarzal, se observa que las condiciones de temperatura son adecuadas durante todos los meses del año. Sin embargo, la precipitación mensual no alcanza el requerimiento mínimo de 125 mm en los meses de enero, febrero, julio, agosto y diciembre, lo que podría limitar parcialmente la aptitud climática en esos periodos específicos.
Las condiciones climáticas de Palmira y Zarzal presentan una alta similaridad con otras regiones del mundo, especialmente en el hemisferio sur y en zonas alejadas de sistemas montañosos. Esto indica que existen amplias áreas a nivel global con características climáticas comparables, lo que resalta la representatividad de estas ciudades en contextos tropicales de baja altitud.