diff options
author | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-11-13 22:01:39 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2012-11-13 22:01:39 +0100 |
commit | 40d7d3b373a392b68b43524a4049216b1223c81c (patch) | |
tree | c94245ae5f85c82018463628918ebfa3ce19fbb8 | |
parent | 1def4a4322e699cedd602143586eefa42edfabf8 (diff) | |
download | Chimère-40d7d3b373a392b68b43524a4049216b1223c81c.tar.bz2 Chimère-40d7d3b373a392b68b43524a4049216b1223c81c.zip |
Fail properly when the routing engine don't find a route - JS: manage routing messages
-rw-r--r-- | chimere/route.py | 6 | ||||
-rw-r--r-- | chimere/static/chimere/js/jquery.chimere.js | 15 | ||||
-rw-r--r-- | chimere/static/chimere/js/nominatim-widget.js | 3 | ||||
-rw-r--r-- | chimere/templates/chimere/blocks/routing.html | 5 | ||||
-rw-r--r-- | chimere/templatetags/chimere_tags.py | 9 | ||||
-rw-r--r-- | example_project/settings.py | 4 |
6 files changed, 31 insertions, 11 deletions
diff --git a/chimere/route.py b/chimere/route.py index 040a7be..eaa762a 100644 --- a/chimere/route.py +++ b/chimere/route.py @@ -26,6 +26,7 @@ import os, re, shutil, tempfile from BeautifulSoup import BeautifulSoup from subprocess import Popen, PIPE from django.contrib.gis.gdal import DataSource +from django.contrib.gis.gdal.error import OGRException from django.conf import settings @@ -71,7 +72,10 @@ class RoutinoRouter(Router): tmp_dir = tempfile.mkdtemp(prefix='chimere_') + os.sep p = Popen(args, stdout=PIPE, cwd=tmp_dir) p.communicate() - ds = DataSource(tmp_dir + 'shortest-track.gpx') + try: + ds = DataSource(tmp_dir + 'shortest-track.gpx') + except OGRException: + return [], None, None if not ds: return [], None, None layer = ds[0] diff --git a/chimere/static/chimere/js/jquery.chimere.js b/chimere/static/chimere/js/jquery.chimere.js index 520127b..57943c7 100644 --- a/chimere/static/chimere/js/jquery.chimere.js +++ b/chimere/static/chimere/js/jquery.chimere.js @@ -1128,6 +1128,10 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, { dataType: "json", success: function (data) { settings.layerRoute.removeAllFeatures(); + if (!data.features.length){ + methods.displayMessage(routing_fail_message); + return; + } for (var i = 0; i < data.features.length; i++) { var feat = data.features[i]; if(feat.type == 'LineString'){ @@ -1144,11 +1148,11 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, { var marker = new OpenLayers.Marker(lonlat, new OpenLayers.Icon( feat.properties.icon_path, - new OpenLayers.Size(icon_width, - icon_height), - new OpenLayers.Pixel( - -(icon_width/2), - -icon_height)) + new OpenLayers.Size(icon_width, + icon_height), + new OpenLayers.Pixel( + -(icon_width/2), + -icon_height)) ); settings.layerRouteMarker.addMarker(marker); } @@ -1177,6 +1181,7 @@ OpenLayers.Layer.MapQuestOSM = OpenLayers.Class(OpenLayers.Layer.XYZ, { console.log(errorThrown); console.log(textStatus); settings.layerRoute.removeAllFeatures(); + methods.displayMessage(routing_fail_message); } }); diff --git a/chimere/static/chimere/js/nominatim-widget.js b/chimere/static/chimere/js/nominatim-widget.js index 80aa03a..99f7034 100644 --- a/chimere/static/chimere/js/nominatim-widget.js +++ b/chimere/static/chimere/js/nominatim-widget.js @@ -27,7 +27,8 @@ var nominatim_widget_options = { $('#'+$(this).attr('id')+'_lat').val(ui.item.lat); $('#'+$(this).attr('id')+'_lon').val(ui.item.lon); $('#'+$(this).attr('id')+'_label').html(ui.item.label); - $('#chimere_'+$(this).attr('id').substring(10)+'_label').html(ui.item.label); + $('#chimere_'+$(this).attr('id').substring(10)+'_label').html( + ui.item.label); $('#'+$(this).attr('id')).val(default_nominatim_lbl); jQuery("#map").chimere("routingInputChange", $(this).attr('id')); return false; diff --git a/chimere/templates/chimere/blocks/routing.html b/chimere/templates/chimere/blocks/routing.html index 15aee04..db97191 100644 --- a/chimere/templates/chimere/blocks/routing.html +++ b/chimere/templates/chimere/blocks/routing.html @@ -40,6 +40,9 @@ </div> </div> <script language='javascript' type='text/javascript'> -step_label = "{% trans "Step" %}"; +<!-- +var step_label = "{% trans "Step" %}"; +var routing_fail_message = "{{routing_fail_message|safe}}"; +// --> </script> {% endif%} diff --git a/chimere/templatetags/chimere_tags.py b/chimere/templatetags/chimere_tags.py index c2d66b4..db62c64 100644 --- a/chimere/templatetags/chimere_tags.py +++ b/chimere/templatetags/chimere_tags.py @@ -163,9 +163,12 @@ def map_menu(context): @register.inclusion_tag('chimere/blocks/routing.html', takes_context=True) def routing(context): - context_data = {'routing':settings.CHIMERE_ENABLE_ROUTING, - 'itinerary_form':context['itinerary_form'], - 'routing_transport':context['routing_transport']} + context_data = { + 'routing':settings.CHIMERE_ENABLE_ROUTING, + 'itinerary_form':context['itinerary_form'], + 'routing_fail_message':_(settings.CHIMERE_ROUTING_FAIL_MESSAGE + ).replace('\n', '\\n'), + 'routing_transport':context['routing_transport']} context_data['STATIC_URL'] = settings.STATIC_URL return context_data diff --git a/example_project/settings.py b/example_project/settings.py index 45c7af2..00e2b8c 100644 --- a/example_project/settings.py +++ b/example_project/settings.py @@ -95,6 +95,10 @@ CHIMERE_ROUTING_ENGINE = { 'DB_PATH': '/var/local/routino/', } +CHIMERE_ROUTING_FAIL_MESSAGE = _(u"Routing engine has failed to find an " + u"appropriate route. Start point or end point may be too far from " + u"an existing path.") + NOMINATIM_URL = 'http://nominatim.openstreetmap.org/search' # thumbnail |