diff options
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 |
commit | 656f0539c9952322ff14da5c1297b0e9684a7a22 (patch) | |
tree | 220df9a62f863956610ccf51c3a0614fc970f65b | |
parent | edb53be0c3d28ca7af064b7e86d657ca9084854c (diff) | |
download | Chimère-656f0539c9952322ff14da5c1297b0e9684a7a22.tar.bz2 Chimère-656f0539c9952322ff14da5c1297b0e9684a7a22.zip |
Routing: manage speed in (forms, views, helpers)
-rw-r--r-- | chimere/forms.py | 4 | ||||
-rw-r--r-- | chimere/route.py | 8 | ||||
-rw-r--r-- | chimere/static/chimere/js/jquery.chimere.js | 4 | ||||
-rw-r--r-- | chimere/templates/chimere/blocks/routing.html | 22 | ||||
-rw-r--r-- | chimere/urls.py | 2 | ||||
-rw-r--r-- | chimere/views.py | 4 |
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() |