Skip to contents

Performance

A benchmark can reveal how many route gradients can be calculated per second using different interpolation methods:

e = dem_lisbon()
r = lisbon_road_network
res = bench::mark(check = FALSE,
  bilinear = slope_raster(r, e),
  simple   = slope_raster(r, e, method = "simple")
)
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 bilinear     45.2ms   45.3ms      22.1   18.16MB     27.6
#> 2 simple       39.3ms   39.3ms      25.4    1.88MB     25.4

That is approximately

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

routes per second using bilinear and simple interpolation methods, respectively.

To go faster, you can chose the simple method to gain some speed at the expense of accuracy:

res2 = bench::mark(check = FALSE,
  bilinear = slope_raster(r, e, method = "bilinear"),
  simple   = slope_raster(r, e, method = "simple")
)
res2
#> # A tibble: 2 × 6
#>   expression      min   median `itr/sec` mem_alloc `gc/sec`
#>   <bch:expr> <bch:tm> <bch:tm>     <dbl> <bch:byt>    <dbl>
#> 1 bilinear     45.3ms   45.8ms      21.7    1.73MB     21.7
#> 2 simple       39.7ms   39.7ms      25.1    1.81MB     25.1
round(res2$`itr/sec` * nrow(r))
#> [1] 5881 6804