# HG changeset patch # User Tero Marttila # Date 1410725915 -10800 # Node ID 19a3ed063d186198df5ad80ddaea5cbeb441ec98 # Parent a3bbecbd31e78ab4302dd46805e78281a88f8266 pngtile.image: leaflet browser for tiles; coordinates are still wonky.. diff -r a3bbecbd31e7 -r 19a3ed063d18 bin/image-server --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bin/image-server Sun Sep 14 23:18:35 2014 +0300 @@ -0,0 +1,43 @@ +#!/usr/bin/env python + +""" + Development server for pngtile.image serving. +""" + +import argparse +import pngtile.image +import werkzeug.serving + +def main (): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--listen', metavar='ADDR', default='0.0.0.0', + help="Listen on address") + parser.add_argument('--port', metavar='PORT', type=int, default=8080, + help="Listen on port") + + parser.add_argument('--reload', action='store_true', + help="Reload") + parser.add_argument('--debugger', action='store_true', + help="Debugger") + + parser.add_argument('--static', metavar='PATH', default='./static', + help="Path to /static") + parser.add_argument('image_root', metavar='PATH', + help="Path to images") + + args = parser.parse_args() + + application = pngtile.image.ImageApplication( + image_root = args.image_root, + ) + + werkzeug.serving.run_simple(args.listen, args.port, application, + use_reloader = args.reload, + use_debugger = args.debugger, + static_files = { + '/static': args.static, + }, + ) + +if __name__ == '__main__': + main() diff -r a3bbecbd31e7 -r 19a3ed063d18 pngtile/image.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pngtile/image.py Sun Sep 14 23:18:35 2014 +0300 @@ -0,0 +1,110 @@ +""" + Image handling. +""" + + +from werkzeug import Request, Response, exceptions +from werkzeug.utils import html + +import pngtile.tile +from pngtile.application import BaseApplication +import pypngtile + +import json + +class ImageApplication (BaseApplication): + + STYLESHEETS = ( + 'https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css', + 'https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css', + 'http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css', + '/static/pngtile/image.css', + ) + + SCRIPTS = ( + 'https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js', + 'https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js', + 'http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.js', + ) + + def __init__ (self, **opts): + BaseApplication.__init__(self, **opts) + + def render_image (self, request, image, name): + """ + request: werkzeug.Request + image: pypngtile.Image + name: request path for .png image + """ + + image_info = image.info() + + config = dict( + tile_url = 'http://zovoweix.qmsk.net:8080/{name}?x={x}&y={y}&zoom={z}', + tile_name = name, + + tile_size = pngtile.tile.TILE_SIZE, + tile_zoom = pngtile.tile.MAX_ZOOM, + + image_width = image_info['img_width'], + image_height = image_info['img_height'], + ) + + return self.render_html( + title = name, + body = ( + html.div(id='wrapper', *[ + html.div(id='map') + ]), + ), + end = ( + html.script("""\ + $(function() {{ + var config = {config}; + + var bounds = [ + [ 0, config.image_height ], + [ -config.image_width, 0 ] + ]; + var center = [ + -256, 512 + ]; + var zoom = config.tile_zoom; + + var map = L.map('map', {{ + crs: L.CRS.Simple, + center: center, + zoom: zoom, + maxBounds: bounds + }}); + + L.tileLayer(config.tile_url, {{ + name: config.tile_name, + minZoom: 0, + maxZoom: config.tile_zoom, + tileSize: config.tile_size, + continuousWorld: true, + noWrap: true, + zoomReverse: true, + bounds: bounds + }}).addTo(map); + }}); + """.format(config=json.dumps(config))), + ), + ) + + def handle (self, request): + """ + Handle request for an image + """ + + try: + image, name = self.get_image(request.path) + except pypngtile.Error as error: + raise exceptions.BadRequest(str(error)) + + html = self.render_image(request, image, name) + + return Response(html, content_type="text/html") + + diff -r a3bbecbd31e7 -r 19a3ed063d18 static/pngtile/image.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/static/pngtile/image.css Sun Sep 14 23:18:35 2014 +0300 @@ -0,0 +1,9 @@ +#map { + overflow: hidden; + position: absolute; + + top: 0px; + left: 0px; + width: 100%; + height: 100%; +}