By Valentina Valle Velasco

April 1st, 2020

This is an R Markdown Notebook in order to illustrate slop and aspect calculation.
Slop is a tool that help us to identify the steepness in a cell of a raster surface. This can be calculated in two units, degrees and percent.
Aspect is a tool that is useful for identify the direction the downhill slope faces.

Now: Raster creation

rm(list = ls())
#library(raster)

Let´s create a toy DEM.

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

If you want to know how many cells compose DEM, use the following code

ncell(dem)
[1] 9

If you want to know what is the spatial resolution of DEM, use this

res(dem)
[1] 5 5

Now, we are going to 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)

No, we are going to assign a coordinate reference system to DEM:

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

What does mean the EPSG code?

EPSG is the acronym for European Petroleum Survey Group, organization related to the oil industry in Europe. This body was made up of specialists in geodesy, topography and cartography applied to the exploitation area and developed a repository of geodetic parameters that contains information on ancient and modern (geocentric) reference systems (frames), cartographic projections and ellipsoids from around the world.

Where can EPSG codes be found?

That type of codes can be found on epsg.io

What is the EPSG code for MAGNA Ciudad de Bogota?

The code is EPSG:3116, MAGNA-SIRGAS/ Colombia Bogota zone.

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)

Exercise

We are going to calculate slope and aspect for the following DEM:

[1] 16                          
[1] 5 5

So, here are all the necessary codes:

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

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

Now: Calculate SLOPE

(slope = terrain(exe, '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 = "SLOPE")    
text(slope)

(aspecto = terrain(exe, '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)

Now: Calculate ASPECT

plot(aspecto, main = "ASPECT") 
text(aspecto)

LS0tDQp0aXRsZTogIlNsb3BlIGFuZCBBc3BlY3QgQ2FsY3VsYXRpb24iDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIyMjIEJ5IFZhbGVudGluYSBWYWxsZSBWZWxhc2NvICAgICAgICANCkFwcmlsIDFzdCwgMjAyMCAgDQoNClRoaXMgaXMgYW4gW1IgTWFya2Rvd25dKGh0dHA6Ly9ybWFya2Rvd24ucnN0dWRpby5jb20pIE5vdGVib29rIGluIG9yZGVyIHRvIGlsbHVzdHJhdGUgc2xvcCBhbmQgYXNwZWN0IGNhbGN1bGF0aW9uLiAgICANClNsb3AgaXMgYSB0b29sIHRoYXQgaGVscCB1cyB0byBpZGVudGlmeSB0aGUgc3RlZXBuZXNzIGluIGEgY2VsbCBvZiBhIHJhc3RlciBzdXJmYWNlLiBUaGlzIGNhbiBiZSBjYWxjdWxhdGVkIGluIHR3byB1bml0cywgZGVncmVlcyBhbmQgcGVyY2VudC4gICAgICANCkFzcGVjdCBpcyBhIHRvb2wgdGhhdCBpcyB1c2VmdWwgZm9yIGlkZW50aWZ5IHRoZSBkaXJlY3Rpb24gdGhlIGRvd25oaWxsIHNsb3BlIGZhY2VzLiAgIA0KDQojIyMjIE5vdzogUmFzdGVyIGNyZWF0aW9uDQpgYGB7cn0NCnJtKGxpc3QgPSBscygpKQ0KYGBgDQpgYGB7cn0NCiNsaWJyYXJ5KHJhc3RlcikNCmBgYA0KDQojIyMjIExldMK0cyBjcmVhdGUgYSB0b3kgREVNLg0KYGBge3J9DQpkZW0gPC0gcmFzdGVyKG5jb2w9MywgbnJvdz0zLCB4bW49MTAwLCB4bXg9MTE1LCB5bW49MTAwLCB5bXg9MTE1KQ0KYGBgDQpJZiB5b3Ugd2FudCB0byBrbm93IGhvdyBtYW55IGNlbGxzIGNvbXBvc2UgREVNLCB1c2UgdGhlIGZvbGxvd2luZyBjb2RlDQpgYGB7cn0NCm5jZWxsKGRlbSkNCmBgYA0KSWYgeW91IHdhbnQgdG8ga25vdyB3aGF0IGlzIHRoZSBzcGF0aWFsIHJlc29sdXRpb24gb2YgREVNLCB1c2UgdGhpcw0KYGBge3J9DQpyZXMoZGVtKQ0KYGBgDQpOb3csIHdlIGFyZSBnb2luZyB0byBhc3NpZ24gZWxldmF0aW9uIHZhbHVlcyB0byBERU06DQpgYGB7cn0NCnZhbG9yZXMgPC0gYyg1MCwgNDUsIDUwLCAzMCwgMzAsIDMwLCA4LCAxMCwgMTApDQpgYGANCmBgYHtyfQ0KKHZhbHVlcyhkZW0pIDwtIHZhbG9yZXMpDQpgYGANCkxldCdzIHBsb3QgdGhlIERFTSBhbG9uZyB0aGUgZWxldmF0aW9uIHZhbHVlczoNCmBgYHtyfQ0KcGxvdChkZW0sIG1haW4gPSAiREVNIikgDQp0ZXh0KGRlbSkNCmBgYA0KTm8sIHdlIGFyZSBnb2luZyB0byBhc3NpZ24gYSBjb29yZGluYXRlIHJlZmVyZW5jZSBzeXN0ZW0gdG8gREVNOg0KYGBge3J9DQpjcnMoZGVtKSA8LSBDUlMoJytpbml0PWVwc2c6MzExNScpDQpgYGANCg0KIyMjIyBXaGF0IGRvZXMgbWVhbiB0aGUgRVBTRyBjb2RlPyAgICAgICAgICAgICAgICAgICAgDQpFUFNHIGlzIHRoZSBhY3JvbnltIGZvciBFdXJvcGVhbiBQZXRyb2xldW0gU3VydmV5IEdyb3VwLCBvcmdhbml6YXRpb24gcmVsYXRlZCB0byB0aGUgb2lsIGluZHVzdHJ5IGluIEV1cm9wZS4gVGhpcyBib2R5IHdhcyBtYWRlIHVwIG9mIHNwZWNpYWxpc3RzIGluIGdlb2Rlc3ksIHRvcG9ncmFwaHkgYW5kIGNhcnRvZ3JhcGh5IGFwcGxpZWQgdG8gdGhlIGV4cGxvaXRhdGlvbiBhcmVhIGFuZCBkZXZlbG9wZWQgYSByZXBvc2l0b3J5IG9mIGdlb2RldGljIHBhcmFtZXRlcnMgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBvbiBhbmNpZW50IGFuZCBtb2Rlcm4gKGdlb2NlbnRyaWMpIHJlZmVyZW5jZSBzeXN0ZW1zIChmcmFtZXMpLCBjYXJ0b2dyYXBoaWMgcHJvamVjdGlvbnMgYW5kIGVsbGlwc29pZHMgZnJvbSBhcm91bmQgdGhlIHdvcmxkLiAgICAgICAgICAgICAgIA0KDQojIyMjIFdoZXJlIGNhbiBFUFNHIGNvZGVzIGJlIGZvdW5kPyAgICAgICAgICAgICAgICAgICANClRoYXQgdHlwZSBvZiBjb2RlcyBjYW4gYmUgZm91bmQgb24gZXBzZy5pbyAgICAgICAgIA0KDQojIyMjIFdoYXQgaXMgdGhlIEVQU0cgY29kZSBmb3IgTUFHTkEgQ2l1ZGFkIGRlIEJvZ290YT8gDQoNClRoZSBjb2RlIGlzIEVQU0c6MzExNiwgTUFHTkEtU0lSR0FTLyBDb2xvbWJpYSBCb2dvdGEgem9uZS4gICAgICAgIA0KDQojIyMgU2xvcGUgYW5kIGFzcGVjdCBjYWxjdWxhdGlvbg0KYGBge3J9DQooc2xvcGUgPSB0ZXJyYWluKGRlbSwgJ3Nsb3BlJywgdW5pdD0nZGVncmVlcycsIG5laWdoYm9ycz04KSkNCmBgYA0KYGBge3J9DQpwbG90KHNsb3BlLCBtYWluID0gIlBlbmRpZW50ZSIpICAgICAgICAgICAgIA0KdGV4dChzbG9wZSkNCmBgYA0KYGBge3J9DQooYXNwZWN0byA9IHRlcnJhaW4oZGVtLCAnYXNwZWN0JywgdW5pdD0nZGVncmVlcycsIG5laWdoYm9ycz04KSkNCmBgYA0KYGBge3J9DQpwbG90KGFzcGVjdG8sIG1haW4gPSAiQXNwZWN0byIpIA0KdGV4dChhc3BlY3RvKQ0KYGBgDQojIEV4ZXJjaXNlDQoNCldlIGFyZSBnb2luZyB0byBjYWxjdWxhdGUgc2xvcGUgYW5kIGFzcGVjdCBmb3IgdGhlIGZvbGxvd2luZyBERU06DQpgYGANClsxXSAxNiAgICAgICAgICAgICAgICAgICAgICAgICAgDQpbMV0gNSA1DQpgYGANClNvLCBoZXJlIGFyZSBhbGwgdGhlIG5lY2Vzc2FyeSBjb2RlczoNCmBgYHtyfQ0KZXhlIDwtIHJhc3RlcihuY29sPTQsIG5yb3c9NCwgeG1uPTEwMCwgeG14PTEyMCwgeW1uPTEwMCwgeW14PTEyMCkNCmBgYA0KYGBge3J9DQpuY2VsbChleGUpDQpgYGANCmBgYHtyfQ0KcmVzKGV4ZSkNCmBgYA0KYGBge3J9DQp2YWxvcmVzIDwtIGMoNTAsIDQ1LCA1MCwgNDgsIDMwLCAyOSwgMzAsIDI5LCAxMCwgOSwgOSwgMTAsIDI1LCAyMywgMTksIDIxKQ0KYGBgDQpgYGB7cn0NCih2YWx1ZXMoZXhlKSA8LSB2YWxvcmVzKQ0KYGBgDQpgYGB7cn0NCnBsb3QoZXhlLCBtYWluID0gIkV4ZXJjaXNlIikgICANCnRleHQoZXhlKQ0KYGBgDQpgYGB7cn0NCmNycyhleGUpIDwtIENSUygnK2luaXQ9ZXBzZzozMTE1JykNCmBgYA0KIyMgTm93OiBDYWxjdWxhdGUgX19TTE9QRV9fDQpgYGB7cn0NCihzbG9wZSA9IHRlcnJhaW4oZXhlLCAnc2xvcGUnLCB1bml0PSdkZWdyZWVzJywgbmVpZ2hib3JzPTgpKQ0KYGBgDQpgYGB7cn0NCnBsb3Qoc2xvcGUsIG1haW4gPSAiU0xPUEUiKSAgICANCnRleHQoc2xvcGUpDQpgYGANCmBgYHtyfQ0KKGFzcGVjdG8gPSB0ZXJyYWluKGV4ZSwgJ2FzcGVjdCcsIHVuaXQ9J2RlZ3JlZXMnLCBuZWlnaGJvcnM9OCkpDQpgYGANCiMjIE5vdzogQ2FsY3VsYXRlIF9fQVNQRUNUX18NCmBgYHtyfQ0KcGxvdChhc3BlY3RvLCBtYWluID0gIkFTUEVDVCIpIA0KdGV4dChhc3BlY3RvKQ0KYGBgDQoNCg==