Skip to main content

This Python package and extensions are a number of tools for programming and manipulating the GDAL Geospatial Data Abstraction Library. Actually, it is two libraries – GDAL for manipulating geospatial raster data and OGR for manipulating geospatial vector data – but we’ll refer to the entire package as the GDAL library for the purposes of this document.

The GDAL project (primarily Howard Butler) maintains SWIG generated Python bindings for GDAL and OGR. Generally speaking the classes and methods mostly match those of the GDAL and OGR C++ classes. There is no Python specific reference documentation, but the GDAL API Tutorial includes Python examples.

Dependencies

  • libgdal (1.5.0 or greater) and header files (gdal-devel)

  • numpy (1.0.0 or greater) and header files (numpy-devel) (not explicitly required, but many examples and utilities will not work without it)

Installation

Unix

The GDAL Python bindings support both distutils and setuptools, with a preference for using setuptools. If setuptools can be imported, setup will use that to build an egg by default. If setuptools cannot be imported, a simple distutils root install of the GDAL package (and no dependency chaining for numpy) will be made.

easy_install

GDAL can be installed from the Python CheeseShop:

$ sudo easy_install GDAL

It may be necessary to have libgdal and its development headers installed if easy_install is expected to do a source build because no egg is available for your specified platform and Python version.

setup.py

Most of setup.py’s important variables are controlled with the setup.cfg file. In setup.cfg, you can modify pointers to include files and libraries. The most important option that will likely need to be modified is the gdal_config parameter. If you installed GDAL from a package, the location of this program is likely /usr/bin/gdal-config, but it may be in another place depending on how your packager arranged things.

After modifying the location of gdal-config, you can build and install with the setup script:

$ python setup.py build
$ python setup.py install

If you have setuptools installed, you can also generate an egg:

$ python setup.py bdist_egg

Building as part of the GDAL library source tree

You can also have the GDAL Python bindings built as part of a source build by specifying –with-python as part of your configure line:

$ ./configure --with-python

Use the typical make and make install commands to complete the installation:

$ make
$ make install

A note about setuptools

./configure attempts to detect if you have setuptools installed in the tree of the Python binary it was given (or detected on the execution path), and it will use an egg build by default in that instance. If you have a need to use a distutils-only install, you will have to edit setup.py to ensure that the HAVE_SETUPTOOLS variable is ultimately set to False and proceed with a typical ‘python setup.py install’ command.

Windows

You will need the following items to complete an install of the GDAL Python bindings on Windows:

  • GDAL Windows Binaries The basic install requires the gdalwin32exe###.zip (### is the version number). Other files you see in the directory are for various optional plugins and development headers/include files. After downloading the zip file, extract it to the directory of your choosing.

  • GDAL Python Bindings available at the Python Cheeseshop. An executable installer is available for both Python 2.4 or 2.5 or as a Python egg.

As explained in the README_EXE.txt file, after unzipping the GDAL binaries you will need to modify your system path and variables. If you’re not sure how to do this, read the Microsoft KnowledgeBase doc

  1. Add the installation directory bin folder to your system PATH, remember to put a semicolon in front of it before you add to the existing path.

    C:\gdalwin32-1.5\bin
  2. Create a new user or system variable with the data folder from your installation.

    Name : GDAL_DATA
    Path : C:\gdalwin32-1.5\data

Skip down to the Usage section to test your install. Note, a reboot may be required.

SWIG

The GDAL Python package is built using SWIG. The earliest version of SWIG that is supported to generate the wrapper code is 1.3.31. It is possible that usable bindings will build with a version earlier than 1.3.31, but no development efforts are targeted at versions below it. You should not have to run SWIG in your development tree to generate the binding code, as it is usually included with the source. However, if you do need to regenerate, you can do so with the following make command from within the ./swig/python directory:

$ make generate

To ensure that all of the bindings are regenerated, you can clean the bindings code out before the generate command by issuing:

$ make veryclean

Usage

Imports

There are five major modules that are included with the GDAL Python bindings.:

>>> from osgeo import gdal
>>> from osgeo import ogr
>>> from osgeo import osr
>>> from osgeo import gdal_array
>>> from osgeo import gdalconst

Additionally, there are five compatibility modules that are included but provide notices to state that they are deprecated and will be going away. If you are using GDAL 1.5 bindings, you should update your imports to utilize the usage above, but the following will work until at least GDAL 2.0.

>>> import gdal
>>> import ogr
>>> import osr
>>> import gdalnumeric
>>> import gdalconst

If you have previous code that imported the global module and still need to support the old import, a simple try…except import can silence the deprecation warning and keep things named essentially the same as before:

>>> try:
...     from osgeo import gdal
... except ImportError:
...     import gdal

Docstrings

Currently, only the OGR module has docstrings which are generated from the C/C++ API doxygen materials. Some of the arguments and types might not match up exactly with what you are seeing from Python, but they should be enough to get you going. Docstrings for GDAL and OSR are planned for a future release.

The History of Using GDAL/OGR in Python

Python was the first set of bindings supported by GDAL/OGR and though the bindings were generated with SWIG (1.1 series), the process was very Python specific and contained a significant amount of hand written wrapper code. In 2005, Kevin Ruland launched an effort for a set of next generation bindings generated with SWIG (1.3 series) and supported by a variety of languages. With GDAL 1.4.0 the various bindings became fairly mature, and for GDAL 1.5.0, the “next-generation” bindings become the default bindings. The previous, “old-generation,” bindings will continue to be available, but they will not be widely supported and no new development will be targeted at them. From the viewpoint of a user, with GDAL 1.5.0 and above, you should not have to worry very much about the distinction between these two development efforts.

Usage of Old-Generation Python Bindings

For certain legacy applications (most notably OpenEV 1.x), it may be necessary to continue to use the old-generation Python bindings. These can be built and installed as part of a source build from ./configure:

$ ./configure --with-ogpython=/usr/bin/python

As noted earlier, these bindings are not widely supported and no new development is expected to take place with them (including serious bug fixes).

Numpy/Numeric

One advanced feature of the GDAL Python bindings not found in the other language bindings (C#, Perl) is integration with the Python numerical array facilities. The gdal.Dataset.ReadAsArray() method can be used to read raster data as numerical arrays, ready to use with the Python numerical array capabilities.

These facilities have evolved somewhat over time. In the past the package was known as “Numeric” and imported using “import Numeric”. A new generation is imported using “import numpy”. Currently the old generation bindings only support the older Numeric package, and the new generation bindings only support the new generation numpy package. They are mostly compatible, and by importing gdalnumeric (or osgeo.gdal_array) you will get whichever is appropriate to the current bindings type.

Examples

One example of GDAL/numpy integration is found in the val_repl.py script.

Performance Notes

ReadAsArray expects to make an entire copy of a raster band or dataset unless the data are explicitly subsetted as part of the function call. For large data, this approach is expected to be prohibitively memory intensive.

Metadata

Release files for GDAL 1.5.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for GDAL 1.5.2
File Size Uploaded
GDAL-1.5.2.tar.gz 248.4 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for GDAL 1.5.2
File
GDAL-1.5.2.win32-py2.5.exe Details
GDAL-1.5.2.win32-py2.4.exe Details
GDAL-1.5.2-py2.5-win32.egg Legacy Egg format - - Details
GDAL-1.5.2-py2.5-macosx-10.5-i386.egg Legacy Egg format - - Details
GDAL-1.5.2-py2.4-win32.egg Legacy Egg format - - Details

Total release size: 1.7 MB

Release files / GDAL-1.5.2.tar.gz

Download URL GDAL-1.5.2.tar.gz
Size 248.4 kB
Tags Source
SHA-256 checksum
How to use checksums
68fb00fef40b4326a63ea3606903ec4fef3df50fa0f83b9686ad952c9ec07093
BLAKE2b-256 checksum
How to use checksums
9586c60989985023f2ac560534fb2dc1f982e94a094433688981f8df95d8245f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / GDAL-1.5.2.win32-py2.5.exe

Download URL GDAL-1.5.2.win32-py2.5.exe
Size 259.1 kB
Tags Source
SHA-256 checksum
How to use checksums
cb2f5c746710e4984b9cf6d545ade5343ab938daa03ea004a587370ace41d981
BLAKE2b-256 checksum
How to use checksums
14fdcc5b8e4b1e32c852ef9fbb3c684c6b1d11a68155a7f12a57c48d5d88548f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / GDAL-1.5.2.win32-py2.4.exe

Download URL GDAL-1.5.2.win32-py2.4.exe
Size 259.1 kB
Tags Source
SHA-256 checksum
How to use checksums
6a8c9234b35c5bd671cd4e9380f675120b5baa98baf76091e8e82da7768e54b2
BLAKE2b-256 checksum
How to use checksums
fc13e2b27c4ec0a6d1221e9fe90984087aeb35df49a7223a5e761aefb9885086
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / GDAL-1.5.2-py2.5-win32.egg

Download URL GDAL-1.5.2-py2.5-win32.egg
Size 238.1 kB
Tags Egg
SHA-256 checksum
How to use checksums
dc415ee10060b96ff2e7019c633046887ee556021aab39b3f11b28aa69518021
BLAKE2b-256 checksum
How to use checksums
16369a6bb42a2c484657c9324c1810d33e63e56039848fb4d072d3bb82b65a34
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / GDAL-1.5.2-py2.5-macosx-10.5-i386.egg

Download URL GDAL-1.5.2-py2.5-macosx-10.5-i386.egg
Size 470.4 kB
Tags Egg
SHA-256 checksum
How to use checksums
73759407bd78980293e13e836805ea3002eed2866203334b93c6e4c79b1eadf2
BLAKE2b-256 checksum
How to use checksums
c73632cc146a7881807d7f5ba19f798cb423b7ebb8e453c06a2cd75bf6c22e23
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / GDAL-1.5.2-py2.4-win32.egg

Download URL GDAL-1.5.2-py2.4-win32.egg
Size 239.2 kB
Tags Egg
SHA-256 checksum
How to use checksums
bd8a1eea840a708adc3ed72fa78c5251ad49bd729554c5f0fa7e649dd74192df
BLAKE2b-256 checksum
How to use checksums
ccab2c42c4e3164fe7f32df3ae687b48ff6c1411eb9041e33d1b01f284c8d6dd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

3.13.3

1 release file

3.13.2

1 release file

3.13.1

1 release file

3.13.0

1 release file

3.12.4

1 release file

3.12.3

1 release file

3.12.2

1 release file

3.12.1

1 release file

3.11.5

1 release file

3.11.4

1 release file

3.11.3

1 release file

3.11.2

1 release file

3.11.1

1 release file

3.11.0

1 release file

3.10.3

1 release file

3.10.2

1 release file

3.10.1

1 release file

3.10.0

1 release file

3.9.3

1 release file

3.9.2

1 release file

3.9.1

1 release file

3.9.0

1 release file

3.8.5

1 release file

3.8.4

1 release file

3.8.3

1 release file

3.8.2

1 release file

3.8.1

1 release file

3.8.0

1 release file

3.7.3

1 release file

3.7.2

1 release file

3.7.1.1

1 release file

3.7.1

1 release file

3.7.0

1 release file

3.6.4

1 release file

3.6.3

1 release file

3.6.2

1 release file

3.6.1

1 release file

3.6.0.1

1 release file

3.6.0

1 release file

3.5.3

1 release file

3.5.2

1 release file

3.5.1

1 release file

3.5.0

1 release file

3.4.3

1 release file

3.4.2

1 release file

3.4.1

1 release file

3.4.0

1 release file

3.3.3

1 release file

3.3.2

1 release file

3.3.1

1 release file

3.3.0

1 release file

3.2.3

1 release file

3.2.2.1

1 release file

3.2.2

1 release file

3.2.1

1 release file

3.2.0

1 release file

3.1.4

1 release file

3.1.3

1 release file

3.1.2

1 release file

3.1.1

1 release file

3.1.0

1 release file

3.0.4

1 release file

3.0.3

1 release file

3.0.2

1 release file

3.0.1

1 release file

3.0.0

1 release file

2.4.4

1 release file

2.4.3

1 release file

2.4.2

1 release file

2.4.0

1 release file

2.3.3

1 release file

2.3.2

1 release file

2.3.1

1 release file

2.3.0

1 release file

2.2.4

1 release file

2.2.3

1 release file

2.2.2

1 release file

2.2.1

1 release file

2.2.0

1 release file

2.1.3

1 release file

2.1.0

1 release file

2.0.1

1 release file

2.0.0

1 release file

1.11.2

1 release file

1.11.1

1 release file

1.11.0

1 release file

1.10.0

1 release file

1.9.1

1 release file

1.9.0

1 release file

1.8.1

1 release file

1.7.1

1 release file

1.7.0

1 release file

1.6.1

7 release files

1.6.0

7 release files

This release

1.5.2 This release

6 release files

1.5.0

6 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page