summaryrefslogtreecommitdiff
path: root/ride
diff options
context:
space:
mode:
authorMartin Kagamino Lehoux <martin@lehoux.net>2025-04-21 10:57:32 +0200
committerMartin Kagamino Lehoux <martin@lehoux.net>2025-04-21 10:57:32 +0200
commitc05cd9cb6305f15e3de985e5040142e0156a1286 (patch)
tree829d8c3bb98fb55c3815230d9d74697fdd59cdc1 /ride
parent8167681a317efa7b5c5176764c12e1c462f47803 (diff)
Implement climb score
Diffstat (limited to 'ride')
-rw-r--r--ride/climb.go12
-rw-r--r--ride/ride.go9
2 files changed, 13 insertions, 8 deletions
diff --git a/ride/climb.go b/ride/climb.go
index 0a9994d..069a7fb 100644
--- a/ride/climb.go
+++ b/ride/climb.go
@@ -7,7 +7,6 @@ import (
"slices"
"time"
- "github.com/jftuga/geodist"
"github.com/martinlehoux/kagamigo/kcore"
)
@@ -37,11 +36,8 @@ func (climb Climb) String() string {
return fmt.Sprintf("%.1fkm-%.1fkm: %.1fkm at %.1f%% (%d pts - %s)", start.DistanceM/1000, end.DistanceM/1000, (end.DistanceM-start.DistanceM)/1000, Slope(start, end)*100, int(score), Category(score))
}
-type Point struct {
- DistanceM float64
- ElevationM float64
- Coord geodist.Coord
- Timestamp time.Time
+func (climb Climb) Score() float64 {
+ return Score(climb.points, 0, len(climb.points)-1)
}
func Slope(start, end Point) float64 {
@@ -126,8 +122,8 @@ func climbsBetween(points []Point, start int, end int) []Climb {
return climbsBetween(points, start+1, end)
}
climb := bestClimbBetween(points, start, highest)
- if Score(points, climb.rideStart, climb.rideEnd) >= 35 && points[climb.rideEnd].DistanceM-points[climb.rideStart].DistanceM >= ClimbDistanceMinimum {
- slog.Debug("Found climb between", slog.Int("start", int(points[climb.rideStart].DistanceM)), slog.Int("end", int(points[climb.rideEnd].DistanceM)))
+ if climb.Score() >= 35 && climb.End().DistanceM-climb.Start().DistanceM >= ClimbDistanceMinimum {
+ slog.Debug("Found climb between", slog.Int("start", int(climb.Start().DistanceM)), slog.Int("end", int(climb.End().DistanceM)))
climbs = append(climbs, climb)
}
climbs = append(climbs, climbsBetween(points, start, climb.rideStart)...)
diff --git a/ride/ride.go b/ride/ride.go
index fb774e4..094a8f6 100644
--- a/ride/ride.go
+++ b/ride/ride.go
@@ -1,6 +1,8 @@
package ride
import (
+ "time"
+
"github.com/jftuga/geodist"
"github.com/martinlehoux/kagamigo/kcore"
"github.com/tkrajina/gpxgo/gpx"
@@ -9,6 +11,13 @@ import (
"gonum.org/v1/plot/vg"
)
+type Point struct {
+ DistanceM float64
+ ElevationM float64
+ Coord geodist.Coord
+ Timestamp time.Time
+}
+
type Ride struct {
points []Point
}