The HSlippyMap package

[ Tags: bsd3, geography, library ] [ Propose Tags ]

OpenStreetMap (OSM) Slippy Map is, in general, a term referring to modern web maps which let you zoom and pan around (the map slips around when you drag the mouse). - http://wiki.openstreetmap.org/wiki/Slippy_Map


[Skip to Readme]

Properties

Versions 0.1.0.0, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.1, 2.2 (info)
Dependencies base (==4.6.*) [details]
License BSD3
Author Alexandre Peyroux
Maintainer al+hackage@px.io
Category Geography
Home page https://github.com/41px/HSlippyMap
Uploaded Tue Dec 24 23:12:24 UTC 2013 by j4pe
Updated Sat Aug 27 20:09:18 UTC 2016 by alp to revision 2   [What is this?]
Distributions NixOS:2.2
Downloads 2915 total (196 in the last 30 days)
Rating (no votes yet) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Successful builds reported [all 2 reports]
Hackage Matrix CI

Modules

[Index]

Downloads

Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

For package maintainers and hackage trustees


Readme for HSlippyMap-2.2

[back to package description]

Algo

http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Haskell

GHCI

ja@x220:~/codaz/HSlippyMap$ ghci
GHCi, version 7.6.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
[1 of 1] Compiling HSlippyMap       ( HSlippyMap.hs, interpreted )
Ok, modules loaded: HSlippyMap.
*HSlippyMap> :load HSlippyMap
*HSlippyMap> let max = tileFromLatLong 48.9031 2.5214 12
*HSlippyMap> let min = tileFromLatLong 48.8146 2.1732 12
*HSlippyMap> :t max
max :: Tile
*HSlippyMap> tilesFromBBox min max
[http://tile.openstreetmap.org/12/2072/1409.png,http://tile.openstreetmap.org/12/2073/1409.png,http://tile.openstreetmap.org/12/2074/1409.png,http://tile.openstreetmap.org/12/2075/1409.png,http://tile.openstreetmap.org/12/2076/1409.png]

Exemple

Gist : https://gist.github.com/j4/8117832

import HSlippyMap

main = do                                                                             
  mapM (\(x,y) -> mapM (\y'-> print $ "http://openstreetmap.asi.mi/" ++ show z ++ "/" ++ show x ++ "/" ++ show y' ++ ".png") y) [(x,\
[(minimum [tymin, tymax])..(maximum [tymin,tymax])]) | x <- [(minimum [txmin, txmax])..(maximum [txmin, txmax])]]
  where
      min = tileFromLatLong 49.13 3.05 8
      max = tileFromLatLong 48.57 1.66 8
      txmin = tx min
      txmax = tx max
      tymax = ty min
      tymin = ty max
      z = tz min

Result :

ja@x220 ~ $ ./hsl | xargs wget -nv -O NULL --output-file osm.asi.log 
ja@x220 ~ $ cat osm.asi.log 
2013-12-24 22:04:46 URL:http://tile.openstreetmap.org/8/129/87.png [37753/37753] -> "NULL" [1]
2013-12-24 22:04:46 URL:http://tile.openstreetmap.org/8/129/88.png [36997/36997] -> "NULL" [1]
2013-12-24 22:04:46 URL:http://tile.openstreetmap.org/8/130/87.png [36749/36749] -> "NULL" [1]
2013-12-24 22:04:47 URL:http://tile.openstreetmap.org/8/130/88.png [35550/35550] -> "NULL" [1]
FINISHED --2013-12-24 22:04:47--
Total wall clock time: 0,7s
Downloaded: 4 files, 144K in 0,4s (364 KB/s)

Other exemple

mapM (\z-> putStrLn $ show $ tileFromLatLong 12.3 3.3 z) [0..18]
http://tile.openstreetmap.org/0/0/0.png
http://tile.openstreetmap.org/1/1/0.png
http://tile.openstreetmap.org/2/2/1.png
http://tile.openstreetmap.org/3/4/2.png
http://tile.openstreetmap.org/4/8/5.png
http://tile.openstreetmap.org/5/16/11.png
http://tile.openstreetmap.org/6/32/22.png
http://tile.openstreetmap.org/7/64/44.png
http://tile.openstreetmap.org/8/129/88.png
http://tile.openstreetmap.org/9/259/176.png
http://tile.openstreetmap.org/10/518/352.png
http://tile.openstreetmap.org/11/1036/704.png
http://tile.openstreetmap.org/12/2073/1409.png
http://tile.openstreetmap.org/13/4147/2819.png
http://tile.openstreetmap.org/14/8295/5639.png
http://tile.openstreetmap.org/15/16590/11278.png
http://tile.openstreetmap.org/16/33181/22557.png
http://tile.openstreetmap.org/17/66362/45115.png
http://tile.openstreetmap.org/18/132725/90230.png
long2tilex lon z = floor((lon + 180.0) / 360.0 * (2.0 ** z))
 
lat2tiley lat z = floor((1.0 - log( tan(lat * pi/180.0) + 1.0 / cos(lat * pi/180.0)) / pi) / 2.0 * (2.0 ** z))
 
tilex2long x z = x / (2.0 ** z) * 360.0 - 180
 
tiley2lat y z = 180.0 / pi * atan(0.5 * (exp(n) - exp(-n)))
        where
                n = pi - 2.0 * pi * y / (2.0 ** z)
 
-- Exemple
main = do
        --print $ long2tilex 2.2712 17
        --print $ lat2tiley 48.8152 17
        --print $ tilex2long 66362 17
        --print $ tiley2lat 45115 17
        putStrLn "gps: (lat=48.8152,long=2.2712)"
        putStrLn $ "http://tile.openstreetmap.org/17/" ++ show x ++ "/" ++ show y ++ ".png"
        where
                z = 17
                x = long2tilex 2.2712 z
                y = lat2tiley 48.8152 z