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/index.go | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 ride/index.go (limited to 'ride/index.go') diff --git a/ride/index.go b/ride/index.go new file mode 100644 index 0000000..18e2ac8 --- /dev/null +++ b/ride/index.go @@ -0,0 +1,36 @@ +package ride + +import "github.com/jftuga/geodist" + +type RideClimbsIndex interface { + Insert(ride Ride) + Similar(ride Ride, climb Climb) []Climb +} + +type FlatRideClimbsIndex struct { + sensibility float64 + climbs []Climb +} + +func NewFlatRideClimbsIndex(sensibility float64) *FlatRideClimbsIndex { + return &FlatRideClimbsIndex{ + climbs: make([]Climb, 0), + sensibility: sensibility, + } +} + +func (index *FlatRideClimbsIndex) Insert(ride Ride) { + index.climbs = append(index.climbs, ride.AllClimbs()...) +} + +func (index *FlatRideClimbsIndex) Similar(ride Ride, climb Climb) []Climb { + results := make([]Climb, 0) + for _, c := range index.climbs { + _, startDistance := geodist.HaversineDistance(c.Start().Coord, climb.Start().Coord) + _, endDistance := geodist.HaversineDistance(c.End().Coord, climb.End().Coord) + if startDistance <= index.sensibility/1000 && endDistance <= index.sensibility/1000 { + results = append(results, c) + } + } + return results +} -- cgit v1.2.3