add option to include/exclude areas to UI

This commit is contained in:
Laura Klünder 2016-12-19 22:52:09 +01:00
parent 1c10ce443a
commit 91b9bc92b8
7 changed files with 70 additions and 23 deletions

View file

@ -136,8 +136,8 @@ class GraphLevel():
self._built_arealocations[':public'] = public_area
self._built_excludables[':public'] = public_area
self._built_arealocations[':private'] = private_area
self._built_excludables[':private'] = private_area
self._built_arealocations[':nonpublic'] = private_area
self._built_excludables[':nonpublic'] = private_area
# add points inside arealocations to be able to route to its borders
for excludable in self._built_arealocations.values():

View file

@ -263,29 +263,26 @@ class GraphRoom():
return roomrouter
def _build_router(self, ctypes, public, nonpublic, avoid, include):
distances = np.amin(self.distances[ctypes, :, :], axis=0)
orig_distances = None
if include:
orig_distances = distances.copy()
distances = np.amin(self.distances[ctypes, :, :], axis=0).astype(np.float32)
factors = np.ones_like(distances, dtype=np.float16)
if ':public' in self.excludables and not public:
points, = self.excludable_points[self.excludables.index(':public')].nonzero()
distances[points[:, None], points] *= 1000
factors[points[:, None], points] = 1000
if ':private' in self.excludables and not nonpublic:
points, = self.excludable_points[self.excludables.index(':private')].nonzero()
print(points)
distances[points[:, None], points] = np.inf
if ':nonpublic' in self.excludables and not nonpublic:
points, = self.excludable_points[self.excludables.index(':nonpublic')].nonzero()
factors[points[:, None], points] = np.inf
if avoid:
points, = self.excludable_points[avoid, :].any(axis=0).nonzero()
distances[points[:, None], points] *= 1000
points, = self.excludable_points[avoid].any(axis=0).nonzero()
factors[points[:, None], points] = 1000
if include:
points, = self.excludable_points[include, :].any(axis=0).nonzero()
distances[points[:, None], points] = orig_distances[points[:, None], points]
points, = self.excludable_points[include].any(axis=0).nonzero()
factors[points[:, None], points] = 1
g_sparse = csgraph_from_dense(distances, null_value=np.inf)
g_sparse = csgraph_from_dense(distances*factors, null_value=np.inf)
shortest_paths, predecessors = shortest_path(g_sparse, return_predecessors=True)
return RoomRouter(shortest_paths, predecessors)

View file

@ -53,7 +53,6 @@ class Route:
@staticmethod
def describe_point(point):
print(point.arealocations)
locations = sorted(AreaLocation.objects.filter(location_type__in=('room', 'level', 'area'),
name__in=point.arealocations),
key=AreaLocation.get_sort_key, reverse=True)