diff options
Diffstat (limited to 'chimere/views.py')
| -rw-r--r-- | chimere/views.py | 29 | 
1 files changed, 28 insertions, 1 deletions
diff --git a/chimere/views.py b/chimere/views.py index 35c9179..59f6a8c 100644 --- a/chimere/views.py +++ b/chimere/views.py @@ -26,6 +26,7 @@ Views of the project  import datetime  from itertools import groupby +import simplejson  from django.conf import settings  from django.core import serializers @@ -47,7 +48,9 @@ from chimere.widgets import getMapJS, PointChooserWidget, \                              RouteChooserWidget, AreaWidget  from chimere.forms import MarkerForm, RouteForm, ContactForm, FileForm, \       FullFileForm, MultimediaFileFormSet, PictureFileFormSet, notifySubmission,\ -     notifyStaff, AreaForm +     notifyStaff, AreaForm, RoutingForm + +from chimere.route import router  def get_base_uri(request):      base_uri = 'http://' @@ -120,6 +123,8 @@ def index(request, area_name=None, default_area=None, simple=False):      if request.GET and 'lat' in request.GET \        and 'lon' in request.GET:          zoomout = None +    if settings.CHIMERE_ENABLE_ROUTING: +        response_dct['itinerary_form'] = RoutingForm()      response_dct.update({           'actions':actions, 'action_selected':('view',),           'error_message':'', @@ -636,6 +641,28 @@ def redirectFromTinyURN(request, area_name='', tiny_urn=''):          return redir      return HttpResponseRedirect(response_dct['extra_url'] + parameters) +def route(request, area_name, lon1, lat1, lonlat_steps, lon2, lat2, +          transport='foot'): +    ''' +    Get the JSON for a route +    ''' +    try: +        lon1, lat1 = float(lon1), float(lat1) +        lon2, lat2 = float(lon2), float(lat2) +        steps = [float(lonlat) for lonlat in lonlat_steps.split('_') if lonlat] +        # regroup by 2 +        steps = [(steps[i*2], steps[i*2+1]) for i in range(len(steps)/2)] +    except ValueError: +        return HttpResponse('no results') +    jsons, desc = router.route(lon1, lat1, lon2, lat2, steps=steps, +                               transport=transport) +    if not jsons: +        return HttpResponse('no results') +    jsonencoder = simplejson.JSONEncoder() +    data = '{"properties":{"description":%s}, "type": "FeatureCollection",'\ +           '"features":[%s]}' % (jsonencoder.encode(desc), ",".join(jsons)) +    return HttpResponse(data) +  def rss(request, area_name=''):      '''      Redirect to RSS subscription page  | 
