Data.GPS
Contents
Description
Author: Thomas DuBuisson Copyright: Thomas DuBuisson License: BSD3
A basic GPS library with calculations for distance and speed along with helper functions for filtering/smoothing trails. All distances are in meters and time is in seconds. Speed is thus meters/second
The current intent of this library is to 1) Provide a standard type class interface for coordinates 2) Include fleshed out support for relevant libraries, a task too often neglected in modern Hackage packages.
Integration includes KML support via the xml package, pretty printing, anb binary.
- class Coordinate a where
- toDMS :: a -> DMSCoordinate
- fromDMS :: DMSCoordinate -> a
- distance :: a -> a -> Distance
- heading :: a -> a -> Heading
- getVector :: a -> a -> Vector
- class Coordinate coord => Location loc coord time | loc -> coord, loc -> time where
- data DMSCoordinate = DMSCoord {}
- data DMS = DMS {}
- type Heading = Double
- type Speed = Double
- type Vector = (Distance, Heading)
- type Trail a = [a]
- smoothTrails :: Location a b c => Speed -> Trail a -> [Trail a]
- longestSmoothTrail :: Location a b c => Speed -> Trail a -> Trail a
- restLocations :: Location a b c => Distance -> NominalDiffTime -> Trail a -> [Trail a]
- closestDistance :: Coordinate a => Trail a -> Trail a -> Maybe Distance
- normalizeDMS :: DMSCoordinate -> DMSCoordinate
- type KML = Element
- trailToKML :: Coordinate a => String -> Trail a -> KML
- pointsToKML :: Coordinate a => String -> [a] -> [String] -> KML
- kmlToString :: KML -> String
Types and Classes
class Coordinate a whereSource
A coordinate is a place on earths surface. While twoDMS and fromDMS are the only required functions, coordinate systems may provide more accurate calculations of heading, distance, and vectors without the intermediate translation.
Methods
toDMS :: a -> DMSCoordinateSource
fromDMS :: DMSCoordinate -> aSource
distance :: a -> a -> DistanceSource
Instances
| Coordinate DMSCoordinate | |
| Coordinate c => Coordinate (c, UTCTime) |
class Coordinate coord => Location loc coord time | loc -> coord, loc -> time whereSource
A location is a coordinate at a specific time
Instances
| Coordinate c => Location (c, UTCTime) c UTCTime |
data DMSCoordinate Source
DMSCoordinate is the typical degree minute second for latitude/longitude used by most civilian GPS devices.
DMS is the degree, minute, seconds used for both latitude and longitude
Angles are expressed in radians from North. 0 == North pi/2 == West pi == South (32)pi == East == - (pi 2)
Helper Functions
smoothTrails :: Location a b c => Speed -> Trail a -> [Trail a]Source
'smoothTrails speed trail' should separate points that would mandate a speed
in excess of the given rate into separate Trails. No point are deleted;
if there is only one correct trail expected then the largest resulting
trail will likely be the one your looking for.
longestSmoothTrail :: Location a b c => Speed -> Trail a -> Trail aSource
longestSmoothTrail is ust smoothTrails returning only the longest smooth trail.
restLocations :: Location a b c => Distance -> NominalDiffTime -> Trail a -> [Trail a]Source
closestDistance :: Coordinate a => Trail a -> Trail a -> Maybe DistanceSource
Returns the closest distance between two trails (or Nothing if a trail is empty) O( (n * m) * log (n * m) )
normalizeDMS :: DMSCoordinate -> DMSCoordinateSource
Typically useful for printing, normalizes degreesminutesseconds into just degrees and decimal minutes: DMSCoord (DMS 45 36.938455 0) (DMS ...)
KML Operations (Open format used by GoogleEarth, among others)
The KML type and operations might be moved into a Data.KML module in the future
trailToKML :: Coordinate a => String -> Trail a -> KMLSource
converts a given set of coordinates to a trail in KML format. Useful for saving as a file.
pointsToKML :: Coordinate a => String -> [a] -> [String] -> KMLSource
converts a given set of coordinates to points in KML format. Useful for saving as a file.
kmlToString :: KML -> StringSource
Converts the KML elements to a string and prepends the proper XML header, thus making it the correct format for saving as a file and opening it with other programs such as GoogleEarth.