#install.packages("rgdal")
#install.packages("raster")
#install.packages("elevatr")
#install.packages("rasterVis")
#install.packages("rgl")
#install.packages("latticeExtra")
library(rasterVis)
## Loading required package: raster
## Loading required package: sp
## Loading required package: lattice
## Loading required package: latticeExtra
library(raster)
library(rgl)
library(rgdal)
## rgdal: version: 1.4-8, (SVN revision 845)
## Geospatial Data Abstraction Library extensions to R successfully loaded
## Loaded GDAL runtime: GDAL 2.2.3, released 2017/11/20
## Path to GDAL shared files: C:/Users/USUARIO/Documents/R/win-library/3.6/rgdal/gdal
## GDAL binary built with GEOS: TRUE
## Loaded PROJ.4 runtime: Rel. 4.9.3, 15 August 2016, [PJ_VERSION: 493]
## Path to PROJ.4 shared files: C:/Users/USUARIO/Documents/R/win-library/3.6/rgdal/proj
## Linking to sp version: 1.4-1
library(elevatr)
list.files("C:/Users/USUARIO/Documents/Geomatica/Tolima")
## [1] "9pvbHjN.jpg" "dem.tif" "depto.cpg" "depto.dbf"
## [5] "depto.prj" "depto.qpj" "depto.shp" "depto.shx"
## [9] "elevacion" "elevacion.grd" "elevacion.gri" "municipios.cpg"
## [13] "municipios.dbf" "municipios.prj" "municipios.qpj" "municipios.shp"
## [17] "municipios.shx" "vias.dbf" "vias.prj" "vias.qpj"
## [21] "vias.shp" "vias.shx"
Ahora, leamos shapefile usando una función provista por el paquete ráster:
(munic <- shapefile("C:/Users/USUARIO/Documents/Geomatica/Tolima/municipios.shp"))
## class : SpatialPolygonsDataFrame
## features : 46
## extent : -76.1007, -74.5033, 2.9669, 5.2915 (xmin, xmax, ymin, ymax)
## crs : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0
## variables : 11
## names : ID_0, ISO, NAME_0, ID_1, NAME_1, ID_2, NAME_2, TYPE_2, ENGTYPE_2, NL_NAME_2, VARNAME_2
## min values : 53, COL, Colombia, 29, Tolima, 1000, Alpujarra, Municipio, Municipality, NA, Mariquita
## max values : 53, COL, Colombia, 29, Tolima, 999, Villarrica, Municipio, Municipality, NA, Villa Hermosa
¿Cuáles son los atributos del objeto munic?
head(munic)
## ID_0 ISO NAME_0 ID_1 NAME_1 ID_2 NAME_2 TYPE_2 ENGTYPE_2
## 0 53 COL Colombia 29 Tolima 966 Alpujarra Municipio Municipality
## 1 53 COL Colombia 29 Tolima 967 Alvarado Municipio Municipality
## 2 53 COL Colombia 29 Tolima 968 Ambalema Municipio Municipality
## 3 53 COL Colombia 29 Tolima 969 Anzoátegui Municipio Municipality
## 4 53 COL Colombia 29 Tolima 970 Armero Municipio Municipality
## 5 53 COL Colombia 29 Tolima 971 Ataco Municipio Municipality
## NL_NAME_2 VARNAME_2
## 0 <NA> <NA>
## 1 <NA> <NA>
## 2 <NA> <NA>
## 3 <NA> <NA>
## 4 <NA> <NA>
## 5 <NA> <NA>
Seleccionemos solo la ciudad capital de este departamento.
lechona <- munic[munic$NAME_2=="Ibagué",]
plot(lechona, main="Ibagué", axes=TRUE)
plot(munic, add=TRUE)
invisible(text(coordinates(munic), labels = as.character(munic$NAME_2), cex=0.8))
elevation = get_elev_raster(lechona, z = 8)
## Merging DEMs
## Reprojecting DEM to original projection
## Note: Elevation units are in meters.
## Note: The coordinate reference system is:
## +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0
elevation
## class : RasterLayer
## dimensions : 1034, 1033, 1068122 (nrow, ncol, ncell)
## resolution : 0.00275, 0.00274 (x, y)
## extent : -75.95125, -73.1105, 2.796526, 5.629686 (xmin, xmax, ymin, ymax)
## crs : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0
## source : memory
## names : layer
## values : 139.1862, 5253.441 (min, max)
plot(elevation, main="Este es el DEM descargado (m)")
plot(lechona, add=TRUE)
### Recorte los datos de elevación para que coincidan con la extensión del área de estudio
elev_crop = crop(elevation, lechona)
plot(elev_crop, main="Modelo de elevación digital recortado")
plot(lechona, add=TRUE)
Veamos el nuevo objeto:
elev_crop
## class : RasterLayer
## dimensions : 140, 189, 26460 (nrow, ncol, ncell)
## resolution : 0.00275, 0.00274 (x, y)
## extent : -75.54425, -75.0245, 4.262426, 4.646026 (xmin, xmax, ymin, ymax)
## crs : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0
## source : memory
## names : layer
## values : 453.4822, 4417.787 (min, max)
reproyectacion de los datos de elevacion en un nuevo sistema de coordenadas (MAGNA-Colombia)
spatialref<-"+proj=tmerc +lat_0=4.596200416666666 +lon_0=-74.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs "
pr3 <- projectExtent(elev_crop, spatialref)
# Adjust the cell size
res(pr3) <- 100
# now project
rep_elev <- projectRaster(elev_crop, pr3)
Ahora observamos los atributos del raster recien creado
rep_elev
## class : RasterLayer
## dimensions : 425, 578, 245650 (nrow, ncol, ncell)
## resolution : 100, 100 (x, y)
## extent : 837153.9, 894953.9, 963178.5, 1005679 (xmin, xmax, ymin, ymax)
## crs : +proj=tmerc +lat_0=4.596200416666666 +lon_0=-74.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs
## source : memory
## names : layer
## values : 442.3035, 4498.308 (min, max)
Ahora, reproyectemos el SpatialPolygonsDataFrame que representa la capital de nuestro departamento:
(rep_lechona = spTransform(lechona, spatialref))
## class : SpatialPolygonsDataFrame
## features : 1
## extent : 837006.5, 894877, 963387.1, 1005692 (xmin, xmax, ymin, ymax)
## crs : +proj=tmerc +lat_0=4.596200416666666 +lon_0=-74.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs
## variables : 11
## names : ID_0, ISO, NAME_0, ID_1, NAME_1, ID_2, NAME_2, TYPE_2, ENGTYPE_2, NL_NAME_2, VARNAME_2
## value : 53, COL, Colombia, 29, Tolima, 987, Ibagué, Municipio, Municipality, NA, NA
plot(rep_elev, main="Modelo de elevación digital reproyectado")
plot(rep_lechona, add=TRUE)
A continuación guardaremos nuestro DEM:
writeRaster(rep_elev, filename = "C:/Users/USUARIO/Documents/Geomatica/Tolima/elevacion", dataType='INT4S', overwrite=TRUE)
## Warning in .datatype(...): argument "datatype" misspelled as "dataType"
## class : RasterLayer
## dimensions : 425, 578, 245650 (nrow, ncol, ncell)
## resolution : 100, 100 (x, y)
## extent : 837153.9, 894953.9, 963178.5, 1005679 (xmin, xmax, ymin, ymax)
## crs : +proj=tmerc +lat_0=4.596200416666666 +lon_0=-74.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs
## source : C:/Users/USUARIO/Documents/Geomatica/Tolima/elevacion.grd
## names : layer
## values : 442, 4498 (min, max)
hist(rep_elev)
promedio = cellStats(rep_elev, 'mean')
minimo = cellStats(rep_elev, 'min')
maximo = cellStats(rep_elev, 'max')
desviacion = cellStats(rep_elev, 'sd')
metricas = c('mean', 'min', 'max', 'sd')
valores = c(promedio, minimo, maximo, desviacion)
(df_estadisticas = data.frame(metricas, valores))
## metricas valores
## 1 mean 2090.3218
## 2 min 442.3035
## 3 max 4498.3082
## 4 sd 906.5085
Los siguientes objetos seran necesarios para las variables geomorfometricas, que son la pendiente, el aspecto y el sombreado:
slope = terrain(rep_elev,opt='slope', unit='degrees')
aspect = terrain(rep_elev,opt='aspect',unit='degrees')
hill = hillShade(slope,aspect,40,315)
Plot de elevación el cual nos muestra los datos de elevacion bajo el sistema de coordenadas MAGNA
plot(rep_elev, main="DEM para Ibagué (m)", col=terrain.colors(20, alpha = 1))
plot(slope, main="Pendiente para Ibagué (grados)", col=topo.colors(25, alpha = 1))
plot(aspect, main="Aspecto para Ibagué (grados)", col=rainbow(25, alpha = 1))
A continuación es un Plot combinado:
plot(hill, col=grey(1:100/100),legend=FALSE, main="DEM para Ibagué", axes=FALSE)
plot(rep_elev, axes=FALSE, col=terrain.colors(12, alpha = 0.35), add=TRUE)
### Mapeo de datos de elevación con sombreador de rayos Primero debemos instalar rayshader con el siguiente comando:
#install.packages("rayshader")
library(rayshader)
elmat = raster_to_matrix(rep_elev)
elmat %>%
sphere_shade(texture = "imhof2") %>%
plot_map()
elmat %>%
sphere_shade(texture = "desert") %>%
add_water(detect_water(elmat), color = "desert") %>%
plot_map()
elmat %>%
sphere_shade(texture = "desert") %>%
add_water(detect_water(elmat), color = "desert") %>%
add_shadow(ray_shade(elmat), 0.5) %>%
plot_map()
### Otra forma de visualizarlo:
#install.packages("jpeg")
library(jpeg)
getv=function(i,a,s){
ct = dim(i)[1:2]/2
sx = values(s)/90 * ct[1]
sy = values(s)/90 * ct[2]
a = values(a) * 0.01745
px = floor(ct[1] + sx * -sin(a))
py = floor(ct[2] + sy * cos(a))
template = brick(s,s,s)
values(template)=NA
cellr = px + py * ct[1]*2
cellg = px + py * ct[1]*2 + (ct[1]*2*ct[2]*2)
cellb = px + py * ct[1]*2 + 2*(ct[1]*2*ct[2]*2)
template[[1]] = i[cellr]
template[[2]] = i[cellg]
template[[3]] = i[cellb]
template = template * 256
template}
map=readJPEG("C:/Users/USUARIO/Documents/Geomatica/Tolima/9pvbHjN.jpg")
out = getv(map, aspect, slope)
plotRGB(out, main = "Montañas supuestamente bonitas en Ibagué")
Gracias por la atención prestada.