blob: 79f92129d70bc90b1c209eacad089d7a5f419c15 (
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.Start().Coord, climb.Start().Coord)
_, endDistance := geodist.HaversineDistance(c.End().Coord, climb.End().Coord)
if startDistance <= index.sensitivity/1000 && endDistance <= index.sensitivity/1000 {
results = append(results, c)
}
}
return results
}
|