From 34b5ad58bf38ebc5c86b5838f6f85465e5645a4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Fri, 20 Dec 2024 19:27:11 +0100 Subject: [PATCH] another invalid geometry fuckery fix --- src/c3nav/mapdata/render/geometry/level.py | 8 +++++--- src/c3nav/mapdata/render/renderdata.py | 1 + src/c3nav/routing/router.py | 1 + 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/c3nav/mapdata/render/geometry/level.py b/src/c3nav/mapdata/render/geometry/level.py index 6731e4c3..a755094c 100644 --- a/src/c3nav/mapdata/render/geometry/level.py +++ b/src/c3nav/mapdata/render/geometry/level.py @@ -240,7 +240,8 @@ class SingleLevelGeometries(BaseLevelGeometries): # add altitudegroup geometries and split ground colors into them altitudearea_geoms: list[AltitudeAreaGeometries] = [] for altitudearea in level.altitudeareas.all(): # noqa - altitudearea_prep = prepared.prep(unwrap_geom(altitudearea.geometry).buffer(0)) + altitudearea.geometry = unwrap_geom(altitudearea.geometry).buffer(0) + altitudearea_prep = prepared.prep(unwrap_geom(altitudearea.geometry)) altitudearea_colors = {color: {access_restriction: area.intersection(unwrap_geom(altitudearea.geometry)) for access_restriction, area in areas.items() if altitudearea_prep.intersects(area)} @@ -253,8 +254,9 @@ class SingleLevelGeometries(BaseLevelGeometries): for color, color_obstacles in height_obstacles.items(): new_color_obstacles = [] for obstacle in color_obstacles: - if altitudearea_prep.intersects(obstacle.buffer(0)): - new_color_obstacles.append(obstacle.buffer(0).intersection(unwrap_geom(altitudearea.geometry))) + obstacle = obstacle.buffer(0) + if altitudearea_prep.intersects(obstacle): + new_color_obstacles.append(obstacle.intersection(unwrap_geom(altitudearea.geometry))) if new_color_obstacles: new_height_obstacles[color] = new_color_obstacles if new_height_obstacles: diff --git a/src/c3nav/mapdata/render/renderdata.py b/src/c3nav/mapdata/render/renderdata.py index e9d0dd8d..48a1760c 100644 --- a/src/c3nav/mapdata/render/renderdata.py +++ b/src/c3nav/mapdata/render/renderdata.py @@ -259,6 +259,7 @@ class LevelRenderData: for color, color_obstacles in height_obstacles.items(): new_color_obstacles = [] for obstacle in color_obstacles: + obstacle = obstacle.buffer(0) if new_geometry_prep.intersects(obstacle): new_color_obstacles.append( obstacle.intersection(unwrap_geom(altitudearea.geometry)) diff --git a/src/c3nav/routing/router.py b/src/c3nav/routing/router.py index cc8ca9a3..48297977 100644 --- a/src/c3nav/routing/router.py +++ b/src/c3nav/routing/router.py @@ -140,6 +140,7 @@ class Router: space.areas.add(area.pk) for area in level.altitudeareas.all(): + area.geometry = unwrap_geom(area.geometry).buffer(0) if not space.geometry_prep.intersects(unwrap_geom(area.geometry)): continue for subgeom in assert_multipolygon(accessible_geom.intersection(unwrap_geom(area.geometry))):