Python interface to PROJ (cartographic projections and coordinate transformations library)

Overview

pyproj

Python interface to PROJ (cartographic projections and coordinate transformations library).

Join the chat at https://gitter.im/pyproj4-pyproj/community All Contributors Appveyor Build Status GitHub Actions Build Status Codecov Status PyPI Downloads Anaconda-Server Badge Code style: black pre-commit DOI

Documentation

Bugs/Questions

Contributors โœจ

Thanks goes to these wonderful people (emoji key):


Jeff Whitaker

๐Ÿ“– โš ๏ธ ๐Ÿ’ป ๐Ÿ’ก ๐Ÿค” ๐Ÿ‘€ ๐Ÿ’ฌ ๐Ÿšง ๐Ÿš‡ ๐Ÿ›

Alan D. Snow

๐Ÿ“– โš ๏ธ ๐Ÿ’ป ๐Ÿ’ก ๐Ÿšง ๐Ÿš‡ ๐Ÿค” ๐Ÿ‘€ ๐Ÿ’ฌ ๐Ÿ›

Micah Cochran

๐Ÿ“– โš ๏ธ ๐Ÿ’ป ๐Ÿšง ๐Ÿš‡ ๐Ÿ‘€ ๐Ÿ’ฌ ๐Ÿ›

Joris Van den Bossche

๐Ÿ“– ๐Ÿ’ป ๐Ÿค” ๐Ÿ‘€ ๐Ÿ’ฌ ๐Ÿ› โš ๏ธ

Chris Mayo

โš ๏ธ

Charles Karney

๐Ÿ’ป โš ๏ธ

Justin Dearing

๐Ÿš‡

Jos de Kloe

๐Ÿ’ป โš ๏ธ ๐Ÿ›

George Ouzounoudis

๐Ÿ’ป ๐Ÿค”

David Hoese

๐Ÿ‘€ ๐Ÿค” ๐Ÿ“ฆ

Mikhail Itkin

๐Ÿ’ป

Ryan May

๐Ÿ’ป

artttt

๐Ÿค”

Filipe

๐Ÿš‡ ๐Ÿ’ป ๐Ÿ“ฆ

Heitor

๐Ÿ“–

Bas Couwenberg

๐Ÿ’ป ๐Ÿ“ฆ โš ๏ธ

Nick Eubank

๐Ÿ’ป

Michael Dunphy

๐Ÿ“–

Matthew Brett

๐Ÿš‡ ๐Ÿ“ฆ

Jakob de Maeyer

๐Ÿ’ป

The Gitter Badger

๐Ÿ“–

Bernhard M. Wiedemann

๐Ÿ’ป

Marco Aurรฉlio da Costa

๐Ÿ’ป

Christopher H. Barker

๐Ÿ’ป

Kristian Evers

๐Ÿ’ฌ ๐Ÿค” ๐Ÿ“–

Even Rouault

๐Ÿ’ฌ

Christoph Gohlke

๐Ÿ“ฆ ๐Ÿ’ฌ ๐Ÿ› โš ๏ธ

Chris Willoughby

๐Ÿ’ป

Guillaume Lostis

๐Ÿ“–

Eduard Popov

๐Ÿ“–

Joe Ranalli

๐Ÿ› ๐Ÿ’ป โš ๏ธ

Greg Berardinelli

๐Ÿ› ๐Ÿ’ป ๐Ÿค” โš ๏ธ

Martin Raspaud

๐Ÿ› ๐Ÿ’ป โš ๏ธ ๐Ÿค”

Mike Taves

โš ๏ธ

David Haberthรผr

๐Ÿ“–

mmodenesi

๐Ÿ› ๐Ÿ’ป โš ๏ธ

jacob-indigo

๐Ÿ› ๐Ÿ’ป

Poruri Sai Rahul

โš ๏ธ

Yann-Sebastien Tremblay-Johnston

๐Ÿ“–

odidev

๐Ÿ“ฆ

This project follows the all-contributors specification. Contributions of any kind welcome!

Comments
  • "no arguments in initialization list" runtime error

    Hi, I'm running into a cryptic error. My CRS in the geopandas dataframe seems to be properly set, however I cannot convert it to any other CRS.

    >>> print(gdf_PLU.crs)
    epsg:2193
    >>>gdf_PLU.to_crs(epsg=4326)
    ---------------------------------------------------------------------------
    RuntimeError                              Traceback (most recent call last)
    <ipython-input-92-46b32e6c8012> in <module>()
          1 print(gdf_PLU.crs)
    ----> 2 gdf_PLU.to_crs(epsg=4326)
    
    ~/anaconda3/envs/hthf/lib/python3.6/site-packages/geopandas/geodataframe.py in to_crs(self, crs, epsg, inplace)
        384         else:
        385             df = self.copy()
    --> 386         geom = df.geometry.to_crs(crs=crs, epsg=epsg)
        387         df.geometry = geom
        388         df.crs = geom.crs
    
    ~/anaconda3/envs/hthf/lib/python3.6/site-packages/geopandas/geoseries.py in to_crs(self, crs, epsg)
        283             except TypeError:
        284                 raise TypeError('Must set either crs or epsg for output.')
    --> 285         proj_in = pyproj.Proj(self.crs, preserve_units=True)
        286         proj_out = pyproj.Proj(crs, preserve_units=True)
        287         project = partial(pyproj.transform, proj_in, proj_out)
    
    ~/anaconda3/envs/hthf/lib/python3.6/site-packages/pyproj/__init__.py in __new__(self, projparams, preserve_units, **kwargs)
        356         # on case-insensitive filesystems).
        357         projstring = projstring.replace('EPSG','epsg')
    --> 358         return _proj.Proj.__new__(self, projstring)
        359 
        360     def __call__(self, *args, **kw):
    
    _proj.pyx in _proj.Proj.__cinit__ (_proj.c:1170)()
    
    RuntimeError: b'no arguments in initialization list'
    

    I can't find this error message in any other issue. From similar issues it seems some data files could be missing (if so, how can I install them; I'm using the binary that is dragged in by conda-forge geopandas). Or is it something else?

    opened by rgommers 69
  • update to proj.4 6.0.0

    update to proj.4 6.0.0

    Connected to issue #152

    This depends on: https://github.com/OSGeo/proj.4/pull/1208 Also, one of the tests fails, but should be fixed with: https://github.com/OSGeo/proj.4/pull/1205

    There are a ton of changes - mostly to work with the new API. Feel free to make comments, ask questions, and be thorough in the review.

    opened by snowman2 42
  • Problem with installing Pyproj / proj

    Problem with installing Pyproj / proj

    Dear sir or madam, My name is Ger Smit from the Netherlands. I have problem with pyproj / proj. I use Raspberry Pi, Python, for making screne from data with satpy. No problems til now. I install satpy, try to run python script and get error. I I was in contact with @djhoese about this and he referred me to you ERROR: Minimum supported proj version is 6.2.0, installed version is 4.9.3. For more information see: https://pyproj4.github.io/pyproj/stable/installation.htm

    Then when i run the script i get error :

    Traceback (most recent call last): File "/home/pi/a-satpy-testen/cursus_seviri.py", line 83, in scn.load(scn.all_dataset_names()[1:]) #HEEL belangrijk File "/home/pi/.local/lib/python3.7/site-packages/satpy/scene.py", line 1163, in load self._read_datasets_from_storage(**kwargs) File "/home/pi/.local/lib/python3.7/site-packages/satpy/scene.py", line 1183, in _read_datasets_from_storage return self._read_dataset_nodes_from_storage(nodes, **kwargs) File "/home/pi/.local/lib/python3.7/site-packages/satpy/scene.py", line 1189, in _read_dataset_nodes_from_storage loaded_datasets = self._load_datasets_by_readers(reader_datasets, **kwargs) File "/home/pi/.local/lib/python3.7/site-packages/satpy/scene.py", line 1214, in _load_datasets_by_readers new_datasets = reader_instance.load(ds_ids, **kwargs) File "/home/pi/.local/lib/python3.7/site-packages/satpy/readers/yaml_reader.py", line 945, in load ds = self._load_dataset_with_area(dsid, coords, **kwargs) File "/home/pi/.local/lib/python3.7/site-packages/satpy/readers/yaml_reader.py", line 1109, in _load_dataset_with_area ds = super(GEOFlippableFileYAMLReader, self)._load_dataset_with_area(dsid, coords, **kwargs) File "/home/pi/.local/lib/python3.7/site-packages/satpy/readers/yaml_reader.py", line 841, in _load_dataset_with_area ds = self._load_dataset_data(file_handlers, dsid, **kwargs) File "/home/pi/.local/lib/python3.7/site-packages/satpy/readers/yaml_reader.py", line 713, in _load_dataset_data proj = self._load_dataset(dsid, ds_info, file_handlers, **kwargs) File "/home/pi/.local/lib/python3.7/site-packages/satpy/readers/yaml_reader.py", line 689, in _load_dataset projectable = fh.get_dataset(dsid, ds_info) File "/home/pi/.local/lib/python3.7/site-packages/satpy/readers/seviri_l1b_native.py", line 458, in get_dataset self._update_attrs(dataset, dataset_info) File "/home/pi/.local/lib/python3.7/site-packages/satpy/readers/seviri_l1b_native.py", line 582, in _update_attrs actual_lon, actual_lat, actual_alt = self.satpos File "/home/pi/.local/lib/python3.7/site-packages/satpy/readers/seviri_l1b_native.py", line 610, in satpos semi_minor_axis=self.mda['projection_parameters']['b'] File "/home/pi/.local/lib/python3.7/site-packages/satpy/readers/seviri_base.py", line 703, in get_satpos proj='geocent', a=semi_major_axis, b=semi_minor_axis, units='m' File "/home/pi/.local/lib/python3.7/site-packages/pyproj/crs.py", line 436, in init super(CRS, self).init(projstring) File "pyproj/_crs.pyx", line 1738, in pyproj._crs._CRS.init pyproj.exceptions.CRSError: Invalid projection: +proj=geocent +a=6378169.0 +b=6356583.800000001 +units=m +type=crs: (Internal Proj Error: proj_create: Invalid b value)

    Please can you explaine to me how to install or solved pyproj / proj in combination with satpy. I try a lot withoud result.

    Thanks in advange @gersmit

    installation-issues 
    opened by gersmit 40
  • PROJ 6.2+ required; remove global context; autoclose database

    PROJ 6.2+ required; remove global context; autoclose database

    • [x] Closes #411
    • [x] Closes #408
    • [x] Closes #403
    • [x] Closes #426
    • [x] Fully documented, including history.rst for all changes and api/*.rst for new API
    opened by snowman2 35
  • 2.3.0 seg faults under Ubuntu

    2.3.0 seg faults under Ubuntu

    Code Sample, a copy-pastable example if possible

    A "Minimal, Complete and Verifiable Example" will make it much easier for maintainers to help you: http://matthewrocklin.com/blog/work/2018/02/28/minimal-bug-reports

    Now that's tricky because I cannot do it. The seg fault very much depends on the input data, and it's part of a complex app. But with some input files 2.3.0 seg fault.

    Problem description

    Under 2.3.0 I can get the following using python -X faulthandler

    Fatal Python error: Segmentation fault
    
    Current thread 0x00007fa0f79c4700 (most recent call first):
      File "/opt/conda/lib/python3.7/site-packages/pyproj/crs.py", line 303 in __init__
      File "/opt/conda/lib/python3.7/site-packages/pyproj/crs.py", line 434 in from_user_input
      File "/opt/conda/lib/python3.7/site-packages/pyproj/proj.py", line 145 in __init__
      File "/opt/conda/lib/python3.7/site-packages/geopandas/geoseries.py", line 304 in to_crs
      File "/opt/conda/lib/python3.7/site-packages/geopandas/geodataframe.py", line 459 in to_crs
      ...
      File "<stdin>", line 1 in <module>
    Segmentation fault (core dumped)
    

    I've downgraded to 2.2.2 and I get a Python exception of the same lines, so it might be the same thing

    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      ...
      File "/opt/conda/lib/python3.7/site-packages/geopandas/geodataframe.py", line 459, in to_crs
        geom = df.geometry.to_crs(crs=crs, epsg=epsg)
      File "/opt/conda/lib/python3.7/site-packages/geopandas/geoseries.py", line 304, in to_crs
        proj_in = pyproj.Proj(self.crs, preserve_units=True)
      File "/opt/conda/lib/python3.7/site-packages/pyproj/proj.py", line 147, in __init__
        self.crs = CRS.from_user_input(projparams if projparams is not None else kwargs)
      File "/opt/conda/lib/python3.7/site-packages/pyproj/crs.py", line 435, in from_user_input
        return cls(value)
      File "/opt/conda/lib/python3.7/site-packages/pyproj/crs.py", line 304, in __init__
        super(CRS, self).__init__(projstring)
      File "pyproj/_crs.pyx", line 1308, in pyproj._crs._CRS.__init__
      File "pyproj/_datadir.pyx", line 18, in pyproj._datadir.get_pyproj_context
      File "/opt/conda/lib/python3.7/site-packages/pyproj/datadir.py", line 99, in get_data_dir
        "Valid PROJ data directory not found. "
    pyproj.exceptions.DataDirError: Valid PROJ data directory not found. Either set the path using the environmental variable PROJ_LIB or with `pyproj.datadir.set_data_dir`.
    

    This is the same environment as I've detailed here: https://github.com/conda-forge/pyproj-feedstock/issues/47

    Environment Information

    after downgrade to 2.2.2

    
    System:
        python: 3.7.3 | packaged by conda-forge | (default, Jul  1 2019, 21:52:21)  [GCC 7.3.0]
    executable: /usr/bin/condapy
       machine: Linux-4.15.0-1037-gcp-x86_64-with-debian-stretch-sid
    
    PROJ:
          PROJ: 6.1.1
      data dir: None
    
    Python deps:
        pyproj: 2.2.2
           pip: 19.2.3
    setuptools: 41.2.0
        Cython: None
         aenum: None
    

    at 2.3.0

    
    System:
        python: 3.7.3 | packaged by conda-forge | (default, Jul  1 2019, 21:52:21)  [GCC 7.3.0]
    executable: /usr/bin/condapy
       machine: Linux-4.15.0-1037-gcp-x86_64-with-debian-stretch-sid
    
    PROJ:
          PROJ: 6.1.1
      data dir: /opt/conda/share/proj
    
    Python deps:
        pyproj: 2.3.0
           pip: 19.2.3
    setuptools: 41.2.0
        Cython: None
    

    Installation method

    Conda in a Ubuntu 16.04 Docker image.

    wget --quiet https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda.sh && \
        /bin/bash ~/miniconda.sh -b -p /opt/conda && \
        conda update conda -y && \
        conda config --add channels conda-forge && \
        conda config --set channel_priority strict && \
        conda install \
            geopandas numexpr bottleneck
    

    Conda environment information (if you installed with conda):


    Environment (conda list):
    proj4                     6.1.1                hc80f0dc_1    conda-forge
    pyproj                    2.3.0            py37h2fd02e8_0    conda-forge
    

    Details about conda and system ( conda info ):
    
         active environment : None
           user config file : /root/.condarc
     populated config files : /root/.condarc
              conda version : 4.7.11
        conda-build version : not installed
             python version : 3.7.3.final.0
           virtual packages :
           base environment : /opt/conda  (writable)
               channel URLs : https://conda.anaconda.org/conda-forge/linux-64
                              https://conda.anaconda.org/conda-forge/noarch
                              https://repo.anaconda.com/pkgs/main/linux-64
                              https://repo.anaconda.com/pkgs/main/noarch
                              https://repo.anaconda.com/pkgs/r/linux-64
                              https://repo.anaconda.com/pkgs/r/noarch
              package cache : /opt/conda/pkgs
                              /root/.conda/pkgs
           envs directories : /opt/conda/envs
                              /root/.conda/envs
                   platform : linux-64
                 user-agent : conda/4.7.11 requests/2.22.0 CPython/3.7.3 Linux/4.15.0-1037-gcp ubuntu/16.04.6 glibc/2.23
                    UID:GID : 0:0
                 netrc file : None
               offline mode : False
    
    bug 
    opened by hyperknot 33
  • add `[inv|fwd]_intermediate()` - to calculate intermediate points (like improved `Geod.npts()`)

    add `[inv|fwd]_intermediate()` - to calculate intermediate points (like improved `Geod.npts()`)

    pyproj/geod.py - add a parameter return_points to Geod.npts() to determinate the return type; improve return type hint pyproj/geod.py - add a parameters initial_idx, terminus_idx to Geod.npts() pyproj/[geod.py, _geod.pyi, _geod.pyx] - add inv_intermediate_by_npts functions that uses given buffers out_lons, out_lats (and out_azis) buffers instead of creating new buffers pyproj/_geod.pxd - add interface for geod_lineinit pyproj/[geod.py, _geod.pyi, _geod.pyx] - add inv_intermediate_by_del, fwd_intermediate_by_npts, fwd_intermediate_by_del functions, similar to inv_npts but using forward calculation test/test_geod.py - add tests for new functions

    Related PR

    https://github.com/pyproj4/pyproj/pull/825/

    opened by idanmiara 32
  • Kernel dies while converting geometry to EPSG3857, OS X 11.6

    Kernel dies while converting geometry to EPSG3857, OS X 11.6

    I am attempting to install the latest version of pyproj in order resolve the same issue as described in this closed issue 1113

    Installation method/steps

    • installed pyproj through conda in terminal, see below.
    (base) Richard-Pelgrims-MacBook-Pro:site-packages data_science$ conda install pyproj
    Collecting package metadata (current_repodata.json): done
    Solving environment: failed with initial frozen solve. Retrying with flexible solve.
    Solving environment: failed with repodata from current_repodata.json, will retry with next repodata source.
    Collecting package metadata (repodata.json): done
    Solving environment: done
    
    ## Package Plan ##
    
      environment location: /opt/anaconda3
    
      added / updated specs:
        - pyproj
    
    
    The following NEW packages will be INSTALLED:
    
      pyproj             pkgs/main/osx-64::pyproj-1.9.6-py37h9c430a6_0
    

    Environment Information

    • pyproj version you are attempting to install: 2.6 to resolve issues mentioned in this issue
    • PROJ version : Rel. 5.2.0, September 15th, 2018
    • Python version: 3.7.4
    • Operation System Information: Darwin-15.6.0-x86_64-i386-64bit
    installation-issues macos 
    opened by rrpelgrim 29
  • added CRS mapping to/from CF 1.8; added to_proj4_dict

    added CRS mapping to/from CF 1.8; added to_proj4_dict

    Addresses #226

    This will need a good review.

    I am unsure about what the CF unit mapped to. It is either units or vunits. I am guessing vunits at the moment, but it is only a guess.

    Others I think are just another maping to datum, but not sure. Maybe there is a vdatum in PROJ I am missing.

    • geoid_name (OGC WKT VERT_DATUM - ex GEOID12B)
    • geopotential_datum_name (OGC WKT VERT_DATUM - ex NAVD88)
    opened by snowman2 26
  • pypi installation errors

    pypi installation errors

    cc @justb4

    Via https://github.com/geopython/GeoHealthCheck/issues/240, looks like with the latest pyproj release on pypi there are install issues:

    Downloading/unpacking OWSLib==0.17.0
      Downloading OWSLib-0.17.0.tar.gz (149kB): 149kB downloaded
      Running setup.py (path:/tmp/pip_build_kralidist/OWSLib/setup.py) egg_info for package OWSLib
    
        warning: manifest_maker: MANIFEST.in, line 3: 'recursive-include' expects <dir> <pattern1> <pattern2> ...
    
    Downloading/unpacking python-dateutil>=1.5 (from OWSLib==0.17.0)
      Downloading python_dateutil-2.8.0-py2.py3-none-any.whl (226kB): 226kB downloaded
    Downloading/unpacking pytz (from OWSLib==0.17.0)
      Downloading pytz-2018.9-py2.py3-none-any.whl (510kB): 510kB downloaded
    Requirement already satisfied (use --upgrade to upgrade): requests>=1.0 in /usr/lib/python2.7/dist-packages (from OWSLib==0.17.0)
    Downloading/unpacking pyproj (from OWSLib==0.17.0)
      Downloading pyproj-2.0.0.tar.gz (408kB): 408kB downloaded
      Running setup.py (path:/tmp/pip_build_kralidist/pyproj/setup.py) egg_info for package pyproj
        ERROR: Cython.Build.cythonize not found. Cython is required to build from a repo.
        Complete output from command python setup.py egg_info:
        ERROR: Cython.Build.cythonize not found. Cython is required to build from a repo.
    
    ----------------------------------------
    Cleaning up...
    Command python setup.py egg_info failed with error code 1 in /.....
    
    opened by tomkralidis 26
  • WHL: MacOS arm64 Wheels

    WHL: MacOS arm64 Wheels

    Currently don't have CI runners to build/test them. There are options to potentially cross compile, but the wheels wouldn't be able to be tested. Not sure what the best way to handle this is.

    Related:

    • https://github.com/rasterio/rasterio-wheels/issues/75
    • https://github.com/geopandas/pyogrio/pull/64
    help wanted installation-issues macos 
    opened by snowman2 25
  • Update docstrings

    Update docstrings

    Hi,

    Could you please update the docstring documentation for the Transformer class? One minor typo is proj_from in the from_proj method, but the most important ones are the itransform and transform methods.

    They both state that the input should be in the order of x, y when they actually are in the order of y, x. And the output is in the order of y, x. That got me quite confused for a while.

    Thanks

    documentation axis-order 
    opened by mullenkamp 24
  • DEP: PROJ 8.2 Suppot

    DEP: PROJ 8.2 Suppot

    Related to #1011

    With PROJ 9.2 coming in March 01, 2023 ref that means that 3 minor versions is 9.2, 9.1, 9.0. Currently thinking that pyproj 3.4 will be the last minor version to support PROJ 8.2.

    proj 
    opened by snowman2 0
  • Incorrect `LICENSE_proj` filename in setup.cfg

    Incorrect `LICENSE_proj` filename in setup.cfg

    I copied this line from setup.cfg when updating the conda-forge recipe: https://github.com/pyproj4/pyproj/blob/main/setup.cfg#L12 But the actual filename is LICENSE_proj4. These should be made consistent.

    bug good-first-issue 
    opened by xylar 2
  • PROJ 9.1.1 doesn't work with Global Context

    PROJ 9.1.1 doesn't work with Global Context

    https://github.com/pyproj4/pyproj/actions/runs/3596938993/jobs/6058180954

    =================================== FAILURES ===================================
    ___________________ test_transformer_group__network_disabled ___________________
    
        @pytest.mark.grid
        @patch.dict("os.environ", {"PROJ_NETWORK": "ON"}, clear=True)
        def test_transformer_group__network_disabled():
            with proj_network_env():
                pyproj.network.set_network_enabled(active=False)
    >           trans_group = TransformerGroup(4326, 2964)
    
    test/test_transformer.py:869: 
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
    pyproj/transformer.py:197: in __init__
        super().__init__(
    pyproj/_transformer.pyx:215: in pyproj._transformer._TransformerGroup.__init__
        _Transformer._from_pj(
    pyproj/_transformer.pyx:563: in pyproj._transformer._Transformer._from_pj
        transformer._init_from_crs(always_xy)
    pyproj/_transformer.pyx:614: in pyproj._transformer._Transformer._init_from_crs
        self._initialize_from_projobj()
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
    
    >   raise ProjError("Input is not a transformation.")
    E   pyproj.exceptions.ProjError: Input is not a transformation.: (Internal Proj Error: pipeline: Pipeline: Bad step definition: inv (File not found or invalid))
    
    pyproj/_transformer.pyx:324: ProjError
    ------------------------------ Captured log call -------------------------------
    DEBUG    pyproj:transformer.py:197 PROJ_ERROR: hgridshift: could not find required grid(s).
    DEBUG    pyproj:transformer.py:197 PROJ_ERROR: pipeline: Pipeline: Bad step definition: inv (File not found or invalid)
    ____________________ test_transformer_group__download_grids ____________________
    
    get_user_data_dir_mock = <MagicMock name='get_user_data_dir' id='140700317128784'>
    tmp_path = PosixPath('/tmp/pytest-of-runner/pytest-2/test_transformer_group__downlo0')
    capsys = <_pytest.capture.CaptureFixture object at 0x7ff7586c11f0>
    
        @pytest.mark.grid
        @pytest.mark.network
        @patch("pyproj.transformer.get_user_data_dir")
        def test_transformer_group__download_grids(get_user_data_dir_mock, tmp_path, capsys):
            get_user_data_dir_mock.return_value = str(tmp_path)
            with proj_network_env():
                pyproj.network.set_network_enabled(active=False)
    >           trans_group = TransformerGroup(4326, 2964)
    E   pyproj.exceptions.ProjError: Input is not a transformation.: (Internal Proj Error: pipeline: Pipeline: Bad step definition: inv (File not found or invalid))
    
    pyproj/_transformer.pyx:324: ProjError
    ------------------------------ Captured log call -------------------------------
    DEBUG    pyproj:transformer.py:197 PROJ_ERROR: hgridshift: could not find required grid(s).
    DEBUG    pyproj:transformer.py:197 PROJ_ERROR: pipeline: Pipeline: Bad step definition: inv (File not found or invalid)
    ____________ test_coordinate_operation_grids__alternative_grid_name ____________
    
        @pytest.mark.grid
        def test_coordinate_operation_grids__alternative_grid_name():
            cc = CoordinateOperation.from_epsg(1312, True)
            assert len(cc.grids) == 1
            grid = cc.grids[0]
            assert grid.direct_download is True
            assert grid.open_license is True
            assert grid.short_name == "ca_nrc_ntv1_can.tif"
            assert grid.package_name == ""
            assert grid.url == "https://cdn.proj.org/ca_nrc_ntv1_can.tif"
            if (PROJ_GTE_91 and grids_available(grid.short_name, check_network=False)) or (
                not PROJ_GTE_91 and grids_available(grid.short_name)
            ):
                assert grid.available is True
                assert grid.full_name.endswith(grid.short_name)
            elif PROJ_GTE_911 and pyproj.network.is_network_enabled():
                assert grid.available is True
    >           assert grid.full_name == grid.url
    E           AssertionError: assert '' == 'https://cdn...._ntv1_can.tif/'
    E             - https://cdn.proj.org/ca_nrc_ntv1_can.tif
    
    test/crs/test_crs.py:622: AssertionError
    =============================== warnings summary ===============================
    test/test_datadir.py::test_get_data_dir__from_user[str]
    test/test_datadir.py::test_get_data_dir__from_user[Path]
    test/test_datadir.py::test_append_data_dir__internal[str]
    test/test_datadir.py::test_append_data_dir__internal[Path]
      /home/runner/work/pyproj/pyproj/pyproj/datadir.py:38: UserWarning: pyproj unable to set database path.
        _global_context_set_data_dir()
    
    -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
    =========================== short test summary info ============================
    FAILED test/test_transformer.py::test_transformer_group__network_disabled - pyproj.exceptions.ProjError: Input is not a transformation.: (Internal Proj Error: pipeline: Pipeline: Bad step definition: inv (File not found or invalid))
    FAILED test/test_transformer.py::test_transformer_group__download_grids - pyproj.exceptions.ProjError: Input is not a transformation.: (Internal Proj Error: pipeline: Pipeline: Bad step definition: inv (File not found or invalid))
    FAILED test/test_transformer.py::test_transformer_group__download_grids__directory - pyproj.exceptions.ProjError: Input is not a transformation.: (Internal Proj Error: pipeline: Pipeline: Bad step definition: inv (File not found or invalid))
    FAILED test/crs/test_crs.py::test_coordinate_operation_grids__alternative_grid_name - AssertionError: assert '' == 'https://cdn...._ntv1_can.tif/'
      - https://cdn.proj.org/ca_nrc_ntv1_can.tif
    ============ 4 failed, 832 passed, 5 skipped, 4 warnings in 22.53s =============
    

    Going to need to do a git bisect with PROJ.

    bug proj 
    opened by snowman2 25
  • ENH: add Geod.from_ellipsoid classmethod

    ENH: add Geod.from_ellipsoid classmethod

    It would be handy to create a Geod object from an Ellipsoid object. E.g., this is how I would expect:

    from pyproj import CRS, Geod
    
    crs = CRS.from_epsg(4326)
    geod = Geod.from_ellipsoid(crs.ellipsoid)
    

    or is that too convoluted? Is there a simpler way? A few current working methods:

    Geod(ellps='WGS84')
    # Geod(ellps='WGS84')
    Geod(a=crs.ellipsoid.semi_major_metre, b=crs.ellipsoid.semi_minor_metre)
    # Geod('+a=6378137 +f=0.0033528106647475126')
    geod = Geod(a=crs.ellipsoid.semi_major_metre, f=1/crs.ellipsoid.inverse_flattening)
    # Geod(ellps='WGS84')
    

    and a bonus curiosity, probably a floating-point precision error

    assert Geod(ellps='WGS84') == Geod(a=crs.ellipsoid.semi_major_metre, f=1/crs.ellipsoid.inverse_flattening)
    assert Geod(ellps='WGS84') != Geod(a=crs.ellipsoid.semi_major_metre, b=crs.ellipsoid.semi_minor_metre)
    
    documentation good-first-issue 
    opened by mwtoews 4
  • MNT: Deprecate Transformer.from_proj?

    MNT: Deprecate Transformer.from_proj?

    from_proj was added based on pyproj 1 patterns of using the Proj objects with the transformer. However, with PROJ 6+ and pyproj 2+, the CRS object should be the object used when creating transformers.

    from_proj does not have all of the kwargs that from_crs has and that was mainly because from_crs should be the method used and there isn't much point in supporting both. Additionally, the Proj object has some additional overhead as it creates a Transformer and a CRS when initialized.

    I am thinking that removing from_proj will remove confusion.

    Compatibility: from_proj was added in the initial version of the transformer in pyproj 2.1.0. from_crs was added at the same time, so if users modify their code to use from_crs instead it will also be backwards compatible.

    Does anyone have good reasons why from_proj should stay?

    opened by snowman2 0
  • +R_A appears to have no effect in Geod() and CRS()

    +R_A appears to have no effect in Geod() and CRS()

    Problem description

    The +R_A option is not being honored in Pyproj, whereas it seems to work fine using the geod CLI tool.

    This problem happens if I use pyproj.Geod() or pyproj.CRS().get_geod().

    Code sample

    My Python code:

    import logging
    import os
    
    os.environ['PROJ_DEBUG'] = '3'
    logging.basicConfig(level=logging.DEBUG)
    
    import pyproj
    # DEBUG:pyproj:PROJ_DEBUG: pj_open_lib(proj.ini): call fopen(/.../lib/python3.10/site-packages/pyproj/proj_dir/share/proj/proj.ini) - succeeded
    
    geod1 = pyproj.Geod('+proj=lonlat +ellps=WGS84')
    print(geod1.f)
    # 0.0033528106647474805
    geod1.fwd(-70, 40, 60, 10_000)
    # (-69.89851793919364, 40.04498640681145, -119.93473805953444)
    
    geod2 = pyproj.Geod('+proj=lonlat +ellps=WGS84 +R_A')
    print(geod2.f)
    # 0.0033528106647474805
    geod2.fwd(-70, 40, 60, 10_000)
    # (-69.89851793919364, 40.04498640681145, -119.93473805953444)
    

    Equivalent CLI invocation using geod:

    export PROJ_DEBUG=3
    
    geod -f '%0.4f' +proj=lonlat +ellps=WGS84 <<< '-70E 40N 60d 10000m'
    # pj_ellipsoid - final: a=6378137.000 f=1/298.257, errno=0
    # pj_ellipsoid - final:    ellps=WGS84
    # 70.0447	40.2273	-119.7864m
    
    geod -f '%0.4f' +proj=lonlat +ellps=WGS84 +R_A <<< '-70E 40N 60d 10000m'
    # pj_ellipsoid - final: a=6371007.181 f=1/  0.000, errno=0
    # pj_ellipsoid - final:   R_A ellps=WGS84
    # 70.0448	40.2282	-119.7855m
    

    Expected Output

    I expected the output from geod1 to be different from geod2, and that geod2.f should be 0.

    I was also surprised to see that the output from the geod command line tool was different from the output from pyproj.Geod.fwd. Presumably the difference can be ascribed to different options when compiling the CLI tool (installed via MacPorts) and the Python package (installed via the wheels on PyPI).

    I further expected to see "trace" logging output comparable to what the geod CLI tool emitted, but I suppose that's a separate issue.

    Environment Information

    MacOS 12.4 on ARM64.

    Versions

    pyproj info:
        pyproj: 3.4.0
          PROJ: 9.1.0
      data dir: /.../lib/python3.10/site-packages/pyproj/proj_dir/share/proj
    user_data_dir: /.../.local/share/proj
    PROJ DATA (recommended version): 1.11
    PROJ Database: 1.2
    EPSG Database: v10.074 [2022-08-01]
    ESRI Database: ArcGIS Pro 3.0 [2022-07-09]
    IGNF Database: 3.1.0 [2019-05-24]
    
    System:
        python: 3.10.6 (main, Sep 19 2022, 14:40:49) [Clang 13.1.6 (clang-1316.0.21.2.5)]
    executable: /.../bin/python
       machine: macOS-12.4-arm64-arm-64bit
    
    Python deps:
       certifi: 2022.9.14
        Cython: None
    setuptools: 65.4.1
           pip: 22.2.2
    

    Installation method

    Installed using Pip in a Venv:

    python -m venv venv
    ./venv/bin/pip install -U pyproj
    
    enhancement 
    opened by gwerbin-tive 8
Releases(3.4.1)
  • 3.4.1(Dec 13, 2022)

    What's Changed

    • WHL: Add win32 to build_wheels matrix by @molinav in https://github.com/pyproj4/pyproj/pull/1169
    • BUG: Changed so that the setup.cfg depends on the version code in the init.py by @Scoppio in https://github.com/pyproj4/pyproj/pull/1156
    • REF: Use upper case EPSG code when creating CRS by @snowman2 in https://github.com/pyproj4/pyproj/pull/1162
    • BUG: Fix CRS.to_cf for Pole rotation GRIB convention by @snowman2 in https://github.com/pyproj4/pyproj/pull/1167
    • BUG: Fix memory leak in CRS.list_authority by @skogler in https://github.com/pyproj4/pyproj/pull/1178
    • BUG: Fix Transform options array length by @shadchin in https://github.com/pyproj4/pyproj/pull/1187
    • DOC: fix a few typos by @ocefpaf in https://github.com/pyproj4/pyproj/pull/1153

    New Contributors

    • @Scoppio made their first contribution in https://github.com/pyproj4/pyproj/pull/1156
    • @molinav made their first contribution in https://github.com/pyproj4/pyproj/pull/1169
    • @skogler made their first contribution in https://github.com/pyproj4/pyproj/pull/1178
    • @dependabot made their first contribution in https://github.com/pyproj4/pyproj/pull/1185
    • @shadchin made their first contribution in https://github.com/pyproj4/pyproj/pull/1187

    Other contributions:

    • @sebastic - testing Debian builds
    • @jdkloe - testing Fedora builds

    Full Changelog: https://github.com/pyproj4/pyproj/compare/3.4.0...3.4.1

    Source code(tar.gz)
    Source code(zip)
  • 3.4.1rc0(Dec 10, 2022)

  • 3.4.0(Sep 10, 2022)

    What's Changed

    • DEP: Add python 3.11 support by @snowman2 in https://github.com/pyproj4/pyproj/pull/1121
    • DEP: Minimum PROJ version 8.2 by @snowman2 in https://github.com/pyproj4/pyproj/pull/1122
    • DEP: Update wheels with PROJ 9.1.0 by @snowman2 in https://github.com/pyproj4/pyproj/pull/1132
    • ENH: Added authority, accuracy, and allow_ballpark kwargs to TransformerGroup by @snowman2 in https://github.com/pyproj4/pyproj/pull/1076
    • ENH: Added force_over kwarg to Transformer.from_crs by @snowman2 in https://github.com/pyproj4/pyproj/pull/1123
    • ENH: Added Transformer.get_last_used_operation by @snowman2 in https://github.com/pyproj4/pyproj/pull/1124
    • BUG: Fix transformer list for 3D transformations in TransformerGroup by @snowman2 in https://github.com/pyproj4/pyproj/pull/1075
    • BUG: Mercator A defined only for lat_0 = 0 by @kdpenner in https://github.com/pyproj4/pyproj/pull/1095
    • BUG: Add support for PROJ_DATA environment variable by @snowman2 in https://github.com/pyproj4/pyproj/pull/1099
    • BUG: Ensure numpy masked arrays stay masked after projection by @paultcochrane in https://github.com/pyproj4/pyproj/pull/1103
    • BLD: Don't specify runtime_library_dirs on Cygwin by @DWesl in https://github.com/pyproj4/pyproj/pull/1120
    • BUG: Fix finding PROJ version with PROJ_LIB and PROJ 9.1+ by @snowman2 in https://github.com/pyproj4/pyproj/pull/1128
    • CLN: Remove deprecated 'skip_equivalent' kwarg from transformers and 'errcheck' kwarg from CRS.from_cf by @snowman2 in https://github.com/pyproj4/pyproj/pull/1077
    • REF: use regex to process PROJ strings in CRS.to_dict() by @snowman2 in https://github.com/pyproj4/pyproj/pull/1086
    • DOC: Fix typo in installation docs by @paultcochrane in https://github.com/pyproj4/pyproj/pull/1101
    • DOC: Fix issues in transformation grids docs by @paultcochrane in https://github.com/pyproj4/pyproj/pull/1104

    New Contributors

    • @kdpenner made their first contribution in https://github.com/pyproj4/pyproj/pull/1095
    • @paultcochrane made their first contribution in https://github.com/pyproj4/pyproj/pull/1101
    • @DWesl made their first contribution in https://github.com/pyproj4/pyproj/pull/1120

    Other contributions:

    • @sebastic - testing Debian builds
    • @jdkloe - testing Fedora builds
    • @vot4anto - MacOS ARM 64 wheels (https://github.com/pyproj4/pyproj/issues/1064)

    Full Changelog: https://github.com/pyproj4/pyproj/compare/3.3.1...3.4.0

    Source code(tar.gz)
    Source code(zip)
  • 3.4.0rc2(Sep 9, 2022)

  • 3.4.0rc1(Sep 8, 2022)

  • 3.4.0rc0(Sep 7, 2022)

  • 3.3.1(Apr 22, 2022)

    What's Changed

    • DOC: minor fix to crs doc-strings by @bjlittle in https://github.com/pyproj4/pyproj/pull/1004
    • BUG: Correct type annotation for AreaofUse.bounds by @Kirill888 in https://github.com/pyproj4/pyproj/pull/1013
    • BUG: crs.py: remove @abstractmethod decorator by @hemberger in https://github.com/pyproj4/pyproj/pull/1018
    • BUG: Reorder deps in show_versions for setuptools issue by @snowman2 in https://github.com/pyproj4/pyproj/pull/1019
    • BUG: get_data_dir support for conda Windows enviroments by @snowman2 in https://github.com/pyproj4/pyproj/pull/1030
    • ENH: warn when export of CRS returns None by @martinfleis in https://github.com/pyproj4/pyproj/pull/1037
    • BUG: Complete database stub file with query_utm_crs_info() signature by @orontee in https://github.com/pyproj4/pyproj/pull/1047
    • ENH: Added support for int-like strings and numpy dtypes by @iboates in https://github.com/pyproj4/pyproj/pull/1049
    • BUG: Warn when CRS cannot be converted to PROJ or PROJ JSON by @snowman2 in https://github.com/pyproj4/pyproj/pull/1054
    • ENH: Added support to pickle Transformer by @snowman2 in https://github.com/pyproj4/pyproj/pull/1060

    New Contributors

    • @Kirill888 made their first contribution in https://github.com/pyproj4/pyproj/pull/1013
    • @hemberger made their first contribution in https://github.com/pyproj4/pyproj/pull/1018
    • @martinfleis made their first contribution in https://github.com/pyproj4/pyproj/pull/1037
    • @orontee made their first contribution in https://github.com/pyproj4/pyproj/pull/1047
    • @iboates made their first contribution in https://github.com/pyproj4/pyproj/pull/1049

    Other contributions:

    • @sebastic - testing Debian builds
    • @cgohlke - providing Windows wheels

    Full Changelog: https://github.com/pyproj4/pyproj/compare/3.3.0...3.3.1

    Source code(tar.gz)
    Source code(zip)
  • 3.3.0(Nov 18, 2021)

    Changes

    • WHL: Wheels contain PROJ 8.2.0
    • DEP: Minimum supported Python version 3.8 (issue #930)
    • DEP: Minimum PROJ version 8.0 (issue #940)
    • BUG: Prepend "Derived" to CRS type name if CRS is derived (issue #932)
    • BUG: Improved handling of inf values in pyproj.transformer.Transformer.transform_bounds (pull #961)
    • BUG: CRS CF conversions mismatch of PROJ parameters in rotated pole (issue #948)
    • ENH: Add support for transforming bounds at the poles in pyproj.transformer.Transformer.transform_bounds (pull #962)
    • ENH: Added pyproj.transformer.Transformer.source_crs & pyproj.transformer.Transformer.target_crs (pull #976)
    • ENH: Added pyproj.crs.coordinate_operation.PoleRotationNetCDFCFConversion (issue #948)
    • ENH: Added pyproj.database.get_database_metadata (issue #990)
    • ENH: Added PROJ database metadata to pyproj.show_versions (issue #990)

    Contributors

    A total of 3 people contributed patches to this release. People with a "+" by their names contributed a patch for the first time.

    • Bill Little +
    • Gerrit Holl +
    • Alan D. Snow

    Other contributions:

    • Bas Couwenberg - testing the builds with Debian.
    • Jos de Kloe - testing the builds with Fedora.
    • Christoph Gohlke - providing Window's wheels.
    • Joris Van den Bossche - PR review.
    Source code(tar.gz)
    Source code(zip)
  • 3.2.1(Sep 18, 2021)

    Changes

    • REF: declare specific python types in cython (pull #928)
    • REF: Use cython string decoding (pull #929)
    • BUG: Return multiple authorities with pyproj.crs.CRS.list_authority (pull #943)
    • BUG: CRS CF conversions ensure lon_0 = north_pole_grid_longitude + 180 (issue #927)
    • BUG: CRS CF conversions ensure Pole rotation (netCDF CF convention) conversion works (issue #927)

    Acknowledgements

    Thanks to everyone who contributed to this release as well as to those who help with the distribution!

    • Bas Couwenberg - testing the builds with Debian.
    • Jos de Kloe - testing the builds with Fedora.
    Source code(tar.gz)
    Source code(zip)
  • 3.2.1rc0(Sep 15, 2021)

  • 3.2.0(Sep 4, 2021)

    Changes

    • WHL: Wheels contain PROJ 8.1.1
    • DOC: Add new pyproj logo (issue #700)
    • REF: Handle deprecation of proj_context_set_autoclose_database (issue #866)
    • REF: Make CRS methods inheritable (issue #847)
    • ENH: Added pyproj.crs.CRS.is_derived (pull #902)
    • ENH: Added pyproj.crs.GeocentricCRS (pull #903)
    • ENH: Added pyproj.crs.CRS.list_authority (issue #918)
    • ENH: Added inplace kwarg to :meth:pyproj.transformer.Transformer.transform (issue #906)
    • PERF: Disable unnecessary copy in dtype conversion for buffer (pull #904)
    • DOC: Improve FAQ text about CRS formats (issue #789)
    • BUG: Add PyPy cython array implementation (issue #854)
    • BUG: Fix spelling for pyproj.crs.coordinate_operation.AzimuthalEquidistantConversion and pyproj.crs.coordinate_operation.LambertAzimuthalEqualAreaConversion (issue #882)
    • BUG: Make datum name match exact in pyproj.database.query_utm_crs_info (pull #887)
    • BUG: Update pyproj.enums.GeodIntermediateFlag for future Python compatibility (issue #855)
    • BUG: Hide unnecessary PROJ ERROR from proj_crs_get_coordoperation (issue #873)
    • BUG: Fix pickling for CRS builder classes (issue #897)
    • CLN: Remove ignore_axis_order kwarg from pyproj.crs.CRS.is_exact_same as it was added by accident (pull #904)
    • CLN: remove numeric/numarrays support (pull #908)
    • LNT: Add pylint & address issues (pull #909)
    • DEP: Remove distutils dependency (pull #917)

    Acknowledgements

    Thanks to everyone who contributed to this release! The detailed bug reports are definitely appreciated. Additionally, thanks to those who help with the distribution!

    Contributors

    A total of 2 people contributed patches to this release. People with a "+" by their names contributed a patch for the first time.

    • Brendan Jurd + (Made the new logo!)
    • Alan D. Snow

    Other contributions:

    • Bas Couwenberg - testing the builds with Debian.
    • Jos de Kloe - testing the builds with Fedora.
    • Christoph Gohlke - testing the builds on Windows & providing Window's wheels.
    • Joris Van den Bossche - PR reviews.
    Source code(tar.gz)
    Source code(zip)
  • 3.1.0(May 24, 2021)

    Changes

    • DEP: Minimum supported Python version 3.7 (issue #790)
    • REF: Multithread safe CRS, Proj, & Transformer (issue #782)
    • BUG: Disallow NaN values with AreaOfInterest & BBox (issue #788)
    • ENH: Pretty format PROJ string support (issue #764)
    • ENH: Added pyproj.transformer.Transformer.to_proj4 (pull #798)
    • ENH: Added authority, accuracy, and allow_ballpark kwargs to :meth:pyproj.transformer.Transformer.from_crs (issue #754)
    • ENH: Added support for "AUTH:CODE" input to :meth:pyproj.transformer.Transformer.from_pipeline (issue #755)
    • ENH: Added pyproj.crs.CRS.to_3d (pull #808)
    • ENH: Added pyproj.transformer.Transformer.transform_bounds (issue #809)
    • ENH: Added pyproj.crs.CRS.is_compound (pull #823)
    • ENH: Added initial_idx and terminal_index kwargs to pyproj.Geod.npts (pull #841)
    • ENH: Added pyproj.Geod.inv_intermediate & pyproj.Geod.fwd_intermediate (pull #841)
    • REF: Skip transformations if noop & deprecate skip_equivalent (pull #824)

    Acknowledgements

    Thanks to everyone who contributed to this release! The detailed bug reports are definitely appreciated. Additionally, thanks to those who help with the distribution!

    Contributors

    A total of 3 people contributed patches to this release. People with a "+" by their names contributed a patch for the first time.

    • David Hoese +
    • Idan Miara +
    • Alan D. Snow

    Other contributions:

    Joris Van den Bossche - PR review & idea to make pyproj threadsafe, Bas Couwenberg - testing the builds with Debian.

    Source code(tar.gz)
    Source code(zip)
  • 3.0.1(Mar 5, 2021)

    Changes

    • WHL: Wheels contain PROJ 7.2.1
    • Use proj_context_errno_string in PROJ 8+ due to deprecation (issue #760)
    • BUG: Allow transformations with empty arrays (issue #766)
    • BUG: support numpy objects in CRS.from_cf (issue #773)

    Acknowledgements

    Thanks to everyone who contributed to this release! The detailed bug reports are definitely appreciated. Additionally, thanks to those who help with the distribution!

    A total of 2 people contributed patches to this release.

    Micah Cochran Alan D. Snow

    Other contributions:

    Joris Van den Bossche - PR review, Bas Couwenberg - testing the builds with Debian.

    Source code(tar.gz)
    Source code(zip)
  • 3.0.1rc0(Mar 2, 2021)

  • 3.0.0.post1(Nov 5, 2020)

    Changes

    • DST: Do not include test package in wheels (#744)
    • DOC: Specify units of measuring methods (#742)

    Acknowledgements

    Thanks to everyone who contributed to this release and to those who help with the distribution!

    A total of 2 people contributed patches to this release. People with a "+" by their names contributed a patch for the first time.

    • Christoph Gohlke
    • Sebastien Tremblay-Johnston +
    Source code(tar.gz)
    Source code(zip)
  • 3.0.0(Nov 5, 2020)

    Changes

    • Minimum supported Python version 3.6 (issue #499)
    • Minimum PROJ version 7.2 (issues #599 & #689)
    • WHL: Removed datumgrids from wheels because not needed with RFC 4 (pull #628)
    • ENH: Added PROJ Network Settings (#675, #691, #695)
    • ENH: Added ability to use global context (issue #661)
    • ENH: Added transformation grid sync API/CLI (issue #572)
    • ENH: Support obects with __array__ method (pandas.Series, xarray.DataArray, dask.array.Array) (issue #573)
    • ENH: Added pyproj.datadir.get_user_data_dir() (pull #636)
    • ENH: Added pyproj.transformer.Transformer.is_network_enabled (issue #629)
    • ENH: Added pyproj.transformer.TransformerGroup.download_grids() (pull #643)
    • ENH: Use โ€˜proj_get_units_from_databaseโ€™ in pyproj.database.get_units_map() & cleanup pyproj.database.get_codes() (issue #619)
    • ENH: Added support for radians for Proj & Transformer.from_pipeline & use less gil (issue #612)
    • ENH: Datum.from_name default to check all datum types (issue #606)
    • ENH: Use from_user_input in __eq__ when comparing CRS sub-classes (i.e. PrimeMeridian, Datum, Ellipsoid, etc.) (issue #606)
    • ENH: Add support for coordinate systems with CRS using CF conventions (issue #536)
    • ENH: Use proj_is_equivalent_to_with_ctx in the place of proj_is_equivalent_to internally (issue #666)
    • BUG: Add support for identifying engineering/parametric/temporal datums (issue #670)
    • ENH: Add support for temporal CRS CF coordinate system (issue #672)
    • ENH: Added support for debugging internal PROJ (pull #696)
    • ENH: Added pathlib support for data directory methods (pull #702)
    • ENH: Added pyproj.database.query_crs_info() (pull #703)
    • ENH: Added pyproj.database.query_utm_crs_info() (pull #712)
    • REF: Refactor Proj to inherit from Transformer (issue #624)
    • REF: Added pyproj.database, pyproj.aoi, and pyproj.list modules (pull #703)
    • BUG: Fix handling of polygon holes when calculating area in Geod (pull #686)

    Acknowledgements

    Thanks to everyone who contributed to this release! The detailed bug reports are definitely appreciated. Additionally, thanks to those who help with the distribution!

    A total of 8 people contributed patches to this release. People with a "+" by their names contributed a patch for the first time.

    • Bas Couwenberg
    • David Haberthรผr +
    • Filipe Fernandes +
    • Marcos Modenesi +
    • Mike Taves +
    • Poruri Sai Rahul +
    • jacob-indigo +
    • Alan D. Snow

    Other contributions:

    • Bas Couwenberg - testing the builds with Debian
    • Christoph Gohlke - testing the Windows wheel builds
    • Joris Van den Bossche - testing with geopandas and PR reviews
    • Libor Pechรกฤek - for preventing another post1 release with a MANIFEST.in catch
    Source code(tar.gz)
    Source code(zip)
  • v2.6.1rel(May 4, 2020)

    Changes

    • WHL: Wheels contain PROJ version is 7.0.1
    • BUG: Allow *_name to be added in pyproj.crs.CRS.to_cf() (issue #585)
    • BUG: Fix building prime meridian in pyproj.crs.CRS.from_cf() (pull #588)
    • BUG: Fix check for numpy bool True kwarg (pull #590)
    • DOC: Update pyproj.Proj docstrings for clarity (issue #584)
    • Added pyproj.__proj_version__
    • BUG: Fix pyproj.proj.Proj.get_factors() (issue #600)
    • BUG: fix unequal (!=) with non-CRS type (pull #596)

    Acknowledgements

    Thanks to everyone who contributed to this release! The detailed bug reports are definitely appreciated. Additionally, thanks to those who help with the distribution!

    A total of 3 people contributed patches to this release. People with a "+" by their names contributed a patch for the first time.

    Joris Van den Bossche Martin Raspaud + Alan D. Snow

    Other contributions:

    Christoph Gohlke - testing the Windows wheel builds. Bas Couwenberg - testing the builds with Debian.

    Source code(tar.gz)
    Source code(zip)
  • 2.6.1rc1(May 3, 2020)

  • 2.6.1rc0(May 2, 2020)

  • v2.6.0rel(Mar 18, 2020)

    Changes

    • ENH: Added pyproj.proj.Proj.get_factors (issue #503)
    • ENH: Added type hints (issue #369)
    • BUG: Don't use CRS classes for defaults in CRS child class init signatures (issue #554)
    • ENH: Updated :pyproj.crs.CRS.axis_info to pull all relevant axis information from CRS (issue #557)
    • ENH: Added pyproj.transformer.Transform.__eq__ (issue #559)
    • ENH: Added pyproj.crs.CRS.utm_zone (issue #561)
    • BUG: Modify CRS dict test to accomodate numpy bool types. (issue #564)
    • BUG: Fix pipeline transformations to match cct (issue #565)
    • BUG: Don't silently ignore kwargs when projparams are specified (Proj & CRS) (issue #565)

    Acknowledgements

    Thanks to everyone who contributed to this release! The detailed bug reports are definitely appreciated. Additionally, thanks to those who help with the distribution!

    A total of 4 people contributed patches to this release. People with a "+" by their names contributed a patch for the first time.

    • Guillaume Lostis
    • Joe Ranalli +
    • Greg Berardinelli +
    • Alan D. Snow

    Other contributions:

    Bas Couwenberg - testing the builds with Debian. Joris Van den Bossche - PR review.

    Source code(tar.gz)
    Source code(zip)
  • 2.6.0rc0(Mar 13, 2020)

  • v2.5.0rel(Feb 21, 2020)

    Changes

    • Wheels contain PROJ version is 6.3.1
    • Remove deprecated PyObject_AsWriteBuffer (issue #495)
    • ENH: Added pyproj.crs.CRS.equals with ignore_axis_order kwarg (issue #493)
    • ENH: Added pyproj.crs.CoordinateSystem.from_json, pyproj.crs.CoordinateSystem.from_json_dict, and pyproj.crs.CoordinateSystem.from_string (pull #501)
    • ENH: Added pyproj.crs.CoordinateSystem to pyproj.crs namespace (pull #501)
    • ENH: Added pyproj.crs.CoordinateSystem.from_user_input, pyproj.crs.CoordinateOperation.from_user_input, pyproj.crs.Datum.from_user_input, pyproj.crs.PrimeMeridian.from_user_input, pyproj.crs.Ellipsoid.from_user_input (pull #502)
    • ENH: Added pyproj.crs.CoordinateSystem.from_name, pyproj.crs.CoordinateOperation.from_name, pyproj.crs.Datum.from_name, :meth:pyproj.crs.PrimeMeridian.from_name, pyproj.crs.Ellipsoid.from_name (pull #505)
    • BUG: Fix getting :attr:pyproj.crs.Ellipsoid.semi_minor_metre when not computed (issue #457)
    • ENH: Added support for custom CRS (issue #389)
    • ENH: Added enumeration for WKT2_2019 (issue #526)
    • ENH: Update from_cf/to_cf to use WKT instead of PROJ strings for internal management (issue #515)

    Acknowledgements

    Thanks to everyone who contributed to this release! The detailed bug reports are definitely appreciated. Additionally, thanks to those who help with the distribution!

    A total of 3 people contributed to the codebase in this release. People with a "+" by their names contributed a patch for the first time:

    Bas Couwenberg Eduard Popov + Alan D. Snow

    Other contributions:

    Christoph Gohlke - testing the Windows wheel builds. Bas Couwenberg - testing the builds with Debian. David Hoese - testing of new CRS.to_cf/from_cf methods

    Source code(tar.gz)
    Source code(zip)
  • 2.5.rc0(Feb 20, 2020)

  • v2.4.2rel(Dec 1, 2019)

    Changes

    • Elevate +init= warning to FutureWarning (pull #486)
    • Add UserWarning to to_proj4() (pull #486)
    • BUG: Fix for 32-bit i686 plaforms (issue #481)
    • Return โ€˜infโ€™ in Proj instead of 1.e30 (pull #491)

    Acknowledgements

    Thanks to everyone who contributed to this release! The detailed bug reports are definitely appreciated. Additionally, thanks to those who help with the distribution!

    A total of 3 people contributed to the codebase in this release. People with a "+" by their names contributed a patch for the first time:

    Guillaume Lostis + Jos de Kloe Alan D. Snow

    Other contributions:

    Bas Couwenberg - testing the builds with Debian. David Hoese - PR review.

    Source code(tar.gz)
    Source code(zip)
  • 2.4.2.rc0(Nov 26, 2019)

  • v2.4.1rel(Nov 6, 2019)

    Changes

    • Wheels contain PROJ version is 6.2.1 (issue #456)
    • Wheels for Linux x86_64 use manylinux2010 (pyproj4/pyproj-wheels/pull/18)
    • BUG: Fix setting lat_ts for mercator projection in CRS.from_cf() and CRS.to_cf() (issue #461)
    • BUG: latlon -> longlat in CRS.from_cf() for o_proj so behavior consistent in PROJ 6.2.0 and 6.2.1 (pull #472)
    • ENH: Add repr for pyproj.crs.CoordinateOperation and for pyproj.transformer.TransformerGroup (pull #464)

    Acknowledgements

    Thanks to everyone who contributed to this release! The detailed bug reports are definitely appreciated. Additionally, thanks to those who help with the distribution!

    A total of 3 people contributed to the codebase in this release. People with a "+" by their names contributed a patch for the first time:

    Kristian Evers + Alan D. Snow

    Other contributions:

    Christoph Gohlke - testing the Windows wheel builds. Bas Couwenberg - testing the builds with Debian.

    Source code(tar.gz)
    Source code(zip)
:earth_asia: Python Geocoder

Python Geocoder Simple and consistent geocoding library written in Python. Table of content Overview A glimpse at the API Forward Multiple results Rev

Denis 1.5k Jan 02, 2023
Using Global fishing watch's data to build a machine learning model that can identify illegal fishing and poaching activities through satellite and geo-location data.

Using Global fishing watch's data to build a machine learning model that can identify illegal fishing and poaching activities through satellite and geo-location data.

Ayush Mishra 3 May 06, 2022
Python ๅฐ็ฃ่กŒๆ”ฟๅ€ๅœฐๅœ– (2021)

Python ๅฐ็ฃ่กŒๆ”ฟๅ€ๅœฐๅœ– (2021) ไปฅ python ่ฎ€ๅ–ๆ”ฟๅบœ้–‹ๆ”พๅนณๅฐ็š„ ShapeFile ๅœฐๅœ–่ณ‡่จŠใ€‚ๆญก่ฟŽๅผ•็”จๆˆ–ๆ˜ฏๅ”ไฝœ ๅฆๆœ‰็ธฃๅธ‚่ณ‡่จŠใ€ๆ‘้‡Œ่ณ‡่จŠ่ˆ‡ๅ„็จฎ่กŒๆ”ฟๅœฐๅœ–่ณ‡่จŠ ไพ‹ๅฆ‚๏ผš ็›ด่ฝ„ๅธ‚ใ€็ธฃๅธ‚็•Œ็ทš(TWD97็ถ“็ทฏๅบฆ) ้„‰้Žฎๅธ‚ๅ€็•Œ็ทš(TWD97็ถ“็ทฏๅบฆ) | ๆ”ฟๅบœ่ณ‡ๆ–™้–‹ๆ”พๅนณ่‡บ: https://data

WeselyOng 12 Sep 27, 2022
Use Mapbox GL JS to visualize data in a Python Jupyter notebook

Location Data Visualization library for Jupyter Notebooks Library documentation at https://mapbox-mapboxgl-jupyter.readthedocs-hosted.com/en/latest/.

Mapbox 620 Dec 15, 2022
Google Maps keeps old satellite imagery around for a while โ€“ this tool collects what's available for a user-specified region in the form of a GIF.

google-maps-at-88-mph The folks maintaining Google Maps regularly update the satellite imagery it serves its users, but outdated versions of the image

Noah Doersing 111 Sep 27, 2022
iNaturalist observations along hiking trails

This tool reads the route of a hike and generates a table of iNaturalist observations along the trails. It also shows the observations and the route of the hike on a map. Moreover, it saves waypoints

7 Nov 11, 2022
Build, deploy and extract satellite public constellations with one command line.

SatExtractor Build, deploy and extract satellite public constellations with one command line. Table of Contents About The Project Getting Started Stru

Frontier Development Lab 70 Nov 18, 2022
Solving the Traveling Salesman Problem using Self-Organizing Maps

Solving the Traveling Salesman Problem using Self-Organizing Maps This repository contains an implementation of a Self Organizing Map that can be used

Diego Vicente 3.1k Dec 31, 2022
Example of animated maps in matplotlib + geopandas using entire time series of congressional district maps from UCLA archive. rendered, interactive version below

Example of animated maps in matplotlib + geopandas using entire time series of congressional district maps from UCLA archive. rendered, interactive version below

Apoorva Lal 5 May 18, 2022
Search and download Copernicus Sentinel satellite images

sentinelsat Sentinelsat makes searching, downloading and retrieving the metadata of Sentinel satellite images from the Copernicus Open Access Hub easy

837 Dec 28, 2022
A part of HyRiver software stack for handling geospatial data manipulations

Package Description Status PyNHD Navigate and subset NHDPlus (MR and HR) using web services Py3DEP Access topographic data through National Map's 3DEP

Taher Chegini 5 Dec 14, 2022
When traveling in the backcountry during winter time, updating yourself on current and recent weather data is important to understand likely avalanche danger.

Weather Data When traveling in the backcountry during winter time, updating yourself on current and recent weather data is important to understand lik

Trevor Allen 0 Jan 02, 2022
Minimum Bounding Box of Geospatial data

BBOX Problem definition: The spatial data users often are required to obtain the coordinates of the minimum bounding box of vector and raster data in

Ali Khosravi Kazazi 1 Sep 08, 2022
GebPy is a Python-based, open source tool for the generation of geological data of minerals, rocks and complete lithological sequences.

GebPy is a Python-based, open source tool for the generation of geological data of minerals, rocks and complete lithological sequences. The data can be generated randomly or with respect to user-defi

Maximilian Beeskow 16 Nov 29, 2022
Python module and script to interact with the Tractive GPS tracker.

pyTractive GPS Python module and script to interact with the Tractive GPS tracker. Requirements Python 3 geopy folium pandas pillow usage: main.py [-h

Dr. Usman Kayani 3 Nov 16, 2022
Evaluation of file formats in the context of geo-referenced 3D geometries.

Geo-referenced Geometry File Formats Classic geometry file formats as .obj, .off, .ply, .stl or .dae do not support the utilization of coordinate syst

Advanced Information Systems and Technology 11 Mar 02, 2022
๐ŸŒ Local tile server for viewing geospatial raster files with ipyleaflet

๐ŸŒ Local Tile Server for Geospatial Rasters Need to visualize a rather large raster (gigabytes) you have locally? This is for you. A Flask application

Bane Sullivan 192 Jan 04, 2023
Raster processing benchmarks for Python and R packages

Raster processing benchmarks This repository contains a collection of raster processing benchmarks for Python and R packages. The tests cover the most

Krzysztof Dyba 13 Oct 24, 2022
Manipulation and analysis of geometric objects

Shapely Manipulation and analysis of geometric objects in the Cartesian plane. Shapely is a BSD-licensed Python package for manipulation and analysis

3.1k Jan 03, 2023
Spectral decomposition for characterizing long-range interaction profiles in Hi-C maps

Inspectral Spectral decomposition for characterizing long-range interaction prof

Nezar Abdennur 6 Dec 13, 2022