From 8167681a317efa7b5c5176764c12e1c462f47803 Mon Sep 17 00:00:00 2001 From: Martin Kagamino Lehoux Date: Mon, 21 Apr 2025 10:54:11 +0200 Subject: First implem of similar KOM --- ride/ride.go | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) (limited to 'ride/ride.go') 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") } -- cgit v1.2.3