From 30a704fd22e20dae91601a2b0809d5f81d36986a Mon Sep 17 00:00:00 2001 From: Ruth Comer <10599679+rcomer@users.noreply.github.com> Date: Sat, 3 Feb 2024 14:44:41 +0000 Subject: [PATCH] FIX: create a single inverted polygon when no exteriors found Fixes #1149, #1674, #2160, --- lib/cartopy/crs.py | 53 ++++++++++++------ .../ocean_lambertazimuthalequalarea.png | Bin 0 -> 52550 bytes lib/cartopy/tests/mpl/test_features.py | 12 ++++ lib/cartopy/tests/test_polygon.py | 12 ++++ 4 files changed, 61 insertions(+), 16 deletions(-) create mode 100644 lib/cartopy/tests/mpl/baseline_images/mpl/test_features/ocean_lambertazimuthalequalarea.png diff --git a/lib/cartopy/crs.py b/lib/cartopy/crs.py index 4a8e49f64..81ae013aa 100644 --- a/lib/cartopy/crs.py +++ b/lib/cartopy/crs.py @@ -21,6 +21,7 @@ import pyproj from pyproj import Transformer from pyproj.exceptions import ProjError +import shapely import shapely.geometry as sgeom from shapely.prepared import prep @@ -1214,10 +1215,26 @@ def _rings_to_multi_polygon(self, rings, is_ccw): y3 -= by x4 += bx y4 += by + + interior_polys = [] + for ring in interior_rings: - # Use shapely buffer in an attempt to fix invalid geometries - polygon = sgeom.Polygon(ring).buffer(0) - if not polygon.is_empty and polygon.is_valid: + polygon = shapely.make_valid(sgeom.Polygon(ring)) + if not polygon.is_empty: + if isinstance(polygon, sgeom.Polygon): + interior_polys.append(polygon) + elif isinstance(polygon, sgeom.MultiPolygon): + interior_polys.extend(polygon.geoms) + elif isinstance(polygon, sgeom.GeometryCollection): + for geom in polygon.geoms: + if isinstance(geom, sgeom.Polygon): + interior_polys.append(geom) + elif isinstance(geom, sgeom.MultiPolygon): + interior_polys.extend(geom.geoms) + else: + # make_valid may produce some linestrings. Ignore these + continue + x1, y1, x2, y2 = polygon.bounds bx = (x2 - x1) * 0.1 by = (y2 - y1) * 0.1 @@ -1225,23 +1242,27 @@ def _rings_to_multi_polygon(self, rings, is_ccw): y1 -= by x2 += bx y2 += by - box = sgeom.box(min(x1, x3), min(y1, y3), - max(x2, x4), max(y2, y4)) - # Invert the polygon - polygon = box.difference(polygon) + x3 = min(x1, x3) + x4 = max(x2, x4) + y3 = min(y1, y3) + y4 = max(y2, y4) - # Intersect the inverted polygon with the boundary - polygon = boundary_poly.intersection(polygon) + box = sgeom.box(x3, y3, x4, y4, ccw=is_ccw) - if not polygon.is_empty: - polygon_bits.append(polygon) + # Invert the polygons + polygon = box.difference(sgeom.MultiPolygon(interior_polys)) - if polygon_bits: - multi_poly = sgeom.MultiPolygon(polygon_bits) - else: - multi_poly = sgeom.MultiPolygon() - return multi_poly + # Intersect the inverted polygon with the boundary + polygon = boundary_poly.intersection(polygon) + + if not polygon.is_empty: + if isinstance(polygon, sgeom.MultiPolygon): + polygon_bits.extend(polygon.geoms) + else: + polygon_bits.append(polygon) + + return sgeom.MultiPolygon(polygon_bits) def quick_vertices_transform(self, vertices, src_crs): """ diff --git a/lib/cartopy/tests/mpl/baseline_images/mpl/test_features/ocean_lambertazimuthalequalarea.png b/lib/cartopy/tests/mpl/baseline_images/mpl/test_features/ocean_lambertazimuthalequalarea.png new file mode 100644 index 0000000000000000000000000000000000000000..1597f6b12dd7aeab1b7574fc9318b7222367f67f GIT binary patch literal 52550 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 N^;= 2 + + def test_inverted_poly_clipped_hole(self): proj = ccrs.NorthPolarStereo() poly = sgeom.Polygon([(0, 0), (-90, 0), (-180, 0), (-270, 0)],