diff options
| author | Martin Kagamino Lehoux <martin@lehoux.net> | 2025-04-21 10:54:11 +0200 |
|---|---|---|
| committer | Martin Kagamino Lehoux <martin@lehoux.net> | 2025-04-21 10:54:11 +0200 |
| commit | 8167681a317efa7b5c5176764c12e1c462f47803 (patch) | |
| tree | ca4114699701c5e900c77abc12d2ea7977d7927a /ride/ride.go | |
| parent | 87850541aa6f719721209ed994b93ad4d7ab4077 (diff) | |
First implem of similar KOM
Diffstat (limited to 'ride/ride.go')
| -rw-r--r-- | ride/ride.go | 27 |
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") } |