2017-05-29 10:18:59 +02:00
|
|
|
# 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
|
|
|
|
2016-12-17 19:25:27 +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
|