#Librerias
require(raster)
require(rgdal)
require(tmaptools)
require(rasterVis)
library(leaflet)
library(sf)
library(tmap)
library(ggplot2)
library(terra)
# Cargar Datos - Temperatura promedio (worldclim.org)
archivos_temp <- list.files("wc2.1_10m_tavg/", pattern = "\\.tif$", full.names = TRUE)
temperaturas <- stack(archivos_temp)

print(temperaturas)
## class      : RasterStack 
## dimensions : 1080, 2160, 2332800, 12  (nrow, ncol, ncell, nlayers)
## resolution : 0.1666667, 0.1666667  (x, y)
## extent     : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
## crs        : +proj=longlat +datum=WGS84 +no_defs 
## names      : wc2.1_10m_tavg_01, wc2.1_10m_tavg_02, wc2.1_10m_tavg_03, wc2.1_10m_tavg_04, wc2.1_10m_tavg_05, wc2.1_10m_tavg_06, wc2.1_10m_tavg_07, wc2.1_10m_tavg_08, wc2.1_10m_tavg_09, wc2.1_10m_tavg_10, wc2.1_10m_tavg_11, wc2.1_10m_tavg_12 
## min values :         -45.88400,         -44.80000,         -57.92575,         -64.19250,         -64.81150,         -64.35825,         -68.46075,         -66.52250,         -64.56325,         -55.90000,         -43.43475,         -45.32700 
## max values :          34.00950,          32.82425,          32.90950,          34.19375,          36.25325,          38.35550,          39.54950,          38.43275,          35.79000,          32.65125,          32.78800,          32.82525
# Cargar Datos - Precipitaciones (worldclim.org)
archivos_prec <- list.files("wc2.1_10m_prec/", pattern = "\\.tif$", full.names = TRUE)
precipitaciones <- stack(archivos_prec)

print(precipitaciones)
## class      : RasterStack 
## dimensions : 1080, 2160, 2332800, 12  (nrow, ncol, ncell, nlayers)
## resolution : 0.1666667, 0.1666667  (x, y)
## extent     : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
## crs        : +proj=longlat +datum=WGS84 +no_defs 
## names      : wc2.1_10m_prec_01, wc2.1_10m_prec_02, wc2.1_10m_prec_03, wc2.1_10m_prec_04, wc2.1_10m_prec_05, wc2.1_10m_prec_06, wc2.1_10m_prec_07, wc2.1_10m_prec_08, wc2.1_10m_prec_09, wc2.1_10m_prec_10, wc2.1_10m_prec_11, wc2.1_10m_prec_12 
## min values :                 0,                 0,                 0,                 0,                 0,                 0,                 0,                 0,                 0,                 0,                 0,                 0 
## max values :               908,               793,               720,              1004,              2068,              2210,              2381,              1674,              1955,              2328,               718,               806

1. Mapa Global de aptitud climática - Caña de Azúcar

Temperatura media 22.5 y 28 grados.

# Rangos óptimos - temperatura para caña de azúcar
temp_min <- 22.5
temp_max <- 28

# Máscara áreas con rango de temperatura
temp_adecuada <- calc(temperaturas, function(x) x >= temp_min & x <= temp_max)

# Mapa de aptitud climática basado en temperatura media 
levelplot(temp_adecuada, main = "Mapa Global de Aptitud Climática - Caña de Azúcar (Temperatura Media)",
          col.regions = rev(terrain.colors(100)),
          at = seq(0, 1, length = 101))

Precipitación anual 1500 y 3500 mm.

# Cargar primera capa (anual)
prec_anual <- raster(archivos_prec[[1]])

# Rangos óptimos - precipitaciones para caña de azúcar
prec_anual_min <- 1500
prec_anual_max <- 3500


# Paleta de colores
colores_personalizados <- rev(terrain.colors(10))  # Usa una paleta personalizada

# intervalos manuales para los valores de precipitación
intervalos <- c(0, 1500, 2000, 2500, 3000, 3500, 4000)

# Graficar utilizando intervalos y nueva paleta
levelplot(prec_anual,
          main = "Mapa Global de Aptitud Climática - Caña de Azúcar (Precipitación Anual)",
          col.regions = colores_personalizados,
          at = intervalos,
          xlab = "Longitud", ylab = "Latitud")

Precipitación mensual 125 y 290 mm.

# Rangos óptimos precipitación mensual para caña de azúcar
prec_mensual_min <- 125
prec_mensual_max <- 290

# Máscara rango de precipitación mensual en todas las capas
prec_mensual_adecuada <- calc(precipitaciones, function(x) all(x >= prec_mensual_min & x <= prec_mensual_max, na.rm = TRUE))

# Mapa de aptitud climática de la precipitación mensual para la caña de azúcar
levelplot(prec_mensual_adecuada, main = "Mapa Global de Aptitud Climática - Caña de Azúcar (Precipitación Mensual)",
          col.regions = rev(terrain.colors(100)),
          at = seq(0, 1, length = 101))

2. Países con alto potencial - Caña de Azúcar

# Cargar el shapefile global de países
shapefile_path <- "world-countries/World_Countries_Generalized.shp"
world_shapefile <- st_read(shapefile_path)
## Reading layer `World_Countries_Generalized' from data source 
##   `/Users/manuel/R-Studio-Jav/analis-geoespacial/infor2-rmarkdown-m1u2/world-countries/World_Countries_Generalized.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 251 features and 4 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -20037510 ymin: -30240970 xmax: 20037510 ymax: 18418390
## Projected CRS: WGS 84 / Pseudo-Mercator
# Nombres de las columnas en el shapefile
print(names(world_shapefile))
## [1] "COUNTRY"    "ISO"        "COUNTRYAFF" "AFF_ISO"    "geometry"
# Filtrar dos países con áreas de alto potencial para la caña de azúcar (ejemplo: Brasil, Tailandia)
selected_countries <- world_shapefile[world_shapefile$COUNTRY %in% c("Brazil", "Thailand"), ]

# Mapa visual 
tmap_mode("view")
## tmap mode set to interactive viewing
tm_shape(selected_countries) +
  tm_polygons(col = "gray", border.col = "black") +
  tm_layout(title = "Países con Potencial para la Caña de Azúcar")

3. Valle del Cauca - Temperatura y Precipitación

# Definir las coordenadas de puntos específicos en el Valle del Cauca (ejemplo)
puntos <- data.frame(
  nombre = c("Punto1", "Punto2", "Punto3"),
  lon = c(-76.522, -76.529, -76.444),
  lat = c(3.451, 3.404, 3.537)
)

# Datos temperatura para cada punto
temp_data <- extract(temperaturas, SpatialPoints(puntos[, c("lon", "lat")]), df = TRUE)

# datos precipitación para cada punto
prec_data <- extract(precipitaciones, SpatialPoints(puntos[, c("lon", "lat")]), df = TRUE)

# Combinar las series con los nombres de los puntos
temp_data <- cbind(puntos, temp_data)
prec_data <- cbind(puntos, prec_data)

# Convertir datos a formato largo (long format) para ggplot
temp_long <- reshape2::melt(temp_data, id.vars = c("nombre", "lon", "lat"))
prec_long <- reshape2::melt(prec_data, id.vars = c("nombre", "lon", "lat"))

# Gráficos de series temporales
temp_plot <- ggplot(temp_long, aes(x = variable, y = value, group = nombre, color = nombre)) +
  geom_line() +
  labs(title = "Series de Temperatura Promedio", x = "Meses", y = "Temperatura (°C)") +
  theme_minimal()

prec_plot <- ggplot(prec_long, aes(x = variable, y = value, group = nombre, color = nombre)) +
  geom_line() +
  labs(title = "Series de Precipitación Mensual", x = "Meses", y = "Precipitación (mm)") +
  theme_minimal()

# Mostrar los gráficos
print(temp_plot)

print(prec_plot)

4. Métrica de Similaridad

# Coordenadas de los puntos de referencia Valle del Cauca
puntos <- data.frame(
  nombre = c("Punto1", "Punto2", "Punto3"),
  lon = c(-76.522, -76.529, -76.444),
  lat = c(3.451, 3.404, 3.537)
)


# Extraer datos de temperatura y precipitación para los puntos de referencia
temp_puntos <- extract(temperaturas, SpatialPoints(puntos[, c("lon", "lat")]), df = TRUE)
prec_puntos <- extract(precipitaciones, SpatialPoints(puntos[, c("lon", "lat")]), df = TRUE)

# Calcular promedios para cada punto
temp_promedios <- colMeans(temp_puntos[, -1], na.rm = TRUE)
prec_promedios <- colMeans(prec_puntos[, -1], na.rm = TRUE)

# Calcular distancia euclidiana entre la referencia y las celdas globales
calcular_similaridad <- function(temp_raster, prec_raster, temp_valor, prec_valor) {
  dist_temp <- abs(temp_raster - temp_valor)
  dist_prec <- abs(prec_raster - prec_valor)
  sqrt(dist_temp^2 + dist_prec^2)
}

# Raster de similaridad para cada punto de referencia
mapas_similaridad <- lapply(1:nrow(puntos), function(i) {
  distancia <- overlay(temperaturas[[1]], precipitaciones[[1]],
                       fun = function(t, p) calcular_similaridad(t, p, temp_promedios[i], prec_promedios[i]))
  return(distancia)
})

# Visualizar todos los mapas de similaridad
combined_plots <- stack(mapas_similaridad)
levelplot(combined_plots,
          names.attr = puntos$nombre,
          col.regions = rev(terrain.colors(100)),
          main = "Comparación de Mapas de Similaridad para los Puntos de Referencia",
          xlab = "Longitud", ylab = "Latitud")

5. Comparaciones y Conclusiones