summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2012-08-31 02:38:46 +0200
committerÉtienne Loks <etienne.loks@peacefrogs.net>2012-08-31 02:38:46 +0200
commit656f0539c9952322ff14da5c1297b0e9684a7a22 (patch)
tree220df9a62f863956610ccf51c3a0614fc970f65b
parentedb53be0c3d28ca7af064b7e86d657ca9084854c (diff)
downloadChimère-656f0539c9952322ff14da5c1297b0e9684a7a22.tar.bz2
Chimère-656f0539c9952322ff14da5c1297b0e9684a7a22.zip
Routing: manage speed in (forms, views, helpers)
-rw-r--r--chimere/forms.py4
-rw-r--r--chimere/route.py8
-rw-r--r--chimere/static/chimere/js/jquery.chimere.js4
-rw-r--r--chimere/templates/chimere/blocks/routing.html22
-rw-r--r--chimere/urls.py2
-rw-r--r--chimere/views.py4
6 files changed, 39 insertions, 5 deletions
diff --git a/chimere/forms.py b/chimere/forms.py
index 5403e21..cb21f65 100644
--- a/chimere/forms.py
+++ b/chimere/forms.py
@@ -511,12 +511,14 @@ class RoutingForm(forms.Form):
initial=settings.CHIMERE_ROUTING_TRANSPORT[0][0])
start = forms.CharField(label=_(u"Start"), widget=NominatimWidget)
end = forms.CharField(label=_(u"Finish"), widget=NominatimWidget)
- speed = forms.ChoiceField(label=_(u"Speed"), choices=[], required=False)
+ speed = forms.ChoiceField(label=_(u"Speed"), choices=[],
+ required=False)
def __init__(self, *args, **kwargs):
super(RoutingForm, self).__init__(*args, **kwargs)
if not settings.CHIMERE_ROUTING_SPEEDS:
self.fields.pop('speed')
+ self.fields['speed'].widget.choices = [('', '--')]
for transport in settings.CHIMERE_ROUTING_SPEEDS:
for speed, lbl in settings.CHIMERE_ROUTING_SPEEDS[transport]:
self.fields['speed'].widget.choices.append(
diff --git a/chimere/route.py b/chimere/route.py
index 9c8b59c..040a7be 100644
--- a/chimere/route.py
+++ b/chimere/route.py
@@ -39,7 +39,8 @@ class Router:
class RoutinoRouter(Router):
re_desc = [re.compile("<tr class='n'>"), re.compile("<tr class='s'>"),
re.compile("<tr class='t'>")]
- def route(self, lon1, lat1, lon2, lat2, steps=[], transport='foot'):
+ def route(self, lon1, lat1, lon2, lat2, steps=[], transport='foot',
+ speed=None):
'''
Get a list of geojson polylines and route description
'''
@@ -54,6 +55,11 @@ class RoutinoRouter(Router):
"--lat1=%0.15f" % lat1,
"--lon1=%0.15f" % lon1,
]
+ if speed:
+ args += ["--speed-%s=%s" % (highway, unicode(speed))
+ for highway in ('motorway', 'trunk', 'primary', 'secondary',
+ 'tertiary', 'unclassified', 'residential', 'service',
+ 'track','cycleway','path','steps')]
lonlat_index = 1
for lon, lat in steps:
lonlat_index += 1
diff --git a/chimere/static/chimere/js/jquery.chimere.js b/chimere/static/chimere/js/jquery.chimere.js
index 0bda01e..a80a9ea 100644
--- a/chimere/static/chimere/js/jquery.chimere.js
+++ b/chimere/static/chimere/js/jquery.chimere.js
@@ -710,6 +710,10 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, {
if(transport){
uri += transport + "/"
}
+ var speed = $('#id_speed option:selected').val();
+ if(speed){
+ uri += speed.split('_')[1] + "/"
+ }
for (var i = 0; i < steps.length; i++) {
var step = steps[i].transform(
settings.map.getProjectionObject(),
diff --git a/chimere/templates/chimere/blocks/routing.html b/chimere/templates/chimere/blocks/routing.html
index 7272201..3c5e88e 100644
--- a/chimere/templates/chimere/blocks/routing.html
+++ b/chimere/templates/chimere/blocks/routing.html
@@ -60,6 +60,28 @@ $(document).ready(function() {
$('#search_routing').click(function(){
$('#main-map').chimere('route');
});
+
+ function filter_speed(transport){
+ $("#id_speed_div").show();
+ $("#id_speed option").each(function(){
+ if($(this).val().match(transport)){
+ $(this).show();
+ } else {
+ $(this).hide();
+ }
+ });
+ if(!$("#id_speed option:visible").length){
+ $("#id_speed_div").hide();
+ $('#id_speed').val('');
+ } else {
+ $('#id_speed').val('');
+ $('#id_speed option:selected').show();
+ }
+ }
+ $('#id_transport label').click(function(){
+ checked_item = $("#"+$(this).attr('for'));
+ filter_speed(checked_item.val());
+ });
});
</script>
{% endif%}
diff --git a/chimere/urls.py b/chimere/urls.py
index 81263a0..a23af1b 100644
--- a/chimere/urls.py
+++ b/chimere/urls.py
@@ -54,7 +54,7 @@ if settings.CHIMERE_FEEDS:
if settings.CHIMERE_ENABLE_ROUTING:
urlpatterns += patterns('chimere.views',
url(r'^(?P<area_name>[a-zA-Z0-9_-]*/)?route/'\
- r'(?P<transport>(%s))/'
+ r'(?P<transport>(%s))/((?P<speed>[0-9][0-9]*)/)?'
r'(?P<lon1>[-]?[0-9]+[.]?[0-9]*)_(?P<lat1>[-]?[0-9]+[.]?[0-9]*)_'\
r'(?P<lonlat_steps>([-]?[0-9]+[.]?[0-9]*_[-]?[0-9]+[.]?[0-9]*_)*)'\
r'(?P<lon2>[-]?[0-9]+[.]?[0-9]*)_(?P<lat2>[-]?[0-9]+[.]?[0-9]*)$' %
diff --git a/chimere/views.py b/chimere/views.py
index adbcf7d..e8fb622 100644
--- a/chimere/views.py
+++ b/chimere/views.py
@@ -647,7 +647,7 @@ def redirectFromTinyURN(request, area_name='', tiny_urn=''):
return HttpResponseRedirect(response_dct['extra_url'] + parameters)
def route(request, area_name, lon1, lat1, lonlat_steps, lon2, lat2,
- transport='foot'):
+ transport='foot', speed=''):
'''
Get the JSON for a route
'''
@@ -660,7 +660,7 @@ def route(request, area_name, lon1, lat1, lonlat_steps, lon2, lat2,
except ValueError:
return HttpResponse('no results')
jsons, desc, total = router.route(lon1, lat1, lon2, lat2, steps=steps,
- transport=transport)
+ transport=transport, speed=speed)
if not jsons:
return HttpResponse('no results')
jsonencoder = simplejson.JSONEncoder()