google-static-maps 0.5.0.3 → 0.6.0.0
raw patch · 5 files changed
+727/−683 lines, 5 filesdep ~servantdep ~servant-clientPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: servant, servant-client
API changes (from Hackage documentation)
- Web.Google.Static.Maps: AC :: Region
- Web.Google.Static.Maps: AD :: Region
- Web.Google.Static.Maps: AE :: Region
- Web.Google.Static.Maps: AF :: Region
- Web.Google.Static.Maps: AG :: Region
- Web.Google.Static.Maps: AI :: Region
- Web.Google.Static.Maps: AL :: Region
- Web.Google.Static.Maps: AM :: Region
- Web.Google.Static.Maps: AO :: Region
- Web.Google.Static.Maps: AQ :: Region
- Web.Google.Static.Maps: AR :: Region
- Web.Google.Static.Maps: AS :: Region
- Web.Google.Static.Maps: AT :: Region
- Web.Google.Static.Maps: AU :: Region
- Web.Google.Static.Maps: AW :: Region
- Web.Google.Static.Maps: AX :: Region
- Web.Google.Static.Maps: AZ :: Region
- Web.Google.Static.Maps: Address :: Text -> Address
- Web.Google.Static.Maps: Administrative :: Feature
- Web.Google.Static.Maps: AdministrativeCountry :: Feature
- Web.Google.Static.Maps: AdministrativeLandParcel :: Feature
- Web.Google.Static.Maps: AdministrativeLocality :: Feature
- Web.Google.Static.Maps: AdministrativeNeighborhood :: Feature
- Web.Google.Static.Maps: AdministrativeProvince :: Feature
- Web.Google.Static.Maps: AllElements :: Element
- Web.Google.Static.Maps: AllFeatures :: Feature
- Web.Google.Static.Maps: AllGeometry :: Element
- Web.Google.Static.Maps: AllLabels :: Element
- Web.Google.Static.Maps: AnchorBottom :: StdAnchor
- Web.Google.Static.Maps: AnchorBottomLeft :: StdAnchor
- Web.Google.Static.Maps: AnchorBottomRight :: StdAnchor
- Web.Google.Static.Maps: AnchorCenter :: StdAnchor
- Web.Google.Static.Maps: AnchorLeft :: StdAnchor
- Web.Google.Static.Maps: AnchorPoint :: Int -> Int -> Anchor
- Web.Google.Static.Maps: AnchorRight :: StdAnchor
- Web.Google.Static.Maps: AnchorTop :: StdAnchor
- Web.Google.Static.Maps: AnchorTopLeft :: StdAnchor
- Web.Google.Static.Maps: AnchorTopRight :: StdAnchor
- Web.Google.Static.Maps: Arabic :: Language
- Web.Google.Static.Maps: BA :: Region
- Web.Google.Static.Maps: BB :: Region
- Web.Google.Static.Maps: BD :: Region
- Web.Google.Static.Maps: BE :: Region
- Web.Google.Static.Maps: BF :: Region
- Web.Google.Static.Maps: BG :: Region
- Web.Google.Static.Maps: BH :: Region
- Web.Google.Static.Maps: BI :: Region
- Web.Google.Static.Maps: BJ :: Region
- Web.Google.Static.Maps: BL :: Region
- Web.Google.Static.Maps: BM :: Region
- Web.Google.Static.Maps: BN :: Region
- Web.Google.Static.Maps: BO :: Region
- Web.Google.Static.Maps: BQ :: Region
- Web.Google.Static.Maps: BR :: Region
- Web.Google.Static.Maps: BS :: Region
- Web.Google.Static.Maps: BT :: Region
- Web.Google.Static.Maps: BV :: Region
- Web.Google.Static.Maps: BW :: Region
- Web.Google.Static.Maps: BY :: Region
- Web.Google.Static.Maps: BZ :: Region
- Web.Google.Static.Maps: Basque :: Language
- Web.Google.Static.Maps: Bengali :: Language
- Web.Google.Static.Maps: Black :: StdColor
- Web.Google.Static.Maps: Blue :: StdColor
- Web.Google.Static.Maps: Brown :: StdColor
- Web.Google.Static.Maps: Bulgarian :: Language
- Web.Google.Static.Maps: CA :: Region
- Web.Google.Static.Maps: CC :: Region
- Web.Google.Static.Maps: CD :: Region
- Web.Google.Static.Maps: CF :: Region
- Web.Google.Static.Maps: CG :: Region
- Web.Google.Static.Maps: CH :: Region
- Web.Google.Static.Maps: CI :: Region
- Web.Google.Static.Maps: CK :: Region
- Web.Google.Static.Maps: CL :: Region
- Web.Google.Static.Maps: CM :: Region
- Web.Google.Static.Maps: CN :: Region
- Web.Google.Static.Maps: CO :: Region
- Web.Google.Static.Maps: CR :: Region
- Web.Google.Static.Maps: CU :: Region
- Web.Google.Static.Maps: CV :: Region
- Web.Google.Static.Maps: CW :: Region
- Web.Google.Static.Maps: CX :: Region
- Web.Google.Static.Maps: CY :: Region
- Web.Google.Static.Maps: CZ :: Region
- Web.Google.Static.Maps: Catalan :: Language
- Web.Google.Static.Maps: Center :: Location -> Center
- Web.Google.Static.Maps: ChineseSimplified :: Language
- Web.Google.Static.Maps: ChineseTraditional :: Language
- Web.Google.Static.Maps: Coords :: LatLng -> Location
- Web.Google.Static.Maps: Croatian :: Language
- Web.Google.Static.Maps: CustomIcon :: URI -> Maybe Anchor -> MarkerStyle
- Web.Google.Static.Maps: Czech :: Language
- Web.Google.Static.Maps: DE :: Region
- Web.Google.Static.Maps: DJ :: Region
- Web.Google.Static.Maps: DK :: Region
- Web.Google.Static.Maps: DM :: Region
- Web.Google.Static.Maps: DO :: Region
- Web.Google.Static.Maps: DZ :: Region
- Web.Google.Static.Maps: Danish :: Language
- Web.Google.Static.Maps: Double :: Scale
- Web.Google.Static.Maps: Dutch :: Language
- Web.Google.Static.Maps: EC :: Region
- Web.Google.Static.Maps: EE :: Region
- Web.Google.Static.Maps: EG :: Region
- Web.Google.Static.Maps: EH :: Region
- Web.Google.Static.Maps: ER :: Region
- Web.Google.Static.Maps: ES :: Region
- Web.Google.Static.Maps: ET :: Region
- Web.Google.Static.Maps: EU :: Region
- Web.Google.Static.Maps: English :: Language
- Web.Google.Static.Maps: EnglishAustralian :: Language
- Web.Google.Static.Maps: EnglishBritish :: Language
- Web.Google.Static.Maps: FI :: Region
- Web.Google.Static.Maps: FJ :: Region
- Web.Google.Static.Maps: FK :: Region
- Web.Google.Static.Maps: FM :: Region
- Web.Google.Static.Maps: FO :: Region
- Web.Google.Static.Maps: FR :: Region
- Web.Google.Static.Maps: Farsi :: Language
- Web.Google.Static.Maps: Filipino :: Language
- Web.Google.Static.Maps: Finnish :: Language
- Web.Google.Static.Maps: French :: Language
- Web.Google.Static.Maps: GA :: Region
- Web.Google.Static.Maps: GB :: Region
- Web.Google.Static.Maps: GD :: Region
- Web.Google.Static.Maps: GE :: Region
- Web.Google.Static.Maps: GF :: Region
- Web.Google.Static.Maps: GG :: Region
- Web.Google.Static.Maps: GH :: Region
- Web.Google.Static.Maps: GI :: Region
- Web.Google.Static.Maps: GL :: Region
- Web.Google.Static.Maps: GM :: Region
- Web.Google.Static.Maps: GN :: Region
- Web.Google.Static.Maps: GP :: Region
- Web.Google.Static.Maps: GQ :: Region
- Web.Google.Static.Maps: GR :: Region
- Web.Google.Static.Maps: GS :: Region
- Web.Google.Static.Maps: GT :: Region
- Web.Google.Static.Maps: GU :: Region
- Web.Google.Static.Maps: GW :: Region
- Web.Google.Static.Maps: GY :: Region
- Web.Google.Static.Maps: Galician :: Language
- Web.Google.Static.Maps: GeometryFill :: Element
- Web.Google.Static.Maps: GeometryStroke :: Element
- Web.Google.Static.Maps: German :: Language
- Web.Google.Static.Maps: Gray :: StdColor
- Web.Google.Static.Maps: Greek :: Language
- Web.Google.Static.Maps: Green :: StdColor
- Web.Google.Static.Maps: Gujarati :: Language
- Web.Google.Static.Maps: HK :: Region
- Web.Google.Static.Maps: HM :: Region
- Web.Google.Static.Maps: HN :: Region
- Web.Google.Static.Maps: HR :: Region
- Web.Google.Static.Maps: HT :: Region
- Web.Google.Static.Maps: HU :: Region
- Web.Google.Static.Maps: Hebrew :: Language
- Web.Google.Static.Maps: Hindi :: Language
- Web.Google.Static.Maps: Hungarian :: Language
- Web.Google.Static.Maps: Hybrid :: MapType
- Web.Google.Static.Maps: ID :: Region
- Web.Google.Static.Maps: IE :: Region
- Web.Google.Static.Maps: IL :: Region
- Web.Google.Static.Maps: IM :: Region
- Web.Google.Static.Maps: IN :: Region
- Web.Google.Static.Maps: IO :: Region
- Web.Google.Static.Maps: IQ :: Region
- Web.Google.Static.Maps: IR :: Region
- Web.Google.Static.Maps: IS :: Region
- Web.Google.Static.Maps: IT :: Region
- Web.Google.Static.Maps: Indonesian :: Language
- Web.Google.Static.Maps: Italian :: Language
- Web.Google.Static.Maps: JE :: Region
- Web.Google.Static.Maps: JM :: Region
- Web.Google.Static.Maps: JO :: Region
- Web.Google.Static.Maps: JP :: Region
- Web.Google.Static.Maps: Japanese :: Language
- Web.Google.Static.Maps: KE :: Region
- Web.Google.Static.Maps: KG :: Region
- Web.Google.Static.Maps: KH :: Region
- Web.Google.Static.Maps: KI :: Region
- Web.Google.Static.Maps: KM :: Region
- Web.Google.Static.Maps: KN :: Region
- Web.Google.Static.Maps: KP :: Region
- Web.Google.Static.Maps: KR :: Region
- Web.Google.Static.Maps: KW :: Region
- Web.Google.Static.Maps: KY :: Region
- Web.Google.Static.Maps: KZ :: Region
- Web.Google.Static.Maps: Kannada :: Language
- Web.Google.Static.Maps: Key :: Text -> Key
- Web.Google.Static.Maps: Korean :: Language
- Web.Google.Static.Maps: LA :: Region
- Web.Google.Static.Maps: LB :: Region
- Web.Google.Static.Maps: LC :: Region
- Web.Google.Static.Maps: LI :: Region
- Web.Google.Static.Maps: LK :: Region
- Web.Google.Static.Maps: LR :: Region
- Web.Google.Static.Maps: LS :: Region
- Web.Google.Static.Maps: LT :: Region
- Web.Google.Static.Maps: LU :: Region
- Web.Google.Static.Maps: LV :: Region
- Web.Google.Static.Maps: LY :: Region
- Web.Google.Static.Maps: LabelsIcon :: Element
- Web.Google.Static.Maps: LabelsText :: Element
- Web.Google.Static.Maps: LabelsTextFill :: Element
- Web.Google.Static.Maps: LabelsTextStroke :: Element
- Web.Google.Static.Maps: Landscape :: Feature
- Web.Google.Static.Maps: LandscapeManMade :: Feature
- Web.Google.Static.Maps: LandscapeNatural :: Feature
- Web.Google.Static.Maps: LandscapeNaturalLandcover :: Feature
- Web.Google.Static.Maps: LandscapeNaturalTerrain :: Feature
- Web.Google.Static.Maps: LatLng :: Double -> Double -> LatLng
- Web.Google.Static.Maps: Latvian :: Language
- Web.Google.Static.Maps: Lithuanian :: Language
- Web.Google.Static.Maps: Locale :: Address -> Location
- Web.Google.Static.Maps: MA :: Region
- Web.Google.Static.Maps: MC :: Region
- Web.Google.Static.Maps: MD :: Region
- Web.Google.Static.Maps: ME :: Region
- Web.Google.Static.Maps: MF :: Region
- Web.Google.Static.Maps: MG :: Region
- Web.Google.Static.Maps: MH :: Region
- Web.Google.Static.Maps: MK :: Region
- Web.Google.Static.Maps: ML :: Region
- Web.Google.Static.Maps: MM :: Region
- Web.Google.Static.Maps: MN :: Region
- Web.Google.Static.Maps: MO :: Region
- Web.Google.Static.Maps: MP :: Region
- Web.Google.Static.Maps: MQ :: Region
- Web.Google.Static.Maps: MR :: Region
- Web.Google.Static.Maps: MS :: Region
- Web.Google.Static.Maps: MT :: Region
- Web.Google.Static.Maps: MU :: Region
- Web.Google.Static.Maps: MV :: Region
- Web.Google.Static.Maps: MW :: Region
- Web.Google.Static.Maps: MX :: Region
- Web.Google.Static.Maps: MY :: Region
- Web.Google.Static.Maps: MZ :: Region
- Web.Google.Static.Maps: Malayalam :: Language
- Web.Google.Static.Maps: MapStyle :: Maybe Feature -> Maybe Element -> [MapStyleOp] -> MapStyle
- Web.Google.Static.Maps: Marathi :: Language
- Web.Google.Static.Maps: MarkerColor :: Word8 -> Word8 -> Word8 -> MarkerColor
- Web.Google.Static.Maps: MarkerLabel :: Char -> MarkerLabel
- Web.Google.Static.Maps: Markers :: Maybe MarkerStyle -> [Location] -> Markers
- Web.Google.Static.Maps: Mid :: MarkerSize
- Web.Google.Static.Maps: NA :: Region
- Web.Google.Static.Maps: NC :: Region
- Web.Google.Static.Maps: NE :: Region
- Web.Google.Static.Maps: NF :: Region
- Web.Google.Static.Maps: NG :: Region
- Web.Google.Static.Maps: NI :: Region
- Web.Google.Static.Maps: NL :: Region
- Web.Google.Static.Maps: NO :: Region
- Web.Google.Static.Maps: NP :: Region
- Web.Google.Static.Maps: NR :: Region
- Web.Google.Static.Maps: NU :: Region
- Web.Google.Static.Maps: NZ :: Region
- Web.Google.Static.Maps: Norwegian :: Language
- Web.Google.Static.Maps: OM :: Region
- Web.Google.Static.Maps: Off :: Visibility
- Web.Google.Static.Maps: On :: Visibility
- Web.Google.Static.Maps: Orange :: StdColor
- Web.Google.Static.Maps: PA :: Region
- Web.Google.Static.Maps: PE :: Region
- Web.Google.Static.Maps: PF :: Region
- Web.Google.Static.Maps: PG :: Region
- Web.Google.Static.Maps: PH :: Region
- Web.Google.Static.Maps: PK :: Region
- Web.Google.Static.Maps: PL :: Region
- Web.Google.Static.Maps: PM :: Region
- Web.Google.Static.Maps: PN :: Region
- Web.Google.Static.Maps: PR :: Region
- Web.Google.Static.Maps: PS :: Region
- Web.Google.Static.Maps: PT :: Region
- Web.Google.Static.Maps: PW :: Region
- Web.Google.Static.Maps: PY :: Region
- Web.Google.Static.Maps: Path :: Maybe PathStyle -> [Location] -> Path
- Web.Google.Static.Maps: PathColor :: Word8 -> Word8 -> Word8 -> PathColor
- Web.Google.Static.Maps: PathColorAlpha :: Word8 -> Word8 -> Word8 -> Word8 -> PathColor
- Web.Google.Static.Maps: PathGeodesic :: Bool -> PathGeodesic
- Web.Google.Static.Maps: PathStyle :: Maybe PathWeight -> Maybe PathColor -> Maybe PathColor -> Maybe PathGeodesic -> PathStyle
- Web.Google.Static.Maps: PathWeight :: Int -> PathWeight
- Web.Google.Static.Maps: Png32 :: Format
- Web.Google.Static.Maps: Png8 :: Format
- Web.Google.Static.Maps: Poi :: Feature
- Web.Google.Static.Maps: PoiAttraction :: Feature
- Web.Google.Static.Maps: PoiBusiness :: Feature
- Web.Google.Static.Maps: PoiGovernment :: Feature
- Web.Google.Static.Maps: PoiMedical :: Feature
- Web.Google.Static.Maps: PoiPark :: Feature
- Web.Google.Static.Maps: PoiPlaceOfWorship :: Feature
- Web.Google.Static.Maps: PoiSchool :: Feature
- Web.Google.Static.Maps: PoiSportsComplex :: Feature
- Web.Google.Static.Maps: Polish :: Language
- Web.Google.Static.Maps: Portuguese :: Language
- Web.Google.Static.Maps: PortugueseBrazil :: Language
- Web.Google.Static.Maps: PortuguesePortugal :: Language
- Web.Google.Static.Maps: Purple :: StdColor
- Web.Google.Static.Maps: QA :: Region
- Web.Google.Static.Maps: Quadruple :: Scale
- Web.Google.Static.Maps: RE :: Region
- Web.Google.Static.Maps: RO :: Region
- Web.Google.Static.Maps: RS :: Region
- Web.Google.Static.Maps: RU :: Region
- Web.Google.Static.Maps: RW :: Region
- Web.Google.Static.Maps: Red :: StdColor
- Web.Google.Static.Maps: Road :: Feature
- Web.Google.Static.Maps: RoadArterial :: Feature
- Web.Google.Static.Maps: RoadHighway :: Feature
- Web.Google.Static.Maps: RoadHighwayControlledAccess :: Feature
- Web.Google.Static.Maps: RoadLocal :: Feature
- Web.Google.Static.Maps: RoadMap :: MapType
- Web.Google.Static.Maps: Romanian :: Language
- Web.Google.Static.Maps: Russian :: Language
- Web.Google.Static.Maps: SA :: Region
- Web.Google.Static.Maps: SB :: Region
- Web.Google.Static.Maps: SC :: Region
- Web.Google.Static.Maps: SD :: Region
- Web.Google.Static.Maps: SE :: Region
- Web.Google.Static.Maps: SG :: Region
- Web.Google.Static.Maps: SH :: Region
- Web.Google.Static.Maps: SI :: Region
- Web.Google.Static.Maps: SJ :: Region
- Web.Google.Static.Maps: SK :: Region
- Web.Google.Static.Maps: SL :: Region
- Web.Google.Static.Maps: SM :: Region
- Web.Google.Static.Maps: SN :: Region
- Web.Google.Static.Maps: SO :: Region
- Web.Google.Static.Maps: SR :: Region
- Web.Google.Static.Maps: SS :: Region
- Web.Google.Static.Maps: ST :: Region
- Web.Google.Static.Maps: SV :: Region
- Web.Google.Static.Maps: SX :: Region
- Web.Google.Static.Maps: SY :: Region
- Web.Google.Static.Maps: SZ :: Region
- Web.Google.Static.Maps: Satellite :: MapType
- Web.Google.Static.Maps: Secret :: Text -> Secret
- Web.Google.Static.Maps: Serbian :: Language
- Web.Google.Static.Maps: Signature :: Text -> Signature
- Web.Google.Static.Maps: Simplified :: Visibility
- Web.Google.Static.Maps: Single :: Scale
- Web.Google.Static.Maps: Size :: Int -> Int -> Size
- Web.Google.Static.Maps: Slovak :: Language
- Web.Google.Static.Maps: Slovenian :: Language
- Web.Google.Static.Maps: Small :: MarkerSize
- Web.Google.Static.Maps: Spanish :: Language
- Web.Google.Static.Maps: StdAnchor :: StdAnchor -> Anchor
- Web.Google.Static.Maps: StdMarkerColor :: StdColor -> MarkerColor
- Web.Google.Static.Maps: StdMarkerStyle :: Maybe MarkerSize -> Maybe MarkerColor -> Maybe MarkerLabel -> MarkerStyle
- Web.Google.Static.Maps: StdPathColor :: StdColor -> PathColor
- Web.Google.Static.Maps: StyleColor :: Word8 -> Word8 -> Word8 -> MapStyleOp
- Web.Google.Static.Maps: StyleGamma :: Double -> MapStyleOp
- Web.Google.Static.Maps: StyleHue :: Word8 -> Word8 -> Word8 -> MapStyleOp
- Web.Google.Static.Maps: StyleInvertLightness :: Bool -> MapStyleOp
- Web.Google.Static.Maps: StyleLightness :: Double -> MapStyleOp
- Web.Google.Static.Maps: StyleSaturation :: Double -> MapStyleOp
- Web.Google.Static.Maps: StyleVisibility :: Visibility -> MapStyleOp
- Web.Google.Static.Maps: StyleWeight :: Int -> MapStyleOp
- Web.Google.Static.Maps: Swedish :: Language
- Web.Google.Static.Maps: TC :: Region
- Web.Google.Static.Maps: TD :: Region
- Web.Google.Static.Maps: TF :: Region
- Web.Google.Static.Maps: TG :: Region
- Web.Google.Static.Maps: TH :: Region
- Web.Google.Static.Maps: TJ :: Region
- Web.Google.Static.Maps: TK :: Region
- Web.Google.Static.Maps: TL :: Region
- Web.Google.Static.Maps: TM :: Region
- Web.Google.Static.Maps: TN :: Region
- Web.Google.Static.Maps: TO :: Region
- Web.Google.Static.Maps: TR :: Region
- Web.Google.Static.Maps: TT :: Region
- Web.Google.Static.Maps: TV :: Region
- Web.Google.Static.Maps: TW :: Region
- Web.Google.Static.Maps: TZ :: Region
- Web.Google.Static.Maps: Tagalog :: Language
- Web.Google.Static.Maps: Tamil :: Language
- Web.Google.Static.Maps: Telugu :: Language
- Web.Google.Static.Maps: Terrain :: MapType
- Web.Google.Static.Maps: Thai :: Language
- Web.Google.Static.Maps: Tiny :: MarkerSize
- Web.Google.Static.Maps: Transit :: Feature
- Web.Google.Static.Maps: TransitLine :: Feature
- Web.Google.Static.Maps: TransitStation :: Feature
- Web.Google.Static.Maps: TransitStationAirport :: Feature
- Web.Google.Static.Maps: TransitStationBus :: Feature
- Web.Google.Static.Maps: TransitStationRail :: Feature
- Web.Google.Static.Maps: Turkish :: Language
- Web.Google.Static.Maps: UA :: Region
- Web.Google.Static.Maps: UG :: Region
- Web.Google.Static.Maps: UK :: Region
- Web.Google.Static.Maps: UM :: Region
- Web.Google.Static.Maps: URI :: String -> Maybe URIAuth -> String -> String -> String -> URI
- Web.Google.Static.Maps: URIAuth :: String -> String -> String -> URIAuth
- Web.Google.Static.Maps: US :: Region
- Web.Google.Static.Maps: UY :: Region
- Web.Google.Static.Maps: UZ :: Region
- Web.Google.Static.Maps: Ukrainian :: Language
- Web.Google.Static.Maps: VA :: Region
- Web.Google.Static.Maps: VC :: Region
- Web.Google.Static.Maps: VE :: Region
- Web.Google.Static.Maps: VG :: Region
- Web.Google.Static.Maps: VI :: Region
- Web.Google.Static.Maps: VN :: Region
- Web.Google.Static.Maps: VU :: Region
- Web.Google.Static.Maps: Vietnamese :: Language
- Web.Google.Static.Maps: Visible :: [Location] -> Visible
- Web.Google.Static.Maps: WF :: Region
- Web.Google.Static.Maps: WS :: Region
- Web.Google.Static.Maps: Water :: Feature
- Web.Google.Static.Maps: White :: StdColor
- Web.Google.Static.Maps: YE :: Region
- Web.Google.Static.Maps: YT :: Region
- Web.Google.Static.Maps: Yellow :: StdColor
- Web.Google.Static.Maps: ZA :: Region
- Web.Google.Static.Maps: ZM :: Region
- Web.Google.Static.Maps: ZW :: Region
- Web.Google.Static.Maps: Zoom :: Int -> Zoom
- Web.Google.Static.Maps: [anchor] :: MarkerStyle -> Maybe Anchor
- Web.Google.Static.Maps: [height] :: Size -> Int
- Web.Google.Static.Maps: [icon] :: MarkerStyle -> URI
- Web.Google.Static.Maps: [lat] :: LatLng -> Double
- Web.Google.Static.Maps: [lng] :: LatLng -> Double
- Web.Google.Static.Maps: [markerColor] :: MarkerStyle -> Maybe MarkerColor
- Web.Google.Static.Maps: [markerLabel] :: MarkerStyle -> Maybe MarkerLabel
- Web.Google.Static.Maps: [markerSize] :: MarkerStyle -> Maybe MarkerSize
- Web.Google.Static.Maps: [pathColor] :: PathStyle -> Maybe PathColor
- Web.Google.Static.Maps: [pathFillColor] :: PathStyle -> Maybe PathColor
- Web.Google.Static.Maps: [pathGeodesic] :: PathStyle -> Maybe PathGeodesic
- Web.Google.Static.Maps: [pathWeight] :: PathStyle -> Maybe PathWeight
- Web.Google.Static.Maps: [uriAuthority] :: URI -> Maybe URIAuth
- Web.Google.Static.Maps: [uriFragment] :: URI -> String
- Web.Google.Static.Maps: [uriPath] :: URI -> String
- Web.Google.Static.Maps: [uriPort] :: URIAuth -> String
- Web.Google.Static.Maps: [uriQuery] :: URI -> String
- Web.Google.Static.Maps: [uriRegName] :: URIAuth -> String
- Web.Google.Static.Maps: [uriScheme] :: URI -> String
- Web.Google.Static.Maps: [uriUserInfo] :: URIAuth -> String
- Web.Google.Static.Maps: [width] :: Size -> Int
- Web.Google.Static.Maps: api :: Proxy GoogleStaticMapsAPI
- Web.Google.Static.Maps: data Anchor
- Web.Google.Static.Maps: data Element
- Web.Google.Static.Maps: data Feature
- Web.Google.Static.Maps: data Format
- Web.Google.Static.Maps: data Language
- Web.Google.Static.Maps: data LatLng
- Web.Google.Static.Maps: data Location
- Web.Google.Static.Maps: data MapStyle
- Web.Google.Static.Maps: data MapStyleOp
- Web.Google.Static.Maps: data MapType
- Web.Google.Static.Maps: data MarkerColor
- Web.Google.Static.Maps: data MarkerSize
- Web.Google.Static.Maps: data MarkerStyle
- Web.Google.Static.Maps: data Markers
- Web.Google.Static.Maps: data Path
- Web.Google.Static.Maps: data PathColor
- Web.Google.Static.Maps: data PathStyle
- Web.Google.Static.Maps: data Region
- Web.Google.Static.Maps: data Scale
- Web.Google.Static.Maps: data Size
- Web.Google.Static.Maps: data StdAnchor
- Web.Google.Static.Maps: data StdColor
- Web.Google.Static.Maps: data URI
- Web.Google.Static.Maps: data URIAuth
- Web.Google.Static.Maps: data Visibility
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.Anchor
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.Center
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.Element
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.Feature
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.Format
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.MapStyle
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.MapStyleOp
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.MapType
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.MarkerColor
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.MarkerLabel
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.MarkerSize
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.MarkerStyle
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.Markers
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.Path
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.PathColor
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.PathGeodesic
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.PathStyle
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.PathWeight
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.Scale
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.Secret
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.Signature
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.Size
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.StdAnchor
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.StdColor
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.Visibility
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.Visible
- Web.Google.Static.Maps: instance GHC.Classes.Eq Web.Google.Static.Maps.Zoom
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.Anchor
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.Center
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.Element
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.Feature
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.Format
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.MapStyle
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.MapStyleOp
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.MapType
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.MarkerColor
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.MarkerLabel
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.MarkerSize
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.MarkerStyle
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.Markers
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.Path
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.PathColor
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.PathGeodesic
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.PathStyle
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.PathWeight
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.Scale
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.Secret
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.Signature
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.Size
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.StdAnchor
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.StdColor
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.Visibility
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.Visible
- Web.Google.Static.Maps: instance GHC.Show.Show Web.Google.Static.Maps.Zoom
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.Anchor
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.Center
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.Element
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.Feature
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.Format
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.MapStyle
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.MapStyleOp
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.MapType
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.MarkerColor
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.MarkerLabel
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.MarkerSize
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.MarkerStyle
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.Markers
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.Path
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.PathColor
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.PathGeodesic
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.PathStyle
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.PathWeight
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.Scale
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.Signature
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.Size
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.StdAnchor
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.StdColor
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.Visibility
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.Visible
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Static.Maps.Zoom
- Web.Google.Static.Maps: instance Web.Internal.HttpApiData.ToHttpApiData [Web.Google.Static.Maps.MapStyleOp]
- Web.Google.Static.Maps: newtype Address
- Web.Google.Static.Maps: newtype Center
- Web.Google.Static.Maps: newtype Key
- Web.Google.Static.Maps: newtype MarkerLabel
- Web.Google.Static.Maps: newtype PathGeodesic
- Web.Google.Static.Maps: newtype PathWeight
- Web.Google.Static.Maps: newtype Secret
- Web.Google.Static.Maps: newtype Signature
- Web.Google.Static.Maps: newtype Visible
- Web.Google.Static.Maps: newtype Zoom
- Web.Google.Static.Maps: staticmap :: Manager -> Key -> Maybe Secret -> Maybe Center -> Maybe Zoom -> Size -> Maybe Scale -> Maybe Format -> [MapStyle] -> Maybe MapType -> Maybe Language -> Maybe Region -> [Markers] -> [Path] -> Maybe Visible -> IO (Either ServantError StaticmapResponse)
- Web.Google.Static.Maps: type GoogleStaticMapsAPI = "staticmap" :> QueryParam "key" Key :> QueryParam "center" Center :> QueryParam "zoom" Zoom :> QueryParam "size" Size :> QueryParam "scale" Scale :> QueryParam "format" Format :> QueryParams "style" MapStyle :> QueryParam "maptype" MapType :> QueryParam "language" Language :> QueryParam "region" Region :> QueryParams "markers" Markers :> QueryParams "path" Path :> QueryParam "visible" Visible :> QueryParam "signature" Signature :> Get '[PNG] StaticmapResponse
- Web.Google.Static.Maps: type StaticmapResponse = DynamicImage
+ Web.Google.Maps.Common: Albanian :: Language
+ Web.Google.Maps.Common: Belarusian :: Language
+ Web.Google.Maps.Common: Burmese :: Language
+ Web.Google.Maps.Common: Kazakh :: Language
+ Web.Google.Maps.Common: Kyrgyz :: Language
+ Web.Google.Maps.Common: Macedonian :: Language
+ Web.Google.Maps.Common: Punjabi :: Language
+ Web.Google.Maps.Common: Uzbek :: Language
+ Web.Google.Maps.Static: AC :: Region
+ Web.Google.Maps.Static: AD :: Region
+ Web.Google.Maps.Static: AE :: Region
+ Web.Google.Maps.Static: AF :: Region
+ Web.Google.Maps.Static: AG :: Region
+ Web.Google.Maps.Static: AI :: Region
+ Web.Google.Maps.Static: AL :: Region
+ Web.Google.Maps.Static: AM :: Region
+ Web.Google.Maps.Static: AO :: Region
+ Web.Google.Maps.Static: AQ :: Region
+ Web.Google.Maps.Static: AR :: Region
+ Web.Google.Maps.Static: AS :: Region
+ Web.Google.Maps.Static: AT :: Region
+ Web.Google.Maps.Static: AU :: Region
+ Web.Google.Maps.Static: AW :: Region
+ Web.Google.Maps.Static: AX :: Region
+ Web.Google.Maps.Static: AZ :: Region
+ Web.Google.Maps.Static: Address :: Text -> Address
+ Web.Google.Maps.Static: Administrative :: Feature
+ Web.Google.Maps.Static: AdministrativeCountry :: Feature
+ Web.Google.Maps.Static: AdministrativeLandParcel :: Feature
+ Web.Google.Maps.Static: AdministrativeLocality :: Feature
+ Web.Google.Maps.Static: AdministrativeNeighborhood :: Feature
+ Web.Google.Maps.Static: AdministrativeProvince :: Feature
+ Web.Google.Maps.Static: Albanian :: Language
+ Web.Google.Maps.Static: AllElements :: Element
+ Web.Google.Maps.Static: AllFeatures :: Feature
+ Web.Google.Maps.Static: AllGeometry :: Element
+ Web.Google.Maps.Static: AllLabels :: Element
+ Web.Google.Maps.Static: AnchorBottom :: StdAnchor
+ Web.Google.Maps.Static: AnchorBottomLeft :: StdAnchor
+ Web.Google.Maps.Static: AnchorBottomRight :: StdAnchor
+ Web.Google.Maps.Static: AnchorCenter :: StdAnchor
+ Web.Google.Maps.Static: AnchorLeft :: StdAnchor
+ Web.Google.Maps.Static: AnchorPoint :: Int -> Int -> Anchor
+ Web.Google.Maps.Static: AnchorRight :: StdAnchor
+ Web.Google.Maps.Static: AnchorTop :: StdAnchor
+ Web.Google.Maps.Static: AnchorTopLeft :: StdAnchor
+ Web.Google.Maps.Static: AnchorTopRight :: StdAnchor
+ Web.Google.Maps.Static: Arabic :: Language
+ Web.Google.Maps.Static: BA :: Region
+ Web.Google.Maps.Static: BB :: Region
+ Web.Google.Maps.Static: BD :: Region
+ Web.Google.Maps.Static: BE :: Region
+ Web.Google.Maps.Static: BF :: Region
+ Web.Google.Maps.Static: BG :: Region
+ Web.Google.Maps.Static: BH :: Region
+ Web.Google.Maps.Static: BI :: Region
+ Web.Google.Maps.Static: BJ :: Region
+ Web.Google.Maps.Static: BL :: Region
+ Web.Google.Maps.Static: BM :: Region
+ Web.Google.Maps.Static: BN :: Region
+ Web.Google.Maps.Static: BO :: Region
+ Web.Google.Maps.Static: BQ :: Region
+ Web.Google.Maps.Static: BR :: Region
+ Web.Google.Maps.Static: BS :: Region
+ Web.Google.Maps.Static: BT :: Region
+ Web.Google.Maps.Static: BV :: Region
+ Web.Google.Maps.Static: BW :: Region
+ Web.Google.Maps.Static: BY :: Region
+ Web.Google.Maps.Static: BZ :: Region
+ Web.Google.Maps.Static: Basque :: Language
+ Web.Google.Maps.Static: Belarusian :: Language
+ Web.Google.Maps.Static: Bengali :: Language
+ Web.Google.Maps.Static: Black :: StdColor
+ Web.Google.Maps.Static: Blue :: StdColor
+ Web.Google.Maps.Static: Brown :: StdColor
+ Web.Google.Maps.Static: Bulgarian :: Language
+ Web.Google.Maps.Static: Burmese :: Language
+ Web.Google.Maps.Static: CA :: Region
+ Web.Google.Maps.Static: CC :: Region
+ Web.Google.Maps.Static: CD :: Region
+ Web.Google.Maps.Static: CF :: Region
+ Web.Google.Maps.Static: CG :: Region
+ Web.Google.Maps.Static: CH :: Region
+ Web.Google.Maps.Static: CI :: Region
+ Web.Google.Maps.Static: CK :: Region
+ Web.Google.Maps.Static: CL :: Region
+ Web.Google.Maps.Static: CM :: Region
+ Web.Google.Maps.Static: CN :: Region
+ Web.Google.Maps.Static: CO :: Region
+ Web.Google.Maps.Static: CR :: Region
+ Web.Google.Maps.Static: CU :: Region
+ Web.Google.Maps.Static: CV :: Region
+ Web.Google.Maps.Static: CW :: Region
+ Web.Google.Maps.Static: CX :: Region
+ Web.Google.Maps.Static: CY :: Region
+ Web.Google.Maps.Static: CZ :: Region
+ Web.Google.Maps.Static: Catalan :: Language
+ Web.Google.Maps.Static: Center :: Location -> Center
+ Web.Google.Maps.Static: ChineseSimplified :: Language
+ Web.Google.Maps.Static: ChineseTraditional :: Language
+ Web.Google.Maps.Static: Coords :: LatLng -> Location
+ Web.Google.Maps.Static: Croatian :: Language
+ Web.Google.Maps.Static: CustomIcon :: URI -> Maybe Anchor -> MarkerStyle
+ Web.Google.Maps.Static: Czech :: Language
+ Web.Google.Maps.Static: DE :: Region
+ Web.Google.Maps.Static: DJ :: Region
+ Web.Google.Maps.Static: DK :: Region
+ Web.Google.Maps.Static: DM :: Region
+ Web.Google.Maps.Static: DO :: Region
+ Web.Google.Maps.Static: DZ :: Region
+ Web.Google.Maps.Static: Danish :: Language
+ Web.Google.Maps.Static: Double :: Scale
+ Web.Google.Maps.Static: Dutch :: Language
+ Web.Google.Maps.Static: EC :: Region
+ Web.Google.Maps.Static: EE :: Region
+ Web.Google.Maps.Static: EG :: Region
+ Web.Google.Maps.Static: EH :: Region
+ Web.Google.Maps.Static: ER :: Region
+ Web.Google.Maps.Static: ES :: Region
+ Web.Google.Maps.Static: ET :: Region
+ Web.Google.Maps.Static: EU :: Region
+ Web.Google.Maps.Static: English :: Language
+ Web.Google.Maps.Static: EnglishAustralian :: Language
+ Web.Google.Maps.Static: EnglishBritish :: Language
+ Web.Google.Maps.Static: FI :: Region
+ Web.Google.Maps.Static: FJ :: Region
+ Web.Google.Maps.Static: FK :: Region
+ Web.Google.Maps.Static: FM :: Region
+ Web.Google.Maps.Static: FO :: Region
+ Web.Google.Maps.Static: FR :: Region
+ Web.Google.Maps.Static: Farsi :: Language
+ Web.Google.Maps.Static: Filipino :: Language
+ Web.Google.Maps.Static: Finnish :: Language
+ Web.Google.Maps.Static: French :: Language
+ Web.Google.Maps.Static: GA :: Region
+ Web.Google.Maps.Static: GB :: Region
+ Web.Google.Maps.Static: GD :: Region
+ Web.Google.Maps.Static: GE :: Region
+ Web.Google.Maps.Static: GF :: Region
+ Web.Google.Maps.Static: GG :: Region
+ Web.Google.Maps.Static: GH :: Region
+ Web.Google.Maps.Static: GI :: Region
+ Web.Google.Maps.Static: GL :: Region
+ Web.Google.Maps.Static: GM :: Region
+ Web.Google.Maps.Static: GN :: Region
+ Web.Google.Maps.Static: GP :: Region
+ Web.Google.Maps.Static: GQ :: Region
+ Web.Google.Maps.Static: GR :: Region
+ Web.Google.Maps.Static: GS :: Region
+ Web.Google.Maps.Static: GT :: Region
+ Web.Google.Maps.Static: GU :: Region
+ Web.Google.Maps.Static: GW :: Region
+ Web.Google.Maps.Static: GY :: Region
+ Web.Google.Maps.Static: Galician :: Language
+ Web.Google.Maps.Static: GeometryFill :: Element
+ Web.Google.Maps.Static: GeometryStroke :: Element
+ Web.Google.Maps.Static: German :: Language
+ Web.Google.Maps.Static: Gray :: StdColor
+ Web.Google.Maps.Static: Greek :: Language
+ Web.Google.Maps.Static: Green :: StdColor
+ Web.Google.Maps.Static: Gujarati :: Language
+ Web.Google.Maps.Static: HK :: Region
+ Web.Google.Maps.Static: HM :: Region
+ Web.Google.Maps.Static: HN :: Region
+ Web.Google.Maps.Static: HR :: Region
+ Web.Google.Maps.Static: HT :: Region
+ Web.Google.Maps.Static: HU :: Region
+ Web.Google.Maps.Static: Hebrew :: Language
+ Web.Google.Maps.Static: Hindi :: Language
+ Web.Google.Maps.Static: Hungarian :: Language
+ Web.Google.Maps.Static: Hybrid :: MapType
+ Web.Google.Maps.Static: ID :: Region
+ Web.Google.Maps.Static: IE :: Region
+ Web.Google.Maps.Static: IL :: Region
+ Web.Google.Maps.Static: IM :: Region
+ Web.Google.Maps.Static: IN :: Region
+ Web.Google.Maps.Static: IO :: Region
+ Web.Google.Maps.Static: IQ :: Region
+ Web.Google.Maps.Static: IR :: Region
+ Web.Google.Maps.Static: IS :: Region
+ Web.Google.Maps.Static: IT :: Region
+ Web.Google.Maps.Static: Indonesian :: Language
+ Web.Google.Maps.Static: Italian :: Language
+ Web.Google.Maps.Static: JE :: Region
+ Web.Google.Maps.Static: JM :: Region
+ Web.Google.Maps.Static: JO :: Region
+ Web.Google.Maps.Static: JP :: Region
+ Web.Google.Maps.Static: Japanese :: Language
+ Web.Google.Maps.Static: KE :: Region
+ Web.Google.Maps.Static: KG :: Region
+ Web.Google.Maps.Static: KH :: Region
+ Web.Google.Maps.Static: KI :: Region
+ Web.Google.Maps.Static: KM :: Region
+ Web.Google.Maps.Static: KN :: Region
+ Web.Google.Maps.Static: KP :: Region
+ Web.Google.Maps.Static: KR :: Region
+ Web.Google.Maps.Static: KW :: Region
+ Web.Google.Maps.Static: KY :: Region
+ Web.Google.Maps.Static: KZ :: Region
+ Web.Google.Maps.Static: Kannada :: Language
+ Web.Google.Maps.Static: Kazakh :: Language
+ Web.Google.Maps.Static: Key :: Text -> Key
+ Web.Google.Maps.Static: Korean :: Language
+ Web.Google.Maps.Static: Kyrgyz :: Language
+ Web.Google.Maps.Static: LA :: Region
+ Web.Google.Maps.Static: LB :: Region
+ Web.Google.Maps.Static: LC :: Region
+ Web.Google.Maps.Static: LI :: Region
+ Web.Google.Maps.Static: LK :: Region
+ Web.Google.Maps.Static: LR :: Region
+ Web.Google.Maps.Static: LS :: Region
+ Web.Google.Maps.Static: LT :: Region
+ Web.Google.Maps.Static: LU :: Region
+ Web.Google.Maps.Static: LV :: Region
+ Web.Google.Maps.Static: LY :: Region
+ Web.Google.Maps.Static: LabelsIcon :: Element
+ Web.Google.Maps.Static: LabelsText :: Element
+ Web.Google.Maps.Static: LabelsTextFill :: Element
+ Web.Google.Maps.Static: LabelsTextStroke :: Element
+ Web.Google.Maps.Static: Landscape :: Feature
+ Web.Google.Maps.Static: LandscapeManMade :: Feature
+ Web.Google.Maps.Static: LandscapeNatural :: Feature
+ Web.Google.Maps.Static: LandscapeNaturalLandcover :: Feature
+ Web.Google.Maps.Static: LandscapeNaturalTerrain :: Feature
+ Web.Google.Maps.Static: LatLng :: Double -> Double -> LatLng
+ Web.Google.Maps.Static: Latvian :: Language
+ Web.Google.Maps.Static: Lithuanian :: Language
+ Web.Google.Maps.Static: Locale :: Address -> Location
+ Web.Google.Maps.Static: MA :: Region
+ Web.Google.Maps.Static: MC :: Region
+ Web.Google.Maps.Static: MD :: Region
+ Web.Google.Maps.Static: ME :: Region
+ Web.Google.Maps.Static: MF :: Region
+ Web.Google.Maps.Static: MG :: Region
+ Web.Google.Maps.Static: MH :: Region
+ Web.Google.Maps.Static: MK :: Region
+ Web.Google.Maps.Static: ML :: Region
+ Web.Google.Maps.Static: MM :: Region
+ Web.Google.Maps.Static: MN :: Region
+ Web.Google.Maps.Static: MO :: Region
+ Web.Google.Maps.Static: MP :: Region
+ Web.Google.Maps.Static: MQ :: Region
+ Web.Google.Maps.Static: MR :: Region
+ Web.Google.Maps.Static: MS :: Region
+ Web.Google.Maps.Static: MT :: Region
+ Web.Google.Maps.Static: MU :: Region
+ Web.Google.Maps.Static: MV :: Region
+ Web.Google.Maps.Static: MW :: Region
+ Web.Google.Maps.Static: MX :: Region
+ Web.Google.Maps.Static: MY :: Region
+ Web.Google.Maps.Static: MZ :: Region
+ Web.Google.Maps.Static: Macedonian :: Language
+ Web.Google.Maps.Static: Malayalam :: Language
+ Web.Google.Maps.Static: MapStyle :: Maybe Feature -> Maybe Element -> [MapStyleOp] -> MapStyle
+ Web.Google.Maps.Static: Marathi :: Language
+ Web.Google.Maps.Static: MarkerColor :: Word8 -> Word8 -> Word8 -> MarkerColor
+ Web.Google.Maps.Static: MarkerLabel :: Char -> MarkerLabel
+ Web.Google.Maps.Static: Markers :: Maybe MarkerStyle -> [Location] -> Markers
+ Web.Google.Maps.Static: Mid :: MarkerSize
+ Web.Google.Maps.Static: NA :: Region
+ Web.Google.Maps.Static: NC :: Region
+ Web.Google.Maps.Static: NE :: Region
+ Web.Google.Maps.Static: NF :: Region
+ Web.Google.Maps.Static: NG :: Region
+ Web.Google.Maps.Static: NI :: Region
+ Web.Google.Maps.Static: NL :: Region
+ Web.Google.Maps.Static: NO :: Region
+ Web.Google.Maps.Static: NP :: Region
+ Web.Google.Maps.Static: NR :: Region
+ Web.Google.Maps.Static: NU :: Region
+ Web.Google.Maps.Static: NZ :: Region
+ Web.Google.Maps.Static: Norwegian :: Language
+ Web.Google.Maps.Static: OM :: Region
+ Web.Google.Maps.Static: Off :: Visibility
+ Web.Google.Maps.Static: On :: Visibility
+ Web.Google.Maps.Static: Orange :: StdColor
+ Web.Google.Maps.Static: PA :: Region
+ Web.Google.Maps.Static: PE :: Region
+ Web.Google.Maps.Static: PF :: Region
+ Web.Google.Maps.Static: PG :: Region
+ Web.Google.Maps.Static: PH :: Region
+ Web.Google.Maps.Static: PK :: Region
+ Web.Google.Maps.Static: PL :: Region
+ Web.Google.Maps.Static: PM :: Region
+ Web.Google.Maps.Static: PN :: Region
+ Web.Google.Maps.Static: PR :: Region
+ Web.Google.Maps.Static: PS :: Region
+ Web.Google.Maps.Static: PT :: Region
+ Web.Google.Maps.Static: PW :: Region
+ Web.Google.Maps.Static: PY :: Region
+ Web.Google.Maps.Static: Path :: Maybe PathStyle -> [Location] -> Path
+ Web.Google.Maps.Static: PathColor :: Word8 -> Word8 -> Word8 -> PathColor
+ Web.Google.Maps.Static: PathColorAlpha :: Word8 -> Word8 -> Word8 -> Word8 -> PathColor
+ Web.Google.Maps.Static: PathGeodesic :: Bool -> PathGeodesic
+ Web.Google.Maps.Static: PathStyle :: Maybe PathWeight -> Maybe PathColor -> Maybe PathColor -> Maybe PathGeodesic -> PathStyle
+ Web.Google.Maps.Static: PathWeight :: Int -> PathWeight
+ Web.Google.Maps.Static: Png32 :: Format
+ Web.Google.Maps.Static: Png8 :: Format
+ Web.Google.Maps.Static: Poi :: Feature
+ Web.Google.Maps.Static: PoiAttraction :: Feature
+ Web.Google.Maps.Static: PoiBusiness :: Feature
+ Web.Google.Maps.Static: PoiGovernment :: Feature
+ Web.Google.Maps.Static: PoiMedical :: Feature
+ Web.Google.Maps.Static: PoiPark :: Feature
+ Web.Google.Maps.Static: PoiPlaceOfWorship :: Feature
+ Web.Google.Maps.Static: PoiSchool :: Feature
+ Web.Google.Maps.Static: PoiSportsComplex :: Feature
+ Web.Google.Maps.Static: Polish :: Language
+ Web.Google.Maps.Static: Portuguese :: Language
+ Web.Google.Maps.Static: PortugueseBrazil :: Language
+ Web.Google.Maps.Static: PortuguesePortugal :: Language
+ Web.Google.Maps.Static: Punjabi :: Language
+ Web.Google.Maps.Static: Purple :: StdColor
+ Web.Google.Maps.Static: QA :: Region
+ Web.Google.Maps.Static: Quadruple :: Scale
+ Web.Google.Maps.Static: RE :: Region
+ Web.Google.Maps.Static: RO :: Region
+ Web.Google.Maps.Static: RS :: Region
+ Web.Google.Maps.Static: RU :: Region
+ Web.Google.Maps.Static: RW :: Region
+ Web.Google.Maps.Static: Red :: StdColor
+ Web.Google.Maps.Static: Road :: Feature
+ Web.Google.Maps.Static: RoadArterial :: Feature
+ Web.Google.Maps.Static: RoadHighway :: Feature
+ Web.Google.Maps.Static: RoadHighwayControlledAccess :: Feature
+ Web.Google.Maps.Static: RoadLocal :: Feature
+ Web.Google.Maps.Static: RoadMap :: MapType
+ Web.Google.Maps.Static: Romanian :: Language
+ Web.Google.Maps.Static: Russian :: Language
+ Web.Google.Maps.Static: SA :: Region
+ Web.Google.Maps.Static: SB :: Region
+ Web.Google.Maps.Static: SC :: Region
+ Web.Google.Maps.Static: SD :: Region
+ Web.Google.Maps.Static: SE :: Region
+ Web.Google.Maps.Static: SG :: Region
+ Web.Google.Maps.Static: SH :: Region
+ Web.Google.Maps.Static: SI :: Region
+ Web.Google.Maps.Static: SJ :: Region
+ Web.Google.Maps.Static: SK :: Region
+ Web.Google.Maps.Static: SL :: Region
+ Web.Google.Maps.Static: SM :: Region
+ Web.Google.Maps.Static: SN :: Region
+ Web.Google.Maps.Static: SO :: Region
+ Web.Google.Maps.Static: SR :: Region
+ Web.Google.Maps.Static: SS :: Region
+ Web.Google.Maps.Static: ST :: Region
+ Web.Google.Maps.Static: SV :: Region
+ Web.Google.Maps.Static: SX :: Region
+ Web.Google.Maps.Static: SY :: Region
+ Web.Google.Maps.Static: SZ :: Region
+ Web.Google.Maps.Static: Satellite :: MapType
+ Web.Google.Maps.Static: Secret :: Text -> Secret
+ Web.Google.Maps.Static: Serbian :: Language
+ Web.Google.Maps.Static: Signature :: Text -> Signature
+ Web.Google.Maps.Static: Simplified :: Visibility
+ Web.Google.Maps.Static: Single :: Scale
+ Web.Google.Maps.Static: Size :: Int -> Int -> Size
+ Web.Google.Maps.Static: Slovak :: Language
+ Web.Google.Maps.Static: Slovenian :: Language
+ Web.Google.Maps.Static: Small :: MarkerSize
+ Web.Google.Maps.Static: Spanish :: Language
+ Web.Google.Maps.Static: StdAnchor :: StdAnchor -> Anchor
+ Web.Google.Maps.Static: StdMarkerColor :: StdColor -> MarkerColor
+ Web.Google.Maps.Static: StdMarkerStyle :: Maybe MarkerSize -> Maybe MarkerColor -> Maybe MarkerLabel -> MarkerStyle
+ Web.Google.Maps.Static: StdPathColor :: StdColor -> PathColor
+ Web.Google.Maps.Static: StyleColor :: Word8 -> Word8 -> Word8 -> MapStyleOp
+ Web.Google.Maps.Static: StyleGamma :: Double -> MapStyleOp
+ Web.Google.Maps.Static: StyleHue :: Word8 -> Word8 -> Word8 -> MapStyleOp
+ Web.Google.Maps.Static: StyleInvertLightness :: Bool -> MapStyleOp
+ Web.Google.Maps.Static: StyleLightness :: Double -> MapStyleOp
+ Web.Google.Maps.Static: StyleSaturation :: Double -> MapStyleOp
+ Web.Google.Maps.Static: StyleVisibility :: Visibility -> MapStyleOp
+ Web.Google.Maps.Static: StyleWeight :: Int -> MapStyleOp
+ Web.Google.Maps.Static: Swedish :: Language
+ Web.Google.Maps.Static: TC :: Region
+ Web.Google.Maps.Static: TD :: Region
+ Web.Google.Maps.Static: TF :: Region
+ Web.Google.Maps.Static: TG :: Region
+ Web.Google.Maps.Static: TH :: Region
+ Web.Google.Maps.Static: TJ :: Region
+ Web.Google.Maps.Static: TK :: Region
+ Web.Google.Maps.Static: TL :: Region
+ Web.Google.Maps.Static: TM :: Region
+ Web.Google.Maps.Static: TN :: Region
+ Web.Google.Maps.Static: TO :: Region
+ Web.Google.Maps.Static: TR :: Region
+ Web.Google.Maps.Static: TT :: Region
+ Web.Google.Maps.Static: TV :: Region
+ Web.Google.Maps.Static: TW :: Region
+ Web.Google.Maps.Static: TZ :: Region
+ Web.Google.Maps.Static: Tagalog :: Language
+ Web.Google.Maps.Static: Tamil :: Language
+ Web.Google.Maps.Static: Telugu :: Language
+ Web.Google.Maps.Static: Terrain :: MapType
+ Web.Google.Maps.Static: Thai :: Language
+ Web.Google.Maps.Static: Tiny :: MarkerSize
+ Web.Google.Maps.Static: Transit :: Feature
+ Web.Google.Maps.Static: TransitLine :: Feature
+ Web.Google.Maps.Static: TransitStation :: Feature
+ Web.Google.Maps.Static: TransitStationAirport :: Feature
+ Web.Google.Maps.Static: TransitStationBus :: Feature
+ Web.Google.Maps.Static: TransitStationRail :: Feature
+ Web.Google.Maps.Static: Turkish :: Language
+ Web.Google.Maps.Static: UA :: Region
+ Web.Google.Maps.Static: UG :: Region
+ Web.Google.Maps.Static: UK :: Region
+ Web.Google.Maps.Static: UM :: Region
+ Web.Google.Maps.Static: URI :: String -> Maybe URIAuth -> String -> String -> String -> URI
+ Web.Google.Maps.Static: URIAuth :: String -> String -> String -> URIAuth
+ Web.Google.Maps.Static: US :: Region
+ Web.Google.Maps.Static: UY :: Region
+ Web.Google.Maps.Static: UZ :: Region
+ Web.Google.Maps.Static: Ukrainian :: Language
+ Web.Google.Maps.Static: Uzbek :: Language
+ Web.Google.Maps.Static: VA :: Region
+ Web.Google.Maps.Static: VC :: Region
+ Web.Google.Maps.Static: VE :: Region
+ Web.Google.Maps.Static: VG :: Region
+ Web.Google.Maps.Static: VI :: Region
+ Web.Google.Maps.Static: VN :: Region
+ Web.Google.Maps.Static: VU :: Region
+ Web.Google.Maps.Static: Vietnamese :: Language
+ Web.Google.Maps.Static: Visible :: [Location] -> Visible
+ Web.Google.Maps.Static: WF :: Region
+ Web.Google.Maps.Static: WS :: Region
+ Web.Google.Maps.Static: Water :: Feature
+ Web.Google.Maps.Static: White :: StdColor
+ Web.Google.Maps.Static: YE :: Region
+ Web.Google.Maps.Static: YT :: Region
+ Web.Google.Maps.Static: Yellow :: StdColor
+ Web.Google.Maps.Static: ZA :: Region
+ Web.Google.Maps.Static: ZM :: Region
+ Web.Google.Maps.Static: ZW :: Region
+ Web.Google.Maps.Static: Zoom :: Int -> Zoom
+ Web.Google.Maps.Static: [anchor] :: MarkerStyle -> Maybe Anchor
+ Web.Google.Maps.Static: [height] :: Size -> Int
+ Web.Google.Maps.Static: [icon] :: MarkerStyle -> URI
+ Web.Google.Maps.Static: [lat] :: LatLng -> Double
+ Web.Google.Maps.Static: [lng] :: LatLng -> Double
+ Web.Google.Maps.Static: [markerColor] :: MarkerStyle -> Maybe MarkerColor
+ Web.Google.Maps.Static: [markerLabel] :: MarkerStyle -> Maybe MarkerLabel
+ Web.Google.Maps.Static: [markerSize] :: MarkerStyle -> Maybe MarkerSize
+ Web.Google.Maps.Static: [pathColor] :: PathStyle -> Maybe PathColor
+ Web.Google.Maps.Static: [pathFillColor] :: PathStyle -> Maybe PathColor
+ Web.Google.Maps.Static: [pathGeodesic] :: PathStyle -> Maybe PathGeodesic
+ Web.Google.Maps.Static: [pathWeight] :: PathStyle -> Maybe PathWeight
+ Web.Google.Maps.Static: [uriAuthority] :: URI -> Maybe URIAuth
+ Web.Google.Maps.Static: [uriFragment] :: URI -> String
+ Web.Google.Maps.Static: [uriPath] :: URI -> String
+ Web.Google.Maps.Static: [uriPort] :: URIAuth -> String
+ Web.Google.Maps.Static: [uriQuery] :: URI -> String
+ Web.Google.Maps.Static: [uriRegName] :: URIAuth -> String
+ Web.Google.Maps.Static: [uriScheme] :: URI -> String
+ Web.Google.Maps.Static: [uriUserInfo] :: URIAuth -> String
+ Web.Google.Maps.Static: [width] :: Size -> Int
+ Web.Google.Maps.Static: api :: Proxy GoogleMapsStaticAPI
+ Web.Google.Maps.Static: data Anchor
+ Web.Google.Maps.Static: data Element
+ Web.Google.Maps.Static: data Feature
+ Web.Google.Maps.Static: data Format
+ Web.Google.Maps.Static: data Language
+ Web.Google.Maps.Static: data LatLng
+ Web.Google.Maps.Static: data Location
+ Web.Google.Maps.Static: data MapStyle
+ Web.Google.Maps.Static: data MapStyleOp
+ Web.Google.Maps.Static: data MapType
+ Web.Google.Maps.Static: data MarkerColor
+ Web.Google.Maps.Static: data MarkerSize
+ Web.Google.Maps.Static: data MarkerStyle
+ Web.Google.Maps.Static: data Markers
+ Web.Google.Maps.Static: data Path
+ Web.Google.Maps.Static: data PathColor
+ Web.Google.Maps.Static: data PathStyle
+ Web.Google.Maps.Static: data Region
+ Web.Google.Maps.Static: data Scale
+ Web.Google.Maps.Static: data Size
+ Web.Google.Maps.Static: data StdAnchor
+ Web.Google.Maps.Static: data StdColor
+ Web.Google.Maps.Static: data URI
+ Web.Google.Maps.Static: data URIAuth
+ Web.Google.Maps.Static: data Visibility
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.Anchor
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.Center
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.Element
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.Feature
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.Format
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.MapStyle
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.MapStyleOp
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.MapType
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.MarkerColor
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.MarkerLabel
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.MarkerSize
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.MarkerStyle
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.Markers
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.Path
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.PathColor
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.PathGeodesic
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.PathStyle
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.PathWeight
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.Scale
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.Secret
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.Signature
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.Size
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.StdAnchor
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.StdColor
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.Visibility
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.Visible
+ Web.Google.Maps.Static: instance GHC.Classes.Eq Web.Google.Maps.Static.Zoom
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.Anchor
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.Center
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.Element
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.Feature
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.Format
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.MapStyle
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.MapStyleOp
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.MapType
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.MarkerColor
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.MarkerLabel
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.MarkerSize
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.MarkerStyle
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.Markers
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.Path
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.PathColor
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.PathGeodesic
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.PathStyle
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.PathWeight
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.Scale
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.Secret
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.Signature
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.Size
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.StdAnchor
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.StdColor
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.Visibility
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.Visible
+ Web.Google.Maps.Static: instance GHC.Show.Show Web.Google.Maps.Static.Zoom
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.Anchor
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.Center
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.Element
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.Feature
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.Format
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.MapStyle
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.MapStyleOp
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.MapType
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.MarkerColor
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.MarkerLabel
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.MarkerSize
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.MarkerStyle
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.Markers
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.Path
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.PathColor
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.PathGeodesic
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.PathStyle
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.PathWeight
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.Scale
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.Signature
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.Size
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.StdAnchor
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.StdColor
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.Visibility
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.Visible
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData Web.Google.Maps.Static.Zoom
+ Web.Google.Maps.Static: instance Web.Internal.HttpApiData.ToHttpApiData [Web.Google.Maps.Static.MapStyleOp]
+ Web.Google.Maps.Static: newtype Address
+ Web.Google.Maps.Static: newtype Center
+ Web.Google.Maps.Static: newtype Key
+ Web.Google.Maps.Static: newtype MarkerLabel
+ Web.Google.Maps.Static: newtype PathGeodesic
+ Web.Google.Maps.Static: newtype PathWeight
+ Web.Google.Maps.Static: newtype Secret
+ Web.Google.Maps.Static: newtype Signature
+ Web.Google.Maps.Static: newtype Visible
+ Web.Google.Maps.Static: newtype Zoom
+ Web.Google.Maps.Static: staticmap :: Manager -> Key -> Maybe Secret -> Maybe Center -> Maybe Zoom -> Size -> Maybe Scale -> Maybe Format -> [MapStyle] -> Maybe MapType -> Maybe Language -> Maybe Region -> [Markers] -> [Path] -> Maybe Visible -> IO (Either ServantError StaticmapResponse)
+ Web.Google.Maps.Static: type GoogleMapsStaticAPI = "staticmap" :> QueryParam "key" Key :> QueryParam "center" Center :> QueryParam "zoom" Zoom :> QueryParam "size" Size :> QueryParam "scale" Scale :> QueryParam "format" Format :> QueryParams "style" MapStyle :> QueryParam "maptype" MapType :> QueryParam "language" Language :> QueryParam "region" Region :> QueryParams "markers" Markers :> QueryParams "path" Path :> QueryParam "visible" Visible :> QueryParam "signature" Signature :> Get '[PNG] StaticmapResponse
+ Web.Google.Maps.Static: type StaticmapResponse = DynamicImage
Files
- changelog.md +11/−0
- google-static-maps.cabal +19/−11
- src/Web/Google/Maps/Common.hs +22/−6
- src/Web/Google/Maps/Static.hs +675/−0
- src/Web/Google/Static/Maps.hs +0/−666
changelog.md view
@@ -1,3 +1,14 @@+# 0.6.0.0 + +* Update documentation to reflect changes to Google Maps Platform + +* Rename module `Web.Google.Static.Maps` as `Web.Google.Maps.Static` and + `GoogleStaticMapsAPI` as `GoogleMapsStaticAPI` + +* Update `Web.Google.Maps.Common.Language` data constructors + +* Update dependencies for GHC 8.6.2 and revisit upper bounds + # 0.5.0.3 * Update dependencies for GHC 8.6.1
google-static-maps.cabal view
@@ -1,13 +1,21 @@ name: google-static-maps -version: 0.5.0.3 -synopsis: Bindings to the Google Static Maps API -description: The <https://developers.google.com/maps/documentation/static-maps/intro Google Static Maps API> +version: 0.6.0.0 +synopsis: Bindings to the Google Maps Static API (formerly Static + Maps API) +description: The + <https://developers.google.com/maps/documentation/maps-static/intro Google Maps Static API> returns a map as an image via an HTTP request. This library provides bindings in Haskell to that API. . - NB: The use of the Google Static Maps API services is - subject to the <https://developers.google.com/maps/terms Google Maps APIs Terms of Service>, - which terms restrict the use of content. + NB: The use of the Google Maps Static API services is + subject to the + <https://cloud.google.com/maps-platform/terms/ Google Maps Platform Terms of Service>, + which terms restrict the use of content. End Users' use of + Google Maps is subject to the then-current Google + Maps/Google Earth Additional Terms of Service at + <https://maps.google.com/help/terms_maps.html> and Google + Privacy Policy at + <https://www.google.com/policies/privacy/>. . This package has no connection with Google Inc. or its affiliates. @@ -24,21 +32,21 @@ library hs-source-dirs: src - exposed-modules: Web.Google.Static.Maps + exposed-modules: Web.Google.Maps.Static , Web.Google.Maps.Common build-depends: base >= 4.8 && < 4.13 - , base64-bytestring >= 0.1.1 && < 1.1 - , bytestring >= 0.10 && < 0.11 , aeson >= 0.7 && < 1.5 + , base64-bytestring >= 0.1.1 && < 1.1 , bytedump >= 0.9 && < 1.1 + , bytestring >= 0.10 && < 0.11 , cryptonite >= 0.1 && < 0.26 , double-conversion >= 0.2 && < 2.1 , http-client >= 0.2 && < 0.6 , JuicyPixels >= 1.0 && < 3.4 , memory >= 0.1 && < 0.15 , network-uri >= 2.6 && < 2.7 - , servant >= 0.14.1 && < 0.15 - , servant-client >= 0.11 && < 0.15 + , servant >= 0.14.1 && < 0.16 + , servant-client >= 0.11 && < 0.16 , servant-JuicyPixels >= 0.3 && < 0.4 , text >= 1.0 && < 1.3 , utf8-string >= 0.3 && < 1.1
src/Web/Google/Maps/Common.hs view
@@ -6,8 +6,8 @@ -- | -- Module : Web.Google.Maps.Common --- Description : Bindings to the Google Static Maps API --- Copyright : (c) Mike Pilgrem 2017 +-- Description : Common to the Google Maps Platform +-- Copyright : (c) Mike Pilgrem 2017, 2018 -- Maintainer : public@pilgrem.com -- Stability : experimental -- @@ -77,13 +77,16 @@ deriving (Eq, Show, ToHttpApiData) -- | Language: supported languages based on the list at --- <https://developers.google.com/maps/faq#languagesupport> (as at 13 March --- 2017). +-- <https://developers.google.com/maps/faq#languagesupport> (as at 29 December +-- 2018). data Language - = Arabic + = Albanian + | Arabic | Basque + | Belarusian | Bengali | Bulgarian + | Burmese | Catalan | ChineseSimplified | ChineseTraditional @@ -109,9 +112,12 @@ | Italian | Japanese | Kannada + | Kazakh | Korean + | Kyrgyz | Latvian | Lithuanian + | Macedonian | Malayalam | Marathi | Norwegian @@ -119,6 +125,7 @@ | Portuguese | PortugueseBrazil | PortuguesePortugal + | Punjabi | Romanian | Russian | Serbian @@ -132,15 +139,19 @@ | Thai | Turkish | Ukrainian + | Uzbek | Vietnamese deriving (Eq, Show) instance ToHttpApiData Language where toUrlPiece language = case language of + Albanian -> "sq" Arabic -> "ar" Basque -> "eu" + Belarusian -> "be" Bengali -> "bn" Bulgarian -> "bg" + Burmese -> "my" Catalan -> "ca" ChineseSimplified -> "zh-CN" ChineseTraditional -> "zh-TW" @@ -166,9 +177,12 @@ Italian -> "it" Japanese -> "ja" Kannada -> "kn" + Kazakh -> "kk" Korean -> "ko" + Kyrgyz -> "ky" Latvian -> "lv" Lithuanian -> "lt" + Macedonian -> "mk" Malayalam -> "ml" Marathi -> "mr" Norwegian -> "no" @@ -176,6 +190,7 @@ Portuguese -> "pt" PortugueseBrazil -> "pt-BR" PortuguesePortugal -> "pt-PT" + Punjabi -> "pa" Romanian -> "ro" Russian -> "ru" Serbian -> "sr" @@ -189,6 +204,7 @@ Thai -> "th" Turkish -> "tr" Ukrainian -> "uk" + Uzbek -> "uz" Vietnamese -> "vi" -- | Region: a ccTLD (country code top level domain). @@ -702,6 +718,6 @@ UK -> "uk" -- United Kingdom of Great Britain and Northern Ireland EU -> "eu" -- European Union --- | The base URL for the Google Maps APIs. +-- | The base URL for the Google Maps Platform APIs. googleMapsApis :: BaseUrl googleMapsApis = BaseUrl Https "maps.googleapis.com" 443 "/maps/api"
+ src/Web/Google/Maps/Static.hs view
@@ -0,0 +1,675 @@+{-# LANGUAGE CPP #-} +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE FlexibleInstances #-} +{-# LANGUAGE GeneralizedNewtypeDeriving #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE TypeOperators #-} + +-- | +-- Module : Web.Google.Maps.Static +-- Description : Bindings to the Google Maps Static API (formerly Static Maps +-- API) +-- Copyright : (c) Mike Pilgrem 2017, 2018 +-- Maintainer : public@pilgrem.com +-- Stability : experimental +-- +-- This module has no connection with Google Inc. or its affiliates. +-- +-- The <https://developers.google.com/maps/documentation/maps-static/intro Google Maps Static API> +-- returns a map as an image via an HTTP request. This library provides bindings +-- in Haskell to that API (version 2). +-- +-- NB: The use of the Google Maps Static API services is subject to the +-- <https://cloud.google.com/maps-platform/terms/ Google Maps Platform Terms of Service>, +-- which terms restrict the use of content. End Users' use of Google Maps is +-- subject to the then-current Google Maps/Google Earth Additional Terms of +-- Service at <https://maps.google.com/help/terms_maps.html> and Google Privacy +-- Policy at <https://www.google.com/policies/privacy/>. +-- +-- The following are not yet implemented: non-PNG image formats; and encoded +-- polyline paths. +-- +-- The code below is an example console application to test the use of the +-- library with the Google Maps Static API. +-- +-- > {-# LANGUAGE OverloadedStrings #-} +-- > +-- > module Main (main) where +-- > +-- > import Data.Maybe (fromJust) +-- > import Graphics.Gloss (Display (..), display, white) -- package gloss +-- > import Graphics.Gloss.Juicy (fromDynamicImage) -- package gloss-juicy +-- > import Network.HTTP.Client (newManager) +-- > import Network.HTTP.Client.TLS (tlsManagerSettings) +-- > import Web.Google.Maps.Static (Center (..), Key (..), Location (..), Size (..), +-- > staticmap, StaticmapResponse (..), Zoom (..)) +-- > +-- > main :: IO () +-- > main = do +-- > putStrLn $ "A test of the Google Maps Static API.\nNB: The use of " ++ +-- > "the API services is subject to the Google Maps Platform Terms of " ++ +-- > "Serivce at https://cloud.google.com/maps-platform/terms/.\n" +-- > mgr <- newManager tlsManagerSettings +-- > let apiKey = Key "<REPLACE_THIS_WITH_YOUR_ACTUAL_GOOGLE_API_KEY>" +-- > -- If using a digital signature ... +-- > secret = Just $ Secret +-- > "<REPLACE_THIS_WITH_YOUR_ACTUAL_GOOGLE_URL_SIGNING_SECRET>" +-- > center = Just $ Center (Location 42.165950 (-71.362015)) +-- > zoom = Just $ Zoom 17 +-- > w = 400 +-- > h = 400 +-- > size = Size w h +-- > result <- staticmap mgr apiKey secret center zoom size Nothing Nothing +-- > [] Nothing Nothing Nothing [] [] Nothing +-- > case result of +-- > Right response -> do +-- > let picture = fromJust $ fromDynamicImage response +-- > title = "Test Google Maps Static API" +-- > window = InWindow title (w, h) (10, 10) +-- > display window white picture +-- > Left err -> putStrLn $ "Error! Result:\n" ++ show err +module Web.Google.Maps.Static + ( -- * Functions + staticmap + -- * API + , GoogleMapsStaticAPI + , api + -- * Types + , Key (..) + , Secret (..) + , Signature (..) + , Center (..) + , Location (..) + , LatLng (..) + , Address (..) + , Zoom (..) + , Size (..) + , Scale (..) + , Format (..) + , MapStyle (..) + , Feature (..) + , Element (..) + , MapStyleOp (..) + , Visibility (..) + , MapType (..) + , Language (..) + , Region (..) + , Markers (..) + , MarkerStyle (..) + , MarkerSize (..) + , MarkerColor (..) + , MarkerLabel (..) + , StdColor (..) + , URI (..) + , URIAuth (..) + , Anchor (..) + , StdAnchor (..) + , Path (..) + , PathStyle (..) + , PathWeight (..) + , PathColor (..) + , PathGeodesic (..) + , Visible (..) + , StaticmapResponse + ) where + +import Codec.Picture.Types (DynamicImage (..)) +import Crypto.Hash.Algorithms (SHA1) +import Crypto.MAC.HMAC (HMAC, hmac) +import Data.ByteArray (convert) +import Data.ByteString.Base64.URL (decode, encode) +import Data.ByteString.UTF8 as UTF8 (fromString) +import Data.List (intersperse) +import Data.Maybe (catMaybes) +import Data.Proxy (Proxy (..)) +import Data.Text (Text) +import qualified Data.Text as T (append, concat, pack) +import Data.Text.Encoding (decodeUtf8, encodeUtf8) +import Data.Word (Word8) +import Network.HTTP.Client (Manager) +import Network.URI (URI (..), URIAuth (..), uriToString) +import Servant.API ((:>), Get, QueryParam, QueryParams, safeLink, + ToHttpApiData (..)) +import Servant.Client (BaseUrl (..), client, ClientEnv (ClientEnv), ClientM, + runClientM, ServantError) +import Servant.JuicyPixels (PNG) +import Servant.Links (LinkArrayElementStyle (..), linkURI') +import Text.Bytedump (hexString) +import Web.Google.Maps.Common (Address (..), googleMapsApis, Key (..), + Language (..), LatLng (..), Location (..), Region (..)) + +-- | Secret for digital signature +newtype Secret = Secret Text + deriving (Eq, Show) + +-- | Signature +newtype Signature = Signature Text + deriving (Eq, Show, ToHttpApiData) + +-- | Center of the map: not required if the map includes markers or paths. +newtype Center = Center Location + deriving (Eq, Show, ToHttpApiData) + +-- | Zoom level: the lowest level, in which the whole world can be seen, is 0. +-- Each succeeding level doubles the precision. Not required if the map includes +-- markers or paths. +newtype Zoom = Zoom Int + deriving (Eq, Show, ToHttpApiData) + +-- | Size in pixels: there are maximum allowable values. +data Size = Size + { width :: Int + , height :: Int + } deriving (Eq, Show) + +instance ToHttpApiData Size where + toUrlPiece (Size width' height') = + T.pack (show width' ++ "x" ++ show height') + +-- | Scale +data Scale + = Single -- ^ The default value. + | Double + | Quadruple + deriving (Eq, Show) + +instance ToHttpApiData Scale where + toUrlPiece scale = case scale of + Single -> "1" + Double -> "2" + Quadruple -> "4" + +-- | Image format +data Format + = Png8 -- ^ The default value. + | Png32 + deriving (Eq, Show) + +instance ToHttpApiData Format where + toUrlPiece format = case format of + Png8 -> "png8" + Png32 -> "png32" + +-- | MapStyle +data MapStyle = MapStyle (Maybe Feature) (Maybe Element) [MapStyleOp] + deriving (Eq, Show) + +instance ToHttpApiData MapStyle where + toUrlPiece (MapStyle featureOpt elementOpt ops) = + T.concat $ intersperse "|" $ catMaybes [featureUrl, elementUrl] ++ + [opsUrl] + where + featureUrl = T.append "feature:" . toUrlPiece <$> featureOpt + elementUrl = T.append "element:" . toUrlPiece <$> elementOpt + opsUrl = toUrlPiece ops + +-- | Map feature +data Feature + = AllFeatures + | Administrative + | AdministrativeCountry + | AdministrativeLandParcel + | AdministrativeLocality + | AdministrativeNeighborhood + | AdministrativeProvince + | Landscape + | LandscapeManMade + | LandscapeNatural + | LandscapeNaturalLandcover + | LandscapeNaturalTerrain + | Poi + | PoiAttraction + | PoiBusiness + | PoiGovernment + | PoiMedical + | PoiPark + | PoiPlaceOfWorship + | PoiSchool + | PoiSportsComplex + | Road + | RoadArterial + | RoadHighway + | RoadHighwayControlledAccess + | RoadLocal + | Transit + | TransitLine + | TransitStation + | TransitStationAirport + | TransitStationBus + | TransitStationRail + | Water + deriving (Eq, Show) + +instance ToHttpApiData Feature where + toUrlPiece feature = case feature of + AllFeatures -> "all" + Administrative -> "administrative" + AdministrativeCountry -> "administrative.country" + AdministrativeLandParcel -> "administrative.land_parcel" + AdministrativeLocality -> "administrative.locality" + AdministrativeNeighborhood -> "administrative.neighborhood" + AdministrativeProvince -> "administrative.province" + Landscape -> "landscape" + LandscapeManMade -> "landscape.man_made" + LandscapeNatural -> "landscape.natural" + LandscapeNaturalLandcover -> "landscape.landcover" + LandscapeNaturalTerrain -> "landscape.terrain" + Poi -> "poi" + PoiAttraction -> "poi.attraction" + PoiBusiness -> "poi.business" + PoiGovernment -> "poi.government" + PoiMedical -> "poi.medical" + PoiPark -> "poi.park" + PoiPlaceOfWorship -> "poi.place_of_worship" + PoiSchool -> "poi.school" + PoiSportsComplex -> "poi.sports_complex" + Road -> "road" + RoadArterial -> "road.arterial" + RoadHighway -> "road.highway" + RoadHighwayControlledAccess -> "road.controlled_access" + RoadLocal -> "road.local" + Transit -> "transit" + TransitLine -> "transit.line" + TransitStation -> "transit.station" + TransitStationAirport -> "transit.station.airport" + TransitStationBus -> "transit.station.bus" + TransitStationRail -> "transit.station.rail" + Water -> "water" + +-- | Feature element +data Element + = AllElements + | AllGeometry + | GeometryFill + | GeometryStroke + | AllLabels + | LabelsIcon + | LabelsText + | LabelsTextFill + | LabelsTextStroke + deriving (Eq, Show) + +instance ToHttpApiData Element where + toUrlPiece element = case element of + AllElements -> "all" + AllGeometry -> "geometry" + GeometryFill -> "geometry.fill" + GeometryStroke -> "geometry.stroke" + AllLabels -> "labels" + LabelsIcon -> "labels.icon" + LabelsText -> "labels.text" + LabelsTextFill -> "labels.text.fill" + LabelsTextStroke -> "labels.text.stroke" + +-- | Map style operation +data MapStyleOp + = StyleHue Word8 Word8 Word8 + | StyleLightness Double + | StyleSaturation Double + | StyleGamma Double + | StyleInvertLightness Bool + | StyleVisibility Visibility + | StyleColor Word8 Word8 Word8 + | StyleWeight Int + deriving (Eq, Show) + +instance ToHttpApiData MapStyleOp where + toUrlPiece mapStyleOp + | StyleHue r g b <- mapStyleOp + = T.pack $ "hue:0x" ++ hexString r ++ hexString g ++ hexString b + | StyleLightness l <- mapStyleOp + = T.concat ["lightness:", toUrlPiece l] + | StyleSaturation s <- mapStyleOp + = T.concat ["saturation:", toUrlPiece s] + | StyleGamma g <- mapStyleOp + = T.concat ["gamma:", toUrlPiece g] + | StyleInvertLightness i <- mapStyleOp + = T.concat ["invert_lightness:", toUrlPiece i] + | StyleVisibility e <- mapStyleOp + = T.concat ["visibility:", toUrlPiece e] + | StyleColor r g b <- mapStyleOp + = T.pack $ "color:0x" ++ hexString r ++ hexString g ++ hexString b + | StyleWeight w <- mapStyleOp + = T.concat ["weight:", toUrlPiece w] + +instance ToHttpApiData [MapStyleOp] where + toUrlPiece ops = T.concat $ intersperse "|" $ map toUrlPiece ops + +-- | Visibility +data Visibility + = On + | Off + | Simplified -- ^ Removes some, not all, style features + deriving (Eq, Show) + +instance ToHttpApiData Visibility where + toUrlPiece visibility = case visibility of + On -> "on" + Off -> "off" + Simplified -> "simplified" + +-- | Map type +data MapType + = RoadMap -- ^ The default value. + | Satellite + | Hybrid + | Terrain + deriving (Eq, Show) + +instance ToHttpApiData MapType where + toUrlPiece mapType = case mapType of + RoadMap -> "roadmap" + Satellite -> "satellite" + Hybrid -> "hybrid" + Terrain -> "terrain" + +-- | Markers +data Markers = Markers (Maybe MarkerStyle) [Location] + deriving (Eq, Show) + +instance ToHttpApiData Markers where + toUrlPiece (Markers markerStyleOpt ls) + | Nothing <- markerStyleOpt + = toUrlPiece ls + | Just (StdMarkerStyle Nothing Nothing Nothing) <- markerStyleOpt + = toUrlPiece ls + | Just markerStyle <- markerStyleOpt + = case ls of + [] -> toUrlPiece markerStyle + _ -> T.concat [toUrlPiece markerStyle, "|", toUrlPiece ls] + +-- | Marker style +data MarkerStyle + = StdMarkerStyle + { markerSize :: Maybe MarkerSize + , markerColor :: Maybe MarkerColor + , markerLabel :: Maybe MarkerLabel + } + | CustomIcon + { icon :: URI + , anchor :: Maybe Anchor + } + deriving (Eq, Show) + +instance ToHttpApiData MarkerStyle where + toUrlPiece markerStyle + | StdMarkerStyle ms mc ml <- markerStyle + = let size' = T.append "size:" . toUrlPiece <$> ms + color' = T.append "color:" . toUrlPiece <$> mc + label' = T.append "label:" . toUrlPiece <$> ml + opts = catMaybes [size', color', label'] + in T.concat $ intersperse "|" opts + | CustomIcon url ma <- markerStyle + = let icon' = T.concat ["icon:", toUrlPiece $ uriToString id url ""] + in case ma of + Nothing -> icon' + Just a -> T.concat [icon', "|", "anchor:", toUrlPiece a] + +-- | Marker size +data MarkerSize + = Tiny + | Mid + | Small + deriving (Eq, Show) + +instance ToHttpApiData MarkerSize where + toUrlPiece markerSize' = case markerSize' of + Tiny -> "tiny" + Mid -> "mid" + Small -> "small" + +-- | Marker colour +data MarkerColor + = MarkerColor Word8 Word8 Word8 + | StdMarkerColor StdColor + deriving (Eq, Show) + +instance ToHttpApiData MarkerColor where + toUrlPiece (MarkerColor r g b) = T.pack $ "0x" ++ hexString r ++ hexString g + ++ hexString b + toUrlPiece (StdMarkerColor stdColor) = toUrlPiece stdColor + +-- | Standard colours +data StdColor + = Black + | Brown + | Green + | Purple + | Yellow + | Blue + | Gray + | Orange + | Red + | White + deriving (Eq, Show) + +instance ToHttpApiData StdColor where + toUrlPiece stdColor = case stdColor of + Black -> "black" + Brown -> "brown" + Green -> "green" + Purple -> "purple" + Yellow -> "yellow" + Blue -> "blue" + Gray -> "gray" + Orange -> "orange" + Red -> "red" + White -> "white" + +-- | Marker label character +newtype MarkerLabel = MarkerLabel Char + deriving (Eq, Show, ToHttpApiData) + +-- | Anchor +data Anchor + = AnchorPoint Int Int + | StdAnchor StdAnchor + deriving (Eq, Show) + +instance ToHttpApiData Anchor where + toUrlPiece anchor' + | AnchorPoint x y <- anchor' + = T.pack (show x ++ "," ++ show y) + | StdAnchor stdAnchor <- anchor' + = toUrlPiece stdAnchor + +-- | Standard anchor points +data StdAnchor + = AnchorTop + | AnchorBottom + | AnchorLeft + | AnchorRight + | AnchorCenter + | AnchorTopLeft + | AnchorTopRight + | AnchorBottomLeft + | AnchorBottomRight + deriving (Eq, Show) + +instance ToHttpApiData StdAnchor where + toUrlPiece stdAnchor = case stdAnchor of + AnchorTop -> "top" + AnchorBottom -> "bottom" + AnchorLeft -> "left" + AnchorRight -> "right" + AnchorCenter -> "center" + AnchorTopLeft -> "topleft" + AnchorTopRight -> "topright" + AnchorBottomLeft -> "bottomleft" + AnchorBottomRight -> "bottomright" + +-- | Path +data Path = Path (Maybe PathStyle) [Location] + deriving (Eq, Show) + +instance ToHttpApiData Path where + toUrlPiece (Path pathStyleOpt ls) + | Nothing <- pathStyleOpt + = toUrlPiece ls + | Just (PathStyle Nothing Nothing Nothing Nothing) <- pathStyleOpt + = toUrlPiece ls + | Just pathStyle <- pathStyleOpt + = case ls of + [] -> toUrlPiece pathStyle + _ -> T.concat [toUrlPiece pathStyle, "|", toUrlPiece ls] + +-- | Path style: a geodesic path follows the curvature of the Earth. +data PathStyle = PathStyle + { pathWeight :: Maybe PathWeight -- ^ The default value is 5. + , pathColor :: Maybe PathColor + , pathFillColor :: Maybe PathColor + , pathGeodesic :: Maybe PathGeodesic -- ^ The default value is false. + } deriving (Eq, Show) + +instance ToHttpApiData PathStyle where + toUrlPiece (PathStyle mw mc mfc mg) = + T.concat $ intersperse "|" opts + where + weightUrl = T.append "weight:" . toUrlPiece <$> mw + colorUrl = T.append "color:" . toUrlPiece <$> mc + fillColorUrl = T.append "fillcolor:" . toUrlPiece <$> mfc + geodesicUrl = T.append "geodesic:" . toUrlPiece <$> mg + opts = catMaybes [weightUrl, colorUrl, fillColorUrl, + geodesicUrl] + +-- | Path weight: in pixels. +newtype PathWeight = PathWeight Int + deriving (Eq, Show, ToHttpApiData) + +-- | Path colour +data PathColor + = PathColor Word8 Word8 Word8 + | PathColorAlpha Word8 Word8 Word8 Word8 + | StdPathColor StdColor + deriving (Eq, Show) + +instance ToHttpApiData PathColor where + toUrlPiece (PathColor r g b) = T.pack $ "0x" ++ hexString r ++ hexString g + ++ hexString b + toUrlPiece (PathColorAlpha r g b a) = T.pack $ "0x" ++ hexString r ++ + hexString g ++ hexString b ++ hexString a + toUrlPiece (StdPathColor stdColor) = toUrlPiece stdColor + +-- | Path is geodesic +newtype PathGeodesic = PathGeodesic Bool + deriving (Eq, Show, ToHttpApiData) + +-- | Visible locations +newtype Visible = Visible [Location] + deriving (Eq, Show, ToHttpApiData) + +-- | Google Maps Static API +type GoogleMapsStaticAPI + = "staticmap" + :> QueryParam "key" Key + :> QueryParam "center" Center + :> QueryParam "zoom" Zoom + :> QueryParam "size" Size + :> QueryParam "scale" Scale + :> QueryParam "format" Format + :> QueryParams "style" MapStyle + :> QueryParam "maptype" MapType + :> QueryParam "language" Language + :> QueryParam "region" Region + :> QueryParams "markers" Markers + :> QueryParams "path" Path + :> QueryParam "visible" Visible + :> QueryParam "signature" Signature + :> Get '[PNG] StaticmapResponse + +-- | StaticmapResponse +type StaticmapResponse = DynamicImage + +-- | API type +api :: Proxy GoogleMapsStaticAPI +api = Proxy + +staticmap' + :: Maybe Key + -> Maybe Center + -> Maybe Zoom + -> Maybe Size + -> Maybe Scale + -> Maybe Format + -> [MapStyle] + -> Maybe MapType + -> Maybe Language + -> Maybe Region + -> [Markers] + -> [Path] + -> Maybe Visible + -> Maybe Signature + -> ClientM StaticmapResponse +staticmap' = client api + +-- | Retrieve a static map. NB: The use of the Google Maps Static API services +-- is subject to the +-- <https://cloud.google.com/maps-platform/terms/ Google Maps Platform Terms of Service>. +-- End Users' use of Google Maps is subject to the then-current Google +-- Maps/Google Earth Additional Terms of Service at +-- <https://maps.google.com/help/terms_maps.html> and Google Privacy Policy at +-- <https://www.google.com/policies/privacy/>. +staticmap + :: Manager + -> Key + -> Maybe Secret + -> Maybe Center + -> Maybe Zoom + -> Size + -> Maybe Scale + -> Maybe Format + -> [MapStyle] + -> Maybe MapType + -> Maybe Language + -> Maybe Region + -> [Markers] + -> [Path] + -> Maybe Visible + -> IO (Either ServantError StaticmapResponse) +staticmap + mgr + key + secretOpt + centerOpt + zoomOpt + size + scaleOpt + formatOpt + mapStyles + mapTypeOpt + languageOpt + regionOpt + markerss + paths + visibleOpt + = case secretOpt of + Nothing -> runClientM (eval staticmap' Nothing) +-- CookieJar supported from servant-client-0.13 +#if MIN_VERSION_servant_client(0,13,0) + (ClientEnv mgr googleMapsApis Nothing) +#else + (ClientEnv mgr googleMapsApis) +#endif + Just secret -> do + let url = linkURI $ eval (safeLink api api) Nothing + signatureOpt = sign secret googleMapsApis url + runClientM (eval staticmap' signatureOpt) +-- CookieJar supported from servant-client-0.13 +#if MIN_VERSION_servant_client(0,13,0) + (ClientEnv mgr googleMapsApis Nothing) +#else + (ClientEnv mgr googleMapsApis) +#endif + where + linkURI = linkURI' LinkArrayElementPlain + eval f = f (Just key) centerOpt zoomOpt (Just size) scaleOpt formatOpt + mapStyles mapTypeOpt languageOpt regionOpt markerss paths + visibleOpt + +sign :: Secret -> BaseUrl -> URI -> Maybe Signature +sign (Secret secret) baseUrl url = do + secret' <- either (const Nothing) Just (decode $ encodeUtf8 secret) + let url' = UTF8.fromString $ baseUrlPath baseUrl ++ "/" ++ uriToString id url "" + signature = hmac secret' url' :: HMAC SHA1 + signature' = decodeUtf8 $ encode $ convert signature + return $ Signature signature'
− src/Web/Google/Static/Maps.hs
@@ -1,666 +0,0 @@-{-# LANGUAGE CPP #-} -{-# LANGUAGE DataKinds #-} -{-# LANGUAGE FlexibleInstances #-} -{-# LANGUAGE GeneralizedNewtypeDeriving #-} -{-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE TypeOperators #-} - --- | --- Module : Web.Google.Static.Maps --- Description : Bindings to the Google Static Maps API --- Copyright : (c) Mike Pilgrem 2017, 2018 --- Maintainer : public@pilgrem.com --- Stability : experimental --- --- This module has no connection with Google Inc. or its affiliates. --- --- The <https://developers.google.com/maps/documentation/static-maps/intro Google Static Maps API> --- returns a map as an image via an HTTP request. This library provides bindings --- in Haskell to that API (version 2). --- --- NB: The use of the Google Static Maps API services is subject to the --- <https://developers.google.com/maps/terms Google Maps APIs Terms of Service>, --- which terms restrict the use of content. --- --- The following are not yet implemented: non-PNG image formats; and encoded --- polyline paths. --- --- The code below is an example console application to test the use of the --- library with the Google Static Maps API. --- --- > {-# LANGUAGE OverloadedStrings #-} --- > --- > module Main (main) where --- > --- > import Data.Maybe (fromJust) --- > import Graphics.Gloss (Display (..), display, white) -- package gloss --- > import Graphics.Gloss.Juicy (fromDynamicImage) -- package gloss-juicy --- > import Network.HTTP.Client (newManager) --- > import Network.HTTP.Client.TLS (tlsManagerSettings) --- > import Web.Google.Static.Maps (Center (..), Key (..), Location (..), Size (..), --- > staticmap, StaticmapResponse (..), Zoom (..)) --- > --- > main :: IO () --- > main = do --- > putStrLn $ "A test of the Google Static Maps API.\nNB: The use of " ++ --- > "the API services is subject to the Google Maps APIs Terms of " ++ --- > "Serivce at https://developers.google.com/maps/terms.\n" --- > mgr <- newManager tlsManagerSettings --- > let apiKey = Key "<REPLACE_THIS_WITH_YOUR_ACTUAL_GOOGLE_API_KEY>" --- > -- If using a digital signature ... --- > secret = Just $ Secret --- > "<REPLACE_THIS_WITH_YOUR_ACTUAL_GOOGLE_URL_SIGNING_SECRET>" --- > center = Just $ Center (Location 42.165950 (-71.362015)) --- > zoom = Just $ Zoom 17 --- > w = 400 --- > h = 400 --- > size = Size w h --- > result <- staticmap mgr apiKey secret center zoom size Nothing Nothing --- > [] Nothing Nothing Nothing [] [] Nothing --- > case result of --- > Right response -> do --- > let picture = fromJust $ fromDynamicImage response --- > title = "Test Google Static Maps API" --- > window = InWindow title (w, h) (10, 10) --- > display window white picture --- > Left err -> putStrLn $ "Error! Result:\n" ++ show err -module Web.Google.Static.Maps - ( -- * Functions - staticmap - -- * API - , GoogleStaticMapsAPI - , api - -- * Types - , Key (..) - , Secret (..) - , Signature (..) - , Center (..) - , Location (..) - , LatLng (..) - , Address (..) - , Zoom (..) - , Size (..) - , Scale (..) - , Format (..) - , MapStyle (..) - , Feature (..) - , Element (..) - , MapStyleOp (..) - , Visibility (..) - , MapType (..) - , Language (..) - , Region (..) - , Markers (..) - , MarkerStyle (..) - , MarkerSize (..) - , MarkerColor (..) - , MarkerLabel (..) - , StdColor (..) - , URI (..) - , URIAuth (..) - , Anchor (..) - , StdAnchor (..) - , Path (..) - , PathStyle (..) - , PathWeight (..) - , PathColor (..) - , PathGeodesic (..) - , Visible (..) - , StaticmapResponse - ) where - -import Codec.Picture.Types (DynamicImage (..)) -import Crypto.Hash.Algorithms (SHA1) -import Crypto.MAC.HMAC (HMAC, hmac) -import Data.ByteArray (convert) -import Data.ByteString.Base64.URL (decode, encode) -import Data.ByteString.UTF8 as UTF8 (fromString) -import Data.List (intersperse) -import Data.Maybe (catMaybes) -import Data.Proxy (Proxy (..)) -import Data.Text (Text) -import qualified Data.Text as T (append, concat, pack) -import Data.Text.Encoding (decodeUtf8, encodeUtf8) -import Data.Word (Word8) -import Network.HTTP.Client (Manager) -import Network.URI (URI (..), URIAuth (..), uriToString) -import Servant.API ((:>), Get, QueryParam, QueryParams, safeLink, - ToHttpApiData (..)) -import Servant.Client (BaseUrl (..), client, ClientEnv (ClientEnv), ClientM, - runClientM, ServantError) -import Servant.JuicyPixels (PNG) -import Servant.Links (LinkArrayElementStyle (..), linkURI') -import Text.Bytedump (hexString) -import Web.Google.Maps.Common (Address (..), googleMapsApis, Key (..), - Language (..), LatLng (..), Location (..), Region (..)) - --- | Secret for digital signature -newtype Secret = Secret Text - deriving (Eq, Show) - --- | Signature -newtype Signature = Signature Text - deriving (Eq, Show, ToHttpApiData) - --- | Center of the map: not required if the map includes markers or paths. -newtype Center = Center Location - deriving (Eq, Show, ToHttpApiData) - --- | Zoom level: the lowest level, in which the whole world can be seen, is 0. --- Each succeeding level doubles the precision. Not required if the map includes --- markers or paths. -newtype Zoom = Zoom Int - deriving (Eq, Show, ToHttpApiData) - --- | Size in pixels: there are maximum allowable values. -data Size = Size - { width :: Int - , height :: Int - } deriving (Eq, Show) - -instance ToHttpApiData Size where - toUrlPiece (Size width' height') = - T.pack (show width' ++ "x" ++ show height') - --- | Scale -data Scale - = Single -- ^ The default value. - | Double - | Quadruple - deriving (Eq, Show) - -instance ToHttpApiData Scale where - toUrlPiece scale = case scale of - Single -> "1" - Double -> "2" - Quadruple -> "4" - --- | Image format -data Format - = Png8 -- ^ The default value. - | Png32 - deriving (Eq, Show) - -instance ToHttpApiData Format where - toUrlPiece format = case format of - Png8 -> "png8" - Png32 -> "png32" - --- | MapStyle -data MapStyle = MapStyle (Maybe Feature) (Maybe Element) [MapStyleOp] - deriving (Eq, Show) - -instance ToHttpApiData MapStyle where - toUrlPiece (MapStyle featureOpt elementOpt ops) = - T.concat $ intersperse "|" $ catMaybes [featureUrl, elementUrl] ++ - [opsUrl] - where - featureUrl = T.append "feature:" . toUrlPiece <$> featureOpt - elementUrl = T.append "element:" . toUrlPiece <$> elementOpt - opsUrl = toUrlPiece ops - --- | Map feature -data Feature - = AllFeatures - | Administrative - | AdministrativeCountry - | AdministrativeLandParcel - | AdministrativeLocality - | AdministrativeNeighborhood - | AdministrativeProvince - | Landscape - | LandscapeManMade - | LandscapeNatural - | LandscapeNaturalLandcover - | LandscapeNaturalTerrain - | Poi - | PoiAttraction - | PoiBusiness - | PoiGovernment - | PoiMedical - | PoiPark - | PoiPlaceOfWorship - | PoiSchool - | PoiSportsComplex - | Road - | RoadArterial - | RoadHighway - | RoadHighwayControlledAccess - | RoadLocal - | Transit - | TransitLine - | TransitStation - | TransitStationAirport - | TransitStationBus - | TransitStationRail - | Water - deriving (Eq, Show) - -instance ToHttpApiData Feature where - toUrlPiece feature = case feature of - AllFeatures -> "all" - Administrative -> "administrative" - AdministrativeCountry -> "administrative.country" - AdministrativeLandParcel -> "administrative.land_parcel" - AdministrativeLocality -> "administrative.locality" - AdministrativeNeighborhood -> "administrative.neighborhood" - AdministrativeProvince -> "administrative.province" - Landscape -> "landscape" - LandscapeManMade -> "landscape.man_made" - LandscapeNatural -> "landscape.natural" - LandscapeNaturalLandcover -> "landscape.landcover" - LandscapeNaturalTerrain -> "landscape.terrain" - Poi -> "poi" - PoiAttraction -> "poi.attraction" - PoiBusiness -> "poi.business" - PoiGovernment -> "poi.government" - PoiMedical -> "poi.medical" - PoiPark -> "poi.park" - PoiPlaceOfWorship -> "poi.place_of_worship" - PoiSchool -> "poi.school" - PoiSportsComplex -> "poi.sports_complex" - Road -> "road" - RoadArterial -> "road.arterial" - RoadHighway -> "road.highway" - RoadHighwayControlledAccess -> "road.controlled_access" - RoadLocal -> "road.local" - Transit -> "transit" - TransitLine -> "transit.line" - TransitStation -> "transit.station" - TransitStationAirport -> "transit.station.airport" - TransitStationBus -> "transit.station.bus" - TransitStationRail -> "transit.station.rail" - Water -> "water" - --- | Feature element -data Element - = AllElements - | AllGeometry - | GeometryFill - | GeometryStroke - | AllLabels - | LabelsIcon - | LabelsText - | LabelsTextFill - | LabelsTextStroke - deriving (Eq, Show) - -instance ToHttpApiData Element where - toUrlPiece element = case element of - AllElements -> "all" - AllGeometry -> "geometry" - GeometryFill -> "geometry.fill" - GeometryStroke -> "geometry.stroke" - AllLabels -> "labels" - LabelsIcon -> "labels.icon" - LabelsText -> "labels.text" - LabelsTextFill -> "labels.text.fill" - LabelsTextStroke -> "labels.text.stroke" - --- | Map style operation -data MapStyleOp - = StyleHue Word8 Word8 Word8 - | StyleLightness Double - | StyleSaturation Double - | StyleGamma Double - | StyleInvertLightness Bool - | StyleVisibility Visibility - | StyleColor Word8 Word8 Word8 - | StyleWeight Int - deriving (Eq, Show) - -instance ToHttpApiData MapStyleOp where - toUrlPiece mapStyleOp - | StyleHue r g b <- mapStyleOp - = T.pack $ "hue:0x" ++ hexString r ++ hexString g ++ hexString b - | StyleLightness l <- mapStyleOp - = T.concat ["lightness:", toUrlPiece l] - | StyleSaturation s <- mapStyleOp - = T.concat ["saturation:", toUrlPiece s] - | StyleGamma g <- mapStyleOp - = T.concat ["gamma:", toUrlPiece g] - | StyleInvertLightness i <- mapStyleOp - = T.concat ["invert_lightness:", toUrlPiece i] - | StyleVisibility e <- mapStyleOp - = T.concat ["visibility:", toUrlPiece e] - | StyleColor r g b <- mapStyleOp - = T.pack $ "color:0x" ++ hexString r ++ hexString g ++ hexString b - | StyleWeight w <- mapStyleOp - = T.concat ["weight:", toUrlPiece w] - -instance ToHttpApiData [MapStyleOp] where - toUrlPiece ops = T.concat $ intersperse "|" $ map toUrlPiece ops - --- | Visibility -data Visibility - = On - | Off - | Simplified -- ^ Removes some, not all, style features - deriving (Eq, Show) - -instance ToHttpApiData Visibility where - toUrlPiece visibility = case visibility of - On -> "on" - Off -> "off" - Simplified -> "simplified" - --- | Map type -data MapType - = RoadMap -- ^ The default value. - | Satellite - | Hybrid - | Terrain - deriving (Eq, Show) - -instance ToHttpApiData MapType where - toUrlPiece mapType = case mapType of - RoadMap -> "roadmap" - Satellite -> "satellite" - Hybrid -> "hybrid" - Terrain -> "terrain" - --- | Markers -data Markers = Markers (Maybe MarkerStyle) [Location] - deriving (Eq, Show) - -instance ToHttpApiData Markers where - toUrlPiece (Markers markerStyleOpt ls) - | Nothing <- markerStyleOpt - = toUrlPiece ls - | Just (StdMarkerStyle Nothing Nothing Nothing) <- markerStyleOpt - = toUrlPiece ls - | Just markerStyle <- markerStyleOpt - = case ls of - [] -> toUrlPiece markerStyle - _ -> T.concat [toUrlPiece markerStyle, "|", toUrlPiece ls] - --- | Marker style -data MarkerStyle - = StdMarkerStyle - { markerSize :: Maybe MarkerSize - , markerColor :: Maybe MarkerColor - , markerLabel :: Maybe MarkerLabel - } - | CustomIcon - { icon :: URI - , anchor :: Maybe Anchor - } - deriving (Eq, Show) - -instance ToHttpApiData MarkerStyle where - toUrlPiece markerStyle - | StdMarkerStyle ms mc ml <- markerStyle - = let size' = T.append "size:" . toUrlPiece <$> ms - color' = T.append "color:" . toUrlPiece <$> mc - label' = T.append "label:" . toUrlPiece <$> ml - opts = catMaybes [size', color', label'] - in T.concat $ intersperse "|" opts - | CustomIcon url ma <- markerStyle - = let icon' = T.concat ["icon:", toUrlPiece $ uriToString id url ""] - in case ma of - Nothing -> icon' - Just a -> T.concat [icon', "|", "anchor:", toUrlPiece a] - --- | Marker size -data MarkerSize - = Tiny - | Mid - | Small - deriving (Eq, Show) - -instance ToHttpApiData MarkerSize where - toUrlPiece markerSize' = case markerSize' of - Tiny -> "tiny" - Mid -> "mid" - Small -> "small" - --- | Marker colour -data MarkerColor - = MarkerColor Word8 Word8 Word8 - | StdMarkerColor StdColor - deriving (Eq, Show) - -instance ToHttpApiData MarkerColor where - toUrlPiece (MarkerColor r g b) = T.pack $ "0x" ++ hexString r ++ hexString g - ++ hexString b - toUrlPiece (StdMarkerColor stdColor) = toUrlPiece stdColor - --- | Standard colours -data StdColor - = Black - | Brown - | Green - | Purple - | Yellow - | Blue - | Gray - | Orange - | Red - | White - deriving (Eq, Show) - -instance ToHttpApiData StdColor where - toUrlPiece stdColor = case stdColor of - Black -> "black" - Brown -> "brown" - Green -> "green" - Purple -> "purple" - Yellow -> "yellow" - Blue -> "blue" - Gray -> "gray" - Orange -> "orange" - Red -> "red" - White -> "white" - --- | Marker label character -newtype MarkerLabel = MarkerLabel Char - deriving (Eq, Show, ToHttpApiData) - --- | Anchor -data Anchor - = AnchorPoint Int Int - | StdAnchor StdAnchor - deriving (Eq, Show) - -instance ToHttpApiData Anchor where - toUrlPiece anchor' - | AnchorPoint x y <- anchor' - = T.pack (show x ++ "," ++ show y) - | StdAnchor stdAnchor <- anchor' - = toUrlPiece stdAnchor - --- | Standard anchor points -data StdAnchor - = AnchorTop - | AnchorBottom - | AnchorLeft - | AnchorRight - | AnchorCenter - | AnchorTopLeft - | AnchorTopRight - | AnchorBottomLeft - | AnchorBottomRight - deriving (Eq, Show) - -instance ToHttpApiData StdAnchor where - toUrlPiece stdAnchor = case stdAnchor of - AnchorTop -> "top" - AnchorBottom -> "bottom" - AnchorLeft -> "left" - AnchorRight -> "right" - AnchorCenter -> "center" - AnchorTopLeft -> "topleft" - AnchorTopRight -> "topright" - AnchorBottomLeft -> "bottomleft" - AnchorBottomRight -> "bottomright" - --- | Path -data Path = Path (Maybe PathStyle) [Location] - deriving (Eq, Show) - -instance ToHttpApiData Path where - toUrlPiece (Path pathStyleOpt ls) - | Nothing <- pathStyleOpt - = toUrlPiece ls - | Just (PathStyle Nothing Nothing Nothing Nothing) <- pathStyleOpt - = toUrlPiece ls - | Just pathStyle <- pathStyleOpt - = case ls of - [] -> toUrlPiece pathStyle - _ -> T.concat [toUrlPiece pathStyle, "|", toUrlPiece ls] - --- | Path style: a geodesic path follows the curvature of the Earth. -data PathStyle = PathStyle - { pathWeight :: Maybe PathWeight -- ^ The default value is 5. - , pathColor :: Maybe PathColor - , pathFillColor :: Maybe PathColor - , pathGeodesic :: Maybe PathGeodesic -- ^ The default value is false. - } deriving (Eq, Show) - -instance ToHttpApiData PathStyle where - toUrlPiece (PathStyle mw mc mfc mg) = - T.concat $ intersperse "|" opts - where - weightUrl = T.append "weight:" . toUrlPiece <$> mw - colorUrl = T.append "color:" . toUrlPiece <$> mc - fillColorUrl = T.append "fillcolor:" . toUrlPiece <$> mfc - geodesicUrl = T.append "geodesic:" . toUrlPiece <$> mg - opts = catMaybes [weightUrl, colorUrl, fillColorUrl, - geodesicUrl] - --- | Path weight: in pixels. -newtype PathWeight = PathWeight Int - deriving (Eq, Show, ToHttpApiData) - --- | Path colour -data PathColor - = PathColor Word8 Word8 Word8 - | PathColorAlpha Word8 Word8 Word8 Word8 - | StdPathColor StdColor - deriving (Eq, Show) - -instance ToHttpApiData PathColor where - toUrlPiece (PathColor r g b) = T.pack $ "0x" ++ hexString r ++ hexString g - ++ hexString b - toUrlPiece (PathColorAlpha r g b a) = T.pack $ "0x" ++ hexString r ++ - hexString g ++ hexString b ++ hexString a - toUrlPiece (StdPathColor stdColor) = toUrlPiece stdColor - --- | Path is geodesic -newtype PathGeodesic = PathGeodesic Bool - deriving (Eq, Show, ToHttpApiData) - --- | Visible locations -newtype Visible = Visible [Location] - deriving (Eq, Show, ToHttpApiData) - --- | Google Static Maps API -type GoogleStaticMapsAPI - = "staticmap" - :> QueryParam "key" Key - :> QueryParam "center" Center - :> QueryParam "zoom" Zoom - :> QueryParam "size" Size - :> QueryParam "scale" Scale - :> QueryParam "format" Format - :> QueryParams "style" MapStyle - :> QueryParam "maptype" MapType - :> QueryParam "language" Language - :> QueryParam "region" Region - :> QueryParams "markers" Markers - :> QueryParams "path" Path - :> QueryParam "visible" Visible - :> QueryParam "signature" Signature - :> Get '[PNG] StaticmapResponse - --- | StaticmapResponse -type StaticmapResponse = DynamicImage - --- | API type -api :: Proxy GoogleStaticMapsAPI -api = Proxy - -staticmap' - :: Maybe Key - -> Maybe Center - -> Maybe Zoom - -> Maybe Size - -> Maybe Scale - -> Maybe Format - -> [MapStyle] - -> Maybe MapType - -> Maybe Language - -> Maybe Region - -> [Markers] - -> [Path] - -> Maybe Visible - -> Maybe Signature - -> ClientM StaticmapResponse -staticmap' = client api - --- | Retrieve a static map. NB: The use of the Google Static Maps API services --- is subject to the <https://developers.google.com/maps/terms Google Maps APIs Terms of Service>. -staticmap - :: Manager - -> Key - -> Maybe Secret - -> Maybe Center - -> Maybe Zoom - -> Size - -> Maybe Scale - -> Maybe Format - -> [MapStyle] - -> Maybe MapType - -> Maybe Language - -> Maybe Region - -> [Markers] - -> [Path] - -> Maybe Visible - -> IO (Either ServantError StaticmapResponse) -staticmap - mgr - key - secretOpt - centerOpt - zoomOpt - size - scaleOpt - formatOpt - mapStyles - mapTypeOpt - languageOpt - regionOpt - markerss - paths - visibleOpt - = case secretOpt of - Nothing -> runClientM (eval staticmap' Nothing) --- CookieJar supported from servant-client-0.13 -#if MIN_VERSION_servant_client(0,13,0) - (ClientEnv mgr googleMapsApis Nothing) -#else - (ClientEnv mgr googleMapsApis) -#endif - Just secret -> do - let url = linkURI $ eval (safeLink api api) Nothing - signatureOpt = sign secret googleMapsApis url - runClientM (eval staticmap' signatureOpt) --- CookieJar supported from servant-client-0.13 -#if MIN_VERSION_servant_client(0,13,0) - (ClientEnv mgr googleMapsApis Nothing) -#else - (ClientEnv mgr googleMapsApis) -#endif - where - linkURI = linkURI' LinkArrayElementPlain - eval f = f (Just key) centerOpt zoomOpt (Just size) scaleOpt formatOpt - mapStyles mapTypeOpt languageOpt regionOpt markerss paths - visibleOpt - -sign :: Secret -> BaseUrl -> URI -> Maybe Signature -sign (Secret secret) baseUrl url = do - secret' <- either (const Nothing) Just (decode $ encodeUtf8 secret) - let url' = UTF8.fromString $ baseUrlPath baseUrl ++ "/" ++ uriToString id url "" - signature = hmac secret' url' :: HMAC SHA1 - signature' = decodeUtf8 $ encode $ convert signature - return $ Signature signature'