HSlippyMap: OpenStreetMap (OSM) Slippy Map

[ 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]

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

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.1.0.0, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 3.0, 3.0.1 (info)
Dependencies base (>=4.6 && <4.7) [details]
License BSD-3-Clause
Author Alexandre Peyroux
Maintainer al+hackage@px.io
Revised Revision 2 made by alp at 2016-08-27T20:09:18Z
Category Geography
Home page https://github.com/41px/HSlippyMap
Uploaded by j4pe at 2013-12-24T23:12:24Z
Distributions LTSHaskell:3.0.1, NixOS:3.0.1, Stackage:3.0.1
Reverse Dependencies 1 direct, 0 indirect [details]
Downloads 11396 total (30 in the last 30 days)
Rating 2.0 (votes: 1) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Successful builds reported [all 2 reports]

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