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   34.8ms   36.4ms      26.8   19.88MB    11.9 
#> 2 slope_terra    33.9ms   34.6ms      24.2    1.94MB     8.06

That is approximately

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

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    34.1ms   35.2ms      28.4    5.28MB     9.45
#> 2 bilinear2    33.6ms   34.2ms      28.9    1.86MB    11.6 
#> 3 simple1        28ms   28.2ms      34.9    1.97MB     7.47
#> 4 simple2      29.4ms   29.5ms      33.3    1.98MB    11.1
round(res$`itr/sec` * nrow(r))
#> [1] 7684 7829 9448 9023