team-3/src/c3nav/routing/route.py

51 lines
1.5 KiB
Python
Raw Normal View History

# flake8: noqa
2016-12-19 15:11:11 +01:00
import copy
2017-11-27 15:01:58 +01:00
from collections import OrderedDict, deque
2016-12-19 15:11:11 +01:00
2016-12-17 13:24:42 +01:00
import numpy as np
2016-12-19 15:11:11 +01:00
from django.utils.translation import ugettext_lazy as _
2016-12-17 13:24:42 +01:00
2016-12-17 14:46:15 +01:00
class Route:
2017-11-27 15:01:58 +01:00
def __init__(self, router, origin, destination, distance, path_nodes):
self.router = router
self.origin = origin
self.destination = destination
self.distance = distance
self.path_nodes = path_nodes
2016-12-19 15:11:11 +01:00
2016-12-29 20:06:57 +01:00
def serialize(self):
2017-11-27 15:01:58 +01:00
items = deque()
last_node = None
last_item = None
for i, node in enumerate(self.path_nodes):
item = RouteItem(self, self.router.nodes[node],
self.router.edges[last_node, node] if last_node else None,
last_item)
items.append(item)
last_item = item
last_node = node
2016-12-29 20:06:57 +01:00
return OrderedDict((
2017-11-27 15:01:58 +01:00
('items', tuple(item.serialize() for item in items)),
2016-12-29 20:06:57 +01:00
))
2016-12-19 15:11:11 +01:00
2017-11-27 15:01:58 +01:00
class RouteItem:
def __init__(self, route, node, edge, last_item):
self.route = route
self.node = node
self.edge = edge
self.last_item = last_item
2016-12-17 14:46:15 +01:00
2016-12-29 20:06:57 +01:00
def serialize(self):
return OrderedDict((
2017-11-27 15:01:58 +01:00
('id', self.node.pk),
('coords', (self.node.x, self.node.y, self.node.altitude)),
('waytype', (self.route.router.waytypes[self.edge.waytype].serialize(detailed=False)
if self.edge and self.edge.waytype else None)),
2016-12-29 20:06:57 +01:00
))
2016-12-17 13:24:42 +01:00
class NoRoute:
distance = np.inf