From 36df1fed66910e8a49fa3fc3a70554905d258422 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Sun, 3 Apr 2022 18:16:03 +0200 Subject: [PATCH] shapely's cascaded_union was deprecated, replace with unary_union --- src/c3nav/editor/api.py | 14 +++++++------- src/c3nav/mapdata/migrations/0003_space_outside.py | 4 ++-- src/c3nav/mapdata/models/level.py | 6 +++--- src/c3nav/mapdata/utils/locations.py | 4 ++-- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/c3nav/editor/api.py b/src/c3nav/editor/api.py index 834d4801..c06543d5 100644 --- a/src/c3nav/editor/api.py +++ b/src/c3nav/editor/api.py @@ -12,7 +12,7 @@ from rest_framework.generics import get_object_or_404 from rest_framework.response import Response from rest_framework.viewsets import ReadOnlyModelViewSet, ViewSet from shapely import prepared -from shapely.ops import cascaded_union +from shapely.ops import unary_union from c3nav.api.utils import get_api_post_data from c3nav.editor.forms import ChangeSetForm, RejectForm @@ -69,7 +69,7 @@ class EditorViewSet(EditorViewSetMixin, ViewSet): @staticmethod def _get_level_geometries(level): buildings = level.buildings.all() - buildings_geom = cascaded_union([building.geometry for building in buildings]) + buildings_geom = unary_union([building.geometry for building in buildings]) spaces = {space.pk: space for space in level.spaces.all()} holes_geom = [] for space in spaces.values(): @@ -77,11 +77,11 @@ class EditorViewSet(EditorViewSetMixin, ViewSet): space.geometry = space.geometry.difference(buildings_geom) columns = [column.geometry for column in space.columns.all()] if columns: - columns_geom = cascaded_union([column.geometry for column in space.columns.all()]) + columns_geom = unary_union([column.geometry for column in space.columns.all()]) space.geometry = space.geometry.difference(columns_geom) holes = [hole.geometry for hole in space.holes.all()] if holes: - space_holes_geom = cascaded_union(holes) + space_holes_geom = unary_union(holes) holes_geom.append(space_holes_geom.intersection(space.geometry)) space.geometry = space.geometry.difference(space_holes_geom) @@ -89,7 +89,7 @@ class EditorViewSet(EditorViewSetMixin, ViewSet): building.original_geometry = building.geometry if holes_geom: - holes_geom = cascaded_union(holes_geom) + holes_geom = unary_union(holes_geom) holes_geom_prep = prepared.prep(holes_geom) for obj in buildings: if holes_geom_prep.intersects(obj.geometry): @@ -221,7 +221,7 @@ class EditorViewSet(EditorViewSetMixin, ViewSet): if request.user_permissions.can_access_base_mapdata: doors = [door for door in level.doors.filter(Door.q_for_request(request)).all() if door.geometry.intersects(space.geometry)] - doors_space_geom = cascaded_union([door.geometry for door in doors]+[space.geometry]) + doors_space_geom = unary_union([door.geometry for door in doors]+[space.geometry]) levels, levels_on_top, levels_under = self._get_levels_pk(request, level.primary_level) if level.on_top_of_id is not None: @@ -251,7 +251,7 @@ class EditorViewSet(EditorViewSetMixin, ViewSet): # deactivated for performance reasons buildings = level.buildings.all() - # buildings_geom = cascaded_union([building.geometry for building in buildings]) + # buildings_geom = unary_union([building.geometry for building in buildings]) # for other_space in other_spaces: # if other_space.outside: # other_space.geometry = other_space.geometry.difference(buildings_geom) diff --git a/src/c3nav/mapdata/migrations/0003_space_outside.py b/src/c3nav/mapdata/migrations/0003_space_outside.py index e50dec47..a734635a 100644 --- a/src/c3nav/mapdata/migrations/0003_space_outside.py +++ b/src/c3nav/mapdata/migrations/0003_space_outside.py @@ -3,13 +3,13 @@ from __future__ import unicode_literals from django.db import migrations, models -from shapely.ops import cascaded_union +from shapely.ops import unary_union def set_space_outside(apps, schema_editor): Section = apps.get_model('mapdata', 'Section') for section in Section.objects.all(): - building_geometries = cascaded_union(tuple(building.geometry for building in section.buildings.all())) + building_geometries = unary_union(tuple(building.geometry for building in section.buildings.all())) for space in section.spaces.all(): if space.geometry.intersection(building_geometries).area / space.geometry.area < 0.5: space.outside = True diff --git a/src/c3nav/mapdata/models/level.py b/src/c3nav/mapdata/models/level.py index a9e381e3..eb89aa54 100644 --- a/src/c3nav/mapdata/models/level.py +++ b/src/c3nav/mapdata/models/level.py @@ -7,7 +7,7 @@ from django.db import models from django.urls import reverse from django.utils.functional import cached_property from django.utils.translation import gettext_lazy as _ -from shapely.ops import cascaded_union +from shapely.ops import unary_union from c3nav.mapdata.models.locations import SpecificLocation @@ -94,8 +94,8 @@ class Level(SpecificLocation, models.Model): @cached_property def bounds(self): - return cascaded_union(tuple(item.geometry.buffer(0) - for item in chain(self.altitudeareas.all(), self.buildings.all()))).bounds + return unary_union(tuple(item.geometry.buffer(0) + for item in chain(self.altitudeareas.all(), self.buildings.all()))).bounds def get_icon(self): return super().get_icon() or 'layers' diff --git a/src/c3nav/mapdata/utils/locations.py b/src/c3nav/mapdata/utils/locations.py index 76b87a0b..23d14dfa 100644 --- a/src/c3nav/mapdata/utils/locations.py +++ b/src/c3nav/mapdata/utils/locations.py @@ -10,7 +10,7 @@ from django.apps import apps from django.db.models import Prefetch, Q from django.utils.functional import cached_property from django.utils.translation import gettext_lazy as _ -from shapely.ops import cascaded_union +from shapely.ops import unary_union from c3nav.mapdata.grid import grid from c3nav.mapdata.models import Level, Location, LocationGroup, MapUpdate @@ -137,7 +137,7 @@ def get_better_space_geometries(): result = {} for space in Space.objects.prefetch_related('columns', 'holes'): geometry = space.geometry.difference( - cascaded_union(tuple(obj.geometry for obj in chain(space.columns.all(), space.holes.all()))) + unary_union(tuple(obj.geometry for obj in chain(space.columns.all(), space.holes.all()))) ) if not geometry.is_empty: result[space.pk] = geometry