kopia lustrzana https://github.com/hholzgra/maposmatic/
first "map of maps" experiment
rodzic
9d88f7d72b
commit
a91091b904
|
@ -29,6 +29,9 @@
|
||||||
"leaflet-areaselect": "*",
|
"leaflet-areaselect": "*",
|
||||||
"leaflet-locationfilter": "*",
|
"leaflet-locationfilter": "*",
|
||||||
"leaflet-providers": "^1.1.15",
|
"leaflet-providers": "^1.1.15",
|
||||||
"leaflet.locatecontrol": "^0.62.0"
|
"leaflet.locatecontrol": "^0.62.0",
|
||||||
|
"leaflet.deflate": "^0.2.1",
|
||||||
|
"leaflet.markercluster": "^1.0.6",
|
||||||
|
"leaflet.markercluster.layersupport": "^1.0.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,9 @@ import ocitysmap
|
||||||
from www.maposmatic import helpers, forms, nominatim, models
|
from www.maposmatic import helpers, forms, nominatim, models
|
||||||
import www.settings
|
import www.settings
|
||||||
|
|
||||||
|
from itertools import *
|
||||||
|
from django.db import connection
|
||||||
|
|
||||||
LOG = logging.getLogger('maposmatic')
|
LOG = logging.getLogger('maposmatic')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -48,6 +51,22 @@ except ImportError:
|
||||||
except ImportError:
|
except ImportError:
|
||||||
from json import write as json_encode
|
from json import write as json_encode
|
||||||
|
|
||||||
|
def query_to_dicts(query_string, *query_args):
|
||||||
|
"""Run a simple query and produce a generator
|
||||||
|
that returns the results as a bunch of dictionaries
|
||||||
|
with keys for the column values selected.
|
||||||
|
"""
|
||||||
|
cursor = connection.cursor()
|
||||||
|
cursor.execute(query_string, query_args)
|
||||||
|
col_names = [desc[0] for desc in cursor.description]
|
||||||
|
while True:
|
||||||
|
row = cursor.fetchone()
|
||||||
|
if row is None:
|
||||||
|
break
|
||||||
|
row_dict = dict(izip(col_names, row))
|
||||||
|
yield row_dict
|
||||||
|
return
|
||||||
|
|
||||||
def index(request):
|
def index(request):
|
||||||
"""The main page."""
|
"""The main page."""
|
||||||
form = forms.MapSearchForm(request.GET)
|
form = forms.MapSearchForm(request.GET)
|
||||||
|
@ -174,6 +193,19 @@ def maps(request):
|
||||||
'pages': helpers.get_pages_list(maps, paginator) },
|
'pages': helpers.get_pages_list(maps, paginator) },
|
||||||
context_instance=RequestContext(request))
|
context_instance=RequestContext(request))
|
||||||
|
|
||||||
|
def mapofmaps(request):
|
||||||
|
results = query_to_dicts("""
|
||||||
|
select id
|
||||||
|
, maptitle
|
||||||
|
, lon_upper_left AS lon1
|
||||||
|
, lat_upper_left AS lat1
|
||||||
|
, lon_bottom_right AS lon2
|
||||||
|
, lat_bottom_right AS lat2
|
||||||
|
from maposmatic_maprenderingjob
|
||||||
|
where status=2;
|
||||||
|
""")
|
||||||
|
|
||||||
|
return render_to_response('maposmatic/mapofmaps.html', { 'results': results }, context_instance=RequestContext(request))
|
||||||
|
|
||||||
def recreate(request):
|
def recreate(request):
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -68,7 +68,15 @@
|
||||||
|
|
||||||
<link rel="stylesheet" href="/media/bower/leaflet.locatecontrol/dist/L.Control.Locate.min.css" />
|
<link rel="stylesheet" href="/media/bower/leaflet.locatecontrol/dist/L.Control.Locate.min.css" />
|
||||||
<script src="/media/bower/leaflet.locatecontrol/dist/L.Control.Locate.min.js" charset="utf-8"></script>
|
<script src="/media/bower/leaflet.locatecontrol/dist/L.Control.Locate.min.js" charset="utf-8"></script>
|
||||||
</head>
|
|
||||||
|
<script src="/media/bower/leaflet.deflate/dist/L.Deflate.js"></script>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="/media/bower/leaflet.markercluster/dist/MarkerCluster.css" />
|
||||||
|
<link rel="stylesheet" href="/media/bower/leaflet.markercluster/dist/MarkerCluster.Default.css" />
|
||||||
|
<script src="/media/bower/leaflet.markercluster/dist/leaflet.markercluster-src.js"></script>
|
||||||
|
|
||||||
|
<script src="/media/js/leaflet.markercluster.layersupport.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
<body class="{% block body-class %}{% endblock %}">
|
<body class="{% block body-class %}{% endblock %}">
|
||||||
<div class="navbar navbar-inverse navbar-fixed-top">
|
<div class="navbar navbar-inverse navbar-fixed-top">
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
{% extends "maposmatic/base.html" %}
|
||||||
|
|
||||||
|
{% comment %}
|
||||||
|
coding: utf-8
|
||||||
|
|
||||||
|
maposmatic, the web front-end of the MapOSMatic city map generation system
|
||||||
|
Copyright (C) 2012 David Decotigny
|
||||||
|
Copyright (C) 2012 Frédéric Lehobey
|
||||||
|
Copyright (C) 2012 Pierre Mauduit
|
||||||
|
Copyright (C) 2012 David Mentré
|
||||||
|
Copyright (C) 2012 Maxime Petazzoni
|
||||||
|
Copyright (C) 2012 Thomas Petazzoni
|
||||||
|
Copyright (C) 2012 Gaël Utard
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Affero General Public License as
|
||||||
|
published by the Free Software Foundation, either version 3 of the
|
||||||
|
License, or any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU Affero General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Affero General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
{% endcomment %}
|
||||||
|
{% load i18n %}
|
||||||
|
{% load extratags %}
|
||||||
|
|
||||||
|
{% block body-class %}maps{% endblock %}
|
||||||
|
{% block menu-maps %}active{% endblock %}
|
||||||
|
|
||||||
|
{% block title %}{% trans "Map of maps" %}{% endblock %}
|
||||||
|
|
||||||
|
{% block page %}
|
||||||
|
<h1>Hallo!</h1>
|
||||||
|
<div id='foomap' style="width: 600px; height: 400px;"></div>
|
||||||
|
{% endblock %}
|
||||||
|
{% block extrajs %}
|
||||||
|
var map = create_map($('#foomap'));
|
||||||
|
|
||||||
|
map.fitWorld();
|
||||||
|
|
||||||
|
var featureGroup = L.featureGroup();
|
||||||
|
featureGroup.addTo(map);
|
||||||
|
|
||||||
|
L.Deflate({minSize: 10, featureGroup: featureGroup}).addTo(map);
|
||||||
|
|
||||||
|
{% for result in results %}
|
||||||
|
featureGroup.addLayer(L.rectangle([[{{result.lat1}},{{result.lon1}}],[{{result.lat2}},{{result.lon2}}]]).addTo(map));
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
var markerGroup = L.markerClusterGroup.layerSupport()
|
||||||
|
markerGroup.addTo(map);
|
||||||
|
markerGroup.checkIn(featureGroup);
|
||||||
|
|
||||||
|
// Dirty hack; otherwise the cluster won't appear on the map.
|
||||||
|
map.zoomIn(0);
|
||||||
|
map.zoomOut(0);
|
||||||
|
|
||||||
|
map.fitBounds(featureGroup.getBounds());
|
||||||
|
|
||||||
|
|
||||||
|
{% endblock %}
|
|
@ -58,6 +58,10 @@ urlpatterns = patterns('',
|
||||||
maposmatic.views.maps,
|
maposmatic.views.maps,
|
||||||
name='maps'),
|
name='maps'),
|
||||||
|
|
||||||
|
url(r'^mapofmaps/$',
|
||||||
|
maposmatic.views.mapofmaps,
|
||||||
|
name='mapofmaps'),
|
||||||
|
|
||||||
url(r'^about/$',
|
url(r'^about/$',
|
||||||
maposmatic.views.about,
|
maposmatic.views.about,
|
||||||
name='about'),
|
name='about'),
|
||||||
|
|
Ładowanie…
Reference in New Issue