Closed dennissergeev closed 10 months ago
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.
import cartopy.crs as ccrs
moon = ccrs.Globe(ellipse=None, semimajor_axis=1737400,
semiminor_axis=1737400)
map_proj=ccrs.LambertConformal(globe=moon)
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.)
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:
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:
Traceback
Full traceback
```python --------------------------------------------------------------------------- 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.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