/// <summary> /// ''' The along-track distance, calculated from the start point to the closest point on the path to the given point. /// ''' </summary> /// ''' <param name="at">The <see cref="Position">position</see> to caclulate the on track distance for.</param> /// ''' <returns>The on track distance from the start of the stretch.</returns> /// ''' <remarks></remarks> public static Distance OnTrackDistance(this Stretch me, Position at) { const double r = EarthMeanRadiusMeters / 1000; var s = Stretch.Between(me.From, at); var d13 = s.Distance.Meters; var dXt = me.CrossTrackDistance(at).Meters; var d = Acos(Cos(d13 / r) / Cos(dXt / r)) * r; return(Distance.FromMeters(Abs(d))); }
public static bool IsOnTrack(this Stretch me, Position at, Distance maxOffTrackDistance) => me.CrossTrackDistance(at) <= maxOffTrackDistance;