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   73.2ms   75.3ms      12.9   19.68MB     2.15
#> 2 slope_terra    69.8ms   71.5ms      13.9    2.06MB     6.97

That is approximately

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

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    74.4ms   74.8ms      13.3    5.48MB     5.33
#> 2 bilinear2      68ms   71.8ms      13.9    2.02MB     2.32
#> 3 simple1      61.9ms   62.7ms      15.9    2.14MB     5.31
#> 4 simple2      63.7ms     64ms      15.6    2.14MB     2.23
round(res$`itr/sec` * nrow(r))
#> [1] 3611 3770 4316 4224