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   40.6ms   41.7ms      23.9   16.27MB     8.97
#> 2 slope_terra    39.7ms   40.3ms      21.0    1.96MB     4.66

That is approximately

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

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    40.9ms   41.2ms      23.9    5.28MB    23.9 
#> 2 bilinear2    39.8ms   40.7ms      24.6    1.86MB     8.18
#> 3 simple1      32.8ms   33.2ms      29.8    1.97MB     7.45
#> 4 simple2      34.5ms   34.9ms      28.5    1.98MB     7.78
round(res$`itr/sec` * nrow(r))
#> [1] 6481 6653 8078 7728