another invalid geometry fuckery fix

This commit is contained in:
Laura Klünder 2024-12-20 19:27:11 +01:00
parent 5eb75591dd
commit 34b5ad58bf
3 changed files with 7 additions and 3 deletions

View file

@ -240,7 +240,8 @@ class SingleLevelGeometries(BaseLevelGeometries):
# add altitudegroup geometries and split ground colors into them # add altitudegroup geometries and split ground colors into them
altitudearea_geoms: list[AltitudeAreaGeometries] = [] altitudearea_geoms: list[AltitudeAreaGeometries] = []
for altitudearea in level.altitudeareas.all(): # noqa 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)) altitudearea_colors = {color: {access_restriction: area.intersection(unwrap_geom(altitudearea.geometry))
for access_restriction, area in areas.items() for access_restriction, area in areas.items()
if altitudearea_prep.intersects(area)} if altitudearea_prep.intersects(area)}
@ -253,8 +254,9 @@ class SingleLevelGeometries(BaseLevelGeometries):
for color, color_obstacles in height_obstacles.items(): for color, color_obstacles in height_obstacles.items():
new_color_obstacles = [] new_color_obstacles = []
for obstacle in color_obstacles: for obstacle in color_obstacles:
if altitudearea_prep.intersects(obstacle.buffer(0)): obstacle = obstacle.buffer(0)
new_color_obstacles.append(obstacle.buffer(0).intersection(unwrap_geom(altitudearea.geometry))) if altitudearea_prep.intersects(obstacle):
new_color_obstacles.append(obstacle.intersection(unwrap_geom(altitudearea.geometry)))
if new_color_obstacles: if new_color_obstacles:
new_height_obstacles[color] = new_color_obstacles new_height_obstacles[color] = new_color_obstacles
if new_height_obstacles: if new_height_obstacles:

View file

@ -259,6 +259,7 @@ class LevelRenderData:
for color, color_obstacles in height_obstacles.items(): for color, color_obstacles in height_obstacles.items():
new_color_obstacles = [] new_color_obstacles = []
for obstacle in color_obstacles: for obstacle in color_obstacles:
obstacle = obstacle.buffer(0)
if new_geometry_prep.intersects(obstacle): if new_geometry_prep.intersects(obstacle):
new_color_obstacles.append( new_color_obstacles.append(
obstacle.intersection(unwrap_geom(altitudearea.geometry)) obstacle.intersection(unwrap_geom(altitudearea.geometry))

View file

@ -140,6 +140,7 @@ class Router:
space.areas.add(area.pk) space.areas.add(area.pk)
for area in level.altitudeareas.all(): for area in level.altitudeareas.all():
area.geometry = unwrap_geom(area.geometry).buffer(0)
if not space.geometry_prep.intersects(unwrap_geom(area.geometry)): if not space.geometry_prep.intersects(unwrap_geom(area.geometry)):
continue continue
for subgeom in assert_multipolygon(accessible_geom.intersection(unwrap_geom(area.geometry))): for subgeom in assert_multipolygon(accessible_geom.intersection(unwrap_geom(area.geometry))):