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

names(temperaturas) <- month.name

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      :   January,  February,     March,     April,       May,      June,      July,    August, September,   October,  November,  December 
## 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)

names(precipitaciones) <- month.name

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      : January, February, March, April,  May, June, July, August, September, October, November, December 
## 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

temp_adecuada <- calc(temperaturas, function(x) x >= temp_min & x <= temp_max)

levelplot(temp_adecuada, names.attr = names(temperaturas), 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))  

# 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 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