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   42.8ms   43.6ms      22.7   16.28MB     8.51
#> 2 slope_terra    41.9ms   43.2ms      19.4    1.96MB     4.85

That is approximately

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

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    43.1ms   43.6ms      23.0    5.28MB    23.0 
#> 2 bilinear2    42.2ms   43.2ms      23.2    1.86MB     7.73
#> 3 simple1      34.6ms   34.8ms      28.4    1.97MB     7.75
#> 4 simple2      36.4ms   36.7ms      26.9    1.98MB     8.08
round(res$`itr/sec` * nrow(r))
#> [1] 6224 6281 7704 7300