cartopy
cartopy copied to clipboard
Projections with non-Earth radii do not work correctly
Description
Cartopy projections / coordinate systems seem to assume the Earth's semi-major axis and if initialised with a non-Earth value fail to display in Jupyter Lab because of a proj4 error.
This is related to a similar issue in iris, see point 2 in this issue: https://github.com/SciTools/iris/issues/4582
The reason for this error are on the following lines of code:
- https://github.com/SciTools/cartopy/blob/22cdafca511744143c5b673598a1889f169c1e3d/lib/cartopy/mpl/geoaxes.py#L1498
- https://github.com/SciTools/cartopy/blob/22cdafca511744143c5b673598a1889f169c1e3d/lib/cartopy/mpl/ticker.py#L23
both of which assume a
PlateCarree()
projection with default parameters.
This is probably not a common problem at all, but may be a symptom of some Earth-centric assumptions and/or underlying bugs. So I think it would be great if this could be fixed at some point.
Code to reproduce
The quickest example to reproduce this bug is to run the following in Jupyter:
ccrs.PlateCarree(globe=ccrs.Globe(semimajor_axis=12345))
Traceback
ProjError: Error creating Transformer from CRS.: (Internal Proj Error: proj_create_operations: Source and target ellipsoid do not belong to the same celestial body)
Full traceback
---------------------------------------------------------------------------
ProjError Traceback (most recent call last)
File ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/IPython/core/formatters.py:343, in BaseFormatter.__call__(self, obj)
341 method = get_real_method(obj, self.print_method)
342 if method is not None:
--> 343 return method()
344 return None
345 else:
File ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/cartopy/crs.py:765, in Projection._repr_html_(self)
763 ax.gridlines()
764 buf = io.StringIO()
--> 765 fig.savefig(buf, format='svg', bbox_inches='tight')
766 plt.close(fig)
767 # "Rewind" the buffer to the start and return it as an svg string.
File ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/matplotlib/figure.py:3019, in Figure.savefig(self, fname, transparent, **kwargs)
3015 for ax in self.axes:
3016 stack.enter_context(
3017 ax.patch._cm_set(facecolor='none', edgecolor='none'))
-> 3019 self.canvas.print_figure(fname, **kwargs)
File ~/mambaforge/envs/iris-dev/lib/python3.8/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 ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/matplotlib/artist.py:73, in _finalize_rasterization.<locals>.draw_wrapper(artist, renderer, *args, **kwargs)
71 @wraps(draw)
72 def draw_wrapper(artist, renderer, *args, **kwargs):
---> 73 result = draw(artist, renderer, *args, **kwargs)
74 if renderer._rasterizing:
75 renderer.stop_rasterizing()
File ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/matplotlib/artist.py:50, in allow_rasterization.<locals>.draw_wrapper(artist, renderer)
47 if artist.get_agg_filter() is not None:
48 renderer.start_filter()
---> 50 return draw(artist, renderer)
51 finally:
52 if artist.get_agg_filter() is not None:
File ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/matplotlib/figure.py:2810, in Figure.draw(self, renderer)
2807 # ValueError can occur when resizing a window.
2809 self.patch.draw(renderer)
-> 2810 mimage._draw_list_compositing_images(
2811 renderer, self, artists, self.suppressComposite)
2813 for sfig in self.subfigs:
2814 sfig.draw(renderer)
File ~/mambaforge/envs/iris-dev/lib/python3.8/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 ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/matplotlib/artist.py:50, in allow_rasterization.<locals>.draw_wrapper(artist, renderer)
47 if artist.get_agg_filter() is not None:
48 renderer.start_filter()
---> 50 return draw(artist, renderer)
51 finally:
52 if artist.get_agg_filter() is not None:
File ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/cartopy/mpl/geoaxes.py:543, in GeoAxes.draw(self, renderer, **kwargs)
535 """
536 Extend the standard behaviour of :func:`matplotlib.axes.Axes.draw`.
537
(...)
540 been set.
541 """
542 # Shared processing steps
--> 543 self._draw_preprocess(renderer)
545 # XXX This interface needs a tidy up:
546 # image drawing on pan/zoom;
547 # caching the resulting image;
548 # buffering the result by 10%...;
549 if not self._done_img_factory:
File ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/cartopy/mpl/geoaxes.py:517, in GeoAxes._draw_preprocess(self, renderer)
515 self.apply_aspect()
516 for gl in self._gridliners:
--> 517 gl._draw_gridliner(renderer=renderer)
File ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/cartopy/mpl/gridliner.py:642, in Gridliner._draw_gridliner(self, nx, ny, renderer)
639 self._labels.clear()
641 # Inits
--> 642 lon_lim, lat_lim = self._axes_domain(nx=nx, ny=ny)
643 transform = self._crs_transform()
644 n_steps = self.n_steps
File ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/cartopy/mpl/gridliner.py:1194, in Gridliner._axes_domain(self, nx, ny)
1190 x, y = np.meshgrid(x, y)
1192 coords = np.column_stack((x.ravel(), y.ravel()))
-> 1194 in_data = desired_trans.transform(coords)
1196 ax_to_bkg_patch = self.axes.transAxes - self.axes.patch.get_transform()
1198 # convert the coordinates of the data to the background patches
1199 # coordinates
File ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/matplotlib/transforms.py:1503, in Transform.transform(self, values)
1500 values = values.reshape((-1, self.input_dims))
1502 # Transform the values
-> 1503 res = self.transform_affine(self.transform_non_affine(values))
1505 # Convert the result back to the shape of the input values.
1506 if ndim == 0:
File ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/matplotlib/transforms.py:2428, in CompositeGenericTransform.transform_non_affine(self, points)
2426 return self._a.transform_non_affine(points)
2427 else:
-> 2428 return self._b.transform_non_affine(
2429 self._a.transform(points))
File ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/cartopy/mpl/geoaxes.py:134, in InterProjectionTransform.transform_non_affine(self, xy)
132 prj = self.target_projection
133 if isinstance(xy, np.ndarray):
--> 134 return prj.transform_points(self.source_projection,
135 xy[:, 0], xy[:, 1])[:, 0:2]
136 else:
137 x, y = xy
File ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/cartopy/crs.py:408, in CRS.transform_points(self, src_crs, x, y, z, trap)
405 x[to_180] = (((x[to_180] + 180) % 360) - 180)
406 try:
407 result[:, 0], result[:, 1], result[:, 2] = \
--> 408 _safe_pj_transform(src_crs, self, x, y, z, trap=trap)
409 except ProjError as err:
410 msg = str(err).lower()
File ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/cartopy/crs.py:50, in _safe_pj_transform(src_crs, tgt_crs, x, y, z, trap)
49 def _safe_pj_transform(src_crs, tgt_crs, x, y, z=None, trap=True):
---> 50 transformer = _get_transformer_from_crs(src_crs, tgt_crs)
51 transformed_coords = transformer.transform(x, y, z, errcheck=trap)
52 if z is None:
File ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/cartopy/crs.py:46, in _get_transformer_from_crs(src_crs, tgt_crs)
44 @lru_cache()
45 def _get_transformer_from_crs(src_crs, tgt_crs):
---> 46 return Transformer.from_crs(src_crs, tgt_crs, always_xy=True)
File ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/pyproj/transformer.py:565, in Transformer.from_crs(crs_from, crs_to, skip_equivalent, always_xy, area_of_interest, authority, accuracy, allow_ballpark)
558 if skip_equivalent:
559 warnings.warn(
560 "skip_equivalent is deprecated.",
561 DeprecationWarning,
562 stacklevel=2,
563 )
--> 565 return Transformer(
566 TransformerFromCRS(
567 cstrencode(CRS.from_user_input(crs_from).srs),
568 cstrencode(CRS.from_user_input(crs_to).srs),
569 always_xy=always_xy,
570 area_of_interest=area_of_interest,
571 authority=authority,
572 accuracy=accuracy if accuracy is None else str(accuracy),
573 allow_ballpark=allow_ballpark,
574 )
575 )
File ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/pyproj/transformer.py:310, in Transformer.__init__(self, transformer_maker)
304 raise ProjError(
305 "Transformer must be initialized using: "
306 "'from_crs', 'from_pipeline', or 'from_proj'."
307 )
309 self._local = TransformerLocal()
--> 310 self._local.transformer = transformer_maker()
311 self._transformer_maker = transformer_maker
File ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/pyproj/transformer.py:97, in TransformerFromCRS.__call__(self)
91 def __call__(self) -> _Transformer:
92 """
93 Returns
94 -------
95 _Transformer
96 """
---> 97 return _Transformer.from_crs(
98 self.crs_from,
99 self.crs_to,
100 always_xy=self.always_xy,
101 area_of_interest=self.area_of_interest,
102 authority=self.authority,
103 accuracy=self.accuracy,
104 allow_ballpark=self.allow_ballpark,
105 )
File pyproj/_transformer.pyx:1001, in pyproj._transformer._Transformer.from_crs()
ProjError: Error creating Transformer from CRS.: (Internal Proj Error: proj_create_operations: Source and target ellipsoid do not belong to the same celestial body)
<Derived Projected CRS: +proj=eqc +ellps=WGS84 +a=12345 +lon_0=0.0 +to_met ...>
Name: unknown
Axis Info [cartesian]:
- E[east]: Easting (unknown)
- N[north]: Northing (unknown)
- h[up]: Ellipsoidal height (metre)
Area of Use:
- undefined
Coordinate Operation:
- name: unknown
- method: Equidistant Cylindrical
Datum: unknown
- Ellipsoid: unknown
- Prime Meridian: Reference meridian
---------------------------------------------------------------------------
ProjError Traceback (most recent call last)
File ~/mambaforge/envs/iris-dev/lib/python3.8/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 ~/mambaforge/envs/iris-dev/lib/python3.8/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 ~/mambaforge/envs/iris-dev/lib/python3.8/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 ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/matplotlib/artist.py:73, in _finalize_rasterization.<locals>.draw_wrapper(artist, renderer, *args, **kwargs)
71 @wraps(draw)
72 def draw_wrapper(artist, renderer, *args, **kwargs):
---> 73 result = draw(artist, renderer, *args, **kwargs)
74 if renderer._rasterizing:
75 renderer.stop_rasterizing()
File ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/matplotlib/artist.py:50, in allow_rasterization.<locals>.draw_wrapper(artist, renderer)
47 if artist.get_agg_filter() is not None:
48 renderer.start_filter()
---> 50 return draw(artist, renderer)
51 finally:
52 if artist.get_agg_filter() is not None:
File ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/matplotlib/figure.py:2810, in Figure.draw(self, renderer)
2807 # ValueError can occur when resizing a window.
2809 self.patch.draw(renderer)
-> 2810 mimage._draw_list_compositing_images(
2811 renderer, self, artists, self.suppressComposite)
2813 for sfig in self.subfigs:
2814 sfig.draw(renderer)
File ~/mambaforge/envs/iris-dev/lib/python3.8/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 ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/matplotlib/artist.py:50, in allow_rasterization.<locals>.draw_wrapper(artist, renderer)
47 if artist.get_agg_filter() is not None:
48 renderer.start_filter()
---> 50 return draw(artist, renderer)
51 finally:
52 if artist.get_agg_filter() is not None:
File ~/mambaforge/envs/iris-dev/lib/python3.8/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 ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/matplotlib/artist.py:50, in allow_rasterization.<locals>.draw_wrapper(artist, renderer)
47 if artist.get_agg_filter() is not None:
48 renderer.start_filter()
---> 50 return draw(artist, renderer)
51 finally:
52 if artist.get_agg_filter() is not None:
File ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/matplotlib/axes/_base.py:3082, in _AxesBase.draw(self, renderer)
3079 a.draw(renderer)
3080 renderer.stop_rasterizing()
-> 3082 mimage._draw_list_compositing_images(
3083 renderer, self, artists, self.figure.suppressComposite)
3085 renderer.close_group('axes')
3086 self.stale = False
File ~/mambaforge/envs/iris-dev/lib/python3.8/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 ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/matplotlib/artist.py:50, in allow_rasterization.<locals>.draw_wrapper(artist, renderer)
47 if artist.get_agg_filter() is not None:
48 renderer.start_filter()
---> 50 return draw(artist, renderer)
51 finally:
52 if artist.get_agg_filter() is not None:
File ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/cartopy/mpl/feature_artist.py:147, in FeatureArtist.draw(self, renderer, *args, **kwargs)
145 extent = None
146 try:
--> 147 extent = ax.get_extent(feature_crs)
148 except ValueError:
149 warnings.warn('Unable to determine extent. Defaulting to global.')
File ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/cartopy/mpl/geoaxes.py:814, in GeoAxes.get_extent(self, crs)
805 def get_extent(self, crs=None):
806 """
807 Get the extent (x0, x1, y0, y1) of the map in the given coordinate
808 system.
(...)
812
813 """
--> 814 p = self._get_extent_geom(crs)
815 r = p.bounds
816 x1, y1, x2, y2 = r
File ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/cartopy/mpl/geoaxes.py:859, in GeoAxes._get_extent_geom(self, crs)
856 eroded_boundary = boundary_poly.buffer(-self.projection.threshold)
857 geom_in_src_proj = eroded_boundary.intersection(
858 domain_in_src_proj)
--> 859 geom_in_crs = proj.project_geometry(geom_in_src_proj,
860 self.projection)
861 else:
862 geom_in_crs = boundary_poly.intersection(domain_in_src_proj)
File ~/mambaforge/envs/iris-dev/lib/python3.8/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 ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/cartopy/crs.py:948, in Projection._project_polygon(self, polygon, src_crs)
946 multi_lines = []
947 for src_ring in [polygon.exterior] + list(polygon.interiors):
--> 948 p_rings, p_mline = self._project_linear_ring(src_ring, src_crs)
949 if p_rings:
950 rings.extend(p_rings)
File ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/cartopy/crs.py:824, in Projection._project_linear_ring(self, linear_ring, src_crs)
819 debug = False
820 # 1) Resolve the initial lines into projected segments
821 # 1abc
822 # def23ghi
823 # jkl41
--> 824 multi_line_string = cartopy.trace.project_linear(linear_ring,
825 src_crs, self)
827 # Threshold for whether a point is close enough to be the same
828 # point as another.
829 threshold = max(np.abs(self.x_limits + self.y_limits)) * 1e-5
File lib/cartopy/trace.pyx:630, in cartopy.trace.project_linear()
File lib/cartopy/trace.pyx:591, in cartopy.trace._interpolator()
File lib/cartopy/trace.pyx:202, in cartopy.trace.Interpolator.init()
File ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/pyproj/transformer.py:565, in Transformer.from_crs(crs_from, crs_to, skip_equivalent, always_xy, area_of_interest, authority, accuracy, allow_ballpark)
558 if skip_equivalent:
559 warnings.warn(
560 "skip_equivalent is deprecated.",
561 DeprecationWarning,
562 stacklevel=2,
563 )
--> 565 return Transformer(
566 TransformerFromCRS(
567 cstrencode(CRS.from_user_input(crs_from).srs),
568 cstrencode(CRS.from_user_input(crs_to).srs),
569 always_xy=always_xy,
570 area_of_interest=area_of_interest,
571 authority=authority,
572 accuracy=accuracy if accuracy is None else str(accuracy),
573 allow_ballpark=allow_ballpark,
574 )
575 )
File ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/pyproj/transformer.py:310, in Transformer.__init__(self, transformer_maker)
304 raise ProjError(
305 "Transformer must be initialized using: "
306 "'from_crs', 'from_pipeline', or 'from_proj'."
307 )
309 self._local = TransformerLocal()
--> 310 self._local.transformer = transformer_maker()
311 self._transformer_maker = transformer_maker
File ~/mambaforge/envs/iris-dev/lib/python3.8/site-packages/pyproj/transformer.py:97, in TransformerFromCRS.__call__(self)
91 def __call__(self) -> _Transformer:
92 """
93 Returns
94 -------
95 _Transformer
96 """
---> 97 return _Transformer.from_crs(
98 self.crs_from,
99 self.crs_to,
100 always_xy=self.always_xy,
101 area_of_interest=self.area_of_interest,
102 authority=self.authority,
103 accuracy=self.accuracy,
104 allow_ballpark=self.allow_ballpark,
105 )
File pyproj/_transformer.pyx:1001, in pyproj._transformer._Transformer.from_crs()
ProjError: Error creating Transformer from CRS.: (Internal Proj Error: proj_create_operations: Source and target ellipsoid do not belong to the same celestial body)
Full environment definition
Operating system
Ubuntu 20.04 LTS
Cartopy version
0.20.2
conda list
# Name Version Build Channel
_libgcc_mutex 0.1 conda_forge conda-forge
_openmp_mutex 4.5 1_gnu conda-forge
alabaster 0.7.12 py_0 conda-forge
alsa-lib 1.2.3 h516909a_0 conda-forge
antlr-python-runtime 4.7.2 py38h578d9bd_1003 conda-forge
asttokens 2.0.5 pyhd8ed1ab_0 conda-forge
atk-1.0 2.36.0 h3371d22_4 conda-forge
babel 2.9.1 pyh44b312d_0 conda-forge
backcall 0.2.0 pyh9f0ad1d_0 conda-forge
backports 1.0 py_2 conda-forge
backports.functools_lru_cache 1.6.4 pyhd8ed1ab_0 conda-forge
black 22.1.0 pyhd8ed1ab_0 conda-forge
brotli 1.0.9 h7f98852_6 conda-forge
brotli-bin 1.0.9 h7f98852_6 conda-forge
brotlipy 0.7.0 py38h497a2fe_1003 conda-forge
bzip2 1.0.8 h7f98852_4 conda-forge
c-ares 1.18.1 h7f98852_0 conda-forge
ca-certificates 2021.10.8 ha878542_0 conda-forge
cairo 1.16.0 ha00ac49_1009 conda-forge
cartopy 0.20.2 py38ha217159_3 conda-forge
certifi 2021.10.8 py38h578d9bd_1 conda-forge
cf-units 3.0.1 py38h6c62de6_2 conda-forge
cffi 1.15.0 py38h3931269_0 conda-forge
cfgv 3.3.1 pyhd8ed1ab_0 conda-forge
cftime 1.5.2 py38h6c62de6_0 conda-forge
charset-normalizer 2.0.12 pyhd8ed1ab_0 conda-forge
click 8.0.4 py38h578d9bd_0 conda-forge
cloudpickle 2.0.0 pyhd8ed1ab_0 conda-forge
colorama 0.4.4 pyh9f0ad1d_0 conda-forge
cryptography 36.0.1 py38h3e25421_0 conda-forge
curl 7.81.0 h2574ce0_0 conda-forge
cycler 0.11.0 pyhd8ed1ab_0 conda-forge
dask-core 2022.2.0 pyhd8ed1ab_0 conda-forge
dataclasses 0.8 pyhc8e2a94_3 conda-forge
dbus 1.13.6 h5008d03_3 conda-forge
debugpy 1.5.1 py38h709712a_0 conda-forge
decorator 5.1.1 pyhd8ed1ab_0 conda-forge
distlib 0.3.4 pyhd8ed1ab_0 conda-forge
docutils 0.17.1 py38h578d9bd_1 conda-forge
entrypoints 0.4 pyhd8ed1ab_0 conda-forge
esmf 8.2.0 mpi_mpich_h4975321_100 conda-forge
esmpy 8.2.0 mpi_mpich_py38h9147699_101 conda-forge
executing 0.8.2 pyhd8ed1ab_0 conda-forge
expat 2.4.5 h27087fc_0 conda-forge
filelock 3.6.0 pyhd8ed1ab_0 conda-forge
font-ttf-dejavu-sans-mono 2.37 hab24e00_0 conda-forge
font-ttf-inconsolata 3.000 h77eed37_0 conda-forge
font-ttf-source-code-pro 2.038 h77eed37_0 conda-forge
font-ttf-ubuntu 0.83 hab24e00_0 conda-forge
fontconfig 2.13.96 ha180cfb_0 conda-forge
fonts-conda-ecosystem 1 0 conda-forge
fonts-conda-forge 1 0 conda-forge
fonttools 4.29.1 py38h497a2fe_0 conda-forge
freetype 2.10.4 h0708190_1 conda-forge
fribidi 1.0.10 h36c2ea0_0 conda-forge
fsspec 2022.1.0 pyhd8ed1ab_0 conda-forge
gdk-pixbuf 2.42.6 h04a7f16_0 conda-forge
geos 3.10.2 h9c3ff4c_0 conda-forge
gettext 0.19.8.1 h73d1719_1008 conda-forge
giflib 5.2.1 h36c2ea0_2 conda-forge
graphite2 1.3.13 h58526e2_1001 conda-forge
graphviz 2.50.0 h8e749b2_2 conda-forge
gst-plugins-base 1.18.5 hf529b03_3 conda-forge
gstreamer 1.18.5 h9f60fe5_3 conda-forge
gtk2 2.24.33 h90689f9_2 conda-forge
gts 0.7.6 h64030ff_2 conda-forge
harfbuzz 3.4.0 hb4a5f5f_0 conda-forge
hdf4 4.2.15 h10796ff_3 conda-forge
hdf5 1.12.1 mpi_mpich_h9c45103_3 conda-forge
icu 69.1 h9c3ff4c_0 conda-forge
identify 2.4.10 pyhd8ed1ab_0 conda-forge
idna 3.3 pyhd8ed1ab_0 conda-forge
imagehash 4.2.1 pyhd8ed1ab_0 conda-forge
imagesize 1.3.0 pyhd8ed1ab_0 conda-forge
importlib-metadata 4.11.1 py38h578d9bd_0 conda-forge
ipykernel 6.9.1 py38he5a9106_0 conda-forge
ipython 8.0.1 py38h578d9bd_2 conda-forge
iris-sample-data 2.4.0 pyhd8ed1ab_0 conda-forge
jbig 2.1 h7f98852_2003 conda-forge
jedi 0.17.2 pypi_0 pypi
jinja2 3.0.3 pyhd8ed1ab_0 conda-forge
jpeg 9e h7f98852_0 conda-forge
jupyter_client 7.1.2 pyhd8ed1ab_0 conda-forge
jupyter_core 4.9.2 py38h578d9bd_0 conda-forge
kiwisolver 1.3.2 py38h1fd1430_1 conda-forge
krb5 1.19.2 hcc1bbae_3 conda-forge
lcms2 2.12 hddcbb42_0 conda-forge
ld_impl_linux-64 2.36.1 hea4e1c9_2 conda-forge
lerc 3.0 h9c3ff4c_0 conda-forge
libblas 3.9.0 13_linux64_openblas conda-forge
libbrotlicommon 1.0.9 h7f98852_6 conda-forge
libbrotlidec 1.0.9 h7f98852_6 conda-forge
libbrotlienc 1.0.9 h7f98852_6 conda-forge
libcblas 3.9.0 13_linux64_openblas conda-forge
libclang 13.0.1 default_hc23dcda_0 conda-forge
libcurl 7.81.0 h2574ce0_0 conda-forge
libdeflate 1.10 h7f98852_0 conda-forge
libedit 3.1.20191231 he28a2e2_2 conda-forge
libev 4.33 h516909a_1 conda-forge
libevent 2.1.10 h9b69904_4 conda-forge
libffi 3.4.2 h7f98852_5 conda-forge
libgcc-ng 11.2.0 h1d223b6_12 conda-forge
libgd 2.3.3 h3cfcdeb_1 conda-forge
libgfortran-ng 11.2.0 h69a702a_12 conda-forge
libgfortran5 11.2.0 h5c6108e_12 conda-forge
libglib 2.70.2 h174f98d_4 conda-forge
libgomp 11.2.0 h1d223b6_12 conda-forge
libiconv 1.16 h516909a_0 conda-forge
liblapack 3.9.0 13_linux64_openblas conda-forge
libllvm13 13.0.1 hf817b99_1 conda-forge
libmo_unpack 3.1.2 hf484d3e_1001 conda-forge
libnetcdf 4.8.1 mpi_mpich_h319fa22_1 conda-forge
libnghttp2 1.46.0 h812cca2_0 conda-forge
libnsl 2.0.0 h7f98852_0 conda-forge
libogg 1.3.4 h7f98852_1 conda-forge
libopenblas 0.3.18 pthreads_h8fe5266_0 conda-forge
libopus 1.3.1 h7f98852_1 conda-forge
libpng 1.6.37 h21135ba_2 conda-forge
libpq 14.2 hd57d9b9_0 conda-forge
librsvg 2.52.5 h0a9e6e8_2 conda-forge
libsodium 1.0.18 h36c2ea0_1 conda-forge
libssh2 1.10.0 ha56f1ee_2 conda-forge
libstdcxx-ng 11.2.0 he4da1e4_12 conda-forge
libtiff 4.3.0 h542a066_3 conda-forge
libtool 2.4.6 h9c3ff4c_1008 conda-forge
libuuid 2.32.1 h7f98852_1000 conda-forge
libvorbis 1.3.7 h9c3ff4c_0 conda-forge
libwebp 1.2.2 h3452ae3_0 conda-forge
libwebp-base 1.2.2 h7f98852_1 conda-forge
libxcb 1.13 h7f98852_1004 conda-forge
libxkbcommon 1.0.3 he3ba5ed_0 conda-forge
libxml2 2.9.12 h885dcf4_1 conda-forge
libzip 1.8.0 h4de3113_1 conda-forge
libzlib 1.2.11 h36c2ea0_1013 conda-forge
locket 0.2.1 pypi_0 pypi
lz4-c 1.9.3 h9c3ff4c_1 conda-forge
markupsafe 2.1.0 py38h0a891b7_0 conda-forge
matplotlib 3.5.1 py38h578d9bd_0 conda-forge
matplotlib-base 3.5.1 py38hf4fb855_0 conda-forge
matplotlib-inline 0.1.3 pyhd8ed1ab_0 conda-forge
mo_pack 0.2.0 py38h6c62de6_1006 conda-forge
mpi 1.0 mpich conda-forge
mpi4py 3.1.3 py38he865349_0 conda-forge
mpich 3.4.3 h846660c_100 conda-forge
munkres 1.1.4 pyh9f0ad1d_0 conda-forge
mypy_extensions 0.4.3 py38h578d9bd_4 conda-forge
mysql-common 8.0.28 ha770c72_0 conda-forge
mysql-libs 8.0.28 hfa10184_0 conda-forge
nc-time-axis 1.4.0 pyhd8ed1ab_0 conda-forge
ncurses 6.3 h9c3ff4c_0 conda-forge
nest-asyncio 1.5.4 pyhd8ed1ab_0 conda-forge
netcdf-fortran 4.5.4 mpi_mpich_h1364a43_0 conda-forge
netcdf4 1.5.8 nompi_py38h2823cc8_101 conda-forge
nodeenv 1.6.0 pyhd8ed1ab_0 conda-forge
nose 1.3.7 py_1006 conda-forge
nspr 4.32 h9c3ff4c_1 conda-forge
nss 3.74 hb5efdd6_0 conda-forge
numpy 1.22.2 py38h6ae9a64_0 conda-forge
olefile 0.46 pyh9f0ad1d_1 conda-forge
openssl 1.1.1l h7f98852_0 conda-forge
packaging 21.3 pyhd8ed1ab_0 conda-forge
pandas 1.4.1 py38h43a58ef_0 conda-forge
pango 1.50.3 h9967ed3_0 conda-forge
parso 0.7.1 pypi_0 pypi
partd 1.2.0 pyhd8ed1ab_0 conda-forge
pathspec 0.9.0 pyhd8ed1ab_0 conda-forge
pcre 8.45 h9c3ff4c_0 conda-forge
pexpect 4.8.0 pyh9f0ad1d_2 conda-forge
pickleshare 0.7.5 py_1003 conda-forge
pillow 6.2.2 py38h9776b28_0 conda-forge
pip 22.0.3 pyhd8ed1ab_0 conda-forge
pixman 0.40.0 h36c2ea0_0 conda-forge
platformdirs 2.5.1 pyhd8ed1ab_0 conda-forge
pluggy 1.0.0 pypi_0 pypi
pockets 0.9.1 py_0 conda-forge
pre-commit 2.17.0 py38h578d9bd_0 conda-forge
proj 8.2.1 h277dcde_0 conda-forge
prompt-toolkit 3.0.27 pyha770c72_0 conda-forge
pthread-stubs 0.4 h36c2ea0_1001 conda-forge
ptyprocess 0.7.0 pyhd3deb0d_0 conda-forge
pure_eval 0.2.2 pyhd8ed1ab_0 conda-forge
pycparser 2.21 pyhd8ed1ab_0 conda-forge
pygments 2.11.2 pyhd8ed1ab_0 conda-forge
pyopenssl 22.0.0 pyhd8ed1ab_0 conda-forge
pyparsing 3.0.7 pyhd8ed1ab_0 conda-forge
pyproj 3.3.0 py38h5383654_1 conda-forge
pyqt 5.12.3 py38h578d9bd_8 conda-forge
pyqt-impl 5.12.3 py38h0ffb2e6_8 conda-forge
pyqt5-sip 4.19.18 py38h709712a_8 conda-forge
pyqtchart 5.12 py38h7400c14_8 conda-forge
pyqtwebengine 5.12.1 py38h7400c14_8 conda-forge
pyshp 2.2.0 pyhd8ed1ab_0 conda-forge
pysocks 1.7.1 py38h578d9bd_4 conda-forge
python 3.8.12 ha38a3c6_3_cpython conda-forge
python-dateutil 2.8.2 pyhd8ed1ab_0 conda-forge
python-jsonrpc-server 0.4.0 pypi_0 pypi
python-language-server 0.36.2 pypi_0 pypi
python-stratify 0.2.post0 py38h6c62de6_1 conda-forge
python-xxhash 2.0.2 py38h497a2fe_1 conda-forge
python_abi 3.8 2_cp38 conda-forge
pytz 2021.3 pyhd8ed1ab_0 conda-forge
pywavelets 1.2.0 py38h6c62de6_1 conda-forge
pyyaml 6.0 py38h497a2fe_3 conda-forge
pyzmq 22.3.0 py38h2035c66_1 conda-forge
qt 5.12.9 ha98a1a1_5 conda-forge
readline 8.1 h46c0cb4_0 conda-forge
requests 2.27.1 pyhd8ed1ab_0 conda-forge
scipy 1.8.0 py38h56a6a73_1 conda-forge
scitools-iris 3.3.dev0 dev_0 <develop>
setuptools 60.9.3 py38h578d9bd_0 conda-forge
shapely 1.8.0 py38h596eeab_5 conda-forge
six 1.16.0 pyh6c4a22f_0 conda-forge
snowballstemmer 2.2.0 pyhd8ed1ab_0 conda-forge
sphinx 4.4.0 pyh6c4a22f_1 conda-forge
sphinx-copybutton 0.5.0 pyhd8ed1ab_0 conda-forge
sphinx-gallery 0.10.1 pyhd8ed1ab_0 conda-forge
sphinx-panels 0.6.0 pyhd8ed1ab_0 conda-forge
sphinx_rtd_theme 1.0.0 pyhd8ed1ab_0 conda-forge
sphinxcontrib-applehelp 1.0.2 py_0 conda-forge
sphinxcontrib-devhelp 1.0.2 py_0 conda-forge
sphinxcontrib-htmlhelp 2.0.0 pyhd8ed1ab_0 conda-forge
sphinxcontrib-jsmath 1.0.1 py_0 conda-forge
sphinxcontrib-napoleon 0.7 py_0 conda-forge
sphinxcontrib-qthelp 1.0.3 py_0 conda-forge
sphinxcontrib-serializinghtml 1.1.5 pyhd8ed1ab_1 conda-forge
sqlite 3.37.0 h9cd32fc_0 conda-forge
stack_data 0.2.0 pyhd8ed1ab_0 conda-forge
tk 8.6.12 h27826a3_0 conda-forge
toml 0.10.2 pyhd8ed1ab_0 conda-forge
tomli 2.0.1 pyhd8ed1ab_0 conda-forge
toolz 0.11.2 pyhd8ed1ab_0 conda-forge
tornado 6.1 py38h497a2fe_2 conda-forge
traitlets 5.1.1 pyhd8ed1ab_0 conda-forge
typed-ast 1.5.2 py38h497a2fe_0 conda-forge
typing_extensions 4.1.1 pyha770c72_0 conda-forge
tzdata 2021e he74cb21_0 conda-forge
udunits2 2.2.28 hc3e0081_0 conda-forge
ujson 5.1.0 pypi_0 pypi
ukkonen 1.0.1 py38h1fd1430_1 conda-forge
unicodedata2 14.0.0 py38h497a2fe_0 conda-forge
urllib3 1.26.8 pyhd8ed1ab_1 conda-forge
virtualenv 20.13.1 py38h578d9bd_0 conda-forge
wcwidth 0.2.5 pyh9f0ad1d_2 conda-forge
wheel 0.37.1 pyhd8ed1ab_0 conda-forge
xorg-kbproto 1.0.7 h7f98852_1002 conda-forge
xorg-libice 1.0.10 h7f98852_0 conda-forge
xorg-libsm 1.2.3 hd9c2040_1000 conda-forge
xorg-libx11 1.7.2 h7f98852_0 conda-forge
xorg-libxau 1.0.9 h7f98852_0 conda-forge
xorg-libxdmcp 1.1.3 h7f98852_0 conda-forge
xorg-libxext 1.3.4 h7f98852_1 conda-forge
xorg-libxrender 0.9.10 h7f98852_1003 conda-forge
xorg-renderproto 0.11.1 h7f98852_1002 conda-forge
xorg-xextproto 7.3.0 h7f98852_1002 conda-forge
xorg-xproto 7.0.31 h7f98852_1007 conda-forge
xxhash 0.8.0 h7f98852_3 conda-forge
xz 5.2.5 h516909a_1 conda-forge
yaml 0.2.5 h7f98852_2 conda-forge
zeromq 4.3.4 h9c3ff4c_1 conda-forge
zipp 3.7.0 pyhd8ed1ab_1 conda-forge
zlib 1.2.11 h36c2ea0_1013 conda-forge
zstd 1.5.2 ha95c52a_0 conda-forge
I was able to plot Mercurian data without a problem by defining both semi-major and semi-minor axes, and setting the keyword argument ellipse to none. I made a Stackoverflow post about it and answered it myself once I got things up and running. https://stackoverflow.com/questions/72523526/is-cartopy-capable-of-plotting-georeferenced-data-from-another-planet-e-g-mar
Thanks for the example @gosselgj! I agree that you can find a workaround and plot data like you did, but I still think there are Earth-centric assumptions/bugs in cartopy such as the one I reported above...
No problem, and I agree that it would be incredibly helpful to implement some non-terrestrial ellipsoids.
Ran into this issue when creating a LambertConformal projection for the Moon with the latest release. Tried modifying a few of the default parameters for this projection, but always got the same error.
Code to reproduce
import cartopy.crs as ccrs
moon = ccrs.Globe(ellipse=None, semimajor_axis=1737400,
semiminor_axis=1737400)
map_proj=ccrs.LambertConformal(globe=moon)
Traceback
ProjError: Error creating Transformer from CRS.: (Internal Proj Error: proj_create_operations: Source and target ellipsoid do not belong to the same celestial body (Moon vs Earth). You may override this check by setting the PROJ_IGNORE_CELESTIAL_BODY environment variable to YES.)
Full traceback
Traceback (most recent call last):
File "/var/folders/n3/mhlpcdr96z3279lyvq_sf1bm0000gn/T/ipykernel_71540/750241958.py", line 1, in <cell line: 0>
map_proj=ccrs.LambertConformal(globe=moon)
File "/Users/cailingallinger/anaconda3/envs/geopkgs3.11/lib/python3.11/site-packages/cartopy/crs.py", line 1786, in __init__
points = self.transform_points(PlateCarree(), lons, lats)
File "/Users/cailingallinger/anaconda3/envs/geopkgs3.11/lib/python3.11/site-packages/cartopy/crs.py", line 417, in transform_points
_safe_pj_transform(src_crs, self, x, y, z, trap=trap)
File "/Users/cailingallinger/anaconda3/envs/geopkgs3.11/lib/python3.11/site-packages/cartopy/crs.py", line 49, in _safe_pj_transform
transformer = _get_transformer_from_crs(src_crs, tgt_crs)
File "/Users/cailingallinger/anaconda3/envs/geopkgs3.11/lib/python3.11/site-packages/cartopy/crs.py", line 45, in _get_transformer_from_crs
return Transformer.from_crs(src_crs, tgt_crs, always_xy=True)
File "/Users/cailingallinger/anaconda3/envs/geopkgs3.11/lib/python3.11/site-packages/pyproj/transformer.py", line 625, in from_crs
return Transformer(
File "/Users/cailingallinger/anaconda3/envs/geopkgs3.11/lib/python3.11/site-packages/pyproj/transformer.py", line 337, in __init__
self._local.transformer = transformer_maker()
File "/Users/cailingallinger/anaconda3/envs/geopkgs3.11/lib/python3.11/site-packages/pyproj/transformer.py", line 105, in __call__
return _Transformer.from_crs(
File "pyproj/_transformer.pyx", line 568, in pyproj._transformer._Transformer.from_crs
File "pyproj/_transformer.pyx", line 344, in pyproj._transformer.proj_create_crs_to_crs
ProjError: Error creating Transformer from CRS.: (Internal Proj Error: proj_create_operations: Source and target ellipsoid do not belong to the same celestial body (Moon vs Earth). You may override this check by setting the PROJ_IGNORE_CELESTIAL_BODY environment variable to YES.)
Full environment definition
Operating system
macOS 10.13.6 High Sierra
Cartopy version
0.22.0
conda list
# Name Version Build Channel
affine 2.4.0 pyhd8ed1ab_0 conda-forge
anyio 4.0.0 pyhd8ed1ab_0 conda-forge
aom 3.6.1 he965462_0 conda-forge
appnope 0.1.3 pyhd8ed1ab_0 conda-forge
argon2-cffi 23.1.0 pyhd8ed1ab_0 conda-forge
argon2-cffi-bindings 21.2.0 py311h2725bcf_4 conda-forge
arrow 1.3.0 pyhd8ed1ab_0 conda-forge
astropy 5.3.4 py311hc9a392d_2 conda-forge
asttokens 2.4.1 pyhd8ed1ab_0 conda-forge
async-lru 2.0.4 pyhd8ed1ab_0 conda-forge
attrs 23.1.0 pyh71513ae_1 conda-forge
aws-c-auth 0.7.5 h671831e_0 conda-forge
aws-c-cal 0.6.7 h50c96e6_0 conda-forge
aws-c-common 0.9.4 h10d778d_0 conda-forge
aws-c-compression 0.2.17 h6cdfeff_4 conda-forge
aws-c-event-stream 0.3.2 h74ccef4_4 conda-forge
aws-c-http 0.7.13 h7fc0988_7 conda-forge
aws-c-io 0.13.35 h3dcb58e_4 conda-forge
aws-c-mqtt 0.9.8 hb951632_0 conda-forge
aws-c-s3 0.3.20 h4b852be_1 conda-forge
aws-c-sdkutils 0.1.12 h6cdfeff_3 conda-forge
aws-checksums 0.1.17 h6cdfeff_3 conda-forge
aws-crt-cpp 0.24.4 hf472077_2 conda-forge
aws-sdk-cpp 1.11.182 hfd15655_2 conda-forge
babel 2.13.1 pyhd8ed1ab_0 conda-forge
backcall 0.2.0 pypi_0 pypi
backports 1.0 pyhd8ed1ab_3 conda-forge
backports.functools_lru_cache 1.6.5 pyhd8ed1ab_0 conda-forge
beautifulsoup4 4.12.2 pyha770c72_0 conda-forge
bleach 6.1.0 pyhd8ed1ab_0 conda-forge
blosc 1.21.5 heccf04b_0 conda-forge
bokeh 3.3.0 pyhd8ed1ab_0 conda-forge
branca 0.7.0 pyhd8ed1ab_0 conda-forge
brotli 1.1.0 h0dc2134_1 conda-forge
brotli-bin 1.1.0 h0dc2134_1 conda-forge
brotli-python 1.1.0 py311hdf8f085_1 conda-forge
bzip2 1.0.8 h10d778d_5 conda-forge
c-ares 1.21.0 h10d778d_0 conda-forge
ca-certificates 2023.7.22 h8857fd0_0 conda-forge
cached-property 1.5.2 hd8ed1ab_1 conda-forge
cached_property 1.5.2 pyha770c72_1 conda-forge
cairo 1.18.0 h99e66fa_0 conda-forge
cartopy 0.22.0 py311h1eadf79_1 conda-forge
certifi 2023.7.22 pyhd8ed1ab_0 conda-forge
cffi 1.16.0 py311hc0b63fd_0 conda-forge
cfitsio 4.3.0 h66f91ea_0 conda-forge
charset-normalizer 3.3.2 pyhd8ed1ab_0 conda-forge
click 8.1.7 unix_pyh707e725_0 conda-forge
click-plugins 1.1.1 py_0 conda-forge
cligj 0.7.2 pyhd8ed1ab_1 conda-forge
cloudpickle 3.0.0 pyhd8ed1ab_0 conda-forge
comm 0.1.4 pyhd8ed1ab_0 conda-forge
contourpy 1.2.0 py311h7bea37d_0 conda-forge
cycler 0.12.1 pyhd8ed1ab_0 conda-forge
cytoolz 0.12.2 py311h2725bcf_1 conda-forge
dask 2023.10.1 pyhd8ed1ab_0 conda-forge
dask-core 2023.10.1 pyhd8ed1ab_0 conda-forge
dav1d 1.2.1 h0dc2134_0 conda-forge
debugpy 1.8.0 py311hdf8f085_1 conda-forge
decorator 5.1.1 pyhd8ed1ab_0 conda-forge
defusedxml 0.7.1 pyhd8ed1ab_0 conda-forge
distributed 2023.10.1 pyhd8ed1ab_0 conda-forge
entrypoints 0.4 pyhd8ed1ab_0 conda-forge
exceptiongroup 1.1.3 pyhd8ed1ab_0 conda-forge
executing 2.0.1 pyhd8ed1ab_0 conda-forge
expat 2.5.0 hf0c8a7f_1 conda-forge
ffmpeg 6.0.0 gpl_h789aacd_105 conda-forge
fiona 1.9.5 py311hf14a637_0 conda-forge
folium 0.14.0 pyhd8ed1ab_0 conda-forge
font-ttf-dejavu-sans-mono 2.37 hab24e00_0 conda-forge
font-ttf-inconsolata 3.000 h77eed37_0 conda-forge
font-ttf-source-code-pro 2.038 h77eed37_0 conda-forge
font-ttf-ubuntu 0.83 hab24e00_0 conda-forge
fontconfig 2.14.2 h5bb23bf_0 conda-forge
fonts-conda-ecosystem 1 0 conda-forge
fonts-conda-forge 1 0 conda-forge
fonttools 4.44.0 py311he705e18_0 conda-forge
fqdn 1.5.1 pyhd8ed1ab_0 conda-forge
freetype 2.12.1 h60636b9_2 conda-forge
freexl 2.0.0 h3ec172f_0 conda-forge
fribidi 1.0.10 hbcb3906_0 conda-forge
fsspec 2023.10.0 pyhca7485f_0 conda-forge
gdal 3.7.3 py311h5646c56_2 conda-forge
geopandas 0.14.0 pyhd8ed1ab_1 conda-forge
geopandas-base 0.14.0 pyha770c72_1 conda-forge
geos 3.12.0 he965462_0 conda-forge
geotiff 1.7.1 h889ec99_14 conda-forge
gettext 0.21.1 h8a4c099_0 conda-forge
gflags 2.2.2 hb1e8313_1004 conda-forge
giflib 5.2.1 hb7f2c08_3 conda-forge
glog 0.6.0 h8ac2a54_0 conda-forge
gmp 6.2.1 h2e338ed_0 conda-forge
gnutls 3.7.8 h207c4f0_0 conda-forge
graphite2 1.3.13 h2e338ed_1001 conda-forge
harfbuzz 8.2.1 h7666e2a_0 conda-forge
hdf4 4.2.15 h8138101_7 conda-forge
hdf5 1.14.2 nompi_hedada53_100 conda-forge
icu 73.2 hf5e326d_0 conda-forge
idna 3.4 pyhd8ed1ab_0 conda-forge
importlib-metadata 6.8.0 pyha770c72_0 conda-forge
importlib_metadata 6.8.0 hd8ed1ab_0 conda-forge
importlib_resources 6.1.0 pyhd8ed1ab_0 conda-forge
ipykernel 6.26.0 pyh3cd1d5f_0 conda-forge
ipython 7.34.0 pypi_0 pypi
ipywidgets 8.1.1 pyhd8ed1ab_0 conda-forge
isoduration 20.11.0 pyhd8ed1ab_0 conda-forge
jasper 4.1.0 h6ff19ee_0 conda-forge
jedi 0.19.1 pyhd8ed1ab_0 conda-forge
jinja2 3.1.2 pyhd8ed1ab_1 conda-forge
joblib 1.3.2 pyhd8ed1ab_0 conda-forge
json-c 0.17 h8e11ae5_0 conda-forge
json5 0.9.14 pyhd8ed1ab_0 conda-forge
jsonpointer 2.4 py311h6eed73b_3 conda-forge
jsonschema 4.19.2 pyhd8ed1ab_0 conda-forge
jsonschema-specifications 2023.7.1 pyhd8ed1ab_0 conda-forge
jsonschema-with-format-nongpl 4.19.2 pyhd8ed1ab_0 conda-forge
jupyter 1.0.0 pyhd8ed1ab_10 conda-forge
jupyter-lsp 2.2.0 pyhd8ed1ab_0 conda-forge
jupyter_client 8.6.0 pyhd8ed1ab_0 conda-forge
jupyter_console 6.6.3 pyhd8ed1ab_0 conda-forge
jupyter_core 5.5.0 py311h6eed73b_0 conda-forge
jupyter_events 0.9.0 pyhd8ed1ab_0 conda-forge
jupyter_server 2.10.0 pyhd8ed1ab_0 conda-forge
jupyter_server_terminals 0.4.4 pyhd8ed1ab_1 conda-forge
jupyterlab 4.0.8 pyhd8ed1ab_0 conda-forge
jupyterlab_pygments 0.2.2 pyhd8ed1ab_0 conda-forge
jupyterlab_server 2.25.0 pyhd8ed1ab_0 conda-forge
jupyterlab_widgets 3.0.9 pyhd8ed1ab_0 conda-forge
kealib 1.5.2 h052fcf7_1 conda-forge
kiwisolver 1.4.5 py311h5fe6e05_1 conda-forge
krb5 1.21.2 hb884880_0 conda-forge
lame 3.100 hb7f2c08_1003 conda-forge
lcms2 2.15 hd6ba6f3_3 conda-forge
lerc 4.0.0 hb486fe8_0 conda-forge
libabseil 20230802.1 cxx17_h048a20a_0 conda-forge
libaec 1.1.2 he965462_1 conda-forge
libarchive 3.7.2 h0b5dc4a_0 conda-forge
libarrow 13.0.0 h6b0247c_14_cpu conda-forge
libass 0.17.1 h80904bb_1 conda-forge
libblas 3.9.0 19_osx64_openblas conda-forge
libboost-headers 1.82.0 h694c41f_6 conda-forge
libbrotlicommon 1.1.0 h0dc2134_1 conda-forge
libbrotlidec 1.1.0 h0dc2134_1 conda-forge
libbrotlienc 1.1.0 h0dc2134_1 conda-forge
libcblas 3.9.0 19_osx64_openblas conda-forge
libcrc32c 1.1.2 he49afe7_0 conda-forge
libcurl 8.4.0 h726d00d_0 conda-forge
libcxx 16.0.6 hd57cbcb_0 conda-forge
libdeflate 1.19 ha4e1b8e_0 conda-forge
libedit 3.1.20191231 h0678c8f_2 conda-forge
libev 4.33 haf1e3a3_1 conda-forge
libevent 2.1.12 ha90c15b_1 conda-forge
libexpat 2.5.0 hf0c8a7f_1 conda-forge
libffi 3.4.2 h0d85af4_5 conda-forge
libgdal 3.7.3 h926149b_2 conda-forge
libgfortran 5.0.0 13_2_0_h97931a8_1 conda-forge
libgfortran5 13.2.0 h2873a65_1 conda-forge
libglib 2.78.1 h6d9ecee_0 conda-forge
libgoogle-cloud 2.12.0 hc0857f6_4 conda-forge
libgrpc 1.59.2 ha7f534c_0 conda-forge
libiconv 1.17 hac89ed1_0 conda-forge
libidn2 2.3.4 hb7f2c08_0 conda-forge
libjpeg-turbo 3.0.0 h0dc2134_1 conda-forge
libkml 1.3.0 hab3ca0e_1018 conda-forge
liblapack 3.9.0 19_osx64_openblas conda-forge
liblapacke 3.9.0 19_osx64_openblas conda-forge
libllvm14 14.0.6 hc8e404f_4 conda-forge
libnetcdf 4.9.2 nompi_h6a32802_112 conda-forge
libnghttp2 1.55.1 hc0a10c5_0 conda-forge
libopenblas 0.3.24 openmp_h48a4ad5_0 conda-forge
libopencv 4.8.1 py311h712aba7_5 conda-forge
libopenvino 2023.1.0 h93d8f39_1 conda-forge
libopenvino-auto-batch-plugin 2023.1.0 h93d8f39_1 conda-forge
libopenvino-auto-plugin 2023.1.0 h93d8f39_1 conda-forge
libopenvino-hetero-plugin 2023.1.0 h93d8f39_1 conda-forge
libopenvino-intel-cpu-plugin 2023.1.0 h93d8f39_1 conda-forge
libopenvino-ir-frontend 2023.1.0 h93d8f39_1 conda-forge
libopenvino-onnx-frontend 2023.1.0 h93d8f39_1 conda-forge
libopenvino-paddle-frontend 2023.1.0 h93d8f39_1 conda-forge
libopenvino-pytorch-frontend 2023.1.0 h93d8f39_1 conda-forge
libopenvino-tensorflow-frontend 2023.1.0 h93d8f39_1 conda-forge
libopenvino-tensorflow-lite-frontend 2023.1.0 h93d8f39_1 conda-forge
libopus 1.3.1 hc929b4f_1 conda-forge
libpng 1.6.39 ha978bb4_0 conda-forge
libpq 16.0 h3df487d_1 conda-forge
libprotobuf 4.24.4 h0ee05dc_0 conda-forge
libre2-11 2023.06.02 h4694dbf_0 conda-forge
librttopo 1.1.0 h23f359d_14 conda-forge
libsodium 1.0.18 hbcb3906_1 conda-forge
libspatialindex 1.9.3 he49afe7_4 conda-forge
libspatialite 5.1.0 h231fb02_0 conda-forge
libsqlite 3.44.0 h92b6c6a_0 conda-forge
libssh2 1.11.0 hd019ec5_0 conda-forge
libtasn1 4.19.0 hb7f2c08_0 conda-forge
libthrift 0.19.0 h064b379_1 conda-forge
libtiff 4.6.0 h684deea_2 conda-forge
libunistring 0.9.10 h0d85af4_0 conda-forge
libutf8proc 2.8.0 hb7f2c08_0 conda-forge
libvpx 1.13.1 he965462_0 conda-forge
libwebp-base 1.3.2 h0dc2134_0 conda-forge
libxcb 1.15 hb7f2c08_0 conda-forge
libxml2 2.11.5 h3346baf_1 conda-forge
libzip 1.10.1 hc158999_3 conda-forge
libzlib 1.2.13 h8a1eda9_5 conda-forge
llvm-openmp 17.0.4 hb6ac08f_0 conda-forge
llvmlite 0.40.1 py311hcbb5c6d_0 conda-forge
locket 1.0.0 pyhd8ed1ab_0 conda-forge
lz4 4.3.2 py311hbaf8d61_1 conda-forge
lz4-c 1.9.4 hf0c8a7f_0 conda-forge
lzo 2.10 haf1e3a3_1000 conda-forge
mapclassify 2.6.1 pyhd8ed1ab_0 conda-forge
markupsafe 2.1.3 py311h2725bcf_1 conda-forge
matplotlib 3.8.1 py311h6eed73b_0 conda-forge
matplotlib-base 3.8.1 py311hd316c10_0 conda-forge
matplotlib-inline 0.1.6 pyhd8ed1ab_0 conda-forge
minizip 4.0.2 h23f18a7_0 conda-forge
mistune 3.0.2 pyhd8ed1ab_0 conda-forge
msgpack-python 1.0.6 py311h5fe6e05_0 conda-forge
munch 4.0.0 pyhd8ed1ab_0 conda-forge
munkres 1.1.4 pyh9f0ad1d_0 conda-forge
nbclient 0.8.0 pyhd8ed1ab_0 conda-forge
nbconvert 7.11.0 pyhd8ed1ab_0 conda-forge
nbconvert-core 7.11.0 pyhd8ed1ab_0 conda-forge
nbconvert-pandoc 7.11.0 pyhd8ed1ab_0 conda-forge
nbformat 5.9.2 pyhd8ed1ab_0 conda-forge
ncurses 6.4 h93d8f39_2 conda-forge
nest-asyncio 1.5.8 pyhd8ed1ab_0 conda-forge
nettle 3.8.1 h96f3785_1 conda-forge
networkx 3.2.1 pyhd8ed1ab_0 conda-forge
notebook 7.0.6 pyhd8ed1ab_0 conda-forge
notebook-shim 0.2.3 pyhd8ed1ab_0 conda-forge
nspr 4.35 hea0b92c_0 conda-forge
nss 3.94 hd6ac835_0 conda-forge
numba 0.57.1 py311h5a8220d_0 conda-forge
numpy 1.24.4 py311hc44ba51_0 conda-forge
opencv 4.8.1 py311h9073893_5 conda-forge
openh264 2.3.1 hf0c8a7f_2 conda-forge
openjpeg 2.5.0 ha4da562_3 conda-forge
openssl 3.1.4 hd75f5a5_0 conda-forge
orc 1.9.0 hd1092d7_4 conda-forge
overrides 7.4.0 pyhd8ed1ab_0 conda-forge
p11-kit 0.24.1 h65f8906_0 conda-forge
packaging 23.2 pyhd8ed1ab_0 conda-forge
palettable 3.3.3 pyhd8ed1ab_0 conda-forge
pandas 2.1.2 py311h1eadf79_0 conda-forge
pandoc 3.1.3 h9d075a6_0 conda-forge
pandocfilters 1.5.0 pyhd8ed1ab_0 conda-forge
parso 0.8.3 pyhd8ed1ab_0 conda-forge
partd 1.4.1 pyhd8ed1ab_0 conda-forge
patsy 0.5.3 pyhd8ed1ab_0 conda-forge
pcre2 10.40 h1c4e4bc_0 conda-forge
pexpect 4.8.0 pyh1a96a4e_2 conda-forge
pickleshare 0.7.5 py_1003 conda-forge
pillow 10.1.0 py311hea5c87a_0 conda-forge
pip 23.3.1 pyhd8ed1ab_0 conda-forge
pixman 0.42.2 he965462_0 conda-forge
pkgutil-resolve-name 1.3.10 pyhd8ed1ab_1 conda-forge
platformdirs 3.11.0 pyhd8ed1ab_0 conda-forge
poppler 23.10.0 hdd5a5e8_0 conda-forge
poppler-data 0.4.12 hd8ed1ab_0 conda-forge
postgresql 16.0 hc940a54_1 conda-forge
proj 9.3.0 h23b96cc_2 conda-forge
prometheus_client 0.18.0 pyhd8ed1ab_0 conda-forge
prompt-toolkit 3.0.39 pyha770c72_0 conda-forge
prompt_toolkit 3.0.39 hd8ed1ab_0 conda-forge
psutil 5.9.5 py311h2725bcf_1 conda-forge
pthread-stubs 0.4 hc929b4f_1001 conda-forge
ptyprocess 0.7.0 pyhd3deb0d_0 conda-forge
pugixml 1.14 he965462_0 conda-forge
pure_eval 0.2.2 pyhd8ed1ab_0 conda-forge
py-opencv 4.8.1 py311h112db91_5 conda-forge
pyarrow 13.0.0 py311h98a0319_14_cpu conda-forge
pycparser 2.21 pyhd8ed1ab_0 conda-forge
pyerfa 2.0.1.1 py311hc9a392d_0 conda-forge
pygments 2.16.1 pyhd8ed1ab_0 conda-forge
pyobjc-core 10.0 py311hf110eff_0 conda-forge
pyobjc-framework-cocoa 10.0 py311hf110eff_1 conda-forge
pyparsing 3.1.1 pyhd8ed1ab_0 conda-forge
pyproj 3.6.1 py311he36daed_4 conda-forge
pyshp 2.3.1 pyhd8ed1ab_0 conda-forge
pysocks 1.7.1 pyha2e5f31_6 conda-forge
python 3.11.6 h30d4d87_0_cpython conda-forge
python-dateutil 2.8.2 pyhd8ed1ab_0 conda-forge
python-fastjsonschema 2.18.1 pyhd8ed1ab_0 conda-forge
python-json-logger 2.0.7 pyhd8ed1ab_0 conda-forge
python-tzdata 2023.3 pyhd8ed1ab_0 conda-forge
python_abi 3.11 4_cp311 conda-forge
pytz 2023.3.post1 pyhd8ed1ab_0 conda-forge
pyyaml 6.0.1 py311h2725bcf_1 conda-forge
pyzmq 25.1.1 py311he3804a1_2 conda-forge
qtconsole-base 5.5.0 pyha770c72_0 conda-forge
qtpy 2.4.1 pyhd8ed1ab_0 conda-forge
rasterio 1.3.9 py311h154ac00_0 conda-forge
re2 2023.06.02 hd34609a_0 conda-forge
readline 8.2 h9e318b2_1 conda-forge
referencing 0.30.2 pyhd8ed1ab_0 conda-forge
requests 2.31.0 pyhd8ed1ab_0 conda-forge
rfc3339-validator 0.1.4 pyhd8ed1ab_0 conda-forge
rfc3986-validator 0.1.1 pyh9f0ad1d_0 conda-forge
rpds-py 0.12.0 py311h5e0f0e4_0 conda-forge
rtree 1.1.0 py311hbc1f44b_0 conda-forge
scikit-learn 1.3.2 py311h66081b9_1 conda-forge
scipy 1.11.3 py311h16c3c4d_1 conda-forge
seaborn 0.13.0 hd8ed1ab_0 conda-forge
seaborn-base 0.13.0 pyhd8ed1ab_0 conda-forge
send2trash 1.8.2 pyhd1c38e8_0 conda-forge
setuptools 68.2.2 pyhd8ed1ab_0 conda-forge
shapely 2.0.2 py311h359915d_0 conda-forge
six 1.16.0 pyh6c4a22f_0 conda-forge
snappy 1.1.10 h225ccf5_0 conda-forge
sniffio 1.3.0 pyhd8ed1ab_0 conda-forge
snuggs 1.4.7 py_0 conda-forge
sortedcontainers 2.4.0 pyhd8ed1ab_0 conda-forge
soupsieve 2.5 pyhd8ed1ab_1 conda-forge
spyder-kernels 2.2.1 pypi_0 pypi
sqlite 3.44.0 h7461747_0 conda-forge
stack_data 0.6.2 pyhd8ed1ab_0 conda-forge
statsmodels 0.14.0 py311hc9a392d_2 conda-forge
svt-av1 1.7.0 he965462_0 conda-forge
tbb 2021.10.0 h1c7c39f_2 conda-forge
tblib 2.0.0 pyhd8ed1ab_0 conda-forge
terminado 0.17.1 pyhd1c38e8_0 conda-forge
threadpoolctl 3.2.0 pyha21a80b_0 conda-forge
tiledb 2.16.3 hd3a41d5_3 conda-forge
tinycss2 1.2.1 pyhd8ed1ab_0 conda-forge
tk 8.6.13 h1abcd95_1 conda-forge
tomli 2.0.1 pyhd8ed1ab_0 conda-forge
toolz 0.12.0 pyhd8ed1ab_0 conda-forge
tornado 6.3.3 py311h2725bcf_1 conda-forge
traitlets 5.13.0 pyhd8ed1ab_0 conda-forge
types-python-dateutil 2.8.19.14 pyhd8ed1ab_0 conda-forge
typing-extensions 4.8.0 hd8ed1ab_0 conda-forge
typing_extensions 4.8.0 pyha770c72_0 conda-forge
typing_utils 0.1.0 pyhd8ed1ab_0 conda-forge
tzcode 2023c hb7f2c08_0 conda-forge
tzdata 2023c h71feb2d_0 conda-forge
uri-template 1.3.0 pyhd8ed1ab_0 conda-forge
uriparser 0.9.7 hf0c8a7f_1 conda-forge
urllib3 2.0.7 pyhd8ed1ab_0 conda-forge
wcwidth 0.2.9 pyhd8ed1ab_0 conda-forge
webcolors 1.13 pyhd8ed1ab_0 conda-forge
webencodings 0.5.1 pyhd8ed1ab_2 conda-forge
websocket-client 1.6.4 pyhd8ed1ab_0 conda-forge
wheel 0.41.3 pyhd8ed1ab_0 conda-forge
widgetsnbextension 4.0.9 pyhd8ed1ab_0 conda-forge
wurlitzer 3.0.3 pypi_0 pypi
x264 1!164.3095 h775f41a_2 conda-forge
x265 3.5 hbb4e6a2_3 conda-forge
xarray 2023.10.1 pyhd8ed1ab_0 conda-forge
xerces-c 3.2.4 h6314983_3 conda-forge
xorg-libxau 1.0.11 h0dc2134_0 conda-forge
xorg-libxdmcp 1.1.3 h35c211d_0 conda-forge
xyzservices 2023.10.1 pyhd8ed1ab_0 conda-forge
xz 5.2.6 h775f41a_0 conda-forge
yaml 0.2.5 h0d85af4_2 conda-forge
zeromq 4.3.5 h93d8f39_0 conda-forge
zict 3.0.0 pyhd8ed1ab_0 conda-forge
zipp 3.17.0 pyhd8ed1ab_0 conda-forge
zlib 1.2.13 h8a1eda9_5 conda-forge
zstd 1.5.5 h829000d_0 conda-forge