pbI      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGH"GAn arc is represented as a circle, starting heading and ending heading DGenearlly a circle indicates a known area in which we are searching C (so a center point and maximum possible distance from that point) )Speed is hard coded as meters per second ,Angles are expressed in radians from North.  0 == North  pi/ 2 == West  pi == South  (32)pi == East == - (pi  2) "Distances are expressed in meters  .Direction two points aim toward (0 = North, pi2 = West, pi = South, 3pi 2 = East) :Given a vector and coordinate, computes a new coordinate. , Within some epsilon it should hold that if  %dest = addVector (dist,heading) startthen  heading == heading start dest dist == distance start dest &Speed in meters per second, only if a Time! was recorded for each waypoint. radius of the earth in meters  Circumference of earth (meters) North is 0 radians ,South, being 180 degrees from North, is pi. East is 270 degrees (3 pi / 2) West is 90 degrees (pi/2) IProvides a lat/lon pair of doubles in radians Jinterpolate c1 c2 w where 0 <= w <= 1 Gives a point on the line $ between c1 and c2 equal to c1 when w == 0 (weighted linearly  toward c2). NCompute the points at which two circles intersect (assumes a flat plain). If B the circles do not intersect or are identical then the result is Nothing. CFind the area in which all given circles intersect. The resulting E area is described in terms of the bounding arcs. All cirlces must  intersect at two points. KdivideArea vDist hDist nw se( divides an area into a grid of equally I spaced coordinates within the box drawn by the northwest point (nw) and J southeast point (se). Because this uses floating point there might be a O different number of points in some rows (the last might be too far east based " on a heading from the se point). IReads a GPX file (using the GPX library) by simply concatenating all the  tracks, segments, and points (trkpts, trksegs, trks) into a single . LMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  9;When grouping points, lists of points are either marked as  or .  !9Given a selection of coordinates, transform the selected 9 coordinates in some way (while leaving the non-selected  coordinates unaffected). "@A PointGrouping is a function that selects segments of a trail. LGrouping point _does not_ result in deleted points. It is always true that:  forall g :: PointGrouping c --> % concatMap unSelect (g ts) == ts MThe purpose of grouping is usually for later processing. Any desire to drop  points that didn'9t meet a particular grouping criteria can be filled with  a composition with  (or directly via =). #$%6Take the minimum of the speeds from the given methods &7Compute the speed considering only the given endpoints '+Obtain the median of the considered points ( Obtain the  ) Obtain the  * Obtain the  of the considered points  +avgSpeeds n points ' Average speed using a window of up to n% seconds and averaging by taking the  Median ('). ,slidingAverageSpeed m n. Average speed using a moving window of up to n seconds  and an # of m. -./0 1>Groups trail segments into contiguous points within the speed + and all others outside of the speed. The speed from point p(i) ? to p(i+1) is associated with p(i) (execpt for the first speed B value, which is associated with both the first and second point) 2A  rest point6 means the coordinates remain within a given distance + for at least a particular amount of time. 3<chunking points into groups spanning at most the given time  interval. 4intersects the given groupings 5Union all the groupings 6Intersection binary operator 7Union binary operator   8Inverts the selected/nonselected segments 9firstGrouping f ps only the first segment remains  ed, and only  if it was already selected by f. :>Only the last segment, if any, is selected (note: the current & implementation is inefficient, using  ) ;(chunk the trail into groups of N points <@For every selected group, refine the selection using the second % grouping method. This differs from IntersectionOf by restarting D the second grouping algorithm at the beginning each group selected  by the first algorithm. =Remove all points that remain $ed by the given grouping algorithm. >@Construct a bezier curve using the provided trail. Construct a B new trail by sampling the given bezier curve at the given times. ; The current implementation assumes the times of the input ? coordinates are available and all equal (Ex: all points are 5 C seconds apart), the results will be poor if this is not the case! ?@AInterpolate selected points onto a bezier curve. Note this gets D exponentially more expensive with the length of the segement being @ transformed - it is not advisable to perform this operation on , trail segements with more than ten points! ABFilters out any points that go backward in time (thus must not be  valid if this is a trail) BAReturns the closest distance between two trails (or Nothing if a / trail is empty). Inefficient implementation:  O( (n * m) * log (n * m) ) C!Find the total distance traveled DEBUses Grahams scan to compute the convex hull of the given points. 6 This operation requires sorting of the points, so don't try it unless D you have notably more memory than the list of points will consume. Find the southmost point FGH, !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGH,  !"#*)('&%$$%&'()*+,-./0123456789:;<=>?@ABCDEFGHNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHJ   #*)('&%$ "!-.0/CD+,BE>@A=123;489:5<67FGH?      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTRSURSVRSWRSXRYZRY[RS\RS]RS]RS^RS_RS`RSaRSbRScRSdRSeRSfRSgRSgRShRSiRSjRSkRSlRSmRSnRSoRSpRSqRSrstustvswxswysz{sz|s}~s}ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss s s  s  sssssssssssss !s "s#$s#%s&'s&(s)*s)+s,-s,.s/0s/1s23s24s56s57s89s8:s;<s;=s>?s>@sABsACsDEsDFsGHsGIJKLMRNOPQRPQSPQTUVWXRNYZ[\]^_gps-0.9Data.GPS Data.GPS.CoreData.GPS.TrailTrailArcCircleVectorSpeedHeadingDistance getUTCTimedistanceheading getVector addVectorspeed radiusOfEarthcircumferenceOfEarthnorthsoutheastwest getDMSPair getRadianPair interpolatecircleIntersectionPointsintersectionArcsOfmaximumDistanceOfArc divideAreareadGPXwriteGPXreadGPXSegmentsSelected NotSelectSelectunSelectTransformGrouping PointGrouping AvgMethodAvgWithAvgMinOf AvgEndPoints AvgMedianAvgGeometricMeanAvgHarmonicMeanAvgMean avgSpeedsslidingAverageSpeed isSelected isNotSelected selLength onSelected betweenSpeeds restLocations spansTimeintersectionOfunionOf/\\/invertSelection firstGrouping lastGrouping everyNPointsrefineGrouping filterPoints bezierCurveAt bezierPoint bezierCurve linearTimeclosestDistance totalDistance totalTime convexHull smoothRests smoothSome smoothMoregetRadianPairD toRadianschoose2 writeGpxFile readGpxFilebase Control.Arrowarrfirstapp|||loopControl.Category<<<>>> ArrowLoop ArrowMonad ArrowApply ArrowChoiceleftright+++ ArrowPlus<+> ArrowZero zeroArrowKleisli runKleisliArrowsecond***&&&returnA^>>>>^<<^^<<leftApp GPX-0.6.2Data.Geo.GPX.GpxgpxGpxData.Geo.GPX.Lens.WptsLwptsLWptsLData.Geo.GPX.Lens.RtesLrtesLRtesLData.Geo.GPX.RterteRteData.Geo.GPX.Lens.RteptsLrteptsLRteptsLData.Geo.GPX.Lens.TrksLtrksLTrksLData.Geo.GPX.TrktrkTrkData.Geo.GPX.Lens.TrksegsLtrksegsLTrksegsLData.Geo.GPX.TrksegtrksegTrksegData.Geo.GPX.Lens.TrkptsLtrkptsLTrkptsLData.Geo.GPX.Wptwpt'wptWptData.Geo.GPX.Lens.DgpsidLdgpsidLDgpsidLData.Geo.GPX.DgpsStationrunDgpsStation dgpsStation DgpsStationData.Geo.GPX.Lens.FixLfixLFixLData.Geo.GPX.FixfixppsdgpsthreedtwodnonefoldFixFixData.Geo.GPX.Lens.MagvarLmagvarLMagvarLData.Geo.GPX.Degrees runDegreesdegreesDegreesData.Geo.GPX.Lens.PtsLptsLPtsLData.Geo.GPX.PtsegrunPtsegptsegPtsegData.Geo.GPX.PtptPtData.Geo.GPX.Lens.LonLlonLLonLData.Geo.GPX.Lens.MetadataL metadataL MetadataLData.Geo.GPX.MetadatametadataMetadataData.Geo.GPX.Lens.BoundsLboundsLBoundsLData.Geo.GPX.BoundsboundsBoundsData.Geo.GPX.Lens.MaxlonLmaxlonLMaxlonLData.Geo.GPX.Lens.MinlonLminlonLMinlonLData.Geo.GPX.Longitude runLongitude longitude LongitudeData.Geo.GPX.Lens.LatLlatLLatLData.Geo.GPX.Lens.MaxlatLmaxlatLMaxlatLData.Geo.GPX.Lens.MinlatLminlatLMinlatLData.Geo.GPX.Latitude runLatitudelatitudeLatitudeData.Geo.GPX.Lens.ExtensionsL extensionsL ExtensionsLData.Geo.GPX.Extensions runExtensions extensions ExtensionsData.Geo.GPX.PersonpersonPersonData.Geo.GPX.Lens.EmailLemailLEmailLData.Geo.GPX.EmailemailEmailData.Geo.GPX.Lens.LinksLlinksLLinksLData.Geo.GPX.Lens.LinkLlinkLLinkLData.Geo.GPX.LinklinkLinkData.Geo.GPX.Lens.CopyrightL copyrightL CopyrightLData.Geo.GPX.Copyright copyright CopyrightData.Geo.GPX.Lens.EleLeleLEleLData.Geo.GPX.Lens.TimeLtimeLTimeLData.Geo.GPX.Lens.IdLidLIdLData.Geo.GPX.Lens.DomainLdomainLDomainLData.Geo.GPX.Lens.HrefLhrefLHrefLData.Geo.GPX.Lens.TextLtextLTextLData.Geo.GPX.Lens.TypeLtypeLTypeLData.Geo.GPX.Lens.NameLnameLNameLData.Geo.GPX.Lens.AuthorLauthorLAuthorLData.Geo.GPX.Lens.YearLyearLYearLData.Geo.GPX.Lens.LicenseLlicenseLLicenseLData.Geo.GPX.Lens.GeoidheightL geoidheightL GeoidheightLData.Geo.GPX.Lens.CmtLcmtLCmtLData.Geo.GPX.Lens.DescLdescLDescLData.Geo.GPX.Lens.SrcLsrcLSrcLData.Geo.GPX.Lens.SymLsymLSymLData.Geo.GPX.Lens.SatLsatLSatLData.Geo.GPX.Lens.HdopLhdopLHdopLData.Geo.GPX.Lens.VdopLvdopLVdopLData.Geo.GPX.Lens.PdopLpdopLPdopL Data.Geo.GPX.Lens.AgeofdgpsdataLageofdgpsdataLAgeofdgpsdataLData.Geo.GPX.Lens.NumberLnumberLNumberLData.Geo.GPX.Lens.KeywordsL keywordsL KeywordsLData.Geo.GPX.Lens.VersionLversionLVersionLData.Geo.GPX.Lens.CreatorLcreatorLCreatorLTurnStraight RightTurnLeftTurnGHC.Listfilterstatistics-0.10.1.0Statistics.Sample geometricMean harmonicMeanmean takeWhileEnd dropExact selListTake selListDropreverse mkTimePaireastZeroHeadingturn southMost slidingWindow