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   46.9ms   48.1ms      20.6   16.29MB     8.83
#> 2 slope_terra    44.9ms   45.4ms      21.8    1.96MB    10.9

That is approximately

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

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    47.3ms   47.7ms      20.9    5.28MB    26.1 
#> 2 bilinear2    45.7ms   46.4ms      21.5    1.86MB     4.78
#> 3 simple1      37.9ms   38.6ms      25.7    1.97MB     7.72
#> 4 simple2      39.8ms   40.4ms      24.6    1.98MB     8.21
round(res$`itr/sec` * nrow(r))
#> [1] 5665 5827 6976 6677