From dd50eb5818501eb45cdde745cf239ac12b13a04e Mon Sep 17 00:00:00 2001 From: Stefan Hansson Date: Wed, 16 Dec 2020 09:20:12 +0100 Subject: Implement mode of transport --- algorithms.py | 8 ++------ server.py | 18 +++++++++++------- store.py | 1 + 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/algorithms.py b/algorithms.py index 3bd9f5e..df2f874 100644 --- a/algorithms.py +++ b/algorithms.py @@ -77,8 +77,6 @@ def get_closest_node(nodes, source_node): min_value = None for node in nodes: - print(source_node) - print(node) length = length_haversine(source_node, node) if (min_node is None or length < min_value): @@ -88,7 +86,7 @@ def get_closest_node(nodes, source_node): return min_node -def find_shortest_path(nodes, source_id, target_id, transport_mode: str): +def find_shortest_path(nodes, source_id, target_id): """ Return the shortest path using Dijkstra's algortihm. """ # queue contains multiple (walk_dist, (node_0, node_1, ... node_n))-tuples # where (node_0, node_1, ... node_n) is a walk to node_n @@ -112,9 +110,7 @@ def find_shortest_path(nodes, source_id, target_id, transport_mode: str): # consider all our neighbours end_node = nodes[walk_end] - relevant_neighbours = get_relevant_neighbours(end_node, transport_mode) - - for neighbour in relevant_neighbours: + for neighbour in end_node.neighbours: if neighbour in visited: # there exists a shorter walk to neighbour continue diff --git a/server.py b/server.py index 5992aa2..15145e5 100644 --- a/server.py +++ b/server.py @@ -52,15 +52,19 @@ def shortest_path(body): body = json.loads(body) transport_mode = body['transport_mode'] - source_id = algorithms.get_closest_node(grids[transport_mode], - store.Node(-1, body['lat1'], - body['lng1'])) - target_id = algorithms.get_closest_node(grids[transport_mode], - store.Node(-1, body['lat2'], - body['lng2'])) + relevant_grid = grids[transport_mode] + + source_id = algorithms.grid_search(relevant_grid, + store.Node(-1, body['lat1'], + body['lng1'])) + target_id = algorithms.grid_search(relevant_grid, + store.Node(-1, body['lat2'], + body['lng2'])) + + relevant_nodes = nodes[transport_mode] path = algorithms.find_shortest_path(nodes[transport_mode], source_id, target_id) - response = {"path": [(nodes[node].lat, nodes[node].lng) for node in path]} + response = {"path": [(relevant_nodes[node].lat, relevant_nodes[node].lng) for node in path]} return json.dumps(response) diff --git a/store.py b/store.py index 4821072..34c0f0b 100644 --- a/store.py +++ b/store.py @@ -56,6 +56,7 @@ def add_neighbours(nodes): node1 = road[i] node2 = road[i + 1] + # FIXME: lots of repeated code here if suitable_bike(way): bike_nodes = nodes['bike'] -- cgit v1.2.1