cartopy icon indicating copy to clipboard operation
cartopy copied to clipboard

Plot fails when using 10m NaturalEarthFeature land data with TranvserseMercator projection

Open jbosman-cs opened this issue 3 years ago • 2 comments

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

jbosman-cs avatar Aug 30 '22 13:08 jbosman-cs

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?

dopplershift avatar Aug 30 '22 18:08 dopplershift

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,

jbosman-cs avatar Aug 31 '22 09:08 jbosman-cs