When distance_cutoff and gradient_cutoff thresholds are both broken for route segments, this function treats them as anomalous and sets the offending gradient values to the mean of the n segments closest to (in front of and behind) the offending segment.

smooth_with_cutoffs(
elevation_change,
distances,
distance_cutoff = 50,
n = 3
)

## Arguments

The gradient for each segment from CycleStreets.net

elevation_change

The difference between the maximum and minimum elevations within each segment

distances

The distance of each segment

distance_cutoff

Distance (m) used to identify anomalous gradients

n

The number of segments to use to smooth anomalous gradents. The default is 3, meaning segments directly before, after and including the offending segment.

## Examples

f = system.file(package = "cyclestreets", "extdata/journey.json")
obj = jsonlite::read_json(f, simplifyVector = TRUE)
rsf = json2sf_cs(obj, cols = c("distances"))
rsf$gradient_segment #> [1] 0.01149425 0.02564103 0.05555556 0.01526718 0.00000000 rsf$elevation_change
#> [1] 1 6 1 2 0
rsf$distances #> [1] 87 234 18 131 36 smooth_with_cutoffs(rsf$gradient_segment, rsf$elevation_change, rsf$distances)
#> [1] 0.01149425 0.02564103 0.05555556 0.01526718 0.00000000
smooth_with_cutoffs(rsf$gradient_segment, rsf$elevation_change, rsf$distances, 20, 0.05) #> [1] 0.01149425 0.02564103 0.02349869 0.01526718 0.00000000 smooth_with_cutoffs(rsf$gradient_segment, rsf$elevation_change, rsf$distances, 200, 0.02)
#> [1] 0.01149425 0.02564103 0.02349869 0.01526718 0.00000000
smooth_with_cutoffs(rsf$gradient_segment, rsf$elevation_change, rsf\$distances, 200, 0.02, n = 5)
#> [1] 0.01149425 0.02564103 0.01976285 0.01526718 0.00000000