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     45ms   46.1ms      21.4   16.29MB     9.15
#> 2 slope_terra    43.7ms   44.3ms      22.5    1.96MB    11.2

That is approximately

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

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   45.9ms      21.7    5.28MB    27.1 
#> 2 bilinear2    43.9ms   44.4ms      22.5    1.86MB     4.99
#> 3 simple1      36.4ms   37.1ms      27.0    1.97MB     8.09
#> 4 simple2      38.2ms   39.1ms      25.6    1.98MB     7.67
round(res$`itr/sec` * nrow(r))
#> [1] 5885 6085 7305 6925