author | Tero Marttila <terom@paivola.fi> |
Sun, 14 Sep 2014 23:18:35 +0300 | |
changeset 141 | 19a3ed063d18 |
child 142 | 9b316e83e9e3 |
permissions | -rw-r--r-- |
141
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
1 |
""" |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
2 |
Image handling. |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
3 |
""" |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
4 |
|
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
5 |
|
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
6 |
from werkzeug import Request, Response, exceptions |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
7 |
from werkzeug.utils import html |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
8 |
|
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
9 |
import pngtile.tile |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
10 |
from pngtile.application import BaseApplication |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
11 |
import pypngtile |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
12 |
|
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
13 |
import json |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
14 |
|
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
15 |
class ImageApplication (BaseApplication): |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
16 |
|
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
17 |
STYLESHEETS = ( |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
18 |
'https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css', |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
19 |
'https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css', |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
20 |
'http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css', |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
21 |
'/static/pngtile/image.css', |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
22 |
) |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
23 |
|
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
24 |
SCRIPTS = ( |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
25 |
'https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js', |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
26 |
'https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js', |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
27 |
'http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.js', |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
28 |
) |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
29 |
|
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
30 |
def __init__ (self, **opts): |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
31 |
BaseApplication.__init__(self, **opts) |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
32 |
|
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
33 |
def render_image (self, request, image, name): |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
34 |
""" |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
35 |
request: werkzeug.Request |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
36 |
image: pypngtile.Image |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
37 |
name: request path for .png image |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
38 |
""" |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
39 |
|
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
40 |
image_info = image.info() |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
41 |
|
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
42 |
config = dict( |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
43 |
tile_url = 'http://zovoweix.qmsk.net:8080/{name}?x={x}&y={y}&zoom={z}', |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
44 |
tile_name = name, |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
45 |
|
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
46 |
tile_size = pngtile.tile.TILE_SIZE, |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
47 |
tile_zoom = pngtile.tile.MAX_ZOOM, |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
48 |
|
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
49 |
image_width = image_info['img_width'], |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
50 |
image_height = image_info['img_height'], |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
51 |
) |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
52 |
|
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
53 |
return self.render_html( |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
54 |
title = name, |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
55 |
body = ( |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
56 |
html.div(id='wrapper', *[ |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
57 |
html.div(id='map') |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
58 |
]), |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
59 |
), |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
60 |
end = ( |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
61 |
html.script("""\ |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
62 |
$(function() {{ |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
63 |
var config = {config}; |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
64 |
|
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
65 |
var bounds = [ |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
66 |
[ 0, config.image_height ], |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
67 |
[ -config.image_width, 0 ] |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
68 |
]; |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
69 |
var center = [ |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
70 |
-256, 512 |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
71 |
]; |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
72 |
var zoom = config.tile_zoom; |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
73 |
|
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
74 |
var map = L.map('map', {{ |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
75 |
crs: L.CRS.Simple, |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
76 |
center: center, |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
77 |
zoom: zoom, |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
78 |
maxBounds: bounds |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
79 |
}}); |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
80 |
|
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
81 |
L.tileLayer(config.tile_url, {{ |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
82 |
name: config.tile_name, |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
83 |
minZoom: 0, |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
84 |
maxZoom: config.tile_zoom, |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
85 |
tileSize: config.tile_size, |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
86 |
continuousWorld: true, |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
87 |
noWrap: true, |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
88 |
zoomReverse: true, |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
89 |
bounds: bounds |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
90 |
}}).addTo(map); |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
91 |
}}); |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
92 |
""".format(config=json.dumps(config))), |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
93 |
), |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
94 |
) |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
95 |
|
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
96 |
def handle (self, request): |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
97 |
""" |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
98 |
Handle request for an image |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
99 |
""" |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
100 |
|
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
101 |
try: |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
102 |
image, name = self.get_image(request.path) |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
103 |
except pypngtile.Error as error: |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
104 |
raise exceptions.BadRequest(str(error)) |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
105 |
|
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
106 |
html = self.render_image(request, image, name) |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
107 |
|
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
108 |
return Response(html, content_type="text/html") |
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
109 |
|
19a3ed063d18
pngtile.image: leaflet browser for tiles; coordinates are still wonky..
Tero Marttila <terom@paivola.fi>
parents:
diff
changeset
|
110 |