Introduction

This is an R Markdown (http://rmarkdown.rstudio.com) Notebook to illustrate slope and aspect calculation. In mathematics, the slope or gradient of a plane is a number that describes both the direction and the steepness of the plane. On the another hand, aspect refers to the orientation of the plane slope in relation to the cardinal points. In short, aspect is the compass direction that a slope faces. Before going ahead, read the following two topics: (i) How slope works? (http://desktop.arcgis.com/en/arcmap/10.6/tools/spatial-analyst-toolbox/how-slope-works.htm) (ii) How aspect works? (http://desktop.arcgis.com/en/arcmap/10.6/tools/spatial-analyst-toolbox/how-aspect-works.htm) Take your time to review the links explaining slope and aspect algorithms. Then, take notes on your notebook. Once you understand how the two algorithms works, proceed to the next section.

Raster creation

Let’s create a toy DEM. Note that is necessary to pass bounding box coordinates (minimum and maximum along the two axes, x and y):

dem <- raster(ncol=3, nrow=3, xmn=100, xmx=115, ymn=100, ymx=115)

How many cells compose DEM?

ncell(dem)
[1] 9

What is the spatial resolution (i.e. cell size) of DEM?

res(dem)
[1] 5 5

Assign elevation values to DEM:

valores <- c(50, 45, 50, 30, 30, 30, 8, 10, 10)
(values(dem) <- valores)
[1] 50 45 50 30 30 30  8 10 10

Let’s plot the DEM along the elevation values:

plot(dem, main = "DEM")
text(dem)

Let’s assign a coordinate reference system to DEM:

crs(dem) <- CRS('+init=epsg:3115')

What does the EPSG code mean?

EPSG stands for European Petroleum Survey Group and is an organization that maintains a geodetic parameter database with standard codes, the EPSG codes, for coordinate systems, datums, spheroids, units and such alike. Additionally, this database contains the parameters for these objects or - if they cannot easily be expressed as values - at least references to where such parameters can be found.

Where can EPSG codes be found?

We can find EPSG codes at https://epsg.io/

What is the EPSG code for MAGNA Ciudad de Bogota?

The EPSG cofe for MGNA Ciudad Bogota is: 7458

Slope and aspect calculation

(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        : +init=epsg:3115 
source     : memory
names      : slope 
values     : 75.25766, 75.25766  (min, max)
plot(slope, main = "Pendiente")
text(slope)

(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        : +init=epsg:3115 
source     : memory
names      : aspect 
values     : 180.7538, 180.7538  (min, max)
plot(aspecto, main = "Aspecto")
text(aspecto)

Assignment

Write R code to calculate slope and aspect for the following DEM:

ndem <- raster(ncol=4, nrow=4, xmn=100, xmx=120, ymn=100, ymx=120)
ncell(ndem)
[1] 16
res(ndem)
[1] 5 5
valores <- c(50, 45, 50, 48, 30, 29, 30, 29, 10, 9, 9, 10, 25, 23, 19, 21)
(values(ndem) <- valores)
 [1] 50 45 50 48 30 29 30 29 10  9  9 10 25 23 19 21
plot(ndem, main = "NDEM")
text(ndem)

Let’s assign a coordinate reference system to NDEM:

crs(ndem) <- CRS('+init=epsg:3115')
(slope = terrain(ndem, '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        : +init=epsg:3115 
source     : memory
names      : slope 
values     : 36.05503, 75.62313  (min, max)
plot(slope, main = "Pendiente")
text(slope)

(aspecto = terrain(ndem, '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        : +init=epsg:3115 
source     : memory
names      : aspect 
values     : 164.0546, 181.4688  (min, max)
plot(aspecto, main = "Aspecto")
text(aspecto)

LS0tCnRpdGxlOiAiU2xvcGUgYW5kIEFzcGVjdCBDYWxjdWxhdGlvbiIKYXV0aG9yOiAiTmljb2xhcyBDaWZ1ZW50ZXMiCmRhdGU6ICIzMC4wMy4yMDIwIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgojIyBJbnRyb2R1Y3Rpb24KVGhpcyBpcyBhbiBSIE1hcmtkb3duIChodHRwOi8vcm1hcmtkb3duLnJzdHVkaW8uY29tKSBOb3RlYm9vayB0byBpbGx1c3RyYXRlIHNsb3BlIGFuZCBhc3BlY3QgY2FsY3VsYXRpb24uIApJbiBtYXRoZW1hdGljcywgdGhlIHNsb3BlIG9yIGdyYWRpZW50IG9mIGEgcGxhbmUgaXMgYSBudW1iZXIgdGhhdCBkZXNjcmliZXMgYm90aCB0aGUgZGlyZWN0aW9uIGFuZCB0aGUgc3RlZXBuZXNzIG9mIHRoZSBwbGFuZS4gCk9uIHRoZSBhbm90aGVyIGhhbmQsIGFzcGVjdCByZWZlcnMgdG8gdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBwbGFuZSBzbG9wZSBpbiByZWxhdGlvbiB0byB0aGUgY2FyZGluYWwgcG9pbnRzLiBJbiBzaG9ydCwgYXNwZWN0IGlzIHRoZSBjb21wYXNzIGRpcmVjdGlvbiB0aGF0IGEgc2xvcGUgZmFjZXMuIApCZWZvcmUgZ29pbmcgYWhlYWQsIHJlYWQgdGhlIGZvbGxvd2luZyB0d28gdG9waWNzOiAoaSkgSG93IHNsb3BlIHdvcmtzPyAoaHR0cDovL2Rlc2t0b3AuYXJjZ2lzLmNvbS9lbi9hcmNtYXAvMTAuNi90b29scy9zcGF0aWFsLWFuYWx5c3QtdG9vbGJveC9ob3ctc2xvcGUtd29ya3MuaHRtKSAoaWkpIEhvdyBhc3BlY3Qgd29ya3M/IChodHRwOi8vZGVza3RvcC5hcmNnaXMuY29tL2VuL2FyY21hcC8xMC42L3Rvb2xzL3NwYXRpYWwtYW5hbHlzdC10b29sYm94L2hvdy1hc3BlY3Qtd29ya3MuaHRtKSAKVGFrZSB5b3VyIHRpbWUgdG8gcmV2aWV3IHRoZSBsaW5rcyBleHBsYWluaW5nIHNsb3BlIGFuZCBhc3BlY3QgYWxnb3JpdGhtcy4gVGhlbiwgdGFrZSBub3RlcyBvbiB5b3VyIG5vdGVib29rLiAKT25jZSB5b3UgdW5kZXJzdGFuZCBob3cgdGhlIHR3byBhbGdvcml0aG1zIHdvcmtzLCBwcm9jZWVkIHRvIHRoZSBuZXh0IHNlY3Rpb24uIAoKIyMgUmFzdGVyIGNyZWF0aW9uIApMZXTigJlzIGNyZWF0ZSBhIHRveSBERU0uIE5vdGUgdGhhdCBpcyBuZWNlc3NhcnkgdG8gcGFzcyBib3VuZGluZyBib3ggY29vcmRpbmF0ZXMgKG1pbmltdW0gYW5kIG1heGltdW0gYWxvbmcgdGhlIHR3byBheGVzLCB4IGFuZCB5KTogCmBgYHtyfQpkZW0gPC0gcmFzdGVyKG5jb2w9MywgbnJvdz0zLCB4bW49MTAwLCB4bXg9MTE1LCB5bW49MTAwLCB5bXg9MTE1KQpgYGAKCkhvdyBtYW55IGNlbGxzIGNvbXBvc2UgREVNPwoKYGBge3J9Cm5jZWxsKGRlbSkKYGBgCgpXaGF0IGlzIHRoZSBzcGF0aWFsIHJlc29sdXRpb24gKGkuZS4gY2VsbCBzaXplKSBvZiBERU0/CgpgYGB7cn0KcmVzKGRlbSkKYGBgCgpBc3NpZ24gZWxldmF0aW9uIHZhbHVlcyB0byBERU06CgpgYGB7cn0KdmFsb3JlcyA8LSBjKDUwLCA0NSwgNTAsIDMwLCAzMCwgMzAsIDgsIDEwLCAxMCkKYGBgCgpgYGB7cn0KKHZhbHVlcyhkZW0pIDwtIHZhbG9yZXMpCmBgYAoKTGV04oCZcyBwbG90IHRoZSBERU0gYWxvbmcgdGhlIGVsZXZhdGlvbiB2YWx1ZXM6CgpgYGB7cn0KcGxvdChkZW0sIG1haW4gPSAiREVNIikKdGV4dChkZW0pCmBgYApMZXTigJlzIGFzc2lnbiBhIGNvb3JkaW5hdGUgcmVmZXJlbmNlIHN5c3RlbSB0byBERU06CgpgYGB7cn0KY3JzKGRlbSkgPC0gQ1JTKCcraW5pdD1lcHNnOjMxMTUnKQpgYGAKCiMjIyMgV2hhdCBkb2VzIHRoZSBFUFNHIGNvZGUgbWVhbj8KRVBTRyBzdGFuZHMgZm9yIEV1cm9wZWFuIFBldHJvbGV1bSBTdXJ2ZXkgR3JvdXAgYW5kIGlzIGFuIG9yZ2FuaXphdGlvbiB0aGF0IG1haW50YWlucyBhIGdlb2RldGljIHBhcmFtZXRlciBkYXRhYmFzZSB3aXRoIHN0YW5kYXJkIGNvZGVzLCB0aGUgRVBTRyBjb2RlcywgZm9yIGNvb3JkaW5hdGUgc3lzdGVtcywgZGF0dW1zLCBzcGhlcm9pZHMsIHVuaXRzIGFuZCBzdWNoIGFsaWtlLiBBZGRpdGlvbmFsbHksIHRoaXMgZGF0YWJhc2UgY29udGFpbnMgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZXNlIG9iamVjdHMgb3IgLSBpZiB0aGV5IGNhbm5vdCBlYXNpbHkgYmUgZXhwcmVzc2VkIGFzIHZhbHVlcyAtIGF0IGxlYXN0IHJlZmVyZW5jZXMgdG8gd2hlcmUgc3VjaCBwYXJhbWV0ZXJzIGNhbiBiZSBmb3VuZC4gCgojIyMjIFdoZXJlIGNhbiBFUFNHIGNvZGVzIGJlIGZvdW5kPwpXZSBjYW4gZmluZCBFUFNHIGNvZGVzIGF0IGh0dHBzOi8vZXBzZy5pby8KCgojIyMjIFdoYXQgaXMgdGhlIEVQU0cgY29kZSBmb3IgTUFHTkEgQ2l1ZGFkIGRlIEJvZ290YT8KVGhlIEVQU0cgY29mZSBmb3IgTUdOQSBDaXVkYWQgQm9nb3RhIGlzOiA3NDU4CgojIFNsb3BlIGFuZCBhc3BlY3QgY2FsY3VsYXRpb24KYGBge3J9CihzbG9wZSA9IHRlcnJhaW4oZGVtLCAnc2xvcGUnLCB1bml0PSdkZWdyZWVzJywgbmVpZ2hib3JzPTgpKQpgYGAKCmBgYHtyfQpwbG90KHNsb3BlLCBtYWluID0gIlBlbmRpZW50ZSIpCnRleHQoc2xvcGUpCmBgYApgYGB7cn0KKGFzcGVjdG8gPSB0ZXJyYWluKGRlbSwgJ2FzcGVjdCcsIHVuaXQ9J2RlZ3JlZXMnLCBuZWlnaGJvcnM9OCkpCmBgYApgYGB7cn0KcGxvdChhc3BlY3RvLCBtYWluID0gIkFzcGVjdG8iKQp0ZXh0KGFzcGVjdG8pCmBgYAoKIyMgQXNzaWdubWVudApXcml0ZSBSIGNvZGUgdG8gY2FsY3VsYXRlIHNsb3BlIGFuZCBhc3BlY3QgZm9yIHRoZSBmb2xsb3dpbmcgREVNOgoKYGBge3J9Cm5kZW0gPC0gcmFzdGVyKG5jb2w9NCwgbnJvdz00LCB4bW49MTAwLCB4bXg9MTIwLCB5bW49MTAwLCB5bXg9MTIwKQpgYGAKCmBgYHtyfQpuY2VsbChuZGVtKQpgYGAKCgpgYGB7cn0KcmVzKG5kZW0pCmBgYAoKYGBge3J9CnZhbG9yZXMgPC0gYyg1MCwgNDUsIDUwLCA0OCwgMzAsIDI5LCAzMCwgMjksIDEwLCA5LCA5LCAxMCwgMjUsIDIzLCAxOSwgMjEpCmBgYAoKYGBge3J9Cih2YWx1ZXMobmRlbSkgPC0gdmFsb3JlcykKYGBgCgpgYGB7cn0KcGxvdChuZGVtLCBtYWluID0gIk5ERU0iKQp0ZXh0KG5kZW0pCmBgYApMZXTigJlzIGFzc2lnbiBhIGNvb3JkaW5hdGUgcmVmZXJlbmNlIHN5c3RlbSB0byBOREVNOgoKYGBge3J9CmNycyhuZGVtKSA8LSBDUlMoJytpbml0PWVwc2c6MzExNScpCmBgYApgYGB7cn0KKHNsb3BlID0gdGVycmFpbihuZGVtLCAnc2xvcGUnLCB1bml0PSdkZWdyZWVzJywgbmVpZ2hib3JzPTgpKQpgYGAKYGBge3J9CnBsb3Qoc2xvcGUsIG1haW4gPSAiUGVuZGllbnRlIikKdGV4dChzbG9wZSkKYGBgCgpgYGB7cn0KKGFzcGVjdG8gPSB0ZXJyYWluKG5kZW0sICdhc3BlY3QnLCB1bml0PSdkZWdyZWVzJywgbmVpZ2hib3JzPTgpKQpgYGAKYGBge3J9CnBsb3QoYXNwZWN0bywgbWFpbiA9ICJBc3BlY3RvIikKdGV4dChhc3BlY3RvKQpgYGAKCgo=