qmsk.pngtile: image view
authorTero Marttila <terom@qmsk.net>
Sat, 04 Oct 2014 15:54:06 +0300
changeset 241 8456a554fab9
parent 240 21a38c59ce78
child 242 ce8de8c84e38
qmsk.pngtile: image view
qmsk/pngtile/pngtile.py
qmsk/pngtile/templates/qmsk.pngtile/image.html
qmsk/pngtile/templates/qmsk.pngtile/index.html
qmsk/pngtile/templates/qmsk.pngtile/view.html
qmsk/pngtile/views.py
--- a/qmsk/pngtile/pngtile.py	Sat Oct 04 15:53:57 2014 +0300
+++ b/qmsk/pngtile/pngtile.py	Sat Oct 04 15:54:06 2014 +0300
@@ -15,6 +15,9 @@
 import os.path
 
 class Store (PNGTileStore):
+    TILE_SIZE = 256
+    TILE_ZOOM = 4
+
     def __init__ (self, title, tileserver, **opts):
         super(Store, self).__init__(**opts)
         
@@ -89,7 +92,7 @@
             if type:
                 yield item, item_name
 
-    def tiles_url (self, name, **query):
+    def tiles_url (self, name=None, **query):
         """
             Return a tileserver URL.
         """
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qmsk/pngtile/templates/qmsk.pngtile/image.html	Sat Oct 04 15:54:06 2014 +0300
@@ -0,0 +1,23 @@
+{% extends "qmsk.pngtile/view.html" %}
+{% load staticfiles %}
+
+{% block head %}
+    <link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css">
+    <link rel="stylesheet" href="{% static "qmsk.pngtile/map.css" %}">
+{% endblock %}
+
+{% block content %}
+    <div id="map">
+
+    </div>
+{% endblock %}
+
+{% block body %}
+    <script src="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.js"></script>
+    <script src="{% static "qmsk.pngtile/map.js" %}"></script>
+    <script>
+        $(function () {
+            map_init({{map_config|safe}});
+        });
+    </script>
+{% endblock %}
--- a/qmsk/pngtile/templates/qmsk.pngtile/index.html	Sat Oct 04 15:53:57 2014 +0300
+++ b/qmsk/pngtile/templates/qmsk.pngtile/index.html	Sat Oct 04 15:54:06 2014 +0300
@@ -1,39 +1,4 @@
-{% extends "site.html" %}
-
-{% block title %}{{ site_name }} :: {{ name }}{% endblock %}
-
-{% block header %}
-    <h1 class="page-header-title">
-        <a href="{% url 'index' '' %}">{{ title }}</a>
-    </h1>
-{% endblock %}
-
-{% block breadcrumb %}
-    <ol class="breadcrumb">
-    {% for name, title in breadcrumb %}
-        <li><a href="{% url 'index' name %}">{{ title }}</a></li>
-    {% endfor %}
-    </ol>
-{% endblock %}
-
-{% block nav %}
-{% for tree_items, tree_item in index_tree %}
-    {% if not forloop.first %}
-    <hr />
-    {% endif %}
-    <ul class="nav">
-    {% for item, item_name in tree_items %}
-        <li
-        {% if item == tree_item %}
-            class="active"
-        {% endif %}
-        >
-            <a href="{% url 'index' item_name %}">{{item}}</a>
-        </li>
-    {% endfor %}
-    </ul>
-{% endfor %}
-{% endblock %}
+{% extends "qmsk.pngtile/view.html" %}
 
 {% block content %}
 {% for item, item_name in index_items %}
@@ -43,7 +8,3 @@
 {% endfor %}
 {% endblock %}
 
-{% block footer %}
-
-{% endblock %}
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qmsk/pngtile/templates/qmsk.pngtile/view.html	Sat Oct 04 15:54:06 2014 +0300
@@ -0,0 +1,41 @@
+{% extends "site.html" %}
+
+{% block title %}{{ site_name }} :: {{ name }}{% endblock %}
+
+{% block header %}
+    <h1 class="page-header-title">
+        <a href="{% url 'index' '' %}">{{ title }}</a>
+    </h1>
+{% endblock %}
+
+{% block breadcrumb %}
+    <ol class="breadcrumb">
+    {% for name, title in breadcrumb %}
+        <li><a href="{% url 'index' name %}">{{ title }}</a></li>
+    {% endfor %}
+    </ol>
+{% endblock %}
+
+{% block nav %}
+{% for tree_items, tree_item in tree %}
+    {% if not forloop.first %}
+    <hr />
+    {% endif %}
+    <ul class="nav">
+    {% for item, item_name in tree_items %}
+        <li
+        {% if item == tree_item %}
+            class="active"
+        {% endif %}
+        >
+            <a href="{% url 'index' item_name %}">{{item}}</a>
+        </li>
+    {% endfor %}
+    </ul>
+{% endfor %}
+{% endblock %}
+
+{% block footer %}
+
+{% endblock %}
+
--- a/qmsk/pngtile/views.py	Sat Oct 04 15:53:57 2014 +0300
+++ b/qmsk/pngtile/views.py	Sat Oct 04 15:54:06 2014 +0300
@@ -5,6 +5,9 @@
 
 import pypngtile
 
+import json
+import os.path
+
 def index (request, name):
     store = pngtile.STORE
 
@@ -27,9 +30,48 @@
         name        = name,
         title       = store.title(name),
         breadcrumb  = store.breadcrumb(name),
-        index_tree  = tree,
+        tree        = tree,
         index_items = sorted(items),
     ))
 
 def image (request, name):
-    pass
+    store = pngtile.STORE
+
+    try:
+        image, name = store.open(name)
+        tree  = store.tree(os.path.dirname(name))
+    except pngtile.NotFound:
+        raise http.Http404
+    except pngtile.InvalidImage:
+        return http.HttpResponseBadRequest(name)
+    except pngtile.UncachedImage:
+        return http.HttpResponseBadRequest(name)
+    except pngtile.Error as error:
+        return http.HttpResponseServerError(str(error))
+    except pypngtile.Error as error:
+        return http.HttpResponseServerError(str(error))
+
+    image_info = image.info()
+
+    map_config = dict(
+        tiles_url       = store.tiles_url(name),
+        tiles_mtime     = 0,
+
+        tile_url        = '{tiles_url}?t={tiles_mtime}&x={x}&y={y}&zoom={z}',
+        tile_size       = store.TILE_SIZE,
+        tile_zoom       = store.TILE_ZOOM,
+
+        image_url       = '{tiles_url}?w={w}&h={h}&x={x}&y={y}&zoom={z}',
+        image_width     = image_info['img_width'],
+        image_height    = image_info['img_height'],
+    )
+    
+    return render(request, 'qmsk.pngtile/image.html', dict(
+        site_name   = u"...",
+        name        = name,
+        title       = store.title(name),
+        breadcrumb  = store.breadcrumb(name),
+        tree        = tree,
+        map_config  = json.dumps(map_config),
+    ))
+