En este documento se analizarán las áreas globales donde se podrían alcanzar los máximos rendimientos en el cultivo de caña de azúcar, teniendo en cuenta lo siguiente:
Rango de temperatura promedio de 32 a 38 grados Celsius.
Cantidad de lluvia anual entre 1200 y 2000 milímetros: 100 a 166 mensuales.
# Carga de las librerías
library(raster)
## Loading required package: sp
## The legacy packages maptools, rgdal, and rgeos, underpinning the sp package,
## which was just loaded, will retire in October 2023.
## Please refer to R-spatial evolution reports for details, especially
## https://r-spatial.org/r/2023/05/15/evolution4.html.
## It may be desirable to make the sf package available;
## package maintainers should consider adding sf to Suggests:.
## The sp package is now running under evolution status 2
## (status 2 uses the sf package in place of rgdal)
library(rgdal)
## Please note that rgdal will be retired during October 2023,
## plan transition to sf/stars/terra functions using GDAL and PROJ
## at your earliest convenience.
## See https://r-spatial.org/r/2023/05/15/evolution4.html and https://github.com/r-spatial/evolution
## rgdal: version: 1.6-7, (SVN revision 1203)
## Geospatial Data Abstraction Library extensions to R successfully loaded
## Loaded GDAL runtime: GDAL 3.5.2, released 2022/09/02
## Path to GDAL shared files: C:/Users/david/AppData/Local/R/win-library/4.2/rgdal/gdal
## GDAL binary built with GEOS: TRUE
## Loaded PROJ runtime: Rel. 8.2.1, January 1st, 2022, [PJ_VERSION: 821]
## Path to PROJ shared files: C:/Users/david/AppData/Local/R/win-library/4.2/rgdal/proj
## PROJ CDN enabled: FALSE
## Linking to sp version:2.0-0
## To mute warnings of possible GDAL/OSR exportToProj4() degradation,
## use options("rgdal_show_exportToProj4_warnings"="none") before loading sp or rgdal.
library(sp)
library(here)
## here() starts at C:/Users/david/OneDrive - PUJ Cali/Análisis Información Geográfica
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:raster':
##
## intersect, select, union
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# Ruta de archivos
ruta <- here()
archivos_precipitaciones <- list.files(paste(ruta,"precipitaciones/", sep = "/"), full.names = TRUE)
precipitaciones_all <- stack(archivos_precipitaciones)
## Warning in sp::CRS(...): sf required for evolution_status==2L
precipitaciones_all
## class : RasterStack
## dimensions : 4320, 8640, 37324800, 12 (nrow, ncol, ncell, nlayers)
## resolution : 0.04166667, 0.04166667 (x, y)
## extent : -180, 180, -90, 90 (xmin, xmax, ymin, ymax)
## crs : +proj=longlat +datum=WGS84 +no_defs
## names : wc2.1_2.5m_prec_01, wc2.1_2.5m_prec_02, wc2.1_2.5m_prec_03, wc2.1_2.5m_prec_04, wc2.1_2.5m_prec_05, wc2.1_2.5m_prec_06, wc2.1_2.5m_prec_07, wc2.1_2.5m_prec_08, wc2.1_2.5m_prec_09, wc2.1_2.5m_prec_10, wc2.1_2.5m_prec_11, wc2.1_2.5m_prec_12
## min values : 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
## max values : 1541.6693, 1277.0668, 1838.3458, 917.6643, 1128.9183, 1328.0711, 3106.0163, 2134.3019, 852.9240, 965.3761, 881.3589, 1301.6273
names(precipitaciones_all)=month.name
plot(precipitaciones_all)
Se identificarán 3 países con áreas de alto potencial para la caña de azúcar y se realizará un corte para estas zonas usando el mapa global.
# Calculate indicators in a single line without intermediate variables, assuming vectorized operations
indicador_precipitaciones <- sum(precipitaciones_all >= 100 & precipitaciones_all <= 166)
# Calculate the percentage in one step
indicador_precipitaciones_perc <- indicador_precipitaciones / 12 * 100
plot(indicador_precipitaciones_perc)
#Retirar los pixeles del indicador de precipitación
indicador_precipitaciones_adecuadas <- indicador_precipitaciones_perc
lugares_no_adecuados <- which(indicador_precipitaciones_perc[]<40)
indicador_precipitaciones_adecuadas[lugares_no_adecuados] <- NA
plot(indicador_precipitaciones_adecuadas)
world_map <- shapefile(paste(ruta,"World_Countries/World_Countries.shp", sep = "/"))
lugares_adecuados <- (indicador_precipitaciones_adecuadas+indicador_precipitaciones_adecuadas)/2
plot(world_map, main="Lugares con lluvia adecuada")
## Warning in is.projected(p4str): Package sf not available
plot(lugares_adecuados, add=T, col="lightblue")
#Cargue de imagenes raster de la temperatura
my_pallete <- colorRampPalette(c("blue", "red"))(100)
archivos_temperatura=list.files(paste(ruta,"temperatura/", sep = "/"), full.names = TRUE)
temperatura_all=stack(archivos_temperatura)
names(temperatura_all)=month.name
plot(temperatura_all, col = my_pallete)
# Identificar los paises con una temperatura media máxima entre 28 y 35 grados celcius
indicador_temperatura <-sum(temperatura_all>=30 & temperatura_all <= 35)
indicador_temperaturas_adecuadas=sum(indicador_temperatura)
#Se ajusta el indicador para presentarlo como porcentaje
indicador_temperaturas_perc=indicador_temperaturas_adecuadas/12*100
plot(indicador_temperaturas_perc)
Ahora, se tomarán 2 puntos al azar en el valle del cauca y se extraerá información del clima.
# Zona en el valle del cauca #1
require(leaflet)
## Loading required package: leaflet
leaflet() %>% addTiles() %>% addCircleMarkers(lng =-76.241701 ,lat = 4.398927)
#Extraer la información de temperatura y precipitación del punto seleccionado.
zona_1 <- data.frame(
longitude = c(-76.241701),
latitude = c(4.398927)
)
temperatura_1 <- as.data.frame(extract(temperatura_all, zona_1))
precipitaciones_1 <- as.data.frame(extract(precipitaciones_all, zona_1))
# Serie de tiempo de temperatura
temperatura_zona_1 <- ts(as.numeric(temperatura_1[1,]))
plot(temperatura_zona_1,
main= "Temperatura: Zona 1",
col="purple",
xlab = "Meses",
ylab="Grados Celcius")
# Serie de tiempo de precipitaciones
precipitaciones_zona_1 <- ts(as.numeric(precipitaciones_1[1,]))
plot(precipitaciones_zona_1,
main= "Precipitaciones: Zona 1",
col="blue",
xlab = "Meses",
ylab="mm")
# Zona en el valle del cauca #2
leaflet() %>% addTiles() %>% addCircleMarkers(lng =-76.259093 ,lat = 3.733896)
#Extraer la información de temperatura y precipitación de la zona 2
zona_2 <- data.frame(
longitude = c(-76.259093),
latitude = c(3.733896)
)
temperatura_2 <- as.data.frame(extract(temperatura_all, zona_2))
precipitaciones_2 <- as.data.frame(extract(precipitaciones_all, zona_2))
# Serie de tiempo de temperatura
temperatura_zona_2 <- ts(as.numeric(temperatura_2[1,]))
plot(temperatura_zona_2,
main= "Temperatura: Zona 2",
col="purple",
xlab = "Meses",
ylab="Grados Celcius")
# Serie de tiempo de precipitaciones
precipitaciones_zona_2 <- ts(as.numeric(precipitaciones_2[1,]))
plot(precipitaciones_zona_2,
main= "Precipitaciones: Zona 2",
col="blue",
xlab = "Meses",
ylab="mm")
Como siguiente paso se aplicarán técnicas de similitud a nivel global para las zonas seleccionadas
require(RColorBrewer)
## Loading required package: RColorBrewer
require(rasterVis)
## Loading required package: rasterVis
## Loading required package: lattice
temperatura_zona_1_simil = sqrt(sum((temperatura_all-as.numeric(temperatura_zona_1))^2))
my_palette <- colorRampPalette(c("red", "blue"))
# Use the custom palette in the levelplot
levelplot(temperatura_zona_1_simil,
par.settings = list(axis.line = list(col = "transparent"),
superpose.polygon = list(col = my_palette(10), border = "transparent")),
at = seq(0, 170, 20),
main = "Temperatura Zona 1 similares")
# Zona 1 comparada en cuanto precipitaciones
precipitaciones_zona_1_simil <- sqrt(sum((precipitaciones_all-as.numeric(precipitaciones_zona_1))^2))
levelplot(precipitaciones_zona_1_simil,par.settings=BTCTheme,at=seq(0,3670,100), main="Precipitaciones Zona 1 similares")
#Intersección de zonas similares a la zona 1
temperatura_similar_zona_1 <- temperatura_zona_1_simil
temperatura_similar_zona_1[(temperatura_similar_zona_1 > 30)] <- NA
precipitaciones_similar_zona_1<-precipitaciones_zona_1_simil
precipitaciones_similar_zona_1[(precipitaciones_similar_zona_1 > 300)] <- NA
interseccion <- temperatura_similar_zona_1 & precipitaciones_similar_zona_1
paridad <- par()
par(mar = c(0,0, 0, 0))
plot(world_map)
## Warning in is.projected(p4str): Package sf not available
plot(interseccion,add=T, col="blue",breaks=c(1,1.1),legend=FALSE)
El mapa nos arroja que la zona 1 tiene un clima parecido en general a los encontrados en el sur de Brasil, el este de los estados unidos (Carolina del Norte) y el área de la República Democrática del Congo.
require(RColorBrewer)
require(rasterVis)
temperatura_zona_2_simil = sqrt(sum((temperatura_all-as.numeric(temperatura_zona_2))^2))
# Use the custom palette in the levelplot
levelplot(temperatura_zona_2_simil,
par.settings = list(axis.line = list(col = "transparent"),
superpose.polygon = list(col = my_palette(10), border = "transparent")),
at = seq(0, 190, 20),
main = "Temperatura Zona 2 similares")
# Zona 2 comparada en cuanto precipitaciones
precipitaciones_zona_2_simil <- sqrt(sum((precipitaciones_all-as.numeric(precipitaciones_zona_2))^2))
levelplot(precipitaciones_zona_2_simil,par.settings=BTCTheme,at=seq(0,3670,100), main="Precipitaciones Zona 2 similares")
#Intersección de zonas similares a la zona 1
temperatura_similar_zona_2 <- temperatura_zona_2_simil
temperatura_similar_zona_2[(temperatura_similar_zona_2 > 30)] <- NA
precipitaciones_similar_zona_2<-precipitaciones_zona_2_simil
precipitaciones_similar_zona_2[(precipitaciones_similar_zona_2 > 300)] <- NA
interseccion_2 <- temperatura_similar_zona_2 & precipitaciones_similar_zona_2
paridad_2 <- par()
par(mar = c(0,0, 0, 0))
plot(world_map)
plot(interseccion_2,add=T, col="blue",breaks=c(1,1.1),legend=FALSE)
Laz zonas similares a la zona 2 son mayores: Uruguay, norte de Argentina, centro de África, la zona de Yucatán en México, entre otras.