summaryrefslogtreecommitdiff
path: root/ride
diff options
context:
space:
mode:
authorMartin Kagamino Lehoux <martin@lehoux.net>2024-08-07 08:49:20 +0200
committerMartin Kagamino Lehoux <martin@lehoux.net>2024-08-07 08:49:20 +0200
commit76f13c2c07ccb187d7b8376322cd973fd2d54be4 (patch)
tree77ee3f924e0bc3fd61bda8de332303b4653b74c3 /ride
parent7da299025e349f243db540ef0427e511c49c920e (diff)
fix: Remove too short outliers
Diffstat (limited to 'ride')
-rw-r--r--ride/climb.go2
-rw-r--r--ride/climb_test.go15
-rw-r--r--ride/ride.go14
3 files changed, 30 insertions, 1 deletions
diff --git a/ride/climb.go b/ride/climb.go
index cff2b39..7720fa8 100644
--- a/ride/climb.go
+++ b/ride/climb.go
@@ -109,7 +109,7 @@ func climbsBetween(points []Point, start int, end int) []Climb {
return climbsBetween(points, start+1, end)
}
climb := bestClimbBetween(points, start, highest)
- if Score(points, climb.start, climb.end) >= 35 {
+ if Score(points, climb.start, climb.end) >= 35 && points[climb.end].distance-points[climb.start].distance >= ClimbDistanceMinimum {
fmt.Printf("Found climb between %.1fkm and %.1fkm\n", points[climb.start].distance/1000, points[climb.end].distance/1000)
climbs = append(climbs, climb)
}
diff --git a/ride/climb_test.go b/ride/climb_test.go
index 65b6b54..0f6ff8b 100644
--- a/ride/climb_test.go
+++ b/ride/climb_test.go
@@ -88,3 +88,18 @@ func TestPogacar20220721(t *testing.T) {
assert.Equal(t, "99.2km-109.3km: 10.2km at 8.4% (710 pts - HC)", r.String(climbs[4]))
assert.Equal(t, "128.6km-142.2km: 13.6km at 7.8% (832 pts - HC)", r.String(climbs[5]))
}
+
+func TestBouclesVerdon2024(t *testing.T) {
+ gpxContent, err := gpx.ParseFile("../examples/2024-06-29.BouclesVerdon.gpx")
+ assert.NoError(t, err)
+ r := ride.FromGPX(gpxContent)
+ climbs := r.AllClimbs()
+
+ assert.Len(t, climbs, 6)
+ assert.Equal(t, "3.6km-13.8km: 10.3km at 2.1% (44 pts - Cat 4)", r.String(climbs[0])) // TODO: Not steep enough
+ assert.Equal(t, "34.7km-37.3km: 2.5km at 5.0% (62 pts - Cat 4)", r.String(climbs[1]))
+ assert.Equal(t, "41.9km-51.0km: 9.0km at 2.5% (55 pts - Cat 4)", r.String(climbs[2])) // TODO: Not steep enough
+ assert.Equal(t, "57.6km-60.8km: 3.1km at 6.3% (124 pts - Cat 3)", r.String(climbs[3]))
+ assert.Equal(t, "71.7km-74.7km: 3.0km at 5.3% (84 pts - Cat 3)", r.String(climbs[4]))
+ assert.Equal(t, "77.4km-78.7km: 1.3km at 5.3% (37 pts - Cat 4)", r.String(climbs[5]))
+}
diff --git a/ride/ride.go b/ride/ride.go
index 2f0b78b..a745b0c 100644
--- a/ride/ride.go
+++ b/ride/ride.go
@@ -59,3 +59,17 @@ func (r *Ride) ScoreFromKm(start, end float64) float64 {
}
return Score(r.points, i, j)
}
+
+func (r *Ride) ClimbFromDist(startDist, endDist float64) Climb {
+ start, end := 0, 0
+ for i, p := range r.points {
+ if start == 0 && p.distance >= startDist {
+ start = i
+ }
+ if end == 0 && p.distance >= endDist {
+ end = i
+ break
+ }
+ }
+ return Climb{start, end}
+}