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   48.6ms   50.6ms      19.8   16.27MB     9.90
#> 2 slope_terra    47.2ms   47.6ms      20.8    1.96MB     5.95

That is approximately

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

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    48.4ms   48.7ms      20.5    5.28MB    20.5 
#> 2 bilinear2    46.6ms   47.9ms      20.9    1.86MB     4.64
#> 3 simple1      38.3ms   39.4ms      25.3    1.97MB     7.60
#> 4 simple2      40.9ms   41.5ms      23.9    1.98MB     7.96
round(res$`itr/sec` * nrow(r))
#> [1] 5550 5657 6868 6473