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.8ms   48.3ms      19.9   19.84MB     8.55
#> 2 slope_terra    44.1ms   45.4ms      22.0    1.94MB     6.29

That is approximately

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

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    46.8ms   47.8ms      20.9    5.28MB    10.4 
#> 2 bilinear2    44.6ms   45.1ms      22.1    1.86MB     8.30
#> 3 simple1      36.9ms   37.9ms      26.3    1.97MB     7.90
#> 4 simple2      38.7ms   39.3ms      25.3    1.98MB     7.58
round(res$`itr/sec` * nrow(r))
#> [1] 5661 5997 7139 6845