-
Notifications
You must be signed in to change notification settings - Fork 1
/
geoimage.wsgi
63 lines (57 loc) · 2.01 KB
/
geoimage.wsgi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/python
# -*- coding: UTF-8 -*-
#
# zoom/x/y to wms redirector for geoimage.at
#
# (c) 2011 Sven geggus <[email protected]>
#
# GNU GPL Version 3 or later
# http://www.gnu.org/copyleft/gpl.html
target_base='http://gis.lebensministerium.at/wmsgw/?key=%s&FORMAT=image/%s&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=Luftbild_MR,Luftbild_1m,Luftbild_8m,Satellitenbild_30m&SRS=EPSG:900913&WIDTH=256&HEIGHT=256&BBOX=%s'
SLIPPYURL='http://geoimage.openstreetmap.at/geoimagemap.html'
import re
# calculate coordinates from tile names
def TileToMeters(tx, ty, zoom):
initialResolution = 20037508.342789244 * 2.0 / 256.0
originShift = 20037508.342789244
tileSize = 256.0
zoom2 = (2.0**zoom)
res = initialResolution / zoom2
mx = (res*tileSize*(tx+1))-originShift
my = (res*tileSize*(zoom2-ty))-originShift
return mx, my
# this will give the BBox Parameter for tile x,y,z
def TileToBBox(x,y,z):
x1,y1=TileToMeters(x-1,y+1,z)
x2,y2=TileToMeters(x,y,z)
return x1,y1,x2,y2
def application(environ, start_response):
status = '200 OK'
# our URI is in the form http://<our-server>/<key>/<z>/<x>/<y>.<ext>
# we are only interested in /<key>/<z>/<x>/<y>.<ext>
regex='/([0-9a-fxA-FX]+)/([0-9]+)/([0-9]+)/([0-9]+)\.(...)'
uri = environ.get('REQUEST_URI', '')
res=re.findall(regex,uri)
# Show Slippymap if base index is requested
if len(res) != 1:
if uri == "/":
start_response('301 Redirect', [('Location', SLIPPYURL),])
return []
else:
out='ERROR, invalid Tile URL: %s\n' % uri
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(out)))]
start_response('200 OK', response_headers)
return [out]
else:
key=res[0][0]
z=res[0][1]
x=res[0][2]
y=res[0][3]
ext=res[0][4]
if ext == "jpg":
ext="jpeg"
bbox="%f,%f,%f,%f" % TileToBBox(int(x),int(y),int(z))
target=target_base % (key,ext,bbox)
start_response('301 Redirect', [('Location', target),])
return []