diff options
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 +} |