fix incorrect exclusion

This commit is contained in:
Laura Klünder 2016-12-23 20:50:21 +01:00
parent 8581418712
commit 256b525a6c
2 changed files with 12 additions and 4 deletions

View file

@ -3,6 +3,7 @@ import os
from django.conf import settings from django.conf import settings
from django.db.models import Max, Min from django.db.models import Max, Min
from shapely.geometry import box from shapely.geometry import box
from shapely.ops import cascaded_union
from c3nav.mapdata.models import Package from c3nav.mapdata.models import Package
from c3nav.mapdata.utils.cache import cache_result from c3nav.mapdata.utils.cache import cache_result
@ -29,8 +30,12 @@ def get_render_path(filetype, level, mode, public):
def get_public_private_area(level): def get_public_private_area(level):
from c3nav.mapdata.models import AreaLocation
width, height = get_dimensions() width, height = get_dimensions()
everything = box(0, 0, width, height) everything = box(0, 0, width, height)
public_area = level.public_geometries.areas_and_doors needs_permission = [location.geometry
for location in AreaLocation.objects.filter(routing_inclusion='needs_permission')]
public_area = level.public_geometries.areas_and_doors.difference(cascaded_union(needs_permission))
private_area = everything.difference(public_area) private_area = everything.difference(public_area)
return public_area, private_area return public_area, private_area

View file

@ -276,15 +276,18 @@ class GraphRoom():
if ':nonpublic' in self.excludables and ':nonpublic' not in include: if ':nonpublic' in self.excludables and ':nonpublic' not in include:
points, = self.excludable_points[self.excludables.index(':nonpublic')].nonzero() points, = self.excludable_points[self.excludables.index(':nonpublic')].nonzero()
factors[points[:, None], points] = 1000 if allow_nonpublic else np.inf factors[points[:, None], :] = 1000 if allow_nonpublic else np.inf
factors[:, points] = 1000 if allow_nonpublic else np.inf
if avoid: if avoid:
points, = self.excludable_points[avoid, :].any(axis=0).nonzero() points, = self.excludable_points[avoid, :].any(axis=0).nonzero()
factors[points[:, None], points] = np.maximum(factors[points[:, None], points], 1000) factors[points[:, None], :] = np.maximum(factors[points[:, None], :], 1000)
factors[:, points] = np.maximum(factors[:, points], 1000)
if include: if include:
points, = self.excludable_points[include, :].any(axis=0).nonzero() points, = self.excludable_points[include, :].any(axis=0).nonzero()
factors[points[:, None], points] = 1 factors[points[:, None], :] = 1
factors[:, points] = 1
g_sparse = csgraph_from_dense(distances*factors, 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) shortest_paths, predecessors = shortest_path(g_sparse, return_predecessors=True)