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.1ms   47.6ms      20.8   16.27MB     8.93
#> 2 slope_terra    44.8ms   45.1ms      22.1    1.94MB    11.0

That is approximately

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

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.3ms   46.8ms      21.4    5.28MB    28.6 
#> 2 bilinear2    45.1ms   45.6ms      21.8    1.86MB     4.83
#> 3 simple1      37.3ms     38ms      26.1    1.97MB     7.84
#> 4 simple2      39.6ms   40.7ms      24.5    1.98MB     8.15
round(res$`itr/sec` * nrow(r))
#> [1] 5811 5896 7078 6626