9  Trabajo con coberturas ráster

NoteResultados de aprendizaje
  • R4. Importar y manipular información espacial en R.
  • R5. Usar paquetes para el análisis espacial en R.

Hasta ahora trabajamos con datos vectoriales. Los datos ráster representan el espacio como una grilla de celdas (píxeles), ideal para variables continuas: elevación, temperatura, imágenes satelitales. El paquete de referencia es terra.

install.packages(c("terra", "tmap", "tidyterra", "geodata"))
library(tidyverse)
library(terra)
library(sf)
library(tmap)
library(tidyterra)
library(geodata)

9.1 Importar y visualizar un ráster

rast() lee archivos ráster (por ejemplo, .tif):

# Sustituye la ruta por la de tu archivo .tif
r <- rast("data/mi_raster.tif")

plot(r)                                   # R base
tm_shape(r) + tm_raster()                 # tmap

# Con ggplot2 (vía tidyterra)
ggplot() +
  geom_spatraster(data = r) +
  scale_fill_whitebox_c() +
  theme_void()
Note

A diferencia del resto del libro, los ejemplos de este capítulo descargan datos desde internet con geodata (o requieren un .tif propio), por lo que su código se muestra pero no se ejecuta automáticamente al compilar. Ejecútalo en tu sesión de RStudio.

9.2 Descargar datos climáticos con geodata

geodata descarga datos geográficos globales. Aquí, temperatura media de Chile desde WorldClim:

chile_temp <- geodata::worldclim_country(
  country = "Chile", var = "tavg", res = 10, path = tempdir()
)

chile_mean <- mean(chile_temp)   # promedio de las 12 bandas mensuales
plot(chile_mean)

9.3 Recortar y enmascarar con vectores

Combinamos ráster y vectores. crop() recorta a la extensión de otra capa; mask() recorta exactamente al contorno:

region <- st_read("data/comunas_biobio.gpkg") %>%
  summarise()   # disuelve todas las comunas en un solo polígono regional

chilextent  <- ext(region)
region_temp <- crop(chile_mean, chilextent)
plot(region_temp)

9.4 Álgebra de mapas

Las operaciones aritméticas se aplican celda a celda. Esto permite combinar capas o transformarlas.

# Rango térmico: mes más cálido menos mes más frío, por píxel
temp_max      <- max(chile_temp)
temp_min      <- min(chile_temp)
rango_termico <- temp_max - temp_min
plot(rango_termico, main = "Rango térmico anual (°C)")

# Conversión de unidades °C → °F (operación escalar)
temp_fahrenheit <- region_temp * (9 / 5) + 32

global() resume todo el ráster en un valor; focal() calcula estadísticas en una ventana móvil (vecindad):

# Anomalía respecto a la media regional
media_regional <- global(region_temp, fun = "mean", na.rm = TRUE)
anomalia       <- region_temp - media_regional$mean

# Anomalía respecto a la media local (ventana 9×9)
media_focal <- focal(region_temp, w = 9, fun = "mean", na.rm = TRUE)
anomalia_local <- region_temp - media_focal

9.5 Extraer valores en puntos

extract() obtiene el valor del ráster en ubicaciones puntuales, por ejemplo los centroides de las comunas:

comunas       <- st_read("data/comunas_biobio.gpkg")
puntos        <- crds(centroids(vect(comunas)))
puntos_df     <- as.data.frame(puntos)
valores       <- extract(region_temp, puntos_df)
puntos_temp   <- cbind(puntos_df, valores)

ggplot() +
  geom_spatraster(data = region_temp) +
  geom_point(data = puntos_df, aes(x = x, y = y))

Ejercicios

ImportantEjercicio 9.1 — Idoneidad de cultivo de paltas

Trabajas en una consultora y te piden evaluar la idoneidad de áreas para cultivar paltas en la Región de Coquimbo. Las paltas requieren:

  • Temperatura media anual entre 15 y 22 °C (bio1).
  • Heladas infrecuentes: temperatura del mes más frío ≥ 2 °C (bio6).
  • Pendientes menores a 15°.

Datos:

chile <- gadm("CHL", level = 1, path = tempdir())            # regiones
bio   <- worldclim_country("CHL", var = "bio", path = tempdir())
elev  <- elevation_30s("CHL", path = tempdir())

Reclasificación sugerida (3 = óptimo, 2 = marginal, 1 = no apta):

Variable 3 2 1
Temp. media (bio1) 15–22 °C 12–15 o 22–26 resto
Heladas (bio6) > 5 °C 2–5 °C < 2 °C
Pendiente < 15° 15–25° ≥ 25°

Pasos:

  1. Calcula la pendiente a partir de la elevación (terrain()).
  2. Reclasifica cada variable con classify() o ifel().
  3. Alinea todas las capas a la misma grilla con resample().
  4. Combina con una ponderación: temperatura 35 %, heladas 40 %, pendiente 25 %.
  5. Produce un mapa final de idoneidad para Coquimbo.
Tip

Recuerda alinear todas las capas a la misma grilla con resample() antes de combinarlas, y consulta el significado de cada variable bioclimática en https://www.worldclim.org/data/bioclim.html.