Skip to contents
library(slopes)
library(bench)
library(raster)
#> Loading required package: sp

Performance

A benchmark can reveal how many route gradients can be calculated per second:

e = dem_lisbon_raster
r = lisbon_road_network
et = terra::rast(e)
res = bench::mark(check = FALSE,
  slope_raster = slope_raster(r, e),
  slope_terra = slope_raster(r, et)
)
res
#> # A tibble: 2 × 6
#>   expression        min   median `itr/sec` mem_alloc `gc/sec`
#>   <bch:expr>   <bch:tm> <bch:tm>     <dbl> <bch:byt>    <dbl>
#> 1 slope_raster   45.1ms   46.3ms      20.9   16.12MB     5.22
#> 2 slope_terra      43ms   43.3ms      19.9    1.96MB     4.98

That is approximately

round(res$`itr/sec` * nrow(r))
#> [1] 5654 5400

routes per second using the raster and terra (the default if installed, using RasterLayer and native SpatRaster objects) packages to extract elevation estimates from the raster datasets, respectively.

The message: use the terra package to read-in DEM data for slope extraction if speed is important.

To go faster, you can chose the simple method to gain some speed at the expense of accuracy:

e = dem_lisbon_raster
r = lisbon_road_network
res = bench::mark(check = FALSE,
  bilinear1 = slope_raster(r, e),
  bilinear2 = slope_raster(r, et),
  simple1 = slope_raster(r, e, method = "simple"),
  simple2 = slope_raster(r, et, method = "simple")
)
res
#> # A tibble: 4 × 6
#>   expression      min   median `itr/sec` mem_alloc `gc/sec`
#>   <bch:expr> <bch:tm> <bch:tm>     <dbl> <bch:byt>    <dbl>
#> 1 bilinear1    44.7ms   45.3ms      22.0    5.28MB    22.0 
#> 2 bilinear2    42.3ms   42.8ms      23.3    1.86MB     7.78
#> 3 simple1        36ms   36.7ms      27.0    1.97MB     8.10
#> 4 simple2        37ms   37.8ms      26.5    1.98MB     7.94
round(res$`itr/sec` * nrow(r))
#> [1] 5958 6328 7319 7168