Objetivo

Aprender a generar capas continuas (raster) de distancia a caminos, pendiente y exposición, a partir de datos vectoriales y raster utilizando herramientas del paquete terra. Estas variables son frecuentemente empleadas como predictores en modelos de distribución de especies y análisis espaciales.


Paquetes requeridos

library(terra)    # Para manejo de datos raster
library(sf)       # Para lectura y manejo de datos vectoriales
library(ggplot2)  # Para visualización
library(viridis)  # Paleta de colores

1. Carga de la red vial y creación del raster base

Se parte de un shapefile con la red vial del área de estudio (por ejemplo, red_vial.shp).

# Cargar red vial
red_vial <- st_read("Datos/red_vial.shp")

# Transformar a proyección métrica (ejemplo: UTM zona 19 Sur)
red_vial <- st_transform(red_vial, 32719)

# Crear raster base (definir resolución en metros)
base <- rast(ext(red_vial), resolution = 30, crs = "EPSG:32719")

# Rasterizar la red vial (celdas con valor 1 representan caminos)
r_vial <- rasterize(vect(red_vial), base, field = 1, background = NA)

plot(r_vial, main = "Red vial rasterizada", col = c("lightgray", "red"))

2. Calcular la distancia euclidiana a caminos

# Calcular la distancia a caminos (en metros)
dist_caminos <- distance(r_vial)

# Visualizar el resultado
plot(dist_caminos, main = "Distancia a caminos (m)", col = viridis(50))

💡 Nota: Los valores bajos indican zonas cercanas a caminos, mientras que los altos representan áreas más aisladas.


3. Exportar la capa de distancia a caminos

writeRaster(dist_caminos, "Distancia_Caminos.tif", overwrite = TRUE)
cat("✅ Archivo 'Distancia_Caminos.tif' exportado correctamente.\n")

4. Carga del Modelo Digital de Elevación (DEM)

# Cargar DEM del área de estudio
dem <- rast("Datos/DEM.tif")

# Revisar propiedades
print(dem)

# Visualizar DEM
plot(dem, main = "Modelo Digital de Elevación", col = terrain.colors(50))

5. Calcular pendiente y exposición

La función terrain() de terra permite derivar estas variables directamente desde el DEM.

# Calcular pendiente (en grados)
pendiente <- terrain(dem, v = "slope", unit = "degrees", neighbors = 8)

# Calcular exposición (orientación de la pendiente)
exposicion <- terrain(dem, v = "aspect", unit = "degrees", neighbors = 8)

# Visualizar resultados
par(mfrow = c(1,2))
plot(pendiente, main = "Pendiente (grados)", col = viridis(50))
plot(exposicion, main = "Exposición (grados)", col = viridis(50))
par(mfrow = c(1,1))

6. Exportar las capas derivadas

writeRaster(pendiente, "Pendiente.tif", overwrite = TRUE)
writeRaster(exposicion, "Exposicion.tif", overwrite = TRUE)

cat("✅ Capas 'Pendiente.tif' y 'Exposicion.tif' exportadas correctamente.\n")

7. Visualización integrada con ggplot2

# Convertir raster a data frame para visualización
df_pend <- as.data.frame(pendiente, xy = TRUE)
colnames(df_pend) <- c("x", "y", "pendiente")

ggplot(df_pend) +
  geom_raster(aes(x, y, fill = pendiente)) +
  scale_fill_viridis_c(option = "C") +
  coord_equal() +
  labs(title = "Mapa de Pendiente", fill = "Grados") +
  theme_minimal()

8. Conclusiones


Productos esperados