This vignette provides a basic overview of the functions in R packageviewscape.
The basic viewshed analysis can be accessed through calling thecompute_viewshed. The two needed objects to compute theviewshed are a digital surface model (DSM) and a viewpoint.
library(viewscape)#Load in DSMtest_dsm <- terra::rast(system.file("test_dsm.tif", package ="viewscape"))#Load in the viewpointtest_viewpoint <- sf::read_sf(system.file("test_viewpoint.shp", package = "viewscape"))#Compute viewshedoutput <- viewscape::compute_viewshed(dsm = test_dsm, viewpoints = test_viewpoint, offset_viewpoint = 6, r = 1600, method = 'plane')# overlap viewshed on DSMoutput_r <- viewscape::visualize_viewshed(output, outputtype = 'raster')terra::plot(test_dsm, axes=FALSE, box=FALSE, legend = FALSE)terra::plot(output_r, add=TRUE, col = "red", axes=FALSE, box=FALSE, legend = FALSE)terra::plot(test_viewpoint, add = TRUE, col = "blue", axes=FALSE, box=FALSE, legend = FALSE)sector <- viewscape::fov_mask(output, c(40,160))terra::plot(test_dsm, axes=FALSE, box=FALSE, legend = FALSE)terra::plot(viewscape::visualize_viewshed(sector, outputtype = 'raster'), axes=FALSE, box=FALSE, legend = FALSE, add = TRUE, col = "red")terra::plot(test_viewpoint, add = TRUE, col = "blue", axes=FALSE, box=FALSE, legend = FALSE)vm <- viewscape::visual_magnitude(output,test_dsm)terra::plot(vm, axes=FALSE, box=FALSE)terra::plot(test_viewpoint, add = TRUE, col = "blue", axes=FALSE, box=FALSE, legend = FALSE)#Load in DSMtest_dsm <- terra::rast(system.file("test_dsm.tif", package ="viewscape"))# Load points (.shp file)test_viewpoints <- sf::read_sf(system.file("test_viewpoints.shp", package = "viewscape"))# Compute viewshedsoutput <- viewscape::compute_viewshed(dsm = test_dsm, viewpoints = test_viewpoints, offset_viewpoint = 6, parallel = TRUE, workers = 1)# Use plot all viewsheds on DSMpar(mfrow=c(3,3))for(i in 1:length(output)) { each <- output[[i]] raster_data <- viewscape::visualize_viewshed(each, outputtype="raster") terra::plot(test_dsm, axes=FALSE, box=FALSE, legend = FALSE) terra::plot(raster_data, add=TRUE, col = "red", axes=FALSE, box=FALSE, legend = FALSE)}The function of view depth analysis can calculate two differentmetrics: the furthest distance and standard deviation of distances. Tocalculate view depth, there are two needed objects: the DSM that wasused to get viewshed and result from viewshed analysis.
The function of extent analysis can calculate the total area ofviewshed and needs the DSM that was used to get viewshed and result fromviewshed analysis.
The following function can calculate the area of ground surface andstandard deviation of elevations within a viewshed. The function needs aDSM and a DEM/DTM to calculate the metrics.
#Load in DSMtest_dsm <- terra::rast(system.file("test_dsm.tif", package ="viewscape"))# Load DTMtest_dtm <- terra::rast(system.file("test_dtm.tif", package ="viewscape"))# Load canopy rastertest_canopy <- terra::rast(system.file("test_canopy.tif", package ="viewscape"))# Load building footprints rastertest_building <- terra::rast(system.file("test_building.tif", package ="viewscape"))# calculate metrics given the viewshed, canopy, and building footprintstest_metrics <- viewscape::calculate_viewmetrics(output[[1]], test_dsm, test_dtm, list(test_canopy, test_building))test_metricscalculate_diversity() calculates the proportion of each type of landuse/ cover within a viewshed to get the Shannon Diversity Index.
# load landuse rastertest_landuse <- terra::rast(system.file("test_landuse.tif", package ="viewscape"))# the Shannon Diversity Index (SDI)test_diversity <- viewscape::calculate_diversity(output[[1]], test_landuse, proportion = TRUE)# SDI and The proportion of each type of land usetest_diversitycalculate_feature is to calculate the proportion of a feature(including trees, buildings, parking, and roads) within the viewshed.This function can be applied to
# load canopy rastertest_canopy <- terra::rast(system.file("test_canopy.tif", package ="viewscape"))# calculate the percentage of canopy coverage test_canopy_proportion <- viewscape::calculate_feature(viewshed = output[[1]], feature = test_canopy, type = 2, exclude_value=0)test_canopy_proportion