Plot fails when using 10m NaturalEarthFeature land data with TranvserseMercator projection
Description
Hello,
We're using cartopy to plot satellite sub-swathes. Yesterday, I've recreated a new conda environment in order to migrate our tools to python 3.10. When doing a test run of one of our program, I got a crash I never experienced before. It took me a bit of time to notice that the culprit seems to be the "land" NaturalEarthFeature, especially the 10m resolution one. If set to 50 meters, the program runs fine. I tried to delete the 10m land data files to let cartopy re-download them, but without positive result.
Regards,
Code to reproduce
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
import pyproj
from shapely.geometry import box
lat, lon = -11.25, 130.81
roi_size = 200000 # 200 km
ellps = pyproj.Geod(ellps='sphere')
fig = plt.figure()
ax = fig.subplots(1, 1, subplot_kw={
'projection': ccrs.TransverseMercator(
lon, lat, globe=ccrs.Globe(semimajor_axis=ellps.a,
semiminor_axis=ellps.b,
ellipse='sphere'),
approx=False)
})
ax.add_feature(cfeature.NaturalEarthFeature(
category='physical',
name='ocean',
scale='10m',
edgecolor='black',
facecolor=cfeature.COLORS['water']))
# Seems to be the reason of the crash
ax.add_feature(cfeature.NaturalEarthFeature(
category='physical',
name='land',
scale='10m', # if set to '50m' it runs fine
facecolor=cfeature.COLORS['land']
))
ax.add_feature(cfeature.NaturalEarthFeature(
category='physical',
name='lakes',
scale='10m',
facecolor=cfeature.COLORS['water']
))
ax.add_feature(cfeature.NaturalEarthFeature(
category='physical',
name='coastline',
scale='10m',
edgecolor='black',
facecolor='none'))
ax.add_feature(cfeature.RIVERS)
roi = box(-roi_size / 2.0, -roi_size / 2.0,
roi_size / 2.0, roi_size / 2.0)
ax.plot(*roi.exterior.coords.xy)
plt.show()
Traceback
TopologyException: side location conflict at 0 -8756596.349918643. This can occur if the input geometry is invalid.
Error in callback <function install_repl_displayhook.<locals>.post_execute at 0x2ad3343ea3b0> (for post_execute):
---------------------------------------------------------------------------
PredicateError Traceback (most recent call last)
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/shapely/predicates.py:15, in BinaryPredicate.__call__(self, this, other, *args)
14 try:
---> 15 return self.fn(this._geom, other._geom, *args)
16 except PredicateError as err:
17 # Dig deeper into causes of errors.
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/shapely/geos.py:609, in errcheck_predicate(result, func, argtuple)
608 if result == 2:
--> 609 raise PredicateError("Failed to evaluate %s" % repr(func))
610 return result
PredicateError: Failed to evaluate <_FuncPtr object at 0x2ad32aa56e00>
During handling of the above exception, another exception occurred:
AttributeError Traceback (most recent call last)
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/matplotlib/pyplot.py:137, in install_repl_displayhook.<locals>.post_execute()
135 def post_execute():
136 if matplotlib.is_interactive():
--> 137 draw_all()
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/matplotlib/_pylab_helpers.py:141, in Gcf.draw_all(cls, force)
139 for manager in cls.get_all_fig_managers():
140 if force or manager.canvas.figure.stale:
--> 141 manager.canvas.draw_idle()
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/matplotlib/backend_bases.py:2060, in FigureCanvasBase.draw_idle(self, *args, **kwargs)
2058 if not self._is_idle_drawing:
2059 with self._idle_draw_cntx():
-> 2060 self.draw(*args, **kwargs)
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/matplotlib/backends/backend_agg.py:436, in FigureCanvasAgg.draw(self)
432 # Acquire a lock on the shared font cache.
433 with RendererAgg.lock, \
434 (self.toolbar._wait_cursor_for_draw_cm() if self.toolbar
435 else nullcontext()):
--> 436 self.figure.draw(self.renderer)
437 # A GUI class may be need to update a window using this draw, so
438 # don't forget to call the superclass.
439 super().draw()
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/matplotlib/artist.py:74, in _finalize_rasterization.<locals>.draw_wrapper(artist, renderer, *args, **kwargs)
72 @wraps(draw)
73 def draw_wrapper(artist, renderer, *args, **kwargs):
---> 74 result = draw(artist, renderer, *args, **kwargs)
75 if renderer._rasterizing:
76 renderer.stop_rasterizing()
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/matplotlib/artist.py:51, in allow_rasterization.<locals>.draw_wrapper(artist, renderer)
48 if artist.get_agg_filter() is not None:
49 renderer.start_filter()
---> 51 return draw(artist, renderer)
52 finally:
53 if artist.get_agg_filter() is not None:
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/matplotlib/figure.py:2845, in Figure.draw(self, renderer)
2842 # ValueError can occur when resizing a window.
2844 self.patch.draw(renderer)
-> 2845 mimage._draw_list_compositing_images(
2846 renderer, self, artists, self.suppressComposite)
2848 for sfig in self.subfigs:
2849 sfig.draw(renderer)
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/matplotlib/image.py:132, in _draw_list_compositing_images(renderer, parent, artists, suppress_composite)
130 if not_composite or not has_images:
131 for a in artists:
--> 132 a.draw(renderer)
133 else:
134 # Composite any adjacent images together
135 image_group = []
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/matplotlib/artist.py:51, in allow_rasterization.<locals>.draw_wrapper(artist, renderer)
48 if artist.get_agg_filter() is not None:
49 renderer.start_filter()
---> 51 return draw(artist, renderer)
52 finally:
53 if artist.get_agg_filter() is not None:
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/cartopy/mpl/geoaxes.py:558, in GeoAxes.draw(self, renderer, **kwargs)
553 self.imshow(img, extent=extent, origin=origin,
554 transform=factory.crs, *factory_args[1:],
555 **factory_kwargs)
556 self._done_img_factory = True
--> 558 return matplotlib.axes.Axes.draw(self, renderer=renderer, **kwargs)
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/matplotlib/artist.py:51, in allow_rasterization.<locals>.draw_wrapper(artist, renderer)
48 if artist.get_agg_filter() is not None:
49 renderer.start_filter()
---> 51 return draw(artist, renderer)
52 finally:
53 if artist.get_agg_filter() is not None:
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/matplotlib/axes/_base.py:3091, in _AxesBase.draw(self, renderer)
3088 a.draw(renderer)
3089 renderer.stop_rasterizing()
-> 3091 mimage._draw_list_compositing_images(
3092 renderer, self, artists, self.figure.suppressComposite)
3094 renderer.close_group('axes')
3095 self.stale = False
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/matplotlib/image.py:132, in _draw_list_compositing_images(renderer, parent, artists, suppress_composite)
130 if not_composite or not has_images:
131 for a in artists:
--> 132 a.draw(renderer)
133 else:
134 # Composite any adjacent images together
135 image_group = []
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/matplotlib/artist.py:51, in allow_rasterization.<locals>.draw_wrapper(artist, renderer)
48 if artist.get_agg_filter() is not None:
49 renderer.start_filter()
---> 51 return draw(artist, renderer)
52 finally:
53 if artist.get_agg_filter() is not None:
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/cartopy/mpl/feature_artist.py:184, in FeatureArtist.draw(self, renderer, *args, **kwargs)
182 if geom_paths is None:
183 if ax.projection != feature_crs:
--> 184 projected_geom = ax.projection.project_geometry(
185 geom, feature_crs)
186 else:
187 projected_geom = geom
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/cartopy/crs.py:805, in Projection.project_geometry(self, geometry, src_crs)
803 if not method_name:
804 raise ValueError(f'Unsupported geometry type {geom_type!r}')
--> 805 return getattr(self, method_name)(geometry, src_crs)
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/cartopy/crs.py:921, in Projection._project_multipolygon(self, geometry, src_crs)
919 geoms = []
920 for geom in geometry.geoms:
--> 921 r = self._project_polygon(geom, src_crs)
922 if r:
923 geoms.extend(r.geoms)
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/cartopy/crs.py:960, in Projection._project_polygon(self, polygon, src_crs)
956 rings.extend(self._attach_lines_to_boundary(multi_lines, is_ccw))
958 # Resolve all the inside vs. outside rings, and convert to the
959 # final MultiPolygon.
--> 960 return self._rings_to_multi_polygon(rings, is_ccw)
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/cartopy/crs.py:1175, in Projection._rings_to_multi_polygon(self, rings, is_ccw)
1173 holes = []
1174 for interior_ring in interior_rings[:]:
-> 1175 if prep_polygon.contains(interior_ring):
1176 holes.append(interior_ring)
1177 interior_rings.remove(interior_ring)
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/shapely/impl.py:37, in delegated.<locals>.wrapper(*args, **kwargs)
34 @wraps(func)
35 def wrapper(*args, **kwargs):
36 try:
---> 37 return func(*args, **kwargs)
38 except KeyError:
39 raise ImplementationError(
40 "Method '%s' not provided by registered "
41 "implementation '%s'" % (func.__name__, args[0].impl))
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/shapely/prepared.py:51, in PreparedGeometry.contains(self, other)
48 @delegated
49 def contains(self, other):
50 """Returns True if the geometry contains the other, else False"""
---> 51 return bool(self.impl['prepared_contains'](self, other))
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/shapely/predicates.py:18, in BinaryPredicate.__call__(self, this, other, *args)
15 return self.fn(this._geom, other._geom, *args)
16 except PredicateError as err:
17 # Dig deeper into causes of errors.
---> 18 self._check_topology(err, this, other)
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/shapely/topology.py:37, in Delegating._check_topology(self, err, *geoms)
32 """Raise TopologicalError if geoms are invalid.
33
34 Else, raise original error.
35 """
36 for geom in geoms:
---> 37 if not geom.is_valid:
38 raise TopologicalError(
39 "The operation '%s' could not be performed. "
40 "Likely cause is invalidity of the geometry %s" % (
41 self.fn.__name__, repr(geom)))
42 raise err
AttributeError: 'PreparedGeometry' object has no attribute 'is_valid'
TopologyException: side location conflict at 0 -8756596.349918643. This can occur if the input geometry is invalid.
---------------------------------------------------------------------------
PredicateError Traceback (most recent call last)
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/shapely/predicates.py:15, in BinaryPredicate.__call__(self, this, other, *args)
14 try:
---> 15 return self.fn(this._geom, other._geom, *args)
16 except PredicateError as err:
17 # Dig deeper into causes of errors.
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/shapely/geos.py:609, in errcheck_predicate(result, func, argtuple)
608 if result == 2:
--> 609 raise PredicateError("Failed to evaluate %s" % repr(func))
610 return result
PredicateError: Failed to evaluate <_FuncPtr object at 0x2ad32aa56e00>
During handling of the above exception, another exception occurred:
AttributeError Traceback (most recent call last)
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/IPython/core/formatters.py:339, in BaseFormatter.__call__(self, obj)
337 pass
338 else:
--> 339 return printer(obj)
340 # Finally look for special method names
341 method = get_real_method(obj, self.print_method)
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/IPython/core/pylabtools.py:151, in print_figure(fig, fmt, bbox_inches, base64, **kwargs)
148 from matplotlib.backend_bases import FigureCanvasBase
149 FigureCanvasBase(fig)
--> 151 fig.canvas.print_figure(bytes_io, **kw)
152 data = bytes_io.getvalue()
153 if fmt == 'svg':
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/matplotlib/backend_bases.py:2295, in FigureCanvasBase.print_figure(self, filename, dpi, facecolor, edgecolor, orientation, format, bbox_inches, pad_inches, bbox_extra_artists, backend, **kwargs)
2289 renderer = _get_renderer(
2290 self.figure,
2291 functools.partial(
2292 print_method, orientation=orientation)
2293 )
2294 with getattr(renderer, "_draw_disabled", nullcontext)():
-> 2295 self.figure.draw(renderer)
2297 if bbox_inches:
2298 if bbox_inches == "tight":
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/matplotlib/artist.py:74, in _finalize_rasterization.<locals>.draw_wrapper(artist, renderer, *args, **kwargs)
72 @wraps(draw)
73 def draw_wrapper(artist, renderer, *args, **kwargs):
---> 74 result = draw(artist, renderer, *args, **kwargs)
75 if renderer._rasterizing:
76 renderer.stop_rasterizing()
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/matplotlib/artist.py:51, in allow_rasterization.<locals>.draw_wrapper(artist, renderer)
48 if artist.get_agg_filter() is not None:
49 renderer.start_filter()
---> 51 return draw(artist, renderer)
52 finally:
53 if artist.get_agg_filter() is not None:
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/matplotlib/figure.py:2845, in Figure.draw(self, renderer)
2842 # ValueError can occur when resizing a window.
2844 self.patch.draw(renderer)
-> 2845 mimage._draw_list_compositing_images(
2846 renderer, self, artists, self.suppressComposite)
2848 for sfig in self.subfigs:
2849 sfig.draw(renderer)
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/matplotlib/image.py:132, in _draw_list_compositing_images(renderer, parent, artists, suppress_composite)
130 if not_composite or not has_images:
131 for a in artists:
--> 132 a.draw(renderer)
133 else:
134 # Composite any adjacent images together
135 image_group = []
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/matplotlib/artist.py:51, in allow_rasterization.<locals>.draw_wrapper(artist, renderer)
48 if artist.get_agg_filter() is not None:
49 renderer.start_filter()
---> 51 return draw(artist, renderer)
52 finally:
53 if artist.get_agg_filter() is not None:
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/cartopy/mpl/geoaxes.py:558, in GeoAxes.draw(self, renderer, **kwargs)
553 self.imshow(img, extent=extent, origin=origin,
554 transform=factory.crs, *factory_args[1:],
555 **factory_kwargs)
556 self._done_img_factory = True
--> 558 return matplotlib.axes.Axes.draw(self, renderer=renderer, **kwargs)
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/matplotlib/artist.py:51, in allow_rasterization.<locals>.draw_wrapper(artist, renderer)
48 if artist.get_agg_filter() is not None:
49 renderer.start_filter()
---> 51 return draw(artist, renderer)
52 finally:
53 if artist.get_agg_filter() is not None:
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/matplotlib/axes/_base.py:3091, in _AxesBase.draw(self, renderer)
3088 a.draw(renderer)
3089 renderer.stop_rasterizing()
-> 3091 mimage._draw_list_compositing_images(
3092 renderer, self, artists, self.figure.suppressComposite)
3094 renderer.close_group('axes')
3095 self.stale = False
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/matplotlib/image.py:132, in _draw_list_compositing_images(renderer, parent, artists, suppress_composite)
130 if not_composite or not has_images:
131 for a in artists:
--> 132 a.draw(renderer)
133 else:
134 # Composite any adjacent images together
135 image_group = []
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/matplotlib/artist.py:51, in allow_rasterization.<locals>.draw_wrapper(artist, renderer)
48 if artist.get_agg_filter() is not None:
49 renderer.start_filter()
---> 51 return draw(artist, renderer)
52 finally:
53 if artist.get_agg_filter() is not None:
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/cartopy/mpl/feature_artist.py:184, in FeatureArtist.draw(self, renderer, *args, **kwargs)
182 if geom_paths is None:
183 if ax.projection != feature_crs:
--> 184 projected_geom = ax.projection.project_geometry(
185 geom, feature_crs)
186 else:
187 projected_geom = geom
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/cartopy/crs.py:805, in Projection.project_geometry(self, geometry, src_crs)
803 if not method_name:
804 raise ValueError(f'Unsupported geometry type {geom_type!r}')
--> 805 return getattr(self, method_name)(geometry, src_crs)
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/cartopy/crs.py:921, in Projection._project_multipolygon(self, geometry, src_crs)
919 geoms = []
920 for geom in geometry.geoms:
--> 921 r = self._project_polygon(geom, src_crs)
922 if r:
923 geoms.extend(r.geoms)
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/cartopy/crs.py:960, in Projection._project_polygon(self, polygon, src_crs)
956 rings.extend(self._attach_lines_to_boundary(multi_lines, is_ccw))
958 # Resolve all the inside vs. outside rings, and convert to the
959 # final MultiPolygon.
--> 960 return self._rings_to_multi_polygon(rings, is_ccw)
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/cartopy/crs.py:1175, in Projection._rings_to_multi_polygon(self, rings, is_ccw)
1173 holes = []
1174 for interior_ring in interior_rings[:]:
-> 1175 if prep_polygon.contains(interior_ring):
1176 holes.append(interior_ring)
1177 interior_rings.remove(interior_ring)
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/shapely/impl.py:37, in delegated.<locals>.wrapper(*args, **kwargs)
34 @wraps(func)
35 def wrapper(*args, **kwargs):
36 try:
---> 37 return func(*args, **kwargs)
38 except KeyError:
39 raise ImplementationError(
40 "Method '%s' not provided by registered "
41 "implementation '%s'" % (func.__name__, args[0].impl))
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/shapely/prepared.py:51, in PreparedGeometry.contains(self, other)
48 @delegated
49 def contains(self, other):
50 """Returns True if the geometry contains the other, else False"""
---> 51 return bool(self.impl['prepared_contains'](self, other))
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/shapely/predicates.py:18, in BinaryPredicate.__call__(self, this, other, *args)
15 return self.fn(this._geom, other._geom, *args)
16 except PredicateError as err:
17 # Dig deeper into causes of errors.
---> 18 self._check_topology(err, this, other)
File /work/ALT/sitr/oc_radar_adm/radarspy/env_test/lib/python3.10/site-packages/shapely/topology.py:37, in Delegating._check_topology(self, err, *geoms)
32 """Raise TopologicalError if geoms are invalid.
33
34 Else, raise original error.
35 """
36 for geom in geoms:
---> 37 if not geom.is_valid:
38 raise TopologicalError(
39 "The operation '%s' could not be performed. "
40 "Likely cause is invalidity of the geometry %s" % (
41 self.fn.__name__, repr(geom)))
42 raise err
AttributeError: 'PreparedGeometry' object has no attribute 'is_valid'
Full environment definition
Operating system
Centos 7
Cartopy version
0.20.3
conda list
- _libgcc_mutex=0.1=conda_forge
- _openmp_mutex=4.5=2_kmp_llvm
- affine=2.3.1=pyhd8ed1ab_0
- alsa-lib=1.2.6.1=h7f98852_0
- aom=3.4.0=h27087fc_1
- asttokens=2.0.8=pyhd8ed1ab_0
- attr=2.5.1=h166bdaf_1
- attrs=22.1.0=pyh71513ae_1
- backcall=0.2.0=pyh9f0ad1d_0
- backports=1.0=py_2
- backports.functools_lru_cache=1.6.4=pyhd8ed1ab_0
- blosc=1.21.1=h83bc5f7_3
- bokeh=2.4.3=pyhd8ed1ab_3
- boost-cpp=1.74.0=h75c5d50_8
- brotli=1.0.9=h166bdaf_7
- brotli-bin=1.0.9=h166bdaf_7
- brunsli=0.1=h9c3ff4c_0
- bzip2=1.0.8=h7f98852_4
- c-ares=1.18.1=h7f98852_0
- c-blosc2=2.3.1=h7a311fb_0
- ca-certificates=2022.6.15=ha878542_0
- cached-property=1.5.2=hd8ed1ab_1
- cached_property=1.5.2=pyha770c72_1
- cairo=1.16.0=ha61ee94_1013
- certifi=2022.6.15=pyhd8ed1ab_1
- cfitsio=4.1.0=hd9d235c_0
- charls=2.3.4=h9c3ff4c_0
- click-plugins=1.1.1=py_0
- cligj=0.7.2=pyhd8ed1ab_1
- cloudpickle=2.1.0=pyhd8ed1ab_0
- colorama=0.4.5=pyhd8ed1ab_0
- curl=7.83.1=h7bff187_0
- cycler=0.11.0=pyhd8ed1ab_0
- dask=2022.8.1=pyhd8ed1ab_2
- dask-core=2022.8.1=pyhd8ed1ab_0
- dask-jobqueue=0.7.4=pyhd8ed1ab_0
- dav1d=1.0.0=h166bdaf_1
- dbus=1.13.6=h5008d03_3
- decorator=5.1.1=pyhd8ed1ab_0
- dill=0.3.5.1=pyhd8ed1ab_0
- distributed=2022.8.1=pyhd8ed1ab_2
- entrypoints=0.4=pyhd8ed1ab_0
- executing=0.10.0=pyhd8ed1ab_0
- expat=2.4.8=h27087fc_0
- fftw=3.3.10=nompi_ha7695d1_103
- font-ttf-dejavu-sans-mono=2.37=hab24e00_0
- font-ttf-inconsolata=3.000=h77eed37_0
- font-ttf-source-code-pro=2.038=h77eed37_0
- font-ttf-ubuntu=0.83=hab24e00_0
- fontconfig=2.14.0=h8e229c2_0
- fonts-conda-ecosystem=1=0
- fonts-conda-forge=1=0
- freetype=2.12.1=hca18f0e_0
- freexl=1.0.6=h7f98852_0
- fsspec=2022.7.1=pyhd8ed1ab_0
- geos=3.11.0=h27087fc_0
- geotiff=1.7.1=h4fc65e6_3
- gettext=0.19.8.1=h73d1719_1008
- giflib=5.2.1=h36c2ea0_2
- glib=2.72.1=h6239696_0
- glib-tools=2.72.1=h6239696_0
- gst-plugins-base=1.20.3=hf6a322e_0
- gstreamer=1.20.3=hd4edc92_0
- h5netcdf=1.0.2=pyhd8ed1ab_0
- hdf4=4.2.15=h9772cbc_4
- hdf5=1.12.2=nompi_h2386368_100
- heapdict=1.0.1=py_0
- icu=70.1=h27087fc_0
- idna=3.3=pyhd8ed1ab_0
- imageio=2.21.1=pyhfa7a67d_0
- importlib_resources=5.9.0=pyhd8ed1ab_0
- iniconfig=1.1.1=pyh9f0ad1d_0
- isort=5.10.1=pyhd8ed1ab_0
- jack=1.9.18=h8c3723f_1002
- jedi=0.18.1=pyhd8ed1ab_2
- jinja2=3.1.2=pyhd8ed1ab_1
- jpeg=9e=h166bdaf_2
- json-c=0.16=hc379101_0
- jsonschema=4.14.0=pyhd8ed1ab_0
- jupyter_client=7.3.4=pyhd8ed1ab_0
- jupyter_core=4.11.1=py310hff52083_0
- jxrlib=1.1=h7f98852_2
- kealib=1.4.15=ha7026e8_1
- keyutils=1.6.1=h166bdaf_0
- krb5=1.19.3=h3790be6_0
- lcms2=2.12=hddcbb42_0
- ld_impl_linux-64=2.36.1=hea4e1c9_2
- lerc=4.0.0=h27087fc_0
- libaec=1.0.6=h9c3ff4c_0
- libavif=0.10.1=h166bdaf_1
- libblas=3.9.0=16_linux64_openblas
- libbrotlicommon=1.0.9=h166bdaf_7
- libbrotlidec=1.0.9=h166bdaf_7
- libbrotlienc=1.0.9=h166bdaf_7
- libcap=2.64=ha37c62d_0
- libcblas=3.9.0=16_linux64_openblas
- libclang=14.0.6=default_h2e3cab8_0
- libclang13=14.0.6=default_h3a83d3e_0
- libcups=2.3.3=h3e49a29_2
- libcurl=7.83.1=h7bff187_0
- libdap4=3.20.6=hd7c4107_2
- libdb=6.2.32=h9c3ff4c_0
- libdeflate=1.13=h166bdaf_0
- libedit=3.1.20191231=he28a2e2_2
- libev=4.33=h516909a_1
- libevent=2.1.10=h9b69904_4
- libffi=3.4.2=h7f98852_5
- libflac=1.3.4=h27087fc_0
- libgcc-ng=12.1.0=h8d9b700_16
- libgdal=3.5.1=hc23bfc3_5
- libgfortran-ng=12.1.0=h69a702a_16
- libgfortran5=12.1.0=hdcd56e2_16
- libglib=2.72.1=h2d90d5f_0
- libiconv=1.16=h516909a_0
- libkml=1.3.0=h238a007_1014
- liblapack=3.9.0=16_linux64_openblas
- libllvm11=11.1.0=hf817b99_3
- libllvm14=14.0.6=he0ac6c6_0
- libnetcdf=4.8.1=nompi_h21705cb_104
- libnghttp2=1.47.0=hdcd2b5c_1
- libnsl=2.0.0=h7f98852_0
- libogg=1.3.4=h7f98852_1
- libopenblas=0.3.21=pthreads_h78a6416_2
- libopus=1.3.1=h7f98852_1
- libpng=1.6.37=h753d276_4
- libpq=14.5=hd77ab85_0
- librttopo=1.1.0=hf730bdb_11
- libsndfile=1.0.31=h9c3ff4c_1
- libsodium=1.0.18=h36c2ea0_1
- libspatialite=5.0.1=h38b5f51_18
- libsqlite=3.39.2=h753d276_1
- libssh2=1.10.0=haa6b8db_3
- libstdcxx-ng=12.1.0=ha89aaad_16
- libtiff=4.4.0=h0e0dad5_3
- libtool=2.4.6=h9c3ff4c_1008
- libudev1=249=h166bdaf_4
- libuuid=2.32.1=h7f98852_1000
- libvorbis=1.3.7=h9c3ff4c_0
- libwebp-base=1.2.4=h166bdaf_0
- libxcb=1.13=h7f98852_1004
- libxkbcommon=1.0.3=he3ba5ed_0
- libxml2=2.9.14=h22db469_4
- libzip=1.9.2=hc869a4a_1
- libzlib=1.2.12=h166bdaf_2
- libzopfli=1.0.3=h9c3ff4c_0
- llvm-openmp=14.0.4=he0ac6c6_0
- locket=1.0.0=pyhd8ed1ab_0
- lz4-c=1.9.3=h9c3ff4c_1
- matplotlib-base=3.5.3=py310h8d5ebf3_2
- matplotlib-inline=0.1.6=pyhd8ed1ab_0
- mccabe=0.7.0=pyhd8ed1ab_0
- mkl=2022.1.0=h84fe81f_915
- msgpack-python=1.0.4=py310hbf28c38_0
- munch=2.5.0=py_0
- munkres=1.1.4=pyh9f0ad1d_0
- mysql-common=8.0.30=haf5c9bc_1
- mysql-libs=8.0.30=h28c427c_1
- nbformat=5.4.0=pyhd8ed1ab_0
- ncurses=6.3=h27087fc_1
- nest-asyncio=1.5.5=pyhd8ed1ab_0
- networkx=2.8.6=pyhd8ed1ab_0
- nspr=4.32=h9c3ff4c_1
- nss=3.78=h2350873_0
- openjpeg=2.5.0=h7d73246_1
- openssl=1.1.1q=h166bdaf_0
- packaging=21.3=pyhd8ed1ab_0
- parso=0.8.3=pyhd8ed1ab_0
- partd=1.3.0=pyhd8ed1ab_0
- pcre=8.45=h9c3ff4c_0
- pexpect=4.8.0=pyh9f0ad1d_2
- pickleshare=0.7.5=py_1003
- pip=22.2.2=pyhd8ed1ab_0
- pixman=0.40.0=h36c2ea0_0
- pkgutil-resolve-name=1.3.10=pyhd8ed1ab_0
- platformdirs=2.5.2=pyhd8ed1ab_1
- ply=3.11=py_1
- poppler=22.04.0=h8b295ee_2
- poppler-data=0.4.11=hd8ed1ab_0
- portaudio=19.6.0=h57a0ea0_5
- postgresql=14.5=hfdbbde3_0
- proj=9.0.1=h93bde94_1
- prompt-toolkit=3.0.30=pyha770c72_0
- pthread-stubs=0.4=h36c2ea0_1001
- ptyprocess=0.7.0=pyhd3deb0d_0
- pulseaudio=14.0=h7f54b18_8
- pure_eval=0.2.2=pyhd8ed1ab_0
- py=1.11.0=pyh6c4a22f_0
- pycparser=2.21=pyhd8ed1ab_0
- pygments=2.13.0=pyhd8ed1ab_0
- pylint=2.15.0=pyhd8ed1ab_0
- pyopenssl=22.0.0=pyhd8ed1ab_0
- pyparsing=3.0.9=pyhd8ed1ab_0
- pyqt=5.15.7=py310h29803b5_0
- pyshp=2.3.1=pyhd8ed1ab_0
- pysocks=1.7.1=pyha2e5f31_6
- python=3.10.6=h582c2e5_0_cpython
- python-dateutil=2.8.2=pyhd8ed1ab_0
- python-fastjsonschema=2.16.1=pyhd8ed1ab_0
- python_abi=3.10=2_cp310
- pytz=2022.2.1=pyhd8ed1ab_0
- qt-main=5.15.4=ha5833f6_2
- readline=8.1.2=h0f457ee_0
- setuptools=65.3.0=pyhd8ed1ab_1
- six=1.16.0=pyh6c4a22f_0
- snappy=1.1.9=hbd366e4_1
- snuggs=1.4.7=py_0
- sortedcontainers=2.4.0=pyhd8ed1ab_0
- sqlite=3.39.2=h4ff8645_1
- stack_data=0.5.0=pyhd8ed1ab_0
- tbb=2021.5.0=h924138e_1
- tblib=1.7.0=pyhd8ed1ab_0
- tifffile=2022.8.12=pyhd8ed1ab_0
- tiledb=2.11.1=h1e4a385_0
- tk=8.6.12=h27826a3_0
- toml=0.10.2=pyhd8ed1ab_0
- tomli=2.0.1=pyhd8ed1ab_0
- tomlkit=0.11.4=pyha770c72_0
- toolz=0.12.0=pyhd8ed1ab_0
- tqdm=4.64.0=pyhd8ed1ab_0
- traitlets=5.3.0=pyhd8ed1ab_0
- typing=3.10.0.0=pyhd8ed1ab_0
- typing_extensions=4.3.0=pyha770c72_0
- tzcode=2022c=h166bdaf_0
- tzdata=2022c=h191b570_0
- urllib3=1.26.11=pyhd8ed1ab_0
- wcwidth=0.2.5=pyh9f0ad1d_2
- wheel=0.37.1=pyhd8ed1ab_0
- xarray=2022.6.0=pyhd8ed1ab_1
- xcb-util=0.4.0=h166bdaf_0
- xcb-util-image=0.4.0=h166bdaf_0
- xcb-util-keysyms=0.4.0=h166bdaf_0
- xcb-util-renderutil=0.3.9=h166bdaf_0
- xcb-util-wm=0.4.1=h166bdaf_0
- xerces-c=3.2.3=h55805fa_5
- xorg-kbproto=1.0.7=h7f98852_1002
- xorg-libice=1.0.10=h7f98852_0
- xorg-libsm=1.2.3=hd9c2040_1000
- xorg-libx11=1.7.2=h7f98852_0
- xorg-libxau=1.0.9=h7f98852_0
- xorg-libxdmcp=1.1.3=h7f98852_0
- xorg-libxext=1.3.4=h7f98852_1
- xorg-libxrender=0.9.10=h7f98852_1003
- xorg-renderproto=0.11.1=h7f98852_1002
- xorg-xextproto=7.3.0=h7f98852_1002
- xorg-xproto=7.0.31=h7f98852_1007
- xz=5.2.6=h166bdaf_0
- yamale=4.0.4=pyh6c4a22f_0
- yaml=0.2.5=h7f98852_2
- zeromq=4.3.4=h9c3ff4c_1
- zfp=1.0.0=h27087fc_1
- zict=2.2.0=pyhd8ed1ab_0
- zipp=3.8.1=pyhd8ed1ab_0
- zlib=1.2.12=h166bdaf_2
- zlib-ng=2.0.6=h166bdaf_0
- zstd=1.5.2=h6239696_4
- pip:
- astroid==2.12.4
- astropy==5.1
- brotlipy==0.7.0
- cartopy==0.20.3
- cffi==1.15.1
- cftime==1.6.1
- click==8.1.3
- coverage==6.4.4
- cryptography==37.0.4
- cytoolz==0.12.0
- debugpy==1.6.3
- fiona==1.8.21
- fonttools==4.37.1
- gdal==3.5.1
- h5py==3.7.0
- imagecodecs==2022.8.8
- importlib-metadata==4.11.4
- ipykernel==6.14.0
- ipython==8.4.0
- jupyter-core==4.11.1
- kiwisolver==1.4.4
- lazy-object-proxy==1.7.1
- llvmlite==0.38.1
- lz4==4.0.0
- markupsafe==2.1.1
- matplotlib==3.5.3
- msgpack==1.0.4
- netcdf4==1.6.0
- numba==0.55.2
- numpy==1.22.4
- pandas==1.4.3
- pillow==9.2.0
- pluggy==1.0.0
- psutil==5.9.1
- pyerfa==2.0.0.1
- pymaxflow==1.2.13
- pyproj==3.3.1
- pyqt5==5.15.7
- pyqt5-sip==12.11.0
- pyrsistent==0.18.1
- pytest==7.1.2
- pywavelets==1.3.0
- pyyaml==6.0
- pyzmq==23.2.1
- rasterio==1.3.2
- scikit-image==0.19.3
- scipy==1.9.0
- shapely==1.8.4
- sip==6.6.2
- tornado==6.1
- unicodedata2==14.0.0
- wrapt==1.14.1
pip list
N/A
Based on the traceback, that seems like it's a problem with Shapely. Can you try rolling back to an older version of Shapely and see if that eliminates the error?
Hi,
Thanks for your support. I've been able to test each shapely version from 1.8.4 down to 1.8.0 with the same error. I can't go further because of conflicting packages.
Regards,