Use geoviz to draw a small ‘rayshader’ scene and add a GPS track to it
library(geoviz)
library(rayshader)
#Load an example IGC (GPS track log) file
igc <- example_igc()
#Load a small example elevation raster showing a piece of the English Lake district
#You can use mapbox_dem() to obtain a 50m resolution digital elevation model
#of any location but will need your own mapbox key
DEM <- example_raster()
sunangle = 270
zscale = 25
#Get a Stamen map using ggmap that will cover our DEM
stamen_overlay <- slippy_overlay(DEM, image_source = "stamen", image_type = "watercolor", png_opacity = 0.3)
#Make an elevation shading layer with dark valleys and light peaks (not essential but I like it!)
elevation_overlay <- elevation_shade(DEM, elevation_palette = c("#000000", "#FFFFFF"), png_opacity = 0.6)
#Calculate the 'rayshader' scene (see 'rayshader' documentation)
elmat = matrix(
  raster::extract(DEM, raster::extent(DEM), method = 'bilinear'),
  nrow = ncol(DEM),
  ncol = nrow(DEM)
)
scene <- elmat %>%
  sphere_shade(sunangle = sunangle, texture = "bw") %>% 
  add_overlay(elevation_overlay) %>%
  add_overlay(stamen_overlay)
#Render the 'rayshader' scene
rayshader::plot_3d(
  scene,
  elmat,
  zscale = zscale,
  solid = FALSE,
  shadow = TRUE,
  shadowdepth = -100
)
#Add the gps track
add_gps_to_rayshader(
  DEM,
  igc$lat,
  igc$long,
  igc$altitude,
  line_width = 1.5,
  lightsaber = TRUE,
  colour = "red",
  zscale = zscale,
  ground_shadow = TRUE
)