summaryrefslogtreecommitdiff
path: root/ride/ride.go
diff options
context:
space:
mode:
authorMartin Kagamino Lehoux <martin@lehoux.net>2025-04-21 10:54:11 +0200
committerMartin Kagamino Lehoux <martin@lehoux.net>2025-04-21 10:54:11 +0200
commit8167681a317efa7b5c5176764c12e1c462f47803 (patch)
treeca4114699701c5e900c77abc12d2ea7977d7927a /ride/ride.go
parent87850541aa6f719721209ed994b93ad4d7ab4077 (diff)
First implem of similar KOM
Diffstat (limited to 'ride/ride.go')
-rw-r--r--ride/ride.go27
1 files changed, 26 insertions, 1 deletions
diff --git a/ride/ride.go b/ride/ride.go
index c8ecacc..fb774e4 100644
--- a/ride/ride.go
+++ b/ride/ride.go
@@ -4,6 +4,9 @@ import (
"github.com/jftuga/geodist"
"github.com/martinlehoux/kagamigo/kcore"
"github.com/tkrajina/gpxgo/gpx"
+ "gonum.org/v1/plot"
+ "gonum.org/v1/plot/plotter"
+ "gonum.org/v1/plot/vg"
)
type Ride struct {
@@ -63,5 +66,27 @@ func (r *Ride) ClimbFromDist(startDist, endDist float64) Climb {
break
}
}
- return Climb{start: start, end: end, points: r.points[start : end+1]}
+ return Climb{rideStart: start, rideEnd: end, points: r.points[start : end+1]}
+}
+
+func Plot(r *Ride, outputFile string) {
+ r.check()
+
+ pts := make(plotter.XYs, len(r.points))
+ for i, p := range r.points {
+ pts[i].X = p.DistanceM / 1000 // Convert distance to kilometers
+ pts[i].Y = p.ElevationM
+ }
+
+ p := plot.New()
+ p.Title.Text = "Ride Elevation Profile"
+ p.X.Label.Text = "Distance (km)"
+ p.Y.Label.Text = "Elevation (m)"
+
+ line, err := plotter.NewLine(pts)
+ kcore.Expect(err, "failed to create line plot")
+ p.Add(line)
+
+ err = p.Save(10*vg.Inch, 4*vg.Inch, outputFile)
+ kcore.Expect(err, "failed to save plot")
}