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.9ms 20.0 21.56MB 4.99
#> 2 slope_terra 44.6ms 46.1ms 17.2 1.82MB 4.91That is approximately
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 47.2ms 48.4ms 20.7 5.15MB 8.89
#> 2 bilinear2 45.2ms 45.9ms 21.4 1.73MB 4.77
#> 3 simple1 38ms 38.7ms 25.9 1.84MB 4.71
#> 4 simple2 39.7ms 40.3ms 24.8 1.84MB 4.96