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.

3. Identificar algunos puntos (2 o 3) al azar en la región del valle del cauca (use google maps) y extraer la información de clima. Grafique las series de tiempo de temperatura y precipitación.

# Definimos las coordenadas de las ubicaciones en el Departamento del valle del cauca

locationsvalle <- data.frame(
  name = c("Palmira", "Tuluá", "Zarzal"),
  lat = c(3.5379, 4.0847, 4.3901),
  lon = c(-76.3030, -76.1954, -76.0711)
)


map <- leaflet(data = locationsvalle) %>%
  addProviderTiles(providers$OpenStreetMap) %>%  
  addMarkers(~lon, ~lat, label = ~name, popup = ~name) %>%
  setView(lng = -76.3, lat = 3.8, zoom = 9)  


map
tmean_stack <- rast(ruta_temp)
prec_stack  <- rast(ruta_prec)

# Crear puntos como SpatVector
coords <- data.frame(
  nombre = c("Palmira", "Tuluá", "Zarzal"),
  lon = c(-76.3030, -76.1954, -76.0711),
  lat = c(3.5379, 4.0847, 4.3901)
)

puntos <- vect(coords, geom = c("lon", "lat"), crs = "EPSG:4326")

# Extraer datos climáticos
temp_vals <- extract(tmean_stack, puntos)[, -1]
prec_vals <- extract(prec_stack, puntos)[, -1]

# Agregar nombres de los puntos
colnames(temp_vals) <- colnames(prec_vals) <- paste0("Mes_", 1:12)
temp_df <- cbind(Punto = coords$nombre, temp_vals)
prec_df <- cbind(Punto = coords$nombre, prec_vals)

# Convertir a formato largo para graficar
temp_long <- tidyr::pivot_longer(temp_df, -Punto, names_to = "Mes", values_to = "Temperatura")
prec_long <- tidyr::pivot_longer(prec_df, -Punto, names_to = "Mes", values_to = "Precipitacion")

# Convertir Mes a número
temp_long$Mes <- prec_long$Mes <- as.numeric(gsub("Mes_", "", temp_long$Mes))

# --- Paleta de colores personalizada ---
colores <- c("Palmira" = "#00CDCD", "Tuluá" = "#EE5C42", "Zarzal" = "#FFD700")

# --- Gráfico temperatura ---
ggplot(temp_long, aes(x = Mes, y = Temperatura, color = Punto, group = Punto)) +
  geom_line(size = 1.2) +
  geom_point(size = 2) +
  scale_color_manual(values = colores) +
  scale_x_continuous(breaks = 1:12) +
  labs(title = "Serie de Temperatura Media Mensual", y = "Temp °C", x = "Mes") +
  theme_minimal(base_size = 14)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

# --- Gráfico precipitación ---
ggplot(prec_long, aes(x = Mes, y = Precipitacion, color = Punto, group = Punto)) +
  geom_line(size = 1.2) +
  geom_point(size = 2) +
  scale_color_manual(values = colores) +
  scale_x_continuous(breaks = 1:12) +
  labs(title = "Serie de Precipitación Mensual", y = "mm", x = "Mes") +
  theme_minimal(base_size = 14)

Los resultados obtenidos a partir del análisis espacial y climático para los puntos de Palmira, Tuluá y Zarzal en el Valle del Cauca evidencian que estas localidades presentan condiciones favorables para el desarrollo agrícola, particularmente para cultivos sensibles al clima como la caña de azúcar.

La temperatura media mensual se mantiene entre los 22 °C y 24 °C durante todo el año, con leves variaciones estacionales, lo cual es adecuado para el crecimiento continuo de cultivos tropicales.

La precipitación mensual muestra un régimen bimodal, con picos en los meses de abril-mayo y octubre-noviembre, típico del clima de valle interandino, y con un mínimo seco relativo en julio-agosto.

Esta información es útil no solo para la planificación agrícola, sino también para el ajuste de calendarios de siembra, riego y toma de decisiones relacionadas con la gestión sostenible del recurso hídrico y la productividad agrícola en la región.

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.