Este es un R Markdown Notebook mediante el cual mostraremos como calcular la pendiente y aspecto.
En matematicas, la \(pendiente\) o gradiente de un plano es un numero que decriben la direccion y lo escarpado del terreno.
En cuanto al aspecto, este se refiere a la orientacion de la pendiente del plano en relacion a los puntos cardinales. El aspecto es la direccion de la brujula a la que esta enfrentada la pendiente.
Usamos la funcion Remove Objects (rm) para limpiar nuestro entorno de desarrollo:
rm(list=ls())
Llamamos las librerias \(raster\) y \(sp\):
library(sp)
library(raster)
Vamos a crear un DEM que llamaremos dem. Es nescesario pasar las coordenadas del cuadro delimitador(minimo y maximo a lo largo de los dos ejes, x e y):
dem <- raster(ncol=3, nrow=3, xmn=100, xmx=115, ymn=100, ymx=115)
Para ver cuantas celdas componen dem usamos:
ncell(dem)
## [1] 9
Para ver cual es la resolucion espacial(tamaño de celda) de dem, usamos:
res(dem)
## [1] 5 5
Asignamos unos valores de elevacion a dem en un objeto que llamaremos valores:
valores <- c(50, 45, 50, 30, 30 ,30, 8, 10, 10)
Retornamos los valores del objeto rastervalores:
(values(dem) <- valores)
## [1] 50 45 50 30 30 30 8 10 10
Ploteamos los valores de elevacion que contiene el objteo dem:
plot(dem, main = "DEM")
text(dem)
Asignamos un sistema de referencia de coordenadas al objeto dem en este caso usamos el EPSG: 3115 que corresponde a la Zona Oeste de Colombia y comprende el area -78° 35’W a 75° 32’W:
crs(dem) <- CRS('+init=epsg:3115')
## Warning in showSRID(uprojargs, format = "PROJ", multiline = "NO"): Discarded
## datum Marco_Geocentrico_Nacional_de_Referencia in CRS definition
Calculamos la Pendiente usando la funcion \(terrain\) proporcionada por la libreria \(raster\) y almacenamos los datos en un objeto que llamamos slope:
(slope = terrain(dem, 'slope', unit='degrees', neighbors=8))
## class : RasterLayer
## dimensions : 3, 3, 9 (nrow, ncol, ncell)
## resolution : 5, 5 (x, y)
## extent : 100, 115, 100, 115 (xmin, xmax, ymin, ymax)
## crs : +proj=tmerc +lat_0=4.59620041666667 +lon_0=-77.0775079166667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs
## source : memory
## names : slope
## values : 75.25766, 75.25766 (min, max)
Ploteamos el Calculo de la Pendiente usando la funcion \(plot\):
plot(slope, main= "Pendiente")
text(slope)
Analizando los datos obtenidos de calcular la Pendiente, podemos observar que el valor de la pendiente es de 75°.
Calculamos el Aspecto usando la funcion \(terrain\) proporcionada por la libreria \(raster\) y almacenamos los datos en un objeto que llamamos aspecto:
(aspecto = terrain(dem, 'aspect', unit='degrees', neighbors=8))
## class : RasterLayer
## dimensions : 3, 3, 9 (nrow, ncol, ncell)
## resolution : 5, 5 (x, y)
## extent : 100, 115, 100, 115 (xmin, xmax, ymin, ymax)
## crs : +proj=tmerc +lat_0=4.59620041666667 +lon_0=-77.0775079166667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs
## source : memory
## names : aspect
## values : 180.7538, 180.7538 (min, max)
plot(aspecto, main = "Aspecto")
text(aspecto)
Analizando los datos obtenidos de calcular el aspecto, podemos observar que los datos tienen una orientacion hacia el Sur por estar en el rango (157.5-202.5).
Esctibir codigo R para calcular pendiente y aspecto para el siguiente DEM:
# [1] 16
# [1] 5 5
Primero creamos un objeto tipo raster que llamaremos demn1:
dem1 <- raster(ncol=4, nrow=4, xmn=100, xmx=120, ymn=100, ymx=120)
Usamos la funcion \(ncell\) para saber el numero de celdas de nuestro objeto dem1:
ncell(dem1)
## [1] 16
Usamod la funcion \(res\) para saber cual es la resoulcion espacial (tamaño de celda) del objeto dem1:
res(dem1)
## [1] 5 5
Asignar valores de elevacion al objeto dem1, los almacenamos en un nuevo objeto que llamamos valores1:
valores1 <- c(50, 45, 50, 48, 30, 29, 30, 29, 10, 9, 9, 10, 25, 23, 19, 21)
Asignamos valores1 a el vector dem1:
(values(dem1) <- valores1)
## [1] 50 45 50 48 30 29 30 29 10 9 9 10 25 23 19 21
Instalamos la libreria \(RColorBrewer\), la cual usaremos para cambiar los colores del plot de Pendiente y Aspecto:
#install.packages("RColorBrewer")
Llamamos la libreria \(RColorBrewer\):
library(RColorBrewer)
##. Para conocer mas opciones de colores usamos el \(display.brewer.all()\) en el terminal.
Ploteamos el objeto dem1:
plot(dem1, main = "Calculo de Pendiente y aspecto para este DEM", col=brewer.pal(n=3, name='PuBu'))
text(dem1)
Asignamos un sistema de referencia de coordenadas al objeto dem1 en este caso usamos el EPSG: 3115 que corresponde a la Zona Oeste de Colombia y comprende el area -78° 35’W a 75° 32’W:
crs(dem1) <-CRS('+init=epsg:3115')
## Warning in showSRID(uprojargs, format = "PROJ", multiline = "NO"): Discarded
## datum Marco_Geocentrico_Nacional_de_Referencia in CRS definition
Calculamos la Pendiente usando la funcion \(terrain\) proporcionada por la libreria \(raster\) y almacenamos los datos en un objeto que llamamos slope1:
(slope1 = terrain(dem1, 'slope', unit='degrees', neighbors=8))
## class : RasterLayer
## dimensions : 4, 4, 16 (nrow, ncol, ncell)
## resolution : 5, 5 (x, y)
## extent : 100, 120, 100, 120 (xmin, xmax, ymin, ymax)
## crs : +proj=tmerc +lat_0=4.59620041666667 +lon_0=-77.0775079166667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs
## source : memory
## names : slope
## values : 36.05503, 75.62313 (min, max)
Ploteamos la Pendiente slope:
plot(slope1, main= "Pendiente", col=brewer.pal(n=4, name = 'PRGn'))
text(slope1)
Analizando los datos obtenidos de calcular la Pendiente, podemos observar que el terreno es irregular por cuanto tiene pendientes entre 76° y 36°.
Calculamos el Aspecto usando la funcion \(terrain\) proporcionada por la libreria \(raster\) y almacenamos los datos en un objeto que llamamos aspecto_1:
(aspecto_1 = terrain(dem1, 'aspect', unit='degrees', neighbors=8))
## class : RasterLayer
## dimensions : 4, 4, 16 (nrow, ncol, ncell)
## resolution : 5, 5 (x, y)
## extent : 100, 120, 100, 120 (xmin, xmax, ymin, ymax)
## crs : +proj=tmerc +lat_0=4.59620041666667 +lon_0=-77.0775079166667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs
## source : memory
## names : aspect
## values : 164.0546, 181.4688 (min, max)
Ploteamos el Aspecto de dem1 (aspecto_1):
plot(aspecto_1, main="Aspecto", col=brewer.pal(n=4, name='Blues'))
text(aspecto_1)
Analizando los datos obtenidos de calcular el aspecto, podemos observar que los datos tienen una orientacion hacia el Sur por estar en el rango (157.5-202.5).