From 495294a8866a6fd3937cb4379150e064d5a5abc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Sun, 3 Apr 2022 17:34:31 +0200 Subject: [PATCH] avoid shapely deprecation warnings --- src/c3nav/mapdata/models/geometry/base.py | 4 ++-- src/c3nav/mapdata/models/geometry/level.py | 6 +++--- src/c3nav/mapdata/render/engines/svg.py | 4 ++-- src/c3nav/mapdata/utils/geometry.py | 11 +---------- src/c3nav/mapdata/utils/mpl.py | 2 +- 5 files changed, 9 insertions(+), 18 deletions(-) diff --git a/src/c3nav/mapdata/models/geometry/base.py b/src/c3nav/mapdata/models/geometry/base.py index 9de07b14..f6a4b548 100644 --- a/src/c3nav/mapdata/models/geometry/base.py +++ b/src/c3nav/mapdata/models/geometry/base.py @@ -115,11 +115,11 @@ class GeometryMixin(SerializableMixin): return True if self.geometry is self.orig_geometry: return False - if not self.geometry.almost_equals(self.orig_geometry, 1): + if not self.geometry.equals_exact(self.orig_geometry, 0.05): return True field = self._meta.get_field('geometry') rounded = field.to_python(field.get_prep_value(self.geometry)) - if not rounded.almost_equals(self.orig_geometry, 2): + if not rounded.equals_exact(self.orig_geometry, 0.005): return True return False diff --git a/src/c3nav/mapdata/models/geometry/level.py b/src/c3nav/mapdata/models/geometry/level.py index 2b69fd90..430e34e1 100644 --- a/src/c3nav/mapdata/models/geometry/level.py +++ b/src/c3nav/mapdata/models/geometry/level.py @@ -189,8 +189,8 @@ class AltitudeArea(LevelGeometryMixin, models.Model): if self.altitude2 is None: return np.full((points.shape[0], ), fill_value=float(self.altitude)) - slope = np.array(self.point2) - np.array(self.point1) - distances = (np.sum(((points - np.array(self.point1)) * slope), axis=1) / (slope ** 2).sum()).clip(0, 1) + slope = np.array(self.point2.coords) - np.array(self.point1.coords) + distances = (np.sum(((points - np.array(self.point1.coords)) * slope), axis=1) / (slope ** 2).sum()).clip(0, 1) if self.altitude2 < self.altitude: min_altitude = float(self.altitude2) @@ -604,7 +604,7 @@ class AltitudeArea(LevelGeometryMixin, models.Model): num_deleted += 1 continue - if not field.get_final_value(new_area.geometry).almost_equals(candidate.geometry): + if not field.get_final_value(new_area.geometry).equals_exact(candidate.geometry, 0.00001): num_modified += 1 candidate.geometry = new_area.geometry diff --git a/src/c3nav/mapdata/render/engines/svg.py b/src/c3nav/mapdata/render/engines/svg.py index 78b8914c..5e2f720c 100644 --- a/src/c3nav/mapdata/render/engines/svg.py +++ b/src/c3nav/mapdata/render/engines/svg.py @@ -149,12 +149,12 @@ class SVGEngine(RenderEngine): if isinstance(geom, Polygon): return ('').replace('.0 ', ' ') if isinstance(geom, LineString): return (('') % - tuple((np.array(geom)*self.np_scale+self.np_offset).flatten())).replace('.0 ', ' ') + tuple((np.array(geom.coords)*self.np_scale+self.np_offset).flatten())).replace('.0 ', ' ') try: geoms = geom.geoms except AttributeError: diff --git a/src/c3nav/mapdata/utils/geometry.py b/src/c3nav/mapdata/utils/geometry.py index a3d60255..360427c5 100644 --- a/src/c3nav/mapdata/utils/geometry.py +++ b/src/c3nav/mapdata/utils/geometry.py @@ -1,6 +1,5 @@ import math from collections import deque, namedtuple -from contextlib import suppress from itertools import chain from typing import List, Sequence, Union @@ -199,11 +198,7 @@ def cut_polygon_with_line(polygon: Union[Polygon, MultiPolygon, Sequence[Polygon polygons: List[List[LinearRing]] = [] # noinspection PyTypeChecker for polygon in orig_polygon: - rings = getattr(polygon, 'c3nav_cache', None) - if not rings: - rings = [polygon.exterior, *polygon.interiors] - polygon.c3nav_cache = rings - polygons.append(rings) + polygons.append([polygon.exterior, *polygon.interiors]) # find intersection points between the line and polygon rings points = deque() @@ -339,7 +334,6 @@ def cut_polygon_with_line(polygon: Union[Polygon, MultiPolygon, Sequence[Polygon for polygon in polygons: polygon = [ring for ring in polygon if ring is not None] new_polygon = Polygon(polygon[0], tuple(polygon[1:])) - new_polygon.c3nav_cache = polygon result.append(new_polygon) return list(result) @@ -349,9 +343,6 @@ def clean_cut_polygon(polygon: Polygon) -> Polygon: interiors.extend(cut_ring(polygon.exterior)) exteriors = [(i, ring) for (i, ring) in enumerate(interiors) if ring.is_ccw] - with suppress(AttributeError): - delattr(polygon, 'c3nav_cache') - if len(exteriors) != 1: raise ValueError('Invalid cut polygon!') exterior = interiors[exteriors[0][0]] diff --git a/src/c3nav/mapdata/utils/mpl.py b/src/c3nav/mapdata/utils/mpl.py index d731067f..8dac3459 100644 --- a/src/c3nav/mapdata/utils/mpl.py +++ b/src/c3nav/mapdata/utils/mpl.py @@ -109,5 +109,5 @@ def shapely_to_mpl(geometry): def linearring_to_mpl_path(linearring): - return Path(np.array(linearring), + return Path(np.array(linearring.coords), (Path.MOVETO, *([Path.LINETO] * (len(linearring.coords)-2)), Path.CLOSEPOLY), readonly=True)