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/index.go | |
| parent | 87850541aa6f719721209ed994b93ad4d7ab4077 (diff) | |
First implem of similar KOM
Diffstat (limited to 'ride/index.go')
| -rw-r--r-- | ride/index.go | 36 |
1 files changed, 36 insertions, 0 deletions
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 +} |