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   45.6ms      21.6   16.29MB     9.25
#> 2 slope_terra    42.6ms   43.9ms      22.8    1.96MB     9.78

That is approximately

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

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    45.6ms     46ms      21.6    5.28MB    16.2 
#> 2 bilinear2    42.8ms   43.6ms      22.8    1.86MB     8.56
#> 3 simple1      35.7ms   36.1ms      27.0    1.97MB     7.36
#> 4 simple2      37.7ms   38.3ms      26.0    1.98MB     7.80
round(res$`itr/sec` * nrow(r))
#> [1] 5864 6188 7313 7046