Package viewer :: Package lib :: Module tilenames
[hide private]
[frames] | no frames]

Source Code for Module viewer.lib.tilenames

 1  #!/usr/bin/env python 
 2  """Translates between lat/long and the slippy-map tile numbering scheme 
 3   
 4  http://wiki.openstreetmap.org/index.php/Slippy_map_tilenames 
 5   
 6  @author: Oliver White 
 7  @date: 2007 
 8  @license: This file is public-domain. 
 9   
10  """ 
11   
12  __author__ = "Oliver White" 
13  __copyright__ = "(c) 2007, Oliver White" 
14  __license__ = "This file is public-domain." 
15   
16  from math import * 
17   
18 -def numTiles(z):
19 return(pow(2, z))
20
21 -def sec(x):
22 return(1 / cos(x))
23
24 -def latlon2relativeXY(lat, lon):
25 x = (lon + 180) / 360 26 y = (1 - log(tan(radians(lat)) + sec(radians(lat))) / pi) / 2 27 return(x, y)
28
29 -def latlon2xy(lat, lon, z):
30 n = numTiles(z) 31 x, y = latlon2relativeXY(lat, lon) 32 return(int(n * x), int(n * y))
33
34 -def tileXY(lat, lon, z):
35 x, y = latlon2xy(lat, lon, z) 36 return(int(x), int(y))
37
38 -def xy2latlon(x, y, z):
39 n = numTiles(z) 40 relY = y / n 41 lat = mercatorToLat(pi * (1 - 2 * relY)) 42 lon = -180.0 + 360.0 * x / n 43 return(lat, lon)
44
45 -def latEdges(y, z):
46 n = numTiles(z) 47 unit = 1 / n 48 relY1 = y * unit 49 relY2 = relY1 + unit 50 lat1 = mercatorToLat(pi * (1 - 2 * relY1)) 51 lat2 = mercatorToLat(pi * (1 - 2 * relY2)) 52 return(lat1, lat2)
53
54 -def lonEdges(x, z):
55 n = numTiles(z) 56 unit = 360 / n 57 lon1 = -180 + x * unit 58 lon2 = lon1 + unit 59 return(lon1, lon2)
60
61 -def tileEdges(x, y, z):
62 lat1, lat2 = latEdges(y, z) 63 lon1, lon2 = lonEdges(x, z) 64 return((lat2, lon1, lat1, lon2)) # S,W,N,E
65
66 -def mercatorToLat(mercatorY):
67 return(degrees(atan(sinh(mercatorY))))
68
69 -def tileSizePixels():
70 return(256)
71
72 -def tileLayerExt(layer):
73 if(layer in ('oam')): 74 return('jpg') 75 return('png')
76
77 -def tileLayerBase(layer):
78 layers = {"tah": "http://cassini.toolserver.org:8080/http://a.tile.openstreetmap.org/+http://toolserver.org/~cmarqu/hill/", 79 #"tah": "http://tah.openstreetmap.org/Tiles/tile/", 80 "oam": "http://oam1.hypercube.telascience.org/tiles/1.0.0/openaerialmap-900913/", 81 "mapnik": "http://tile.openstreetmap.org/mapnik/" 82 } 83 return(layers[layer])
84
85 -def tileURL(x, y, z, layer):
86 return "%s%d/%d/%d.%s" % (tileLayerBase(layer), z, x, y, tileLayerExt(layer))
87 88 if __name__ == "__main__": 89 for z in range(0,18): 90 x,y = tileXY(52.37930, 9.72310, z) 91 92 s,w,n,e = tileEdges(x,y,z) 93 print "%d: %d,%d --> %1.3f :: %1.3f, %1.3f :: %1.3f" % (z,x,y,s,n,w,e) 94 #print "<img src='%s'><br>" % tileURL(x,y,z) 95