From b9977676d67dd1124354ce21b9d99e639ef0a547 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Sat, 18 Nov 2017 15:17:49 +0100 Subject: [PATCH] fix cut trough empty space detection in cut_polygon_with_line --- src/c3nav/mapdata/models/geometry/level.py | 4 +++- src/c3nav/mapdata/utils/geometry.py | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/c3nav/mapdata/models/geometry/level.py b/src/c3nav/mapdata/models/geometry/level.py index 415b544c..bbce397e 100644 --- a/src/c3nav/mapdata/models/geometry/level.py +++ b/src/c3nav/mapdata/models/geometry/level.py @@ -507,7 +507,9 @@ class AltitudeArea(LevelGeometryMixin, models.Model): for area in our_areas if buffered.intersects(area.orig_geometry)) if touches: - area = max(touches, key=itemgetter(1))[0] + area = max(touches, key=lambda item: (item[0].altitude2 is not None, + item[0].altitude, + item[1]))[0] else: area = min(our_areas, key=lambda a: a.orig_geometry.distance(center)) area.geometry = area.geometry.union(polygon) diff --git a/src/c3nav/mapdata/utils/geometry.py b/src/c3nav/mapdata/utils/geometry.py index 80dbd936..70d1bc4e 100644 --- a/src/c3nav/mapdata/utils/geometry.py +++ b/src/c3nav/mapdata/utils/geometry.py @@ -209,7 +209,8 @@ def cut_polygon_with_line(polygon: Union[Polygon, MultiPolygon], line: LineStrin point_backwards = ring[0].coords[-2] angle_forwards = math.atan2(point_forwards[0] - last.point.x, point_forwards[1] - last.point.y) angle_backwards = math.atan2(point_backwards[0] - last.point.x, point_backwards[1] - last.point.y) - angle_segment = math.atan2(current.point.x - last.point.x, current.point.y - last.point.y) + next_segment_point = Point(segment.coords[1]) + angle_segment = math.atan2(next_segment_point.x - last.point.x, next_segment_point.y - last.point.y) while angle_forwards <= angle_backwards: angle_forwards += 2*math.pi