route-planning-0.0.1: src/Data/Geo/Route/Osrm.hs
module Data.Geo.Route.Osrm(
Osrm(..)
) where
import Prelude(Show(show))
import Data.Eq(Eq((==)))
import Data.Function(id, (.))
import Data.Functor(Functor(fmap))
import Data.List((++), intercalate)
import Data.String(String)
import Control.Lens((#), (^.))
import Data.Geo.Coordinate.Latitude(HasLatitude(latitude), latitude, fracLatitude)
import Data.Geo.Coordinate.Longitude(HasLongitude(longitude), longitude, fracLongitude)
import Data.Geo.Coordinate.Coordinate(Coordinate, HasCoordinate(coordinate))
import Text.Printf(printf)
class Osrm o where
allCoordinates ::
o
-> [Coordinate]
osrm ::
o
-> String
osrm =
let removeAdjacentDuplicates ::
Eq a =>
[a]
-> [a]
removeAdjacentDuplicates [] =
[]
removeAdjacentDuplicates [h] =
[h]
removeAdjacentDuplicates (h:x:xs) =
(if h == x then id else (h:)) (removeAdjacentDuplicates (x:xs))
in ("http://map.project-osrm.org/?" ++) .
intercalate "&" .
fmap (\c -> let c' = c ^. coordinate
in printf "loc=%0.6f,%0.6f" (fracLatitude # (c' ^. latitude)) (fracLongitude # (c' ^. longitude))) .
removeAdjacentDuplicates .
allCoordinates