En este ejercicio se crearán mapas y visualizaciones 3D de la isla Cerralvo (Jaques Costeau) en el golfo de California en México con ayuda de la librería Rayshader.
El único insumo necesario es un Modelo Digital de Elevación recortado a la zona de interés.
Primero, llamamos a las librerías necesarias. Raster permite trabajar en R co este formato espacial, mientras que rayshader permite hacer visualizaciones en tercera dimensión.
## Warning: package 'rayshader' was built under R version 4.0.5
## Warning: package 'raster' was built under R version 4.0.5
## Loading required package: sp
## Warning: package 'sp' was built under R version 4.0.5
Como ya se mencionó antes, necesitaremos un Modelo Digital de Elevación en formato TIF, así que el siguiente paso es llamarlo y convertirlo en una matriz.
cerralvo = raster("islas\\cerralvo.tif")
cerralvo_mat = raster_to_matrix(cerralvo)
Ahora podemos visualizar los datos con los colores básicos de elevación
cerralvo_mat %>%
height_shade() %>%
plot_map()
Ocuparemos la función sphere_shade de rayshader para calcular el color y textura de cada pixel. En esta función, se puede definir el ángulo de la luz (sunangle que tiene un valor de 315 por defecto), la textura (texture), la intensidad del color y la escala z, entre otras características
cerralvo_mat %>%
height_shade() %>%
add_overlay(sphere_shade(cerralvo_mat, texture = "desert"), alphalayer=0.7) %>%
plot_map()
Ya se puede visualizar el relieve de la isla, pero ahora usaremos la función lamb_shade para la exageración vertical en la que podemos agregar el ángulo de la luz del sol (sunangle que tiene e valor de 315 por defecto), la altitud del sol (sunaltitud que tiene un valor de 45 por defecto) y agregaremos el agua.
cerralvo_mat %>%
height_shade() %>%
add_overlay(sphere_shade(cerralvo_mat, texture = "desert"), alphalayer=0.7) %>%
add_water(detect_water(cerralvo_mat), color = "#afcbf0") %>%
add_shadow(lamb_shade(cerralvo_mat, sunaltitude = 75, sunangle = 300),1) %>%
plot_map()
También podemos agregar oclusicón de la sombra que permite un mejor contraste en las zonas bajas.
cerralvo_mat %>%
height_shade() %>%
add_overlay(sphere_shade(cerralvo_mat, texture = "desert"), alphalayer=0.7) %>%
add_water(detect_water(cerralvo_mat), color = "#afcbf0") %>%
add_shadow(lamb_shade(cerralvo_mat, sunaltitude = 75, sunangle = 300, zscale=1), 1) %>%
add_shadow(ambient_shade(cerralvo_mat), 0) %>%
plot_map()
En esta ocasión, regresaremos a algunas de las características definidas anteriormente para visualizar a la isla en 3D con la función plot3d
cerralvo_mat %>%
sphere_shade(texture = "desert") %>%
add_water(detect_water(cerralvo_mat), color = "#afcbf0") %>%
add_shadow(ray_shade(cerralvo_mat, zscale = 3, sunaltitude = 70, sunangle = 135), 0.5) %>%
add_shadow(ambient_shade(cerralvo_mat), 0) %>%
plot_3d(cerralvo_mat, zscale = 10, fov = 0.7, theta = 30, zoom = 0.7, phi = 45, windowsize = c(0, 0, 1500, 1000))
Sys.sleep(0.2)
render_snapshot()