option to output route as JSON
This commit is contained in:
parent
7cf59dab23
commit
1ab447bbf0
2 changed files with 32 additions and 0 deletions
|
@ -1,3 +1,5 @@
|
||||||
|
from collections import OrderedDict
|
||||||
|
|
||||||
import copy
|
import copy
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
@ -18,6 +20,12 @@ class Route:
|
||||||
|
|
||||||
self.routeparts = None
|
self.routeparts = None
|
||||||
|
|
||||||
|
def serialize(self):
|
||||||
|
return OrderedDict((
|
||||||
|
('distance', float(self.distance)),
|
||||||
|
('routeparts', [routepart.serialize() for routepart in self.routeparts]),
|
||||||
|
))
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return ('<Route (\n %s\n) distance=%f>' %
|
return ('<Route (\n %s\n) distance=%f>' %
|
||||||
('\n '.join(repr(connection) for connection in self.connections), self.distance))
|
('\n '.join(repr(connection) for connection in self.connections), self.distance))
|
||||||
|
@ -227,6 +235,12 @@ class RoutePart:
|
||||||
self.level = graphlevel.level
|
self.level = graphlevel.level
|
||||||
self.lines = lines
|
self.lines = lines
|
||||||
|
|
||||||
|
def serialize(self):
|
||||||
|
return OrderedDict((
|
||||||
|
('level', self.level.name),
|
||||||
|
('lines', [line.serialize() for line in self.lines]),
|
||||||
|
))
|
||||||
|
|
||||||
def render_svg_coordinates(self):
|
def render_svg_coordinates(self):
|
||||||
svg_width, svg_height = get_dimensions()
|
svg_width, svg_height = get_dimensions()
|
||||||
|
|
||||||
|
@ -283,6 +297,17 @@ class RouteLine:
|
||||||
self.title = None
|
self.title = None
|
||||||
self.description = None
|
self.description = None
|
||||||
|
|
||||||
|
def serialize(self):
|
||||||
|
return OrderedDict((
|
||||||
|
('from_point', tuple(self.from_point.xy)),
|
||||||
|
('to_point', tuple(self.to_point.xy)),
|
||||||
|
('distance', float(self.distance)),
|
||||||
|
('icon', self.icon),
|
||||||
|
('ignore', self.ignore),
|
||||||
|
('title', self.title),
|
||||||
|
('description', self.description),
|
||||||
|
))
|
||||||
|
|
||||||
|
|
||||||
class NoRoute:
|
class NoRoute:
|
||||||
distance = np.inf
|
distance = np.inf
|
||||||
|
|
|
@ -3,6 +3,7 @@ from datetime import timedelta
|
||||||
import qrcode
|
import qrcode
|
||||||
from django.core.files import File
|
from django.core.files import File
|
||||||
from django.http import Http404, HttpResponse, HttpResponseNotModified
|
from django.http import Http404, HttpResponse, HttpResponseNotModified
|
||||||
|
from django.http import JsonResponse
|
||||||
from django.shortcuts import get_object_or_404, redirect, render
|
from django.shortcuts import get_object_or_404, redirect, render
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
@ -216,6 +217,12 @@ def main(request, location=None, origin=None, destination=None):
|
||||||
route.describe(allowed_ctypes)
|
route.describe(allowed_ctypes)
|
||||||
ctx.update({'route': route})
|
ctx.update({'route': route})
|
||||||
|
|
||||||
|
if request.GET.get('format') == 'json':
|
||||||
|
if 'error' in ctx:
|
||||||
|
return JsonResponse({'error': ctx['error']})
|
||||||
|
if 'route' in ctx:
|
||||||
|
return JsonResponse({'route': ctx['route'].serialize()})
|
||||||
|
|
||||||
response = render(request, 'site/main.html', ctx)
|
response = render(request, 'site/main.html', ctx)
|
||||||
|
|
||||||
if request.method == 'POST' and save_settings:
|
if request.method == 'POST' and save_settings:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue