calculate connection distances

This commit is contained in:
Laura Klünder 2016-12-05 13:49:23 +01:00
parent 82a859e958
commit 7b792ace8b
4 changed files with 13 additions and 8 deletions

View file

@ -1,8 +1,12 @@
import numpy as np
class GraphConnection():
def __init__(self, graph, from_point, to_point):
def __init__(self, graph, from_point, to_point, distance=None):
self.graph = graph
self.from_point = from_point
self.to_point = to_point
self.distance = distance if distance is not None else np.linalg.norm(from_point.xy - to_point.xy)
if to_point in from_point.connections:
self.graph.connections.remove(from_point.connections[to_point])

View file

@ -54,7 +54,7 @@ class Graph():
rooms = tuple((room.level.level.name, room.geometry, room.mpl_paths) for room in self.rooms)
points = tuple((point.room.i, point.x, point.y) for point in self.points)
connections = tuple((conn.from_point.i, conn.to_point.i) for conn in self.connections)
connections = tuple((conn.from_point.i, conn.to_point.i, conn.distance) for conn in self.connections)
return (rooms, points, connections)
@ -79,8 +79,8 @@ class Graph():
room.level.rooms.append(room)
room.level.points.extend(room.points)
for from_point, to_point in connections:
graph.add_connection(graph.points[from_point], graph.points[to_point])
for from_point, to_point, distance in connections:
graph.add_connection(graph.points[from_point], graph.points[to_point], distance)
return graph
@ -111,5 +111,5 @@ class Graph():
for from_point, to_point in permutations(points, 2):
self.add_connection(from_point, to_point)
def add_connection(self, from_point, to_point):
self.connections.append(GraphConnection(self, from_point, to_point))
def add_connection(self, from_point, to_point, distance=None):
self.connections.append(GraphConnection(self, from_point, to_point, distance))

View file

@ -1,3 +1,4 @@
import numpy as np
from django.conf import settings
from django.utils.functional import cached_property
@ -7,7 +8,7 @@ class GraphPoint():
self.room = room
self.x = x
self.y = y
self.xy = (x, y)
self.xy = np.array((x, y))
self.connections = {}
self.connections_in = {}
self.in_room_transfer_distances = None

View file

@ -30,7 +30,7 @@ class Router():
if not global_routing:
self.transfer_points.add(point)
continue
matrix[pk, self.points_pk[to_point]] = 1
matrix[pk, self.points_pk[to_point]] = connection.distance
if global_routing:
for to_point, distance in point.in_room_transfer_distances.items():
matrix[pk, self.points_pk[to_point]] = distance