# Hawaii Elevation and Bathymetry Using ‘Mapzen’

#### Neil Charles

#### 2020-01-12

Get elevation and bathymetry data for Hawaii from ‘mapzen’, add a ‘stamen’ overlay and render the scene.

    library(geoviz)
    library(rayshader)

    # Coordinates for Hawaii
    lat = 19.593335
    lon = -155.4880287
    square_km = 50

    # Set max tiles to request from 'mapzen' and 'stamen'.
    # Increase this for a higher resolution image.
    max_tiles = 10

    # Get elevation data. Increase max_tiles for a higher resolution image.
    # Set max_tiles = 40 to reproduce the example above.
    dem <- mapzen_dem(lat, lon, square_km, max_tiles = max_tiles)

    # Get a stamen overlay (or a satellite overlay etc. by changing image_source)
    overlay_image <-
      slippy_overlay(dem,
                     image_source = "stamen",
                     image_type = "watercolor",
                     png_opacity = 0.3,
                     max_tiles = max_tiles)

    # Render the 'rayshader' scene.

    elmat = matrix(
      raster::extract(dem, raster::extent(dem), method = 'bilinear'),
      nrow = ncol(dem),
      ncol = nrow(dem)
    )

    scene <- elmat %>%
      sphere_shade(sunangle = 270, texture = "bw") %>%
      add_overlay(overlay_image)  # %>%

    #  For a slower but higher quality render with more realistic shadows (see 'rayshader' documentation)
    #  add_shadow(
    #    ray_shade(
    #      elmat,
    #      anglebreaks = seq(30, 60),
    #      sunangle = 270,
    #      multicore = TRUE,
    #      lambert = FALSE,
    #      remove_edges = FALSE
    #    )
    #  ) %>%
    #  add_shadow(ambient_shade(elmat, multicore = TRUE, remove_edges = FALSE))

    rayshader::plot_3d(
      scene,
      elmat,
      zscale = raster_zscale(dem) / 3,  #exaggerate elevation by 3x
      solid = TRUE,
      shadow = FALSE,
      soliddepth = -raster_zscale(dem),
      water=TRUE,
      waterdepth = 0,
      wateralpha = 0.5,
      watercolor = "lightblue",
      waterlinecolor = "white",
      waterlinealpha = 0.5
    )

    rgl::view3d(theta =290, phi = 18, zoom = 0.5, fov = 5)

    #rayshader::render_depth(
    #  focus = 0.3,
    #  fstop = 18,
    #  filename = "LIDAR.png")