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.7ms 47.5ms 19.9 16.23MB 3.97
#> 2 slope_terra 43.8ms 44.9ms 18.4 1.94MB 4.59That 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 45.4ms 46.5ms 21.5 5.28MB 4.78
#> 2 bilinear2 43.6ms 44.8ms 22.1 1.86MB 4.92
#> 3 simple1 37.2ms 38ms 26.4 1.97MB 4.79
#> 4 simple2 39.1ms 39.6ms 25.2 1.98MB 4.58