blob: 17564ca16f0e502d11d35f0bde9ffd18ba224fb8 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
package ride
import "github.com/jftuga/geodist"
type RideClimbsIndex interface {
Insert(ride Ride)
Similar(ride Ride, climb Climb) []Climb
}
type FlatRideClimbsIndex struct {
sensitivity float64
climbs []Climb
}
func NewFlatRideClimbsIndex(sensitivity float64) *FlatRideClimbsIndex {
return &FlatRideClimbsIndex{
climbs: make([]Climb, 0),
sensitivity: sensitivity,
}
}
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.ride.Coord(c.StartIndex()), climb.ride.Coord(climb.StartIndex()))
_, endDistance := geodist.HaversineDistance(c.ride.Coord(c.EndIndex()), climb.ride.Coord(climb.EndIndex()))
if startDistance <= index.sensitivity/1000 && endDistance <= index.sensitivity/1000 {
results = append(results, c)
}
}
return results
}
|