# Scene With GPS trace

#### Neil Charles

#### 2020-01-12

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
    )