From 8066268b131bbf7ac829e83ca7849e9752dcc6e6 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Wed, 15 Aug 2012 20:10:57 +0200 Subject: Improve routing: manage steps * Manage steps in routing core * Add extra parameters for steps in urls.py * Modify the view to parse steps and send them to the routing core * Manage steps in JS (add many step flags and send a correct request to the view) * Manage a clear itinerary action in JS * Add a new flag image for steps * CSS improvement --- chimere/route.py | 12 +++-- chimere/static/chimere/css/styles.css | 21 +++++++++ chimere/static/chimere/img/flag-step.png | Bin 0 -> 1256 bytes chimere/static/chimere/img/images_licences | 7 +-- chimere/static/chimere/js/jquery.chimere.js | 62 +++++++++++++++++++------ chimere/templates/chimere/blocks/map_menu.html | 2 + chimere/urls.py | 1 + chimere/views.py | 10 ++-- 8 files changed, 93 insertions(+), 22 deletions(-) create mode 100644 chimere/static/chimere/img/flag-step.png diff --git a/chimere/route.py b/chimere/route.py index 207232b..bc08a39 100644 --- a/chimere/route.py +++ b/chimere/route.py @@ -39,7 +39,7 @@ class Router: class RoutinoRouter(Router): re_desc = [re.compile(""), re.compile(""), re.compile("")] - def route(self, lon1, lat1, lon2, lat2, session_id='', transport='foot'): + def route(self, lon1, lat1, lon2, lat2, steps=[], transport='foot'): ''' Get a list of geojson polylines and route description ''' @@ -53,9 +53,15 @@ class RoutinoRouter(Router): "--output-gpx-track", "--lat1=%0.15f" % lat1, "--lon1=%0.15f" % lon1, - "--lat2=%0.15f" % lat2, - "--lon2=%0.15f" % lon2 ] + lonlat_index = 1 + for lon, lat in steps: + lonlat_index += 1 + args += ["--lat%d=%0.15f" % (lonlat_index, lat), + "--lon%d=%0.15f" % (lonlat_index, lon)] + lonlat_index += 1 + args += ["--lat%d=%0.15f" % (lonlat_index, lat2), + "--lon%d=%0.15f" % (lonlat_index, lon2)] tmp_dir = tempfile.mkdtemp(prefix='chimere_') + os.sep p = Popen(args, stdout=PIPE, cwd=tmp_dir) p.communicate() diff --git a/chimere/static/chimere/css/styles.css b/chimere/static/chimere/css/styles.css index 9621344..a118d54 100644 --- a/chimere/static/chimere/css/styles.css +++ b/chimere/static/chimere/css/styles.css @@ -412,11 +412,24 @@ ul#share li{ padding-top:0; } +#chimere_itinerary table +{ + border-collapse:collapse; +} + +#chimere_itinerary td{ + border:8px solid #fff; +} + #chimere_itinerary td.l{ padding:5px; width:60px; } +#chimere_itinerary td.r{ + font-size:0.8em; +} + #chimere_itinerary span.j{ font-style:italic; } @@ -439,6 +452,14 @@ ul#share li{ border-radius: 0 8px 8px 8px; } +#map_menu_clear{ + display:none; +} + +#map_menu_zoomin{ + border-top:1px solid #999; +} + #chimere_map_menu ul, #chimere_map_menu li{ padding:0.2em; margin:0; diff --git a/chimere/static/chimere/img/flag-step.png b/chimere/static/chimere/img/flag-step.png new file mode 100644 index 0000000..5556c94 Binary files /dev/null and b/chimere/static/chimere/img/flag-step.png differ diff --git a/chimere/static/chimere/img/images_licences b/chimere/static/chimere/img/images_licences index 000fdf0..03d63dc 100644 --- a/chimere/static/chimere/img/images_licences +++ b/chimere/static/chimere/img/images_licences @@ -31,9 +31,10 @@ Author: Sbrools Licence: Public domain Url: https://commons.wikimedia.org/wiki/File:8thNote.svg -* Flags image credit (flag-start.png, flag-finish.png) +* Flags image credit (flag-start.png, flag-step.png, flag-finish.png) Author: FatCow Web Hosting Licence: Creative Commons Attribution 3.0 United States license -Url: https://upload.wikimedia.org/wikipedia/commons/6/64/Farm-Fresh_flag_finish.png - https://upload.wikimedia.org/wikipedia/commons/c/cb/Farm-Fresh_flag_1.png +Url: https://upload.wikimedia.org/wikipedia/commons/c/cb/Farm-Fresh_flag_1.png + https://upload.wikimedia.org/wikipedia/commons/8/81/Farm-Fresh_flag_blue.png + https://upload.wikimedia.org/wikipedia/commons/6/64/Farm-Fresh_flag_finish.png diff --git a/chimere/static/chimere/js/jquery.chimere.js b/chimere/static/chimere/js/jquery.chimere.js index fcf34f5..664ef15 100644 --- a/chimere/static/chimere/js/jquery.chimere.js +++ b/chimere/static/chimere/js/jquery.chimere.js @@ -216,17 +216,24 @@ See the file COPYING for details. $('#map_menu_center').bind("click", methods.mapCenter); if (settings.routing){ settings.routing_start = null; + settings.routing_steps = new Array(); settings.routing_end = null; settings.icon_start = new OpenLayers.Icon( STATIC_URL + "chimere/img/flag-start.png", new OpenLayers.Size(32, 32), new OpenLayers.Pixel(0, -32)); + settings.icon_step = new OpenLayers.Icon( + STATIC_URL + "chimere/img/flag-step.png", + new OpenLayers.Size(32, 32), + new OpenLayers.Pixel(0, -32)); settings.icon_end = new OpenLayers.Icon( STATIC_URL + "chimere/img/flag-finish.png", new OpenLayers.Size(32, 32), new OpenLayers.Pixel(0, -32)); $('#map_menu_from').bind("click", methods.routingFrom); + $('#map_menu_step').bind("click", methods.routingAddStep); $('#map_menu_to').bind("click", methods.routingTo); + $('#map_menu_clear').bind("click", methods.routingClear); settings.layerRoute = new OpenLayers.Layer.Vector("Route Layer"); settings.map.addLayer(settings.layerRoute); settings.layerRoute.setOpacity(0.8); @@ -501,7 +508,7 @@ See the file COPYING for details. // set the start point for routing routingFrom: function(){ $('#chimere_map_menu').hide(); - //$('#chimere_itinerary_panel').hide(); + $('#map_menu_clear').show(); $('#chimere_itinerary_panel').dialog('close'); settings.routing_start = new OpenLayers.Marker( settings.current_position.clone(), @@ -510,10 +517,23 @@ See the file COPYING for details. if (settings.routing_end) methods.route(); }, + // add a step point for routing + routingAddStep: function(){ + $('#chimere_map_menu').hide(); + $('#map_menu_clear').show(); + $('#chimere_itinerary_panel').dialog('close'); + settings.routing_steps.push(new OpenLayers.Marker( + settings.current_position.clone(), + settings.icon_step.clone())); + settings.layerRouteMarker.addMarker( + settings.routing_steps[settings.routing_steps.length-1]); + if (settings.routing_end && settings.routing_start) methods.route(); + }, + // set the finish point for routing routingTo: function(){ $('#chimere_map_menu').hide(); - //$('#chimere_itinerary_panel').hide(); + $('#map_menu_clear').show(); $('#chimere_itinerary_panel').dialog('close'); settings.routing_end = new OpenLayers.Marker( settings.current_position.clone(), @@ -522,22 +542,39 @@ See the file COPYING for details. if (settings.routing_start) methods.route(); }, + // clear the current itinerary + routingClear: function(){ + $('#chimere_map_menu').hide(); + $('#map_menu_clear').hide(); + $('#chimere_itinerary_panel').dialog('close'); + settings.layerRoute.removeAllFeatures(); + settings.layerRouteMarker.clearMarkers(); + settings.routing_start = null; + settings.routing_end = null; + settings.routing_steps = new Array(); + }, + // display a route route: function(){ if (!settings.routing_start || !settings.routing_end){ return; } - var start = settings.routing_start.lonlat.clone().transform( - settings.map.getProjectionObject(), - EPSG_DISPLAY_PROJECTION); - var end = settings.routing_end.lonlat.clone().transform( + var steps = [settings.routing_start.lonlat.clone()] + for (var i = 0; i < settings.routing_steps.length; i++) { + steps.push(settings.routing_steps[i].lonlat.clone()); + } + steps.push(settings.routing_end.lonlat.clone()); + // create the appropriate URL + var uri = extra_url + "route/" + for (var i = 0; i < steps.length; i++) { + var step = steps[i].transform( settings.map.getProjectionObject(), EPSG_DISPLAY_PROJECTION); - var uri = extra_url + "route/" - + start.lon + '_' - + start.lat + '_' - + end.lon + '_' - + end.lat; + if (i > 0){ + uri += '_'; + } + uri += step.lon + '_' + step.lat; + } $.ajax({url: uri, dataType: "json", success: function (data) { @@ -547,8 +584,7 @@ See the file COPYING for details. } $('#chimere_itinerary').html( data.properties.description); - //$('#chimere_itinerary_panel').show(); - $('#chimere_itinerary_panel').dialog('open'); + $('#chimere_itinerary_panel').dialog('open'); }, error: function (data) { settings.layerRoute.removeAllFeatures(); diff --git a/chimere/templates/chimere/blocks/map_menu.html b/chimere/templates/chimere/blocks/map_menu.html index 52a4107..e541c1e 100644 --- a/chimere/templates/chimere/blocks/map_menu.html +++ b/chimere/templates/chimere/blocks/map_menu.html @@ -3,7 +3,9 @@