summaryrefslogtreecommitdiff
path: root/mountain_pass/detection.go
diff options
context:
space:
mode:
Diffstat (limited to 'mountain_pass/detection.go')
-rw-r--r--mountain_pass/detection.go17
1 files changed, 9 insertions, 8 deletions
diff --git a/mountain_pass/detection.go b/mountain_pass/detection.go
index e30fddc..4be2f94 100644
--- a/mountain_pass/detection.go
+++ b/mountain_pass/detection.go
@@ -60,7 +60,8 @@ func DetectCrossings(ride ride.Ride, passes []MountainPass, radiusM, elevationTo
// climb's highest point and whose elevation is within elevationToleranceM of
// that point's elevation, nearest first. Found is false when no pass matches.
func MatchClimb(climb ride.Climb, passes []MountainPass, radiusM, elevationToleranceM float64) (MountainPass, bool) {
- top := climb.Top()
+ topCoord := climb.TopCoord()
+ topElevation := climb.TopElevationM()
var best MountainPass
bestDistanceM := radiusM
found := false
@@ -68,12 +69,12 @@ func MatchClimb(climb ride.Climb, passes []MountainPass, radiusM, elevationToler
if mountainPass.Coord == nil {
continue
}
- distanceKm, _ := geodist.HaversineDistance(top.Coord, *mountainPass.Coord)
+ distanceKm, _ := geodist.HaversineDistance(topCoord, *mountainPass.Coord)
distanceM := distanceKm * 1000
if distanceM > bestDistanceM {
continue
}
- elevationDiff := absFloat64(top.ElevationM - float64(mountainPass.Elevation))
+ elevationDiff := absFloat64(topElevation - float64(mountainPass.Elevation))
if elevationDiff > elevationToleranceM {
continue
}
@@ -86,14 +87,14 @@ func MatchClimb(climb ride.Climb, passes []MountainPass, radiusM, elevationToler
func nearestCrossing(ride ride.Ride, mountainPass MountainPass) (Crossing, bool) {
best := Crossing{Pass: mountainPass, DistanceToM: 1e18}
- for _, point := range ride.Points() {
- distanceKm, _ := geodist.HaversineDistance(point.Coord, *mountainPass.Coord)
+ for i := 0; i < ride.Len(); i++ {
+ distanceKm, _ := geodist.HaversineDistance(ride.Coord(i), *mountainPass.Coord)
distanceM := distanceKm * 1000
if distanceM < best.DistanceToM {
best.DistanceToM = distanceM
- best.RideDistanceM = point.DistanceM
- best.RideElevation = point.ElevationM
- best.ElevationDiff = absFloat64(point.ElevationM - float64(mountainPass.Elevation))
+ best.RideDistanceM = ride.DistanceM(i)
+ best.RideElevation = ride.ElevationM(i)
+ best.ElevationDiff = absFloat64(ride.ElevationM(i) - float64(mountainPass.Elevation))
}
}
if best.DistanceToM > 1e17 {