From 324583702865dc851a95986601b9baa37dd3567b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Sat, 18 Nov 2017 20:26:34 +0100 Subject: [PATCH] speed up AltitudeAreas.recalculate() even more using prepared geometries --- src/c3nav/mapdata/models/geometry/level.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/c3nav/mapdata/models/geometry/level.py b/src/c3nav/mapdata/models/geometry/level.py index 43208bb0..73ab1a1c 100644 --- a/src/c3nav/mapdata/models/geometry/level.py +++ b/src/c3nav/mapdata/models/geometry/level.py @@ -467,12 +467,15 @@ class AltitudeArea(LevelGeometryMixin, models.Model): space_geom = space.geometry if space.outside: space_geom = space_geom.difference(buildings_geom) + space_geom_prep = prepared.prep(space_geom) holes_geom = unary_union(tuple(h.geometry for h in space.holes.all())) remaining_space = ( tuple(o.geometry for o in space.obstacles.all()) + tuple(o.buffered_geometry for o in space.lineobstacles.all()) ) - remaining_space = tuple(g.intersection(space_geom).difference(holes_geom) for g in remaining_space) + remaining_space = tuple(g.intersection(space_geom).difference(holes_geom) + for g in remaining_space + if space_geom_prep.intersects(g)) remaining_space = tuple(chain(*( assert_multipolygon(g) for g in remaining_space if not g.is_empty )))