Classifying Types of Climbing (Walking, Lift Access, etc.)

For Adventure / Bikepacking / Enduro / DH athletes, it would be very helpful to know how much time was spent walking the bike uphill vs. riding uphill vs. taking a chairlift up.

Some ideas to compute this:

  • Walking uphill can be estimated by observing a cadence of 0, while uphill progress is made past a certain distance (say 1000 ft etc.), and a certain speed window (say 0-10kph)
  • Lift access can be calculated by using the GPS data, Cadence of 0 for prolonged period of time ( say >1 min) and a VAM threshold greater than a certain amount.

Not sure how to approach this for walking the bike on flat terrain, but that would be another aspect in addition to walking while going uphill.

You could try create custom activity fields to compute these things. This one calculates “Hike ascent time” (total time doing power hike in trail run):

{
  let time = icu.streams.time
  let alt = icu.streams.fixed_altitude
  let cadence = icu.streams.cadence
  // https://forum.intervals.icu/t/elevation-gain-off/8463/16
  let threshold = 1.2
  let totSecs = 0.0
  let prev = 0
  let maxDeltaTime = activity.icu_median_time_delta ? activity.icu_median_time_delta * 2 : 0
  if (maxDeltaTime < 30) maxDeltaTime = 30
  let prevAlt = alt[0]
  let prevTime = 0
  for (let i = 1; i < alt.length - 1; i++) {
    let t = time[i]
    if (t == null) continue
    let deltaTime = t - prev
    if (deltaTime <= maxDeltaTime) {
      let v = alt[i]
      if (v != null) {
        if (prevAlt != null) {
          let delta = v - prevAlt
          if (Math.abs(delta) >= threshold) {
            if (delta > 0.0 && cadence[i] <= 69) totSecs += t - prevTime
            prevAlt = v
            prevTime = t
          }
        } else {
          prevAlt = v
        }
      }
    } else {
      prevAlt = alt[i]
      prevTime = t
    }
    prev = t
  }
  totSecs
}
1 Like