Caso 2

Datos a revisar para el cultivo de caña de azucar

La temperatura media debe estar entre 20 y 30 grados centígrados. La Precipitación mensual debe estar entre 125 y 290 milimetros. La Precipitación anual debe estar entre 1500 y 3500 milimetros.

  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.
library(raster)
library(sp)
library(viridis)
Mapa_1=raster("temperatura/temperatura/wc2.1_10m_tavg_01.tif")

color_palette <- c("lightgray", viridis(99))

plot(Mapa_1, col = color_palette, main = "Mapa de Temperatura con Gradiente de Colores", 
     xlab = "Longitud", ylab = "Latitud")

Primera condicion (Temperatura)

Mapa_1_temp=Mapa_1>20&Mapa_1<30
Mapa_1_temp
## class      : RasterLayer 
## dimensions : 1080, 2160, 2332800  (nrow, ncol, ncell)
## resolution : 0.1666667, 0.1666667  (x, y)
## extent     : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
## crs        : +proj=longlat +datum=WGS84 +no_defs 
## source     : memory
## names      : layer 
## values     : 0, 1  (min, max)

Mapa de regiones que cumplen con la condicion 1

plot(Mapa_1_temp, col = color_palette, main = "Temperatura optima", 
     xlab = "Longitud", ylab = "Latitud")

Ruta=list.files("temperatura/temperatura/", full.names = TRUE)

temp=stack(Ruta)

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

Mapas con los meses del año

names(temp)=month.name
plot(temp, col = color_palette)

Revision de la condición

Temperatura_condicion=temp>20&temp<30
Temperatura_condicion
## class      : RasterBrick 
## 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 
## source     : memory
## 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 :       1,        1,     1,     1,   1,    1,    1,      1,         1,       1,        1,        1

Mapa de la temperatura

plot(Temperatura_condicion, col = color_palette, 
     xlab = "Longitud", ylab = "Latitud")

Revisión de la temperatura a nivel mundia

porc_temp=sum(Temperatura_condicion)/12*100
plot(porc_temp, col = color_palette, main = "Porcentaje Temperatura", 
     xlab = "Longitud", ylab = "Latitud")

Segunda y tercera condición

color_palette <- c("#EEF8F8", "lightblue","blue")

Mapa_2=raster("wc2_1_5m_prec/wc2.1_5m_prec_01.tif")
plot(Mapa_2, col = color_palette, main = "Precipitación mensual")

Mapa precipitación

Mapa_2_prec=Mapa_2>125&Mapa_2<290
Mapa_2_prec
## class      : RasterLayer 
## dimensions : 2160, 4320, 9331200  (nrow, ncol, ncell)
## resolution : 0.08333333, 0.08333333  (x, y)
## extent     : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
## crs        : +proj=longlat +datum=WGS84 +no_defs 
## source     : memory
## names      : layer 
## values     : 0, 1  (min, max)
plot(Mapa_2_prec, col = color_palette, main = "Precipitación mensual optima")

Mapa precipitación Optima

ruta2=list.files("wc2_1_5m_prec/", full.names = TRUE)
prec=stack(ruta2)
prec
## class      : RasterStack 
## dimensions : 2160, 4320, 9331200, 12  (nrow, ncol, ncell, nlayers)
## resolution : 0.08333333, 0.08333333  (x, y)
## extent     : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
## crs        : +proj=longlat +datum=WGS84 +no_defs 
## names      : wc2.1_5m_prec_01, wc2.1_5m_prec_02, wc2.1_5m_prec_03, wc2.1_5m_prec_04, wc2.1_5m_prec_05, wc2.1_5m_prec_06, wc2.1_5m_prec_07, wc2.1_5m_prec_08, wc2.1_5m_prec_09, wc2.1_5m_prec_10, wc2.1_5m_prec_11, wc2.1_5m_prec_12 
## min values :                0,                0,                0,                0,                0,                0,                0,                0,                0,                0,                0,                0 
## max values :              936,             1005,              774,             1004,             2068,             2210,             2578,             1897,             1955,             2328,              736,              827

Mapa precipitación por meses del año

names(prec)=month.name
plot(prec,col = color_palette)

Revision de la condición.

prec_cond=prec>125&prec<290
prec_cond
## class      : RasterBrick 
## dimensions : 2160, 4320, 9331200, 12  (nrow, ncol, ncell, nlayers)
## resolution : 0.08333333, 0.08333333  (x, y)
## extent     : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
## crs        : +proj=longlat +datum=WGS84 +no_defs 
## source     : r_tmp_2024-06-13_234532_7700_94996.grd 
## names      : layer.1, layer.2, layer.3, layer.4, layer.5, layer.6, layer.7, layer.8, layer.9, layer.10, layer.11, layer.12 
## min values :       0,       0,       0,       0,       0,       0,       0,       0,       0,        0,        0,        0 
## max values :       1,       1,       1,       1,       1,       1,       1,       1,       1,        1,        1,        1
names(prec_cond)=month.name
plot(prec_cond,col = color_palette)

Revision de la precipitación a nivel mundial

porc_preci=sum(prec_cond)/12*100
plot(porc_preci , col = color_palette, main = "Precipitación mundial")

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.

  1. Colombia
  2. Brasil
library(raster)
library(sf)
library(rnaturalearth)
library(rnaturalearthdata)

Colombia

Visualizando la temperatura de Colombia en enero:

im1 <- raster("temperatura/temperatura/wc2.1_10m_tavg_01.tif")


world <- ne_countries(scale = "medium", returnclass = "sf")


country <- world[world$name == "Colombia", ]


im1_crop <- crop(im1, extent(country))
im1_mask <- mask(im1_crop, country)

color_palette <- c("lightgray", viridis(99))

plot(im1_mask, main = "Temperatura promedio en enero - Colombia",col = color_palette)

bras = list.files("temperatura/temperatura/", full.names = TRUE)

bras_temp = stack(bras)


world <- ne_countries(scale = "medium", returnclass = "sf")


country <- world[world$name == "Colombia", ]


im1_crop <- crop(bras_temp, extent(country))
im1_mask <- mask(im1_crop, country)

names(im1_mask)=month.name

plot(im1_mask,col = color_palette)

porc_temp=sum(im1_mask)/12*1
plot(porc_temp,col = color_palette)

Visualizando la precipitación de Colombia en enero:

im1 <- raster("wc2_1_5m_prec/wc2.1_5m_prec_01.tif")


world <- ne_countries(scale = "medium", returnclass = "sf")


country <- world[world$name == "Colombia", ]


im1_crop <- crop(im1, extent(country))
im1_mask <- mask(im1_crop, country)


color_palette_preci <- c("#EEF8F8", "lightblue","blue")


plot(im1_mask, main = "Precipitación promedio en enero - Colombia", col=color_palette_preci)

bras = list.files("wc2_1_5m_prec/", full.names = TRUE)

bras_temp = stack(bras)

world <- ne_countries(scale = "medium", returnclass = "sf")


country <- world[world$name == "Colombia", ]


im1_crop <- crop(bras_temp, extent(country))
im1_mask <- mask(im1_crop, country)

names(im1_mask)=month.name

plot(im1_mask, col=color_palette_preci)

porc_temp_bra=sum(im1_mask)/12*10
plot(porc_temp_bra, col=color_palette_preci)

Brasil

Visualizando la temperatura de Brasil en enero:

im1 <- raster("temperatura/temperatura/wc2.1_10m_tavg_01.tif")


world <- ne_countries(scale = "medium", returnclass = "sf")


country <- world[world$name == "Brazil", ]


im1_crop <- crop(im1, extent(country))
im1_mask <- mask(im1_crop, country)


plot(im1_mask, main = "Temperatura promedio en enero - Brasil", col=color_palette)

bras = list.files("temperatura/temperatura/", full.names = TRUE)

bras_temp = stack(bras)


world <- ne_countries(scale = "medium", returnclass = "sf")


country <- world[world$name == "Brazil", ]


im1_crop <- crop(bras_temp, extent(country))
im1_mask <- mask(im1_crop, country)


names(im1_mask)=month.name

plot(im1_mask, col=color_palette)

Temperatura Optima

porc_temp_bra=sum(im1_mask)/12*1
plot(porc_temp_bra, col=color_palette)

Visualizando la precipitación de Brasil en enero:

im1 <- raster("wc2_1_5m_prec/wc2.1_5m_prec_01.tif")


world <- ne_countries(scale = "medium", returnclass = "sf")


country <- world[world$name == "Brazil", ]


im1_crop <- crop(im1, extent(country))
im1_mask <- mask(im1_crop, country)


plot(im1_mask, main = "Precipitación promedio en enero - Brasil", col=color_palette_preci)

bras = list.files("wc2_1_5m_prec/", full.names = TRUE)

bras_temp = stack(bras)


world <- ne_countries(scale = "medium", returnclass = "sf")


country <- world[world$name == "Brazil", ]


im1_crop <- crop(bras_temp, extent(country))
im1_mask <- mask(im1_crop, country)

names(im1_mask)=month.name


plot(im1_mask, col=color_palette_preci)

porc_temp_bra=sum(im1_mask)/12*10
plot(porc_temp_bra, col=color_palette_preci)

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.

Punto 1: Palmira

library(leaflet)


leaflet() %>% addTiles() %>% addCircleMarkers(lng =-76.315081 ,lat = 3.5407942)
palmira <- data.frame(longitude = c(-76.315081), latitude = c(3.5407942))


palmira_temp = as.data.frame(extract(temp, palmira))


palmira_prec = as.data.frame(extract(prec, palmira))

palmira_temp
##    January February    March    April     May   June    July   August September
## 1 22.50275  22.6155 22.73675 22.44175 22.3585 22.328 22.6225 22.74675  22.57575
##    October November December
## 1 22.02075 21.88275 22.14775
palmira_prec
##   January February March April May June July August September October November
## 1      96      101   135   171 151  122   64     76       113     204      178
##   December
## 1      126

Serie de tiempo para la temperatura:

Temperatura_palmira=ts(as.numeric(palmira_temp[1,]))

plot(Temperatura_palmira, main= "Palmira", col="blue")

Serie de tiempo para la precipitacion:

Precipitacion_palmira=ts(as.numeric(palmira_prec[1,]))

plot(Precipitacion_palmira, main= "Precipitación - Palmira", col="Blue")

Punto 2: Yumbo

leaflet() %>% addTiles() %>% addCircleMarkers(lng =-76.5006027 ,lat = 3.5448105)
Yumbo_ <- data.frame(longitude = c(-76.5006027), latitude = c(3.5448105))


Yumbo__temp = as.data.frame(extract(temp, Yumbo_))


Yumbo__prec = as.data.frame(extract(prec, Yumbo_))

Yumbo__temp
##   January February    March    April      May     June     July   August
## 1 19.6715  19.7905 19.93025 19.70875 19.58575 19.40175 19.53775 19.61475
##   September  October November December
## 1  19.58275 19.18175 19.14025 19.47825
Yumbo__prec
##   January February March April May June July August September October November
## 1     143      137   181   222 197  135   79     97       132     264      206
##   December
## 1      186

Serie de tiempo para la temperatura:

Temperatura_Yumbo_=ts(as.numeric(Yumbo__temp[1,]))

plot(Temperatura_Yumbo_, main= "Temperatura - Yumbo", col="green")

Serie de tiempo para la precipitacion:

Precipitacion_Yumbo_=ts(as.numeric(Yumbo__prec[1,]))

plot(Precipitacion_Yumbo_, main= "Precipitación - Yumbo", col="blue")

4.- 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.

punt_loc=cbind(-76.315081,3.5407942)
punt_loc2=cbind(-76.5006027,3.5448105)
locs=rbind.data.frame(punt_loc,punt_loc2)

Temperatura

temp_pal=extract(temp,punt_loc)
temp_pal2=extract(temp,locs)
temp_pal2
##       January February    March    April      May     June     July   August
## [1,] 22.50275  22.6155 22.73675 22.44175 22.35850 22.32800 22.62250 22.74675
## [2,] 19.67150  19.7905 19.93025 19.70875 19.58575 19.40175 19.53775 19.61475
##      September  October November December
## [1,]  22.57575 22.02075 21.88275 22.14775
## [2,]  19.58275 19.18175 19.14025 19.47825
matplot(t(temp_pal2),type="l")

similitud=abs(temp_pal[1,]-temp)
plot(similitud[[1]], col=color_palette)

plot(similitud,  col=color_palette)

Temperaturas similares a palmira y yumbo

library(RColorBrewer)
library(rasterVis)
library(lattice)



Simil_comp_temp <- sqrt(sum((temp - as.numeric(Temperatura_Yumbo_))^2))


levelplot(Simil_comp_temp,
          col.regions = colorRampPalette(c("yellow", "orange","#AED6F1"))(100),  # Colores degradados de azul
          at = seq(0, 176, 10),  # Definir intervalos para las etiquetas de los colores
          main = "Similitud de Temperatura con Cali",
          xlab = "Longitud",
          ylab = "Latitud",
          colorkey = list(labels = list(at = seq(0, 176, 20),  # Etiquetas de la leyenda
                                        labels = seq(0, 176, 20))),
          scales = list(draw = TRUE),  # Mostrar escalas de ejes
          par.settings = BTCTheme)  # Aplicar ajustes de estilo

library(RColorBrewer)
library(rasterVis)
library(lattice)



Simil_comp_temp <- sqrt(sum((temp - as.numeric(Temperatura_palmira))^2))


levelplot(Simil_comp_temp,
          col.regions = colorRampPalette(c("yellow", "orange","#AED6F1"))(100),  # Colores degradados de azul
          at = seq(0, 176, 10),  # Definir intervalos para las etiquetas de los colores
          main = "Similitud de Temperatura con Cali",
          xlab = "Longitud",
          ylab = "Latitud",
          colorkey = list(labels = list(at = seq(0, 176, 20),  # Etiquetas de la leyenda
                                        labels = seq(0, 176, 20))),
          scales = list(draw = TRUE),  # Mostrar escalas de ejes
          par.settings = BTCTheme)  # Aplicar ajustes de estilo

Precipitación:

prec_pal=extract(prec,punt_loc)
prec_pal2=extract(prec,locs)
prec_pal2
##      January February March April May June July August September October
## [1,]      96      101   135   171 151  122   64     76       113     204
## [2,]     143      137   181   222 197  135   79     97       132     264
##      November December
## [1,]      178      126
## [2,]      206      186
matplot(t(prec_pal2),type="l")

similitud=abs(prec_pal[1,]-prec)
plot(similitud[[1]], col=color_palette_preci)

plot(similitud, col=color_palette_preci)

Grafico de similitud

similar_menosde_2=similitud<2
aptitud=sum(similar_menosde_2)/12*100
plot(aptitud, col=color_palette_preci)

library(RColorBrewer)
library(rasterVis)
library(lattice)



Simil_comp_prec <- sqrt(sum((prec - as.numeric(Precipitacion_Yumbo_))^2))


levelplot(Simil_comp_prec,
          col.regions = colorRampPalette(c("blue", "darkblue"))(100),  # Colores degradados de azul
          at = seq(0, 176, 10),  # Definir intervalos para las etiquetas de los colores
          main = "Similitud de Precipitación con Cali",
          xlab = "Longitud",
          ylab = "Latitud",
          colorkey = list(labels = list(at = seq(0, 176, 20),  # Etiquetas de la leyenda
                                        labels = seq(0, 176, 20))),
          scales = list(draw = TRUE),  # Mostrar escalas de ejes
          par.settings = BTCTheme)  # Aplicar ajustes de estilo

library(RColorBrewer)
library(rasterVis)
library(lattice)



levelplot(Simil_comp_prec,
          col.regions = colorRampPalette(c("lightblue", "blue"))(100),  # Colores degradados de azul
          at = seq(0, 176, 10),  # Definir intervalos para las etiquetas de los colores
          main = "Similitud de Temperatura con Cali",
          xlab = "Longitud",
          ylab = "Latitud",
          colorkey = list(labels = list(at = seq(0, 176, 20),  # Etiquetas de la leyenda
                                        labels = seq(0, 176, 20))),
          scales = list(draw = TRUE),  # Mostrar escalas de ejes
          par.settings = BTCTheme)  # Aplicar ajustes de estilo

5.- Compare los mapas generados por ambas aproximaciones y concluya.