Technical Documentation: OSGeo/gdal
โน๏ธ Provenance: Multi-Tier Ingestion ยท CodeWiki Reference
Overview (README.md)
GDAL - Geospatial Data Abstraction Library
GDAL is an open source MIT licensed translator library for raster and vector geospatial data formats.
- Main site: https://gdal.org - Developer and user docs, links to other resources
- GIT repository: https://github.com/OSGeo/gdal
- Bug tracker: https://github.com/OSGeo/gdal/issues
- Download: https://download.osgeo.org/gdal
- Mailing list: https://lists.osgeo.org/mailman/listinfo/gdal-dev
The GDAL project uses a custom governance
and is fiscally sponsored by NumFOCUS. Consider making
a tax-deductible donation to help the project
pay for developer time, professional services, travel, workshops, and a variety of other needs.
NumFOCUS is 501(c)(3) non-profit charity in the United States; as such, donations to
NumFOCUS are tax-deductible as allowed by law. As with any donation, you should
consult with your personal tax adviser or the IRS about your particular tax situation.
How to build
See BUILDING.md
How to contribute
See CONTRIBUTING.md
Docker images
See docker/
Code of Conduct
See doc/source/community/code_of_conduct.rst
Security policy
See SECURITY.md
Citing GDAL/OGR in publications
See CITATION and CITATION.cff
Doc Source Gdal Rtd README (`doc/source/gdal_rtd/README.md`)
Boundless Read the Docs Theme
Operates as an extension of sphinx_rtd_theme originated by Boundless
Reference:
Configuration
Configuration options provided by ``boundess_rtd`:
html_theme_options = {
'display_connect': False #Ask a Question
}Configuration options provided by sphinx_rtd_theme:
html_theme_options = {
'canonical_url': '',
'analytics_id': '',
'logo_only': False,
'display_version': True,
'prev_next_buttons_location': 'both',
'style_external_links': True,
'vcs_pageview_mode': '',
# Toc options
'collapse_navigation': False,
'sticky_navigation': True,
'navigation_depth': 3,
'includehidden': True,
'titles_only': False
}For the navigation bar to work correctly be sure to include captions in your tocreee definitions.
Implementation
Care is taken to override the sphinx_rtd_theme CSS settings as required, rather than duplicate the files. This approach allows us to update sphinx_rtd_theme over time to take advantage features and fixes.
The following is an outline of boundless_rtd contents:
- static/css/boundless.css - provides font selection and overrides branding elements
- static/fonts/proximanova-*
- static/fonts/sourcecodepro-*
- static/img/boundless-logo-32.png
- static/img/powered-by-boundless*.png
- static/js/
Doc Source Workshop README (`doc/source/workshop/README.md`)
GDAL new command line interface: introduction and advanced topics
GDAL 3.11 introduced a new command line interface (CLI), simply called "gdal", supplementing the traditional well-known GDAL utilities (gdal_translate, ogr2ogr, etc.), to provide users with a more uniform, predictable and user-friendly experience.
This workshop will give participants the opportunity to get hands-on experience discovering the capabilities of the new CLI through a series of exercises, including how to leverage them from Python.
Are you a workshop participant or want to dive-in individually? Go to https://gdal.org/en/latest/workshop/src/index.html
Doc CMakeLists (`doc/CMakeLists.txt`)
CMake4GDAL project is distributed under MIT license. See accompanying file LICENSE.txt.
find_package(Doxygen)
find_program(SPHINX_BUILD sphinx-build)
if ((NOT "${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_SOURCE_DIR}")
AND DOXYGEN_FOUND
AND SPHINX_BUILD)
set(BUILD_DOCS_DEFAULT ON)
else()
set(BUILD_DOCS_DEFAULT OFF)
endif()
option(BUILD_DOCS "Set to ON to define documentation targets: 'html', 'latexpdf', 'man', 'doxygen_xml', 'doxygen_html' " ${BUILD_DOCS_DEFAULT})
option(DOXYGEN_FAIL_ON_WARNINGS "Set to ON to fail the build if Doxygen produces warnings" OFF)
if (BUILD_DOCS)
if ("${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_SOURCE_DIR}")
message(FATAL_ERROR "BUILD_DOCS=ON not compatible of in-source builds (CMAKE_SOURCE_DIR=CMAKE_BINARY_DIR)")
endif()
if (NOT DOXYGEN_FOUND)
message(FATAL_ERROR "BUILD_DOCS=ON requires Doxygen")
endif()
if (NOT SPHINX_BUILD)
message(FATAL_ERROR "BUILD_DOCS=ON requires sphinx-build")
endif()
####################################################################################################
# Sphinx configuration
####################################################################################################
# Determine environment variables so that Sphinx can load the gdal Python module without installing it.
include(GdalSetRuntimeEnv)
gdal_set_runtime_env(BUILD_RUN_ENV)
set(SPHINX_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/build)
set(SPHINX_BUILD_OPTS "--jobs=auto" "--show-traceback")
file(MAKE_DIRECTORY ${SPHINX_BUILD_DIR})
file(MAKE_DIRECTORY ${SPHINX_BUILD_DIR}/html_extra)
file(GLOB_RECURSE SPHINX_SOURCE_FILES CONFIGURE_DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/source/*.rst
${CMAKE_CURRENT_SOURCE_DIR}/source/*.py)
####################################################################################################
# Doxygen XML and HTML outputs
####################################################################################################
# Create a dependency between source files and Doxygen
file(GLOB_RECURSE DOXYGEN_SOURCE_FILES CONFIGURE_DEPENDS
${CMAKE_SOURCE_DIR}/alg/*.cpp
${CMAKE_SOURCE_DIR}/app/*.cpp
${CMAKE_SOURCE_DIR}/frmts/gdalallregister.cpp
${CMAKE_SOURCE_DIR}/frmts/vrt/*.cpp
${CMAKE_SOURCE_DIR}/gcore/*.cpp
${CMAKE_SOURCE_DIR}/ogr/*.cpp
${CMAKE_SOURCE_DIR}/port/*.cpp
${CMAKE_SOURCE_DIR}/gnm/*.cpp
)
# Use configure_file to copy the Doxygen file into our build directory.
# This causes CMake to re-run if the contents of the Doxyfile change.
configure_file(${CMAKE_SOURCE_DIR}/Doxyfile ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_base)
# Read the contents of the copied Doxyfile, so that we can write modified versions
# for XML and HTML outputs
file(READ ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_base DOXYFILE_CONTENTS)
if (DOXYGEN_FAIL_ON_WARNINGS)
string(JOIN "\n" DOXYFILE_CONTENTS
${DOXYFILE_CONTENTS}
"WARN_AS_ERROR=FAIL_ON_WARNINGS_PRINT")
endif()
# Doxygen XML outputs
# TODO <ndash> replacement?
string(JOIN "\n" DOXYFILE_XML_CONTENTS
${DOXYFILE_CONTENTS}
"GENERATE_HTML=NO"
"GENERATE_XML=YES"
"XML_OUTPUT=${SPHINX_BUILD_DIR}/xml"
"XML_PROGRAMLISTING=NO"
"PREDEFINED+=DOXYGEN_XML"
)
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_xml ${DOXYFILE_XML_CONTENTS})
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/doxygen_xml.stamp
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_xml ${DOXYGEN_SOURCE_FILES}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_xml
COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/doxygen_xml.stamp
)
add_custom_target(doxygen_xml
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/doxygen_xml.stamp
)
# Doxygen HTML outputs
string(JOIN "\n" DOXYFILE_HTML_CONTENTS
"${DOXYFILE_CONTENTS}"
"HTML_OUTPUT=${SPHINX_BUILD_DIR}/html_extra/doxygen"
"INLINE_INHERITED_MEMB=YES"
)
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_html ${DOXYFILE_HTML_CONTENTS})
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/doxygen_html.stamp
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_html ${DOXYGEN_SOURCE_FILES}
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_html
COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/doxygen_html.stamp
)
add_custom_target(doxygen_html
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/doxygen_html.stamp
)
####################################################################################################
# Sphinx outputs
####################################################################################################
# Sphinx HTML documentation
add_custom_command(
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/html.stamp"
DEPENDS gdalapps doxygen_xml python_binding
${SPHINX_SOURCE_FILES}
COMMAND ${CMAKE_COMMAND} -E env ${BUILD_RUN_ENV} BUILDDIR=${SPHINX_BUILD_DIR}
${SPHINX_BUILD} -M html
${CMAKE_CURRENT_SOURCE_DIR}/source
${SPHINX_BUILD_DIR}
${SPHINX_BUILD_OPTS}
"--fail-on-warning"
COMMAND ${CMAKE_COMMAND} -E touch "${CMAKE_CURRENT_BINARY_DIR}/html.stamp"
)
add_custom_target(html
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/html.stamp
)
# Sphinx PDF documentation
set(GDAL_DOC_PDF ${CMAKE_CURRENT_BINARY_DIR}/build/latex/gdal.pdf)
add_custom_command(
OUTPUT ${GDAL_DOC_PDF}
DEPENDS gdalapps doxygen_xml ${SPHINX_SOURCE_FILES}
COMMAND ${CMAKE_COMMAND} -E env ${BUILD_RUN_ENV} BUILDDIR=${SPHINX_BUILD_DIR}
${SPHINX_BUILD} -M latexpdf
${CMAKE_CURRENT_SOURCE_DIR}/source
${CMAKE_CURRENT_BINARY_DIR}/build
)
add_custom_target(latexpdf DEPENDS ${GDAL_DOC_PDF})
# Sphinx manpage documentation
add_custom_command(
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/man.stamp"
DEPENDS gdalapps doxygen_xml ${SPHINX_SOURCE_FILES}
COMMAND ${CMAKE_COMMAND} -E env ${BUILD_RUN_ENV} BUILDDIR=${SPHINX_BUILD_DIR}
${SPHINX_BUILD} -M man
${CMAKE_CURRENT_SOURCE_DIR}/source
${CMAKE_CURRENT_BINARY_DIR}/build
${SPHINX_BUILD_OPTS}
COMMAND ${CMAKE_COMMAND} -E remove_directory "${CMAKE_CURRENT_BINARY_DIR}/build/man/_static"
COMMAND ${CMAKE_COMMAND} -E touch "${CMAKE_CURRENT_BINARY_DIR}/man.stamp"
)
add_custom_target(man DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/man.stamp)
####################################################################################################
# Packaged documentation (e.g. "gdal3100doc.zip")
####################################################################################################
string(REPLACE "." "" _GDAL_VERSION_NO_DOTS ${GDAL_VERSION_NO_DEV_SUFFIX})
set(DOC_ZIP "gdal${_GDAL_VERSION_NO_DOTS}doc.zip")
# The Javadoc path is copied from swig/java/CMakeLists.txt, which hasn't been read
# at the time this is executed.
set(JAVADOC_ZIP ${CMAKE_CURRENT_BINARY_DIR}/../swig/java/javadoc.zip)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${DOC_ZIP}
DEPENDS ${GDAL_DOC_PDF}
${CMAKE_CURRENT_BINARY_DIR}/html.stamp
java_binding ${JAVADOC_ZIP}
COMMAND ${CMAKE_COMMAND} -E make_directory gdaldoc
COMMAND ${CMAKE_COMMAND} -E make_directory gdaldoc/java
COMMAND ${CMAKE_COMMAND} -E chdir gdaldoc/java ${CMAKE_COMMAND} -E tar x ${JAVADOC_ZIP} --format=zip
COMMAND ${CMAKE_COMMAND} -E copy ${GDAL_DOC_PDF} gdaldoc/gdal.pdf
COMMAND ${CMAKE_COMMAND} -E copy_directory ${SPHINX_BUILD_DIR}/html gdaldoc
COMMAND ${CMAKE_COMMAND} -E tar c ${DOC_ZIP} --format=zip gdaldoc)
add_custom_target(doczip DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${DOC_ZIP})
####################################################################################################
# Documentation tests
####################################################################################################
# Spell check
add_test(NAME doc-spelling
COMMAND ${CMAKE_COMMAND} -E env ${BUILD_RUN_ENV} BUILDDIR=${SPHINX_BUILD_DIR}
${SPHINX_BUILD} -b spelling
${CMAKE_CURRENT_SOURCE_DIR}/source
${CMAKE_CURRENT_BINARY_DIR}/build
${SPHINX_BUILD_OPTS}
"--fail-on-warning"
-D html_extra_path=extra_path
)
add_test(NAME doc-examples
COMMAND ${CMAKE_COMMAND} -E env ${BUILD_RUN_ENV}
${Python_EXECUTABLE} -m pytest -v --doctest-modules
${CMAKE_BINARY_DIR}/swig/python/osgeo/gdal.py
${CMAKE_BINARY_DIR}/swig/python/osgeo/gdal_array.py
${CMAKE_BINARY_DIR}/swig/python/osgeo/ogr.py
${CMAKE_BINARY_DIR}/swig/python/osgeo/osr.py
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
# Check docstub annotations
add_test(NAME docstub-annotations
COMMAND ${CMAKE_COMMAND} -E env ${BUILD_RUN_ENV}
${Python_EXECUTABLE} -m docstub run ${CMAKE_BINARY_DIR}/swig/python/osgeo
--config ${CMAKE_BINARY_DIR}/swig/python/pyproject.toml --quiet
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})endif ()
Doc Old Trac Pointers (`doc/old_trac_pointers.md`)
Google Summer of Code ideas: https://web.archive.org/web/20240812224510/https://trac.osgeo.org/gdal/wiki/SummerOfCode
Google Summer of Code selected projects: https://web.archive.org/web/20240812232901/https://trac.osgeo.org/gdal/wiki/SoCProjects
Old Sponsorship program: http://web.archive.org/web/20230921154549/https://trac.osgeo.org/gdal/wiki/Sponsorship
Old Build hints: http://web.archive.org/https://trac.osgeo.org/gdal/wiki/BuildHints
Additional notes on utilities: http://web.archive.org/https://trac.osgeo.org/gdal/wiki/UserDocs
CodeSnippets: http://web.archive.org/https://trac.osgeo.org/gdal/wiki/CodeSnippets
LayerAlgebra: http://web.archive.org/https://trac.osgeo.org/gdal/wiki/LayerAlgebra
Old FAQ: http://web.archive.org/https://trac.osgeo.org/gdal/wiki/FAQ
Doc Requirements (`doc/requirements.txt`)
This file may be used to create an environment using:
$ pip install --upgrade -r
breathe
fsspec
numpy
sphinx
sphinx-copybutton
sphinx-tabs
Required minimum version for allowing manpage builds
Cf https://github.com/sphinx-toolbox/sphinx-toolbox/pull/205
sphinx-toolbox >= 4.1.2
sphinxcontrib-bibtex
sphinxcontrib-jquery
Hopefully temporary pin of sphinx-rtd-theme, needed for correct behavior of version switching, as well as a forked doc/source/_static/js/version.js
Cf https://github.com/OSGeo/gdal/pull/13480
sphinx-rtd-theme == 3.0.2
We use a slightly forked version
sphinxcontrib-programoutput
sphinxcontrib-spelling
sphinxcontrib-svg2pdfconverter[CairoSVG]
myst_nb
Doc Source About (`doc/source/about.rst`)
.. _about:
================================================================================ What is GDAL?
.. descriptionstartshere
GDAL is a translator library for raster and vector geospatial data formats that is released under an MIT style Open Source :ref:license by the Open Source Geospatial Foundation. As a library, it presents a single raster abstract data model and single vector abstract data model to the calling application for all supported formats. It also comes with a variety of useful command line utilities for data translation and processing. The NEWS page describes the August 2026 GDAL/OGR 3.13.3 release.
.. only:: html
|offline-download|
.. image:: ../images/OSGeo_project.png
:alt: OSGeo project
:target: Open Source Geospatial Foundation_
.. _Open Source Geospatial Foundation: http://www.osgeo.org/
.. _NEWS: https://github.com/OSGeo/gdal/blob/v3.13.3/NEWS.md
See :ref:software_using_gdal
.. |DOI| image:: ../images/zenodo.5884351.png
:alt: DOI 10.5281/zenodo.5884351
:target: https://doi.org/10.5281/zenodo.5884351
You may quote GDAL in publications by using the following Digital Object Identifier: |DOI|
Doc Source Download (`doc/source/download.rst`)
.. _download:
================================================================================ Download
.. only:: html
.. contents::
:depth: 4
:backlinks: noneThe GDAL project distributes GDAL as source code and :ref:Containers only. :ref:Binaries produced by others are available for a variety of platforms and package managers.
Source Code
Current Release
...............
- 2026-08-18
gdal-3.13.3.tar.gz_3.13.3 Release Notes_ (3.13.3 md5,3.13.3 sig)
.. _3.13.3 Release Notes: https://github.com/OSGeo/gdal/blob/v3.13.3/NEWS.md
.. _gdal-3.13.3.tar.gz: https://github.com/OSGeo/gdal/releases/download/v3.13.3/gdal-3.13.3.tar.gz
.. _3.13.3 md5: https://github.com/OSGeo/gdal/releases/download/v3.13.3/gdal-3.13.3.tar.gz.md5
.. _3.13.3 sig: https://github.com/OSGeo/gdal/releases/download/v3.13.3/gdal-3.13.3.tar.gz.sig
The GPG signing key is:
::
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBGjlDXoBEACjbYUouwHnW+X/xK51AfwN1vTrJn+pZziGGLobD4Jfs4gU4PwQ
dEw1bFj6tsgBrJ7hrKmcyd0bBQiKU1FTYy+tOu768t9qlC7HC3JfRBACrGn3Svz4
evinQkq5GGcZ1FkJhRKgEIxJLGppG7O45XEFYdcbCkLqC8uyu2+PbY2SYXlzlKs8
DLiAwqX670eZ78pDtynJj81CRowSqyNBOzaltR6OLCsYZrYzAYYtBqSiifKoIpm/
sV4VRvUuWaaUNNMPPRLt+mV+iIYm8cKLH2uyozZWIfOSck7I30fGIuuUhulc41bi
3WNV+QtOepPyuMolab8JNbaRJXAFxQ5Q2k5ZyzXvpuAEqwrhaFIroc7LvkQ4RLlT
r6BkFUzvCCjRWG5jCFA0CjvvvYG9DPSUKdSaD2Vxfor/cwSRqnPYwRauFMuST57H
exrLYJZqfeZuqV2mlI8wVvh3tO9oC/pGmggV3B1KxYvzj2I/nQ/bnugveEvD005j
EcfSlmAPWcuily+rgB9xqed0tZwG0A9fjY/gveqxLVE41EIoAfkdeRl+KVOqEEYk
cyiJQdFKBuGxemEP2cfDnROUawp+1XXEuA1MGkLvB+6nNIp1e+mhUtWfDY70MEz1
l7J49MUZBfPM3vy63t7ihlPLIP9IUcO9j9rfy1iW8t86qG3CnZE/rsnVZwARAQAB
tCRHREFMIFJlbGVhc2UgQm90IDxnZGFsb3JnQGdtYWlsLmNvbT6JAlQEEwEKAD4W
IQR7Ew6VW0TYfM4nZfDb2B/1LsKkKgUCaOUNegIbAwUJA8JnAAULCQgHAgYVCgkI
CwIEFgIDAQIeAQIXgAAKCRDb2B/1LsKkKpY+D/9hVR9JIQNT3So4fg/fQx36azSf
kVzO4nS0lZhSxR4/Xig5Zqq8EOFk7ipWwb4hhivPi7yR49BhVSQbHo36+jNbC5k/
jDMsZ+9CNzUjp1XSH/v06mcdSD4LB4vSvHBfLjDdV7OoOGnExkEyqBcoje53tW6p
tKQGwqZ3ilZs75GkLO1UC3DNQ9VpVc7lk1Cv+npto86A6CWMAC7q+n540wC/oTj7
APn6dz1S0LAPWR9v0aBoLMoRP9YiRQSmQmyQsKe3HJd4c7hSdWyST/PIMvPZawpP
BYG+JRRuRoWm6zjJIWnvqj9IZeFkQv1fKqYHKW86aITTqGGF6kcq83mf2XH26KQR
mu8ArI5aLULmpKA67p2RXxyPdoSNiaiP8UuWQ18rnEA/Hedz2sgBYSvjeYYziTRm
wgiRbts4MjB5pj+JGKtX7FEL6HuPDVnMYGc8n8bO8qiKctuYMwBM/KRE+2e3zx0m
m5YXjjCSvBiTLYNhvrrQ5pxiUK5xiAH0G/MzPXjJToJzLrHn0vqRVHXs9F8d9zLe
o6E4S8VVgyJ9zdXkYtj9nyL9jb00K+jj/g4avpnOKTuIgpsTR2ntxWz2liWU6Saz
03Vrd9mVwgU7NBnYAMXOg54eYwhyWkGvbFHvCK6ijL1+SaAkN9mVs5VTJMpGiJ9s
qj7DbIY0GwZQMVSvxQ==
=FY/p
-----END PGP PUBLIC KEY BLOCK-----Past Releases
.............
.. only:: html
Links to :ref:`download_past` are also available... only:: not html
Links to `past releases <https://gdal.org/en/latest/download_past.html>`__ are also available... _source:
Development Source
..................
The main repository for GDAL is located on GitHub at
https://github.com/OSGeo/GDAL.
You can obtain a copy of the active source code by issuing the following
command
::
git clone https://github.com/OSGeo/GDAL.gitAdditional information is available about :ref:build_requirements and :ref:building_from_source.
Maintenance policy
..................
The GDAL upstream team only maintains the branch on which the latest release has
been done, with bugfixes releases issued roughly every 2 months.
So, for example, during the development phase of GDAL 3.10.0, GDAL 3.9.x bugfixes
releases are done based on the release/3.9 branch, but not older branches (GDAL 3.8.x or older).
.. _binaries:
Binaries
In this section we list a number of the binary distributions of GDAL
all of which should have fully reproducible open source build recipes.
Note that the maintainers of those distributions are generally not the maintainers
of the GDAL sources, so please report any issue specific to those builds through
their own support channels.
Windows
................................................................................
Windows builds are available via Conda Forge_ (64-bit only). See the
:ref:conda or :ref:pixi section for more detailed information. GDAL is also distributed
by GISInternals_ and OSGeo4W_ and through the NuGet_ and :ref:vcpkg package managers.
.. _Conda Forge: https://anaconda.org/conda-forge/gdal
.. _GISInternals: https://www.gisinternals.com/index.html
.. _OSGeo4W: https://trac.osgeo.org/osgeo4w/
.. _NuGet: https://www.nuget.org/packages?q=GDAL
Linux
................................................................................
Packages are available for Debian, Alpine, Fedora_, and other distributions.
.. _Debian: https://tracker.debian.org/pkg/gdal
.. _Alpine: https://pkgs.alpinelinux.org/package/edge/community/x86/gdal
.. _Fedora: https://packages.fedoraproject.org/pkgs/gdal/
Mac OS
......
GDAL packages are available on Homebrew_.
.. _Homebrew: https://formulae.brew.sh/formula/gdal
Android
.......
GDAL can be installed using :ref:vcpkg. You may also refer to vcpkg Android support <https://learn.microsoft.com/en-us/vcpkg/users/platforms/android>__ for general instructions.
For example to install default configuration for the arm64-android target:
.. code-block:: shell
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh # ./bootstrap-vcpkg.bat for Windows
./vcpkg integrate install
export ANDROID_NDK_HOME=/path/to/android_ndk_home # to adapt
./vcpkg search gdal --featurepackages # list optional features
./vcpkg install gdal:arm64-android # install with default configuration
./vcpkg install gdal[poppler,netcdf]:arm64-android # install with Poppler and netdf supportCross-Platform Package Managers
...............................
.. _conda:
Conda
^^^^^
Conda <https://anaconda.org>__ can be used on multiple platforms (Windows, macOS, and Linux) to
install software packages and manage environments. Conda packages for GDAL are
available through conda-forge <https://anaconda.org/conda-forge/gdal>__.
.. only:: html
Latest version: |Conda badge|
.. |Conda badge| image:: https://anaconda.org/conda-forge/gdal/badges/version.svg
:target: https://anaconda.org/conda-forge/gdal::
conda install [-c channel] [package...]GDAL is available as several subpackages:
gdal: Python bindings and Python utilities (depends on libgdal-core)libgdal: meta-package gathering all below libgdal-* packages (except libgdal-arrow-parquet)libgdal-arrow-parquet: :ref:vector.arrowand :ref:vector.parquetdrivers as a plugin (depends on libgdal-core)libgdal-avif: :ref:raster.avifdriver as a plugin (depends on libgdal-core, available since GDAL 3.10.0)libgdal-core: core library and C++ utilities, with a number of builtin drivers (available since GDAL 3.9.1)libgdal-fits: :ref:raster.fitsdriver as a plugin (depends on libgdal-core, available since GDAL 3.9.1)libgdal-grib: :ref:raster.gribdriver as a plugin (depends on libgdal-core, available since GDAL 3.9.1)libgdal-hdf4: :ref:raster.hdf4driver as a plugin (depends on libgdal-core, available since GDAL 3.9.1)libgdal-hdf5: :ref:raster.hdf5driver as a plugin (depends on libgdal-core, available since GDAL 3.9.1)libgdal-heif: :ref:raster.heifdriver as a plugin (depends on libgdal-core, available since GDAL 3.10.0)libgdal-jp2openjpeg: :ref:raster.jp2openjpegdriver as a plugin (depends on libgdal-core, available since GDAL 3.9.1)libgdal-kea: :ref:raster.keadriver as a plugin (depends on libgdal-core, available since GDAL 3.9.1)libgdal-netcdf: :ref:raster.netcdfdriver as a plugin (depends on libgdal-core, available since GDAL 3.9.1)libgdal-pdf: :ref:raster.pdfdriver as a plugin (depends on libgdal-core, available since GDAL 3.9.1)libgdal-postgisraster: :ref:raster.postgisrasterdriver as a plugin (depends on libgdal-core, available since GDAL 3.9.1)libgdal-pg: :ref:vector.pgdriver as a plugin (depends on libgdal-core, available since GDAL 3.9.1)libgdal-tiledb: :ref:raster.tiledbdriver as a plugin (depends on libgdal-core, available since GDAL 3.9.1)libgdal-xls: :ref:vector.xlsdriver as a plugin (depends on libgdal-core, available since GDAL 3.9.1)
For background on the GDAL package split on conda-forge, seeIntroducing Lightweight Versions of GDAL and PDAL <https://quansight.com/post/introducing-lightweight-versions-of-gdal-and-pdal/>__.
To install the gdal package (Python bindings and utilities), and libgdal-core:
::
conda install -c conda-forge gdalTo install the libgdal meta-package with all available drivers, but libgdal-arrow-parquet:
::
conda install -c conda-forge libgdalTo install the Arrow and Parquet drivers as plugins:
::
conda install -c conda-forge libgdal-arrow-parquet.. _gdal-master-conda-builds:
GDAL master Conda builds
GDAL master builds are available in the `gdal-master <https://anaconda.org/gdal-master/gdal>`__
channel. They are based on dependencies from the ``conda-forge`` channel. The latest master
build can be installed with the following command:
::
conda install -c gdal-master -c conda-forge gdal-master::gdal
As with released versions of GDAL, additional drivers can be installed using ``gdal-master::libgdal-{driver_name}``.
If you already have a GDAL master build installed in an environment, you can update it to the latest master version using the commands below.
GDAL subpackages may need to be updated individually, because the master version numbers (e.g. ``3.12.99``) do not change with every nightly build.
::
# check currently installed GDAL components and versions
conda list gdal
gdal --version
# remove current master version
conda remove gdal libgdal-core --yes
# install latest GDAL master build
conda install -c gdal-master -c conda-forge gdal libgdal-core --yes
gdal --version
.. _pixi:
pixi
^^^^
`Pixi <https://pixi.sh/latest/>`__ is a package management tool for developers. It allows the developer
to install libraries and applications in a reproducible way. Packages for GDAL are
available through the `conda-forge <https://anaconda.org/conda-forge/gdal>`__ channel.
If you want to be able to use GDAL as part of a project:
::
pixi init name-of-project
cd name-of-project
pixi add gdal libgdal-core
pixi add libgdal-arrow-parquet # if you need the Arrow and Parquet drivers
pixi shell
Pixi supports using tools like GDAL and OGR globally, similar to conda's base environment, without having to use an activate command:
::
pixi global install gdal libgdal-core
pixi global install libgdal-arrow-parquet # if you need the Arrow and Parquet drivers
.. _vcpkg:
vcpkg
^^^^^
The GDAL port in the `vcpkg <https://github.com/Microsoft/vcpkg>`__ dependency manager is kept up to date by Microsoft team members and community contributors.
You can download and install GDAL using the vcpkg as follows:
.. code-block:: shell
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh # ./bootstrap-vcpkg.bat for Windows
./vcpkg integrate install
./vcpkg search gdal --featurepackages # list optional features
./vcpkg install gdal # install with default configuration
./vcpkg install gdal[poppler,netcdf] # install with Poppler and netdf support
If the version is out of date, please `create an issue or pull request <https://github.com/Microsoft/vcpkg>`__ on the vcpkg repository.
Spack
^^^^^
Spack is a package management tool designed to support multiple versions and
configurations of software on a wide variety of platforms and environments.
It was designed for large supercomputing centers. Spack builds packages from
sources, and allows tweaking their configurations.
You can find information about GDAL in Spack at
https://packages.spack.io/package.html?name=gdal
For the default GDAL build with a reduced number of drivers:
::
git clone -c feature.manyFiles=true https://github.com/spack/spack.git
cd spack/bin
./spack install gdal
For a build with netcdf driver enabled:
::
./spack install gdal +netcdf
.. _containers:
Containers
----------
Docker images with nightly builds of GDAL master and tagged releases are available at
`GitHub Container registry <https://github.com/OSGeo/gdal/pkgs/container/gdal>`_.
Information on the content of the different configurations can be found at
`https://github.com/OSGeo/gdal/tree/master/docker <https://github.com/OSGeo/gdal/tree/master/docker>`_.
Documentation
-------------
|offline-download|
---
### Doc Source Download Past (`doc/source/download_past.rst`)
:orphan:
.. _download_past:
Past Releases
=============
* **2026-07-22** `gdal-3.13.2.tar.gz`_ `3.13.2 Release Notes`_ (`3.13.2 md5`_, `3.13.2 sig`_)
.. _`3.13.2 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.13.2/NEWS.md
.. _`gdal-3.13.2.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.13.2/gdal-3.13.2.tar.gz
.. _`3.13.2 md5`: https://github.com/OSGeo/gdal/releases/download/v3.13.2/gdal-3.13.2.tar.gz.md5
.. _`3.13.2 sig`: https://github.com/OSGeo/gdal/releases/download/v3.13.2/gdal-3.13.2.tar.gz.sig
* **2026-05-08** `gdal-3.13.0.tar.gz`_ `3.13.0 Release Notes`_ (`3.13.0 md5`_, `3.13.0 sig`_)
.. _`3.13.0 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.13.0/NEWS.md
.. _`gdal-3.13.0.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.13.0/gdal-3.13.0.tar.gz
.. _`3.13.0 md5`: https://github.com/OSGeo/gdal/releases/download/v3.13.0/gdal-3.13.0.tar.gz.md5
.. _`3.13.0 sig`: https://github.com/OSGeo/gdal/releases/download/v3.13.0/gdal-3.13.0.tar.gz.sig
* **2026-04-24** `gdal-3.12.4.tar.gz`_ `3.12.4 Release Notes`_ (`3.12.4 md5`_, `3.12.4 sig`_)
.. _`3.12.4 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.12.4/NEWS.md
.. _`gdal-3.12.4.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.12.4/gdal-3.12.4.tar.gz
.. _`3.12.4 md5`: https://github.com/OSGeo/gdal/releases/download/v3.12.4/gdal-3.12.4.tar.gz.md5
.. _`3.12.4 sig`: https://github.com/OSGeo/gdal/releases/download/v3.12.4/gdal-3.12.4.tar.gz.sig
* **2026-03-20** `gdal-3.12.3.tar.gz`_ `3.12.3 Release Notes`_ (`3.12.3 md5`_, `3.12.3 sig`_)
.. _`3.12.3 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.12.3/NEWS.md
.. _`gdal-3.12.3.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.12.3/gdal-3.12.3.tar.gz
.. _`3.12.3 md5`: https://github.com/OSGeo/gdal/releases/download/v3.12.3/gdal-3.12.3.tar.gz.md5
.. _`3.12.3 sig`: https://github.com/OSGeo/gdal/releases/download/v3.12.3/gdal-3.12.3.tar.gz.sig
* **2026-02-09** `gdal-3.12.2.tar.gz`_ `3.12.2 Release Notes`_ (`3.12.2 md5`_, `3.12.2 sig`_)
.. _`3.12.2 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.12.2/NEWS.md
.. _`gdal-3.12.2.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.12.2/gdal-3.12.2.tar.gz
.. _`3.12.2 md5`: https://github.com/OSGeo/gdal/releases/download/v3.12.2/gdal-3.12.2.tar.gz.md5
.. _`3.12.2 sig`: https://github.com/OSGeo/gdal/releases/download/v3.12.2/gdal-3.12.2.tar.gz.sig
* **2025-12-18** `gdal-3.12.1.tar.gz`_ `3.12.1 Release Notes`_ (`3.12.1 md5`_, `3.12.1 sig`_)
.. _`3.12.1 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.12.1/NEWS.md
.. _`gdal-3.12.1.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.12.1/gdal-3.12.1.tar.gz
.. _`3.12.1 md5`: https://github.com/OSGeo/gdal/releases/download/v3.12.1/gdal-3.12.1.tar.gz.md5
.. _`3.12.1 sig`: https://github.com/OSGeo/gdal/releases/download/v3.12.1/gdal-3.12.1.tar.gz.sig
* **2025-11-08** `gdal-3.12.0.tar.gz`_ `3.12.0 Release Notes`_ (`3.12.0 md5`_, `3.12.0 sig`_)
.. _`3.12.0 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.12.0/NEWS.md
.. _`gdal-3.12.0.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.12.0/gdal-3.12.0.tar.gz
.. _`3.12.0 md5`: https://github.com/OSGeo/gdal/releases/download/v3.12.0/gdal-3.12.0.tar.gz.md5
.. _`3.12.0 sig`: https://github.com/OSGeo/gdal/releases/download/v3.12.0/gdal-3.12.0.tar.gz.sig
* **2025-11-04** `gdal-3.11.5.tar.gz`_ `3.11.5 Release Notes`_ (`3.11.5 md5`_)
.. _`3.11.5 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.11.5/NEWS.md
.. _`gdal-3.11.5.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.11.5/gdal-3.11.5.tar.gz
.. _`3.11.5 md5`: https://github.com/OSGeo/gdal/releases/download/v3.11.5/gdal-3.11.5.tar.gz.md5
* **2025-09-11** `gdal-3.11.4.tar.gz`_ `3.11.4 Release Notes`_ (`3.11.4 md5`_)
.. _`3.11.4 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.11.4/NEWS.md
.. _`gdal-3.11.4.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.11.4/gdal-3.11.4.tar.gz
.. _`3.11.4 md5`: https://github.com/OSGeo/gdal/releases/download/v3.11.4/gdal-3.11.4.tar.gz.md5
* **2025-07-12** `gdal-3.11.3.tar.gz`_ `3.11.3 Release Notes`_ (`3.11.3 md5`_)
.. _`3.11.3 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.11.3/NEWS.md
.. _`gdal-3.11.3.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.11.3/gdal-3.11.3.tar.gz
.. _`3.11.3 md5`: https://github.com/OSGeo/gdal/releases/download/v3.11.3/gdal-3.11.3.tar.gz.md5
* **2025-07-11** `gdal-3.11.2.tar.gz`_ `3.11.2 Release Notes`_ (`3.11.2 md5`_)
.. _`3.11.2 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.11.2/NEWS.md
.. _`gdal-3.11.2.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.11.2/gdal-3.11.2.tar.gz
.. _`3.11.2 md5`: https://github.com/OSGeo/gdal/releases/download/v3.11.2/gdal-3.11.2.tar.gz.md5
* **2025-06-26** `gdal-3.11.1.tar.gz`_ `3.11.1 Release Notes`_ (`3.11.1 md5`_)
.. _`3.11.1 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.11.1/NEWS.md
.. _`gdal-3.11.1.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.11.1/gdal-3.11.1.tar.gz
.. _`3.11.1 md5`: https://github.com/OSGeo/gdal/releases/download/v3.11.1/gdal-3.11.1.tar.gz.md5
* **2025-05-06** `gdal-3.11.0.tar.gz`_ `3.11.0 "Eganville" Release Notes`_ (`3.11.0 md5`_)
.. _`3.11.0 "Eganville" Release Notes`: https://github.com/OSGeo/gdal/blob/v3.11.0/NEWS.md
.. _`gdal-3.11.0.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.11.0/gdal-3.11.0.tar.gz
.. _`3.11.0 md5`: https://github.com/OSGeo/gdal/releases/download/v3.11.0/gdal-3.11.0.tar.gz.md5
* **2025-04-07** `gdal-3.10.3.tar.gz`_ `3.10.3 Release Notes`_ (`3.10.3 md5`_)
.. _`3.10.3 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.10.3/NEWS.md
.. _`gdal-3.10.3.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.10.3/gdal-3.10.3.tar.gz
.. _`3.10.3 md5`: https://github.com/OSGeo/gdal/releases/download/v3.10.3/gdal-3.10.3.tar.gz.md5
* **2025-02-14** `gdal-3.10.2.tar.gz`_ `3.10.2 "Gulf of Mexico" Release Notes`_ (`3.10.2 md5`_)
.. _`3.10.2 "Gulf of Mexico" Release Notes`: https://github.com/OSGeo/gdal/blob/v3.10.2/NEWS.md
.. _`gdal-3.10.2.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.10.2/gdal-3.10.2.tar.gz
.. _`3.10.2 md5`: https://github.com/OSGeo/gdal/releases/download/v3.10.2/gdal-3.10.2.tar.gz.md5
* **2025-01-08** `gdal-3.10.1.tar.gz`_ `3.10.1 Release Notes`_ (`3.10.1 md5`_)
.. _`3.10.1 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.10.1/NEWS.md
.. _`gdal-3.10.1.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.10.1/gdal-3.10.1.tar.gz
.. _`3.10.1 md5`: https://github.com/OSGeo/gdal/releases/download/v3.10.1/gdal-3.10.1.tar.gz.md5
* **2024-11-01** `gdal-3.10.0.tar.gz`_ `3.10.0 Release Notes`_ (`3.10.0 md5`_)
.. _`3.10.0 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.10.0/NEWS.md
.. _`gdal-3.10.0.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.10.0/gdal-3.10.0.tar.gz
.. _`3.10.0 md5`: https://github.com/OSGeo/gdal/releases/download/v3.10.0/gdal-3.10.0.tar.gz.md5
* **2024-10-14** `gdal-3.9.3.tar.gz`_ `3.9.3 Release Notes`_ (`3.9.3 md5`_)
.. _`3.9.3 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.9.3/NEWS.md
.. _`gdal-3.9.3.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.9.3/gdal-3.9.3.tar.gz
.. _`3.9.3 md5`: https://github.com/OSGeo/gdal/releases/download/v3.9.3/gdal-3.9.3.tar.gz.md5
* **2024-08-16** `gdal-3.9.2.tar.gz`_ `3.9.2 Release Notes`_ (`3.9.2 md5`_)
.. _`3.9.2 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.9.2/NEWS.md
.. _`gdal-3.9.2.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.9.2/gdal-3.9.2.tar.gz
.. _`3.9.2 md5`: https://github.com/OSGeo/gdal/releases/download/v3.9.2/gdal-3.9.2.tar.gz.md5
* **2024-06-26** `gdal-3.9.1.tar.gz`_ `3.9.1 Release Notes`_ (`3.9.1 md5`_)
.. _`3.9.1 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.9.1/NEWS.md
.. _`gdal-3.9.1.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.9.1/gdal-3.9.1.tar.gz
.. _`3.9.1 md5`: https://github.com/OSGeo/gdal/releases/download/v3.9.1/gdal-3.9.1.tar.gz.md5
* **2024-05-10** `gdal-3.9.0.tar.gz`_ `3.9.0 Release Notes`_ (`3.9.0 md5`_)
.. _`3.9.0 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.9.0/NEWS.md
.. _`gdal-3.9.0.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.9.0/gdal-3.9.0.tar.gz
.. _`3.9.0 md5`: https://github.com/OSGeo/gdal/releases/download/v3.9.0/gdal-3.9.0.tar.gz.md5
* **2024-04-04** `gdal-3.8.5.tar.gz`_ `3.8.5 Release Notes`_ (`3.8.5 md5`_)
.. _`3.8.5 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.8.5/NEWS.md
.. _`gdal-3.8.5.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.8.5/gdal-3.8.5.tar.gz
.. _`3.8.5 md5`: https://github.com/OSGeo/gdal/releases/download/v3.8.5/gdal-3.8.5.tar.gz.md5
* **2024-02-18** `gdal-3.8.4.tar.gz`_ `3.8.4 Release Notes`_ (`3.8.4 md5`_)
.. _`3.8.4 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.8.4/NEWS.md
.. _`gdal-3.8.4.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.8.4/gdal-3.8.4.tar.gz
.. _`3.8.4 md5`: https://github.com/OSGeo/gdal/releases/download/v3.8.4/gdal-3.8.4.tar.gz.md5
* **2024-01-08** `gdal-3.8.3.tar.gz`_ `3.8.3 Release Notes`_ (`3.8.3 md5`_)
.. _`3.8.3 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.8.3/NEWS.md
.. _`gdal-3.8.3.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.8.3/gdal-3.8.3.tar.gz
.. _`3.8.3 md5`: https://github.com/OSGeo/gdal/releases/download/v3.8.3/gdal-3.8.3.tar.gz.md5
* **2023-12-20** `gdal-3.8.2.tar.gz`_ `3.8.2 Release Notes`_ (`3.8.2 md5`_)
.. _`3.8.2 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.8.2/NEWS.md
.. _`gdal-3.8.2.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.8.2/gdal-3.8.2.tar.gz
.. _`3.8.2 md5`: https://github.com/OSGeo/gdal/releases/download/v3.8.2/gdal-3.8.2.tar.gz.md5
* **2023-11-30** `gdal-3.8.1.tar.gz`_ `3.8.1 Release Notes`_ (`3.8.1 md5`_)
.. _`3.8.1 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.8.1/NEWS.md
.. _`gdal-3.8.1.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.8.1/gdal-3.8.1.tar.gz
.. _`3.8.1 md5`: https://github.com/OSGeo/gdal/releases/download/v3.8.1/gdal-3.8.1.tar.gz.md5
* **2023-11-13** `gdal-3.8.0.tar.gz`_ `3.8.0 Release Notes`_ (`3.8.0 md5`_)
.. _`3.8.0 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.8.0/NEWS.md
.. _`gdal-3.8.0.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.8.0/gdal-3.8.0.tar.gz
.. _`3.8.0 md5`: https://github.com/OSGeo/gdal/releases/download/v3.8.0/gdal-3.8.0.tar.gz.md5
* **2023-11-03** `gdal-3.7.3.tar.gz`_ `3.7.3 Release Notes`_ (`3.7.3 md5`_)
.. _`3.7.3 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.7.3/NEWS.md
.. _`gdal-3.7.3.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.7.3/gdal-3.7.3.tar.gz
.. _`3.7.3 md5`: https://github.com/OSGeo/gdal/releases/download/v3.7.3/gdal-3.7.3.tar.gz.md5
* **2023-09-13** `gdal-3.7.2.tar.gz`_ `3.7.2 Release Notes`_ (`3.7.2 md5`_)
.. _`3.7.2 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.7.2/NEWS.md
.. _`gdal-3.7.2.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.7.2/gdal-3.7.2.tar.gz
.. _`3.7.2 md5`: https://github.com/OSGeo/gdal/releases/download/v3.7.2/gdal-3.7.2.tar.gz.md5
* **2023-07-13** `gdal-3.7.1.tar.gz`_ `3.7.1 Release Notes`_ (`3.7.1 md5`_)
.. _`3.7.1 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.7.1/NEWS.md
.. _`gdal-3.7.1.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.7.1/gdal-3.7.1.tar.gz
.. _`3.7.1 md5`: https://github.com/OSGeo/gdal/releases/download/v3.7.1/gdal-3.7.1.tar.gz.md5
* **2023-05-10** `gdal-3.7.0.tar.gz`_ `3.7.0 Release Notes`_ (`3.7.0 md5`_)
.. _`3.7.0 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.7.0/NEWS.md
.. _`gdal-3.7.0.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.7.0/gdal-3.7.0.tar.gz
.. _`3.7.0 md5`: https://github.com/OSGeo/gdal/releases/download/v3.7.0/gdal-3.7.0.tar.gz.md5
* **2023-04-21** `gdal-3.6.4.tar.gz`_ `3.6.4 Release Notes`_ (`3.6.4 md5`_)
.. _`3.6.4 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.6.4/NEWS.md
.. _`gdal-3.6.4.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.6.4/gdal-3.6.4.tar.gz
.. _`3.6.4 md5`: https://github.com/OSGeo/gdal/releases/download/v3.6.4/gdal-3.6.4.tar.gz.md5
* **2023-03-13** `gdal-3.6.3.tar.gz`_ `3.6.3 Release Notes`_ (`3.6.3 md5`_)
.. _`3.6.3 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.6.3/NEWS.md
.. _`gdal-3.6.3.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.6.3/gdal-3.6.3.tar.gz
.. _`3.6.3 md5`: https://github.com/OSGeo/gdal/releases/download/v3.6.3/gdal-3.6.3.tar.gz.md5
* **2023-01-05** `gdal-3.6.2.tar.gz`_ `3.6.2 Release Notes`_ (`3.6.2 md5`_)
.. _`3.6.2 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.6.2/NEWS.md
.. _`gdal-3.6.2.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.6.2/gdal-3.6.2.tar.gz
.. _`3.6.2 md5`: https://github.com/OSGeo/gdal/releases/download/v3.6.2/gdal-3.6.2.tar.gz.md5
* **2022-12-11** `gdal-3.6.1.tar.gz`_ `3.6.1 Release Notes`_ (`3.6.1 md5`_)
.. _`3.6.1 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.6.1/NEWS.md
.. _`gdal-3.6.1.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.6.1/gdal-3.6.1.tar.gz
.. _`3.6.1 md5`: https://github.com/OSGeo/gdal/releases/download/v3.6.1/gdal-3.6.1.tar.gz.md5
* **2022-11-06** `3.6.0 Release Notes`_ *Warning*: this version has been officially retracted and superseded per 3.6.1
.. _`3.6.0 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.6.0/NEWS.md
* **2022-10-21** `gdal-3.5.3.tar.gz`_ `3.5.3 Release Notes`_ (`3.5.3 md5`_)
.. _`3.5.3 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.5.3/NEWS.md
.. _`gdal-3.5.3.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.5.3/gdal-3.5.3.tar.gz
.. _`3.5.3 md5`: https://github.com/OSGeo/gdal/releases/download/v3.5.3/gdal-3.5.3.tar.gz.md5
* **2022-09-12** `gdal-3.5.2.tar.gz`_ `3.5.2 Release Notes`_ (`3.5.2 md5`_)
.. _`3.5.2 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.5.2/NEWS.md
.. _`gdal-3.5.2.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.5.2/gdal-3.5.2.tar.gz
.. _`3.5.2 md5`: https://github.com/OSGeo/gdal/releases/download/v3.5.2/gdal-3.5.2.tar.gz.md5
* **2022-07-06** `gdal-3.5.1.tar.gz`_ `3.5.1 Release Notes`_ (`3.5.1 md5`_)
.. _`3.5.1 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.5.1/NEWS.md
.. _`gdal-3.5.1.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.5.1/gdal-3.5.1.tar.gz
.. _`3.5.1 md5`: https://github.com/OSGeo/gdal/releases/download/v3.5.1/gdal-3.5.1.tar.gz.md5
* **2022-05-13** `gdal-3.5.0.tar.gz`_ `3.5.0 Release Notes`_ (`3.5.0 md5`_)
.. _`3.5.0 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.5.0/NEWS.md
.. _`gdal-3.5.0.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.5.0/gdal-3.5.0.tar.gz
.. _`3.5.0 md5`: https://github.com/OSGeo/gdal/releases/download/v3.5.0/gdal-3.5.0.tar.gz.md5
* **2022-04-22** `gdal-3.4.3.tar.gz`_ `3.4.3 Release Notes`_ (`3.4.3 md5`_)
.. _`3.4.3 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.4.3/gdal/NEWS.md
.. _`gdal-3.4.3.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.4.3/gdal-3.4.3.tar.gz
.. _`3.4.3 md5`: https://github.com/OSGeo/gdal/releases/download/v3.4.3/gdal-3.4.3.tar.gz.md5
* **2022-03-08** `gdal-3.4.2.tar.gz`_ `3.4.2 Release Notes`_ (`3.4.2 md5`_)
.. _`3.4.2 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.4.2/gdal/NEWS.md
.. _`gdal-3.4.2.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.4.2/gdal-3.4.2.tar.gz
.. _`3.4.2 md5`: https://github.com/OSGeo/gdal/releases/download/v3.4.2/gdal-3.4.2.tar.gz.md5
* **2021-12-27** `gdal-3.4.1.tar.gz`_ `3.4.1 Release Notes`_ (`3.4.1 md5`_)
.. _`3.4.1 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.4.1/gdal/NEWS.md
.. _`gdal-3.4.1.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.4.1/gdal-3.4.1.tar.gz
.. _`3.4.1 md5`: https://github.com/OSGeo/gdal/releases/download/v3.4.1/gdal-3.4.1.tar.gz.md5
* **2021-11-08** `gdal-3.4.0.tar.gz`_ `3.4.0 Release Notes`_ (`3.4.0 md5`_)
.. _`3.4.0 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.4.0/gdal/NEWS.md
.. _`gdal-3.4.0.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.4.0/gdal-3.4.0.tar.gz
.. _`3.4.0 md5`: https://github.com/OSGeo/gdal/releases/download/v3.4.0/gdal-3.4.0.tar.gz.md5
* **2021-10-29** `gdal-3.3.3.tar.gz`_ `3.3.3 Release Notes`_ (`3.3.3 md5`_)
.. _`3.3.3 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.3.3/gdal/NEWS
.. _`gdal-3.3.3.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.3.3/gdal-3.3.3.tar.gz
.. _`3.3.3 md5`: https://github.com/OSGeo/gdal/releases/download/v3.3.3/gdal-3.3.3.tar.gz.md5
* **2021-09-01** `gdal-3.3.2.tar.gz`_ `3.3.2 Release Notes`_ (`3.3.2 md5`_)
.. _`3.3.2 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.3.2/gdal/NEWS
.. _`gdal-3.3.2.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.3.2/gdal-3.3.2.tar.gz
.. _`3.3.2 md5`: https://github.com/OSGeo/gdal/releases/download/v3.3.2/gdal-3.3.2.tar.gz.md5
* **2021-07-05** `gdal-3.3.1.tar.gz`_ `3.3.1 Release Notes`_ (`3.3.1 md5`_)
.. _`3.3.1 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.3.1/gdal/NEWS
.. _`gdal-3.3.1.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.3.1/gdal-3.3.1.tar.gz
.. _`3.3.1 md5`: https://github.com/OSGeo/gdal/releases/download/v3.3.1/gdal-3.3.1.tar.gz.md5
* **2021-05-03** `gdal-3.3.0.tar.gz`_ `3.3.0 Release Notes`_ (`3.3.0 md5`_)
.. _`3.3.0 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.3.0/gdal/NEWS
.. _`gdal-3.3.0.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.3.0/gdal-3.3.0.tar.gz
.. _`3.3.0 md5`: https://github.com/OSGeo/gdal/releases/download/v3.3.0/gdal-3.3.0.tar.gz.md5
* **2021-05-04** `gdal-3.2.3.tar.gz`_ `3.2.3 Release Notes`_ (`3.2.3 md5`_)
.. _`3.2.3 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.2.3/gdal/NEWS
.. _`gdal-3.2.3.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.2.3/gdal-3.2.3.tar.gz
.. _`3.2.3 md5`: https://github.com/OSGeo/gdal/releases/download/v3.2.3/gdal-3.2.3.tar.gz.md5
* **2021-03-10** `gdal-3.2.2.tar.gz`_ `3.2.2 Release Notes`_ (`3.2.2 md5`_)
.. _`3.2.2 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.2.2/gdal/NEWS
.. _`gdal-3.2.2.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.2.2/gdal-3.2.2.tar.gz
.. _`3.2.2 md5`: https://github.com/OSGeo/gdal/releases/download/v3.2.2/gdal-3.2.2.tar.gz.md5
* **2020-12-28** `gdal-3.2.1.tar.gz`_ `3.2.1 Release Notes`_ (`3.2.1 md5`_)
.. _`3.2.1 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.2.1/gdal/NEWS
.. _`gdal-3.2.1.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.2.1/gdal-3.2.1.tar.gz
.. _`3.2.1 md5`: https://github.com/OSGeo/gdal/releases/download/v3.2.1/gdal-3.2.1.tar.gz.md5
* **2020-10-26** `gdal-3.2.0.tar.gz`_ `3.2.0 Release Notes`_ (`3.2.0 md5`_)
.. _`3.2.0 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.2.0/gdal/NEWS
.. _`gdal-3.2.0.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.2.0/gdal-3.2.0.tar.gz
.. _`3.2.0 md5`: https://github.com/OSGeo/gdal/releases/download/v3.2.0/gdal-3.2.0.tar.gz.md5
* **2020-10-23** `gdal-3.1.4.tar.gz`_ `3.1.4 Release Notes`_ (`3.1.4 md5`_)
.. _`3.1.4 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.1.4/gdal/NEWS
.. _`gdal-3.1.4.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.1.4/gdal-3.1.4.tar.gz
.. _`3.1.4 md5`: https://github.com/OSGeo/gdal/releases/download/v3.1.4/gdal-3.1.4.tar.gz.md5
* **2020-09-01** `gdal-3.1.3.tar.gz`_ `3.1.3 Release Notes`_ (`3.1.3 md5`_)
.. _`3.1.3 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.1.3/gdal/NEWS
.. _`gdal-3.1.3.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.1.3/gdal-3.1.3.tar.gz
.. _`3.1.3 md5`: https://github.com/OSGeo/gdal/releases/download/v3.1.3/gdal-3.1.3.tar.gz.md5
* **2020-07-07** `gdal-3.1.2.tar.gz`_ `3.1.2 Release Notes`_ (`3.1.2 md5`_)
.. _`3.1.2 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.1.2/gdal/NEWS
.. _`gdal-3.1.2.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.1.2/gdal-3.1.2.tar.gz
.. _`3.1.2 md5`: https://github.com/OSGeo/gdal/releases/download/v3.1.2/gdal-3.1.2.tar.gz.md5
* **2020-06-22** `gdal-3.1.1.tar.gz`_ `3.1.1 Release Notes`_ (`3.1.1 md5`_)
.. _`3.1.1 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.1.1/gdal/NEWS
.. _`gdal-3.1.1.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.1.1/gdal-3.1.1.tar.gz
.. _`3.1.1 md5`: https://github.com/OSGeo/gdal/releases/download/v3.1.1/gdal-3.1.1.tar.gz.md5
* **2020-05-03** `gdal-3.1.0.tar.gz`_ `3.1.0 Release Notes`_ (`3.1.0 md5`_)
.. _`3.1.0 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.1.0/gdal/NEWS
.. _`gdal-3.1.0.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.1.0/gdal-3.1.0.tar.gz
.. _`3.1.0 md5`: https://github.com/OSGeo/gdal/releases/download/v3.1.0/gdal-3.1.0.tar.gz.md5
* **2020-01-28** `gdal-3.0.4.tar.gz`_ `3.0.4 Release Notes`_ (`3.0.4 md5`_)
.. _`3.0.4 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.0.4/gdal/NEWS
.. _`gdal-3.0.4.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.0.4/gdal-3.0.4.tar.gz
.. _`3.0.4 md5`: https://github.com/OSGeo/gdal/releases/download/v3.0.4/gdal-3.0.4.tar.gz.md5
* **2020-01-08** `gdal-2.4.4.tar.gz`_ `2.4.4 Release Notes`_ (`2.4.4 md5`_)
.. _`2.4.4 Release Notes`: https://github.com/OSGeo/gdal/blob/v2.4.4/gdal/NEWS
.. _`gdal-2.4.4.tar.gz`: https://download.osgeo.org/gdal/2.4.4/gdal-2.4.4.tar.gz
.. _`2.4.4 md5`: https://download.osgeo.org/gdal/2.4.4/gdal-2.4.4.tar.gz.md5
* **2020-01-08** `gdal-3.0.3.tar.gz`_ `3.0.3 Release Notes`_ (`3.0.3 md5`_)
.. _`3.0.3 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.0.3/gdal/NEWS
.. _`gdal-3.0.3.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.0.3/gdal-3.0.3.tar.gz
.. _`3.0.3 md5`: https://github.com/OSGeo/gdal/releases/download/v3.0.3/gdal-3.0.3.tar.gz.md5
* **2019-10-28** `gdal-3.0.2.tar.gz`_ `3.0.2 Release Notes`_ (`3.0.2 md5`_)
.. _`3.0.2 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.0.2/gdal/NEWS
.. _`gdal-3.0.2.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.0.2/gdal-3.0.2.tar.gz
.. _`3.0.2 md5`: https://github.com/OSGeo/gdal/releases/download/v3.0.2/gdal-3.0.2.tar.gz.md5
* **2019-10-28** `gdal-2.4.3.tar.gz`_ `2.4.3 Release Notes`_ (`2.4.3 md5`_)
.. _`2.4.3 Release Notes`: https://github.com/OSGeo/gdal/blob/v2.4.3/gdal/NEWS
.. _`gdal-2.4.3.tar.gz`: https://download.osgeo.org/gdal/2.4.3/gdal-2.4.3.tar.gz
.. _`2.4.3 md5`: https://download.osgeo.org/gdal/2.4.3/gdal-2.4.3.tar.gz.md5
* **2019-06-28** `gdal-3.0.1.tar.gz`_ `3.0.1 Release Notes`_ (`3.0.1 md5`_)
.. _`3.0.1 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.0.1/gdal/NEWS
.. _`gdal-3.0.1.tar.gz`: https://github.com/OSGeo/gdal/releases/download/v3.0.1/gdal-3.0.1.tar.gz
.. _`3.0.1 md5`: https://github.com/OSGeo/gdal/releases/download/v3.0.1/gdal-3.0.1.tar.gz.md5
* **2019-06-28** `gdal-2.4.2.tar.gz`_ `2.4.2 Release Notes`_ (`2.4.2 md5`_)
.. _`2.4.2 Release Notes`: https://github.com/OSGeo/gdal/blob/v2.4.2/gdal/NEWS
.. _`gdal-2.4.2.tar.gz`: https://download.osgeo.org/gdal/2.4.2/gdal-2.4.2.tar.gz
.. _`2.4.2 md5`: https://download.osgeo.org/gdal/2.4.2/gdal-2.4.2.tar.gz.md5
* **2019-05** `gdal-3.0.0.tar.gz`_ `3.0.0 Release Notes`_ (`3.0.0 md5`_)
.. _`gdal-3.0.0.tar.gz`: http://download.osgeo.org/gdal/3.0.0/gdal-3.0.0.tar.gz
.. _`3.0.0 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.0.0/gdal/NEWS
.. _`3.0.0 md5`: http://download.osgeo.org/gdal/3.0.0/gdal-3.0.0.tar.gz.md5
* **2019-03** `gdal-2.4.1.tar.gz`_ `2.4.1 Release Notes`_ (`2.4.1 md5`_)
.. _`gdal-2.4.1.tar.gz`: http://download.osgeo.org/gdal/2.4.1/gdal-2.4.1.tar.gz
.. _`2.4.1 Release Notes`: https://github.com/OSGeo/gdal/blob/v2.4.1/gdal/NEWS
.. _`2.4.1 md5`: http://download.osgeo.org/gdal/2.4.1/gdal-2.4.1.tar.gz.md5
* **2018-12** `gdal-2.4.0.tar.gz`_ `2.4.0 Release Notes`_ (`2.4.0 md5`_)
.. _`gdal-2.4.0.tar.gz`: http://download.osgeo.org/gdal/2.4.0/gdal-2.4.0.tar.gz
.. _`2.4.0 Release Notes`: https://github.com/OSGeo/gdal/blob/v2.4.0/gdal/NEWS
.. _`2.4.0 md5`: http://download.osgeo.org/gdal/2.4.0/gdal-2.4.0.tar.gz.md5
* **2019-05** `gdal-3.0.0.tar.gz`_ `3.0.0 Release Notes`_ (`3.0.0 md5`_)
.. _`gdal-3.0.0.tar.gz`: http://download.osgeo.org/gdal/3.0.0/gdal-3.0.0.tar.gz
.. _`3.0.0 Release Notes`: https://github.com/OSGeo/gdal/blob/v3.0.0/gdal/NEWS
.. _`3.0.0 md5`: http://download.osgeo.org/gdal/3.0.0/gdal-3.0.0.tar.gz.md5
* **2019-03** `gdal-2.4.1.tar.gz`_ `2.4.1 Release Notes`_ (`2.4.1 md5`_)
.. _`gdal-2.4.1.tar.gz`: http://download.osgeo.org/gdal/2.4.1/gdal-2.4.1.tar.gz
.. _`2.4.1 Release Notes`: https://github.com/OSGeo/gdal/blob/v2.4.1/gdal/NEWS
.. _`2.4.1 md5`: http://download.osgeo.org/gdal/2.4.1/gdal-2.4.1.tar.gz.md5
* **2018-12** `gdal-2.4.0.tar.gz`_ `2.4.0 Release Notes`_ (`2.4.0 md5`_)
.. _`gdal-2.4.0.tar.gz`: http://download.osgeo.org/gdal/2.4.0/gdal-2.4.0.tar.gz
.. _`2.4.0 Release Notes`: https://github.com/OSGeo/gdal/blob/v2.4.0/gdal/NEWS
.. _`2.4.0 md5`: http://download.osgeo.org/gdal/2.4.0/gdal-2.4.0.tar.gz.md5
* **2018-12** `gdal-2.3.3.tar.gz`_ `2.3.3 Release Notes`_ (`2.3.3 md5`_)
.. _`gdal-2.3.3.tar.gz`: http://download.osgeo.org/gdal/2.3.3/gdal-2.3.3.tar.gz
.. _`2.3.3 Release Notes`: https://github.com/OSGeo/gdal/blob/v2.3.3/gdal/NEWS
.. _`2.3.3 md5`: http://download.osgeo.org/gdal/2.3.3/gdal-2.3.3.tar.gz.md5
* **2018-09** `gdal-2.3.2.tar.gz`_ `2.3.2 Release Notes`_ (`2.3.2 md5`_)
.. _`gdal-2.3.2.tar.gz`: http://download.osgeo.org/gdal/2.3.2/gdal-2.3.2.tar.gz
.. _`2.3.2 Release Notes`: https://github.com/OSGeo/gdal/blob/v2.3.2/gdal/NEWS
.. _`2.3.2 md5`: http://download.osgeo.org/gdal/2.3.2/gdal-2.3.2.tar.gz.md5
* **2018-06** `gdal-2.3.1.tar.gz`_ `2.3.1 Release Notes`_ (`2.3.1 md5`_)
.. _`gdal-2.3.1.tar.gz`: http://download.osgeo.org/gdal/2.3.1/gdal-2.3.1.tar.gz
.. _`2.3.1 Release Notes`: https://github.com/OSGeo/gdal/blob/v2.3.1/gdal/NEWS
.. _`2.3.1 md5`: http://download.osgeo.org/gdal/2.3.1/gdal-2.3.1.tar.gz.md5
* **2018-05** `gdal-2.3.0.tar.gz`_ `2.3.0 Release Notes`_ (`2.3.0 md5`_)
.. _`gdal-2.3.0.tar.gz`: http://download.osgeo.org/gdal/2.3.0/gdal-2.3.0.tar.gz
.. _`2.3.0 Release Notes`: https://github.com/OSGeo/gdal/blob/v2.3.0/gdal/NEWS
.. _`2.3.0 md5`: http://download.osgeo.org/gdal/2.3.0/gdal-2.3.0.tar.gz.md5
* **2018-03** `gdal-2.2.4.tar.gz`_ `2.2.4 Release Notes`_ (`2.2.4 md5`_)
.. _`gdal-2.2.4.tar.gz`: http://download.osgeo.org/gdal/2.2.4/gdal-2.2.4.tar.gz
.. _`2.2.4 Release Notes`: https://github.com/OSGeo/gdal/blob/v2.2.4/gdal/NEWS
.. _`2.2.4 md5`: http://download.osgeo.org/gdal/2.2.4/gdal-2.2.4.tar.gz.md5
* **2017-11** `gdal-2.2.3.tar.gz`_ `2.2.3 Release Notes`_ (`2.2.3 md5`_)
.. _`gdal-2.2.3.tar.gz`: http://download.osgeo.org/gdal/2.2.3/gdal-2.2.3.tar.gz
.. _`2.2.3 Release Notes`: https://github.com/OSGeo/gdal/blob/v2.2.3/gdal/NEWS
.. _`2.2.3 md5`: http://download.osgeo.org/gdal/2.2.3/gdal-2.2.3.tar.gz.md5
* **2017-09** `gdal-2.2.2.tar.gz`_ `2.2.2 Release Notes`_ (`2.2.2 md5`_)
.. _`gdal-2.2.2.tar.gz`: http://download.osgeo.org/gdal/2.2.2/gdal-2.2.2.tar.gz
.. _`2.2.2 Release Notes`: https://github.com/OSGeo/gdal/blob/v2.2.2/gdal/NEWS
.. _`2.2.2 md5`: http://download.osgeo.org/gdal/2.2.2/gdal-2.2.2.tar.gz.md5
* **2017-06** `gdal-2.2.1.tar.gz`_ `2.2.1 Release Notes`_ (`2.2.1 md5`_)
.. _`gdal-2.2.1.tar.gz`: http://download.osgeo.org/gdal/2.2.1/gdal-2.2.1.tar.gz
.. _`2.2.1 Release Notes`: https://github.com/OSGeo/gdal/blob/v2.2.1/gdal/NEWS
.. _`2.2.1 md5`: http://download.osgeo.org/gdal/2.2.1/gdal-2.2.1.tar.gz.md5
* **2017-06** `gdal-2.1.4.tar.gz`_ `2.1.4 Release Notes`_ (`2.1.4 md5`_)
.. _`gdal-2.1.4.tar.gz`: http://download.osgeo.org/gdal/2.1.4/gdal-2.1.4.tar.gz
.. _`2.1.4 Release Notes`: https://github.com/OSGeo/gdal/blob/v2.1.4/gdal/NEWS
.. _`2.1.4 md5`: http://download.osgeo.org/gdal/2.1.4/gdal-2.1.4.tar.gz.md5
* **2017-04** `gdal-2.2.0.tar.gz`_ `2.2.0 Release Notes`_ (`2.2.0 md5`_)
.. _`gdal-2.2.0.tar.gz`: http://download.osgeo.org/gdal/2.2.0/gdal-2.2.0.tar.gz
.. _`2.2.0 Release Notes`: https://github.com/OSGeo/gdal/blob/v2.2.0/gdal/NEWS
.. _`2.2.0 md5`: http://download.osgeo.org/gdal/2.2.0/gdal-2.2.0.tar.gz.md5
* **2017-01** `gdal-2.1.3.tar.gz`_ `2.1.3 Release Notes`_ (`2.1.3 md5`_)
.. _`gdal-2.1.3.tar.gz`: http://download.osgeo.org/gdal/2.1.3/gdal-2.1.3.tar.gz
.. _`2.1.3 Release Notes`: https://github.com/OSGeo/gdal/blob/v2.1.3/gdal/NEWS
.. _`2.1.3 md5`: http://download.osgeo.org/gdal/2.1.3/gdal-2.1.3.tar.gz.md5
* **2016-10** `gdal-2.1.2.tar.gz`_ `2.1.2 Release Notes`_ (`2.1.2 md5`_)
.. _`gdal-2.1.2.tar.gz`: http://download.osgeo.org/gdal/2.1.2/gdal-2.1.2.tar.gz
.. _`2.1.2 Release Notes`: https://github.com/OSGeo/gdal/blob/v2.1.2/gdal/NEWS
.. _`2.1.2 md5`: http://download.osgeo.org/gdal/2.1.2/gdal-2.1.2.tar.gz.md5
* **2016-07** `gdal-2.1.1.tar.gz`_ `2.1.1 Release Notes`_ (`2.1.1 md5`_)
.. _`gdal-2.1.1.tar.gz`: http://download.osgeo.org/gdal/2.1.1/gdal-2.1.1.tar.gz
.. _`2.1.1 Release Notes`: https://github.com/OSGeo/gdal/blob/v2.1.1/gdal/NEWS
.. _`2.1.1 md5`: http://download.osgeo.org/gdal/2.1.1/gdal-2.1.1.tar.gz.md5
* **2016-07** `gdal-2.0.3.tar.gz`_ `2.0.3 Release Notes`_ (`2.0.3 md5`_)
.. _`gdal-2.0.3.tar.gz`: http://download.osgeo.org/gdal/2.0.3/gdal-2.0.3.tar.gz
.. _`2.0.3 Release Notes`: https://github.com/OSGeo/gdal/blob/v2.0.3/gdal/NEWS
.. _`2.0.3 md5`: http://download.osgeo.org/gdal/2.0.3/gdal-2.0.3.tar.gz.md5
* **2016-07** `gdal-1.11.5.tar.gz`_ `1.11.5 Release Notes`_ (`1.11.5 md5`_)
.. _`gdal-1.11.5.tar.gz`: http://download.osgeo.org/gdal/1.11.5/gdal-1.11.5.tar.gz
.. _`1.11.5 Release Notes`: https://github.com/OSGeo/gdal/blob/v1.11.5/gdal/NEWS
.. _`1.11.5 md5`: http://download.osgeo.org/gdal/1.11.5/gdal-1.11.5.tar.gz.md5
* **2016-04** `gdal-2.1.0.tar.gz`_ `2.1.0 Release Notes`_ (`2.1.0 md5`_)
.. _`gdal-2.1.0.tar.gz`: http://download.osgeo.org/gdal/2.1.0/gdal-2.1.0.tar.gz
.. _`2.1.0 Release Notes`: https://github.com/OSGeo/gdal/blob/v2.1.0/gdal/NEWS
.. _`2.1.0 md5`: http://download.osgeo.org/gdal/2.1.0/gdal-2.1.0.tar.gz.md5
* **2016-01** `gdal-2.0.2.tar.gz`_ `2.0.2 Release Notes`_ (`2.0.2 md5`_)
.. _`gdal-2.0.2.tar.gz`: http://download.osgeo.org/gdal/2.0.2/gdal-2.0.2.tar.gz
.. _`2.0.2 Release Notes`: https://github.com/OSGeo/gdal/blob/v2.0.2/gdal/NEWS
.. _`2.0.2 md5`: http://download.osgeo.org/gdal/2.0.2/gdal-2.0.2.tar.gz.md5
* **2016-01** `gdal-1.11.4.tar.gz`_ `1.11.4 Release Notes`_ (`1.11.4 md5`_)
.. _`gdal-1.11.4.tar.gz`: http://download.osgeo.org/gdal/1.11.4/gdal-1.11.4.tar.gz
.. _`1.11.4 Release Notes`: https://github.com/OSGeo/gdal/blob/v1.11.4/gdal/NEWS
.. _`1.11.4 md5`: http://download.osgeo.org/gdal/1.11.4/gdal-1.11.4.tar.gz.md5
* **2015-09** `gdal-2.0.1.tar.gz`_ `2.0.1 Release Notes`_ (`2.0.1 md5`_)
.. _`gdal-2.0.1.tar.gz`: http://download.osgeo.org/gdal/2.0.1/gdal-2.0.1.tar.gz
.. _`2.0.1 Release Notes`: https://github.com/OSGeo/gdal/blob/v2.0.1/gdal/NEWS
.. _`2.0.1 md5`: http://download.osgeo.org/gdal/2.0.1/gdal-2.0.1.tar.gz.md5
* **2015-09** `gdal-1.11.3.tar.gz`_ `1.11.3 Release Notes`_ (`1.11.3 md5`_)
.. _`gdal-1.11.3.tar.gz`: http://download.osgeo.org/gdal/1.11.3/gdal-1.11.3.tar.gz
.. _`1.11.3 Release Notes`: https://github.com/OSGeo/gdal/blob/v1.11.3/gdal/NEWS
.. _`1.11.3 md5`: http://download.osgeo.org/gdal/1.11.3/gdal-1.11.3.tar.gz.md5
* **2015-06** `gdal-2.0.0.tar.gz`_ `2.0.0 Release Notes`_ (`2.0.0 md5`_)
.. _`gdal-2.0.0.tar.gz`: http://download.osgeo.org/gdal/2.0.0/gdal-2.0.0.tar.gz
.. _`2.0.0 Release Notes`: https://github.com/OSGeo/gdal/blob/v2.0.0/gdal/NEWS
.. _`2.0.0 md5`: http://download.osgeo.org/gdal/2.0.0/gdal-2.0.0.tar.gz.md5
* **2015-02** `gdal-1.11.2.tar.gz`_ `1.11.2 Release Notes`_ (`1.11.2 md5`_)
.. _`gdal-1.11.2.tar.gz`: http://download.osgeo.org/gdal/1.11.2/gdal-1.11.2.tar.gz
.. _`1.11.2 Release Notes`: https://github.com/OSGeo/gdal/blob/v1.11.2/gdal/NEWS
.. _`1.11.2 md5`: http://download.osgeo.org/gdal/1.11.2/gdal-1.11.2.tar.gz.md5
* **2014-09** `gdal-1.11.1.tar.gz`_ `1.11.1 Release Notes`_ (`1.11.1 md5`_)
.. _`gdal-1.11.1.tar.gz`: http://download.osgeo.org/gdal/1.11.1/gdal-1.11.1.tar.gz
.. _`1.11.1 Release Notes`: https://github.com/OSGeo/gdal/blob/v1.11.1/gdal/NEWS
.. _`1.11.1 md5`: http://download.osgeo.org/gdal/1.11.1/gdal-1.11.1.tar.gz.md5
* **2014-04** `gdal-1.11.0.tar.gz`_ `1.11.0 Release Notes`_ (`1.11.0 md5`_)
.. _`gdal-1.11.0.tar.gz`: http://download.osgeo.org/gdal/1.11.0/gdal-1.11.0.tar.gz
.. _`1.11.0 Release Notes`: https://github.com/OSGeo/gdal/blob/v1.11.0/gdal/NEWS
.. _`1.11.0 md5`: http://download.osgeo.org/gdal/1.11.0/gdal-1.11.0.tar.gz.md5
* **2013-08** `gdal-1.10.1.tar.gz`_ `1.10.1 Release Notes`_ (`1.10.1 md5`_)
.. _`gdal-1.10.1.tar.gz`: http://download.osgeo.org/gdal/1.10.1/gdal-1.10.1.tar.gz
.. _`1.10.1 Release Notes`: https://github.com/OSGeo/gdal/blob/v1.10.1/gdal/NEWS
.. _`1.10.1 md5`: http://download.osgeo.org/gdal/1.10.1/gdal-1.10.1.tar.gz.md5
* **2013-04** `gdal-1.10.0.tar.gz`_ `1.10.0 Release Notes`_ (`1.10.0 md5`_)
.. _`gdal-1.10.0.tar.gz`: http://download.osgeo.org/gdal/1.10.0/gdal-1.10.0.tar.gz
.. _`1.10.0 Release Notes`: https://github.com/OSGeo/gdal/blob/v1.10.0/gdal/NEWS
.. _`1.10.0 md5`: http://download.osgeo.org/gdal/1.10.0/gdal-1.10.0.tar.gz.md5
* **2012-10** `gdal-1.9.2.tar.gz`_ `1.9.2 Release Notes`_ (`1.9.2 md5`_)
.. _`gdal-1.9.2.tar.gz`: http://download.osgeo.org/gdal/old_releases/gdal-1.9.2.tar.gz
.. _`1.9.2 Release Notes`: https://github.com/OSGeo/gdal/blob/v1.9.2/gdal/NEWS
.. _`1.9.2 md5`: http://download.osgeo.org/gdal/old_releases/gdal-1.9.2.tar.gz.md5
* **2012-05** `gdal-1.9.1.tar.gz`_ `1.9.1 Release Notes`_ (`1.9.1 md5`_)
.. _`gdal-1.9.1.tar.gz`: http://download.osgeo.org/gdal/old_releases/gdal-1.9.1.tar.gz
.. _`1.9.1 Release Notes`: https://github.com/OSGeo/gdal/blob/v1.9.1/gdal/NEWS
.. _`1.9.1 md5`: http://download.osgeo.org/gdal/old_releases/gdal-1.9.1.tar.gz.md5
* **2011-12** `gdal-1.9.0.tar.gz`_ `1.9.0 Release Notes`_ (`1.9.0 md5`_)
.. _`gdal-1.9.0.tar.gz`: http://download.osgeo.org/gdal/old_releases/gdal-1.9.0.tar.gz
.. _`1.9.0 Release Notes`: https://github.com/OSGeo/gdal/blob/v1.9.0/gdal/NEWS
.. _`1.9.0 md5`: http://download.osgeo.org/gdal/old_releases/gdal-1.9.0.tar.gz.md5
* **2011-07** `gdal-1.8.1.tar.gz`_ `1.8.1 Release Notes`_ (`1.8.1 md5`_)
.. _`gdal-1.8.1.tar.gz`: http://download.osgeo.org/gdal/old_releases/gdal-1.8.1.tar.gz
.. _`1.8.1 Release Notes`: https://github.com/OSGeo/gdal/blob/v1.8.1/gdal/NEWS
.. _`1.8.1 md5`: http://download.osgeo.org/gdal/old_releases/gdal-1.8.1.tar.gz.md5
* **2011-01** `gdal-1.8.0.tar.gz`_ `1.8.0 Release Notes`_ (`1.8.0 md5`_)
.. _`gdal-1.8.0.tar.gz`: http://download.osgeo.org/gdal/old_releases/gdal-1.8.0.tar.gz
.. _`1.8.0 Release Notes`: https://github.com/OSGeo/gdal/blob/v1.8.0/gdal/NEWS
.. _`1.8.0 md5`: http://download.osgeo.org/gdal/old_releases/gdal-1.8.0.tar.gz.md5
* **2010-11** `gdal-1.7.3.tar.gz`_ `1.7.3 Release Notes`_ (`1.7.3 md5`_)
.. _`gdal-1.7.3.tar.gz`: http://download.osgeo.org/gdal/old_releases/gdal-1.7.3.tar.gz
.. _`1.7.3 Release Notes`: https://github.com/OSGeo/gdal/blob/v1.7.3/gdal/NEWS
.. _`1.7.3 md5`: http://download.osgeo.org/gdal/old_releases/gdal-1.7.3.tar.gz.md5
* **2010-04** `gdal-1.7.2.tar.gz`_ `1.7.2 Release Notes`_ (`1.7.2 md5`_)
.. _`gdal-1.7.2.tar.gz`: http://download.osgeo.org/gdal/old_releases/gdal-1.7.2.tar.gz
.. _`1.7.2 Release Notes`: https://github.com/OSGeo/gdal/blob/v1.7.2/gdal/NEWS
.. _`1.7.2 md5`: http://download.osgeo.org/gdal/old_releases/gdal-1.7.2.tar.gz.md5
* **2010-02** `gdal-1.7.1.tar.gz`_ `1.7.1 Release Notes`_ (`1.7.1 md5`_)
.. _`gdal-1.7.1.tar.gz`: http://download.osgeo.org/gdal/old_releases/gdal-1.7.1.tar.gz
.. _`1.7.1 Release Notes`: https://github.com/OSGeo/gdal/blob/v1.7.1/gdal/NEWS
.. _`1.7.1 md5`: http://download.osgeo.org/gdal/old_releases/gdal-1.7.1.tar.gz.md5
* **2010-01** `1.7.0 (retracted) Release Notes`_
.. _`1.7.0 (retracted) Release Notes`: https://github.com/OSGeo/gdal/blob/v1.7.0/gdal/NEWS
* **2009-11** `gdal-1.6.3.tar.gz`_ `1.6.3 Release Notes`_
.. _`gdal-1.6.3.tar.gz`: http://download.osgeo.org/gdal/old_releases/gdal-1.6.3.tar.gz
.. _`1.6.3 Release Notes`: https://github.com/OSGeo/gdal/blob/v1.6.3/gdal/NEWS
* **2009-08** `gdal-1.6.2.tar.gz`_ `1.6.2 Release Notes`_
.. _`gdal-1.6.2.tar.gz`: http://download.osgeo.org/gdal/old_releases/gdal-1.6.2.tar.gz
.. _`1.6.2 Release Notes`: https://github.com/OSGeo/gdal/blob/v1.6.2/gdal/NEWS
* **2009-05** `gdal-1.6.1.tar.gz`_ `1.6.1 Release Notes`_
.. _`gdal-1.6.1.tar.gz`: http://download.osgeo.org/gdal/old_releases/gdal-1.6.1.tar.gz
.. _`1.6.1 Release Notes`: https://github.com/OSGeo/gdal/blob/v1.6.1/gdal/NEWS
* **2008-12** `gdal-1.6.0.tar.gz`_ `1.6.0 Release Notes`_
.. _`gdal-1.6.0.tar.gz`: http://download.osgeo.org/gdal/old_releases/gdal-1.6.0.tar.gz
.. _`1.6.0 Release Notes`: https://github.com/OSGeo/gdal/blob/v1.6.0/gdal/NEWS
* **2009-01** `gdal-1.5.4.tar.gz`_ `1.5.4 Release Notes`_
.. _`gdal-1.5.4.tar.gz`: http://download.osgeo.org/gdal/old_releases/gdal-1.5.4.tar.gz
.. _`1.5.4 Release Notes`: https://github.com/OSGeo/gdal/blob/v1.5.4/gdal/NEWS
* **2008-10** `gdal-1.5.3.tar.gz`_ `1.5.3 Release Notes`_
.. _`gdal-1.5.3.tar.gz`: http://download.osgeo.org/gdal/old_releases/gdal-1.5.3.tar.gz
.. _`1.5.3 Release Notes`: https://github.com/OSGeo/gdal/blob/v1.5.3/gdal/NEWS
* **2008-05** `gdal-1.5.2.tar.gz`_ `1.5.2 Release Notes`_
.. _`gdal-1.5.2.tar.gz`: http://download.osgeo.org/gdal/old_releases/gdal-1.5.2.tar.gz
.. _`1.5.2 Release Notes`: https://github.com/OSGeo/gdal/blob/v1.5.2/gdal/NEWS
* **2008-03** `gdal-1.5.1.tar.gz`_ `1.5.1 Release Notes`_
.. _`gdal-1.5.1.tar.gz`: http://download.osgeo.org/gdal/old_releases/gdal-1.5.1.tar.gz
.. _`1.5.1 Release Notes`: https://github.com/OSGeo/gdal/blob/v1.5.1/gdal/NEWS
* **2007-12** `gdal-1.5.0.tar.gz`_ `1.5.0 Release Notes`_
.. _`gdal-1.5.0.tar.gz`: http://download.osgeo.org/gdal/old_releases/gdal-1.5.0.tar.gz
.. _`1.5.0 Release Notes`: https://github.com/OSGeo/gdal/blob/v1.5.0/gdal/NEWS
* **2008-12** `gdal-1.4.5.tar.gz`_ `1.4.5 Release Notes`_
.. _`gdal-1.4.5.tar.gz`: http://download.osgeo.org/gdal/old_releases/gdal-1.4.5.tar.gz
.. _`1.4.5 Release Notes`: https://github.com/OSGeo/gdal/blob/v1.4.5/gdal/NEWS
* **2007-11** `gdal-1.4.4.tar.gz`_ `1.4.4 Release Notes`_
.. _`gdal-1.4.4.tar.gz`: http://download.osgeo.org/gdal/old_releases/gdal-1.4.4.tar.gz
.. _`1.4.4 Release Notes`: https://github.com/OSGeo/gdal/blob/v1.4.4/gdal/NEWS
* **2007-06** `gdal-1.4.2.tar.gz`_ `1.4.2 Release Notes`_
.. _`gdal-1.4.2.tar.gz`: http://download.osgeo.org/gdal/old_releases/gdal-1.4.2.tar.gz
.. _`1.4.2 Release Notes`: https://github.com/OSGeo/gdal/blob/v1.4.2/gdal/NEWS
* **2007-04** `gdal-1.4.1.tar.gz`_ `1.4.1 Release Notes`_
.. _`gdal-1.4.1.tar.gz`: http://download.osgeo.org/gdal/old_releases/gdal-1.4.1.tar.gz
.. _`1.4.1 Release Notes`: https://github.com/OSGeo/gdal/blob/v1.4.1/gdal/NEWS
* **2007-01** `gdal-1.4.0.tar.gz`_
.. _`gdal-1.4.0.tar.gz`: http://download.osgeo.org/gdal/old_releases/gdal-1.4.0.tar.gz
---
### Doc Source Faq (`doc/source/faq.rst`)
.. _faq:
================================================================================
FAQ
================================================================================
.. TODO maybe migrate the chapters 2 and following of http://web.archive.org/web/https://trac.osgeo.org/gdal/wiki/FAQ
.. only:: not latex
.. contents::
:depth: 3
:backlinks: none
What does GDAL stand for?
+++++++++++++++++++++++++
GDAL - Geospatial Data Abstraction Library
It is sometimes pronounced "goo-doll" (a bit like goo-gle), while others pronounce it "gee-doll," and others pronounce it "gee-dall."
`Listen <https://soundcloud.com/danabauer/how-do-you-pronounce-gdal#t=00:02:58>`__ how Frank Warmerdam pronounces it and the history behind the acronym.
What is this OGR stuff?
+++++++++++++++++++++++++
OGR used to be a separate vector IO library inspired by OpenGIS Simple Features which was separated from GDAL. With the GDAL 2.0 release, the GDAL and OGR components were integrated together.
What does OGR stand for?
+++++++++++++++++++++++++
See :term:`OGR`.
What does CPL stand for?
+++++++++++++++++++++++++
See :term:`CPL`.
What does VSI stand for?
+++++++++++++++++++++++++
See :term:`VSI`.
When was the GDAL project started?
++++++++++++++++++++++++++++++++++
In late 1998, Frank Warmerdam started to work as independent professional on the GDAL/OGR library.
Is GDAL/OGR proprietary software?
+++++++++++++++++++++++++++++++++
No, GDAL/OGR is a Free and Open Source Software.
What license does GDAL/OGR use?
+++++++++++++++++++++++++++++++
See :ref:`license`
What operating systems does GDAL-OGR run on?
++++++++++++++++++++++++++++++++++++++++++++
You can use GDAL/OGR on all modern flavors of Unix: Linux, FreeBSD, Mac OS X; all supported versions of Microsoft Windows; mobile environments (Android and iOS). Both 32-bit and 64-bit architectures are supported.
Is there a graphical user interface to GDAL/OGR?
++++++++++++++++++++++++++++++++++++++++++++++++
Plenty! Among the available options, `QGIS <https://qgis.org>`__ is an excellent
free and open source application with a rich graphical user interface. It
allows users to display most GDAL raster and vector supported formats and
provides access to most GDAL utilities through its Processing toolbox.
You can also consult the :ref:`list of software using GDAL <software_using_gdal>`.
.. toctree::
:hidden:
software_using_gdal
What compiler can I use to build GDAL/OGR?
++++++++++++++++++++++++++++++++++++++++++++++++
GDAL/OGR must be compiled with a C++17 capable compiler since GDAL 3.9 (C++11 in previous versions)
Build requirements are described in :ref:`build_requirements`.
I have a question that's not answered here. Where can I get more information?
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
See :ref:`community`
Keep in mind, the quality of the answer you get does bear some relation to the quality of the question. If you need more detailed explanation of this, you can find it in essay `How To Ask Questions The Smart Way <http://www.catb.org/~esr/faqs/smart-questions.html>`_ by Eric S. Raymond.
How do I add support for a new format?
++++++++++++++++++++++++++++++++++++++
To some extent this is now covered by the :ref:`raster_driver_tut` and :ref:`vector_driver_tut`
What about file formats for 3D models?
++++++++++++++++++++++++++++++++++++++
While some vector drivers in GDAL support 3D geometries (e.g. reading CityGML or
AIXM through the GML driver, or 3D geometries in GeoPackage), 3-dimensional scenes or
models formats (such as glTF, OBJ, 3DS, etc.) are out-of-scope for GDAL.
Users may consider a library such as `ASSIMP (Open-Asset-Importer-Library) <https://github.com/assimp/assimp>`__
for such formats.
Is GDAL thread-safe ?
+++++++++++++++++++++
See :ref:`multithreading`
Does GDAL provide a Section 508 information?
++++++++++++++++++++++++++++++++++++++++++++
No, GDAL itself is an open-source software and project, not a Vendor. If your organization considers they need a `VPAT or Section 508 <https://www.section508.gov/sell/acr/>`_ form to be able to use GDAL, it is their responsibility to complete the needed steps themselves.
How do I cite GDAL ?
++++++++++++++++++++
See `CITATION`_
.. developer note: do not use :source_file:, as it breaks latexpdf output
.. _`CITATION`: https://github.com/OSGeo/gdal/blob/master/CITATION
.. below is an allow-list for spelling checker.
.. spelling:word-list::
glTF
---
### Doc Source Glossary (`doc/source/glossary.rst`)
.. _glossary:
================================================================================
Glossary
================================================================================
The GDAL glossary contains terms and acronyms found throughout the GDAL documentation
.. glossary::
Affine Transformation
A geometric change that preserves points, straight lines, and ratios, including scaling, rotating, or translating.
API
Application Programming Interface. A set of rules that lets different software programs communicate and share data or functions.
Arc
A curved segment of a circle or other curve, often used in geographic data to represent smooth curved lines or boundaries between points.
Band
A single layer of data values within a raster dataset. In a single-band raster, each pixel contains one value - such as elevation in a :term:`DEM`.
A multi-band raster contains multiple such layers; for example, satellite imagery may include three bands representing Red, Green, and Blue channels.
Band Algebra
A method for performing mathematical operations on one or more raster bands to produce a new output band or raster.
Band algebra involves applying expressions - such as addition, subtraction, multiplication, division,
or more complex functionsโon pixel values across bands.
.. seealso::
:ref:`gdal_band_algebra`.
Block Cache
A memory cache that stores recently accessed blocks of data to reduce disk reads and improve performance.
Boolean
A data type representing one of two values: True or False, commonly used in logical operations and conditions.
BIL
Band Interleaved by Line multi-sample pixel organization. See :ref:`raster_data_model_interleave_mode` for more details.
BIP
Band Interleaved by Pixel multi-sample pixel organization. See :ref:`raster_data_model_interleave_mode` for more details.
BSQ
Band SeQuential multi-sample pixel organization. See :ref:`raster_data_model_interleave_mode` for more details.
Coordinate Epoch
The date tied to spatial coordinates in a dynamic reference frame, used to account for positional changes over time (e.g., due to tectonic motion).
Coordinate System
The mathematical framework that defines how coordinates are measured and represented within a geometric coordinate space.
CPL
Common Portability Library. Part of the C API that provides convenience
functions to provide independence from the operating systems on which GDAL runs.
Back in the early days of GDAL development, when cross-platform development
as well as compatibility and standard conformance of compilers was a challenge,
CPL proved necessary for smooth portability of GDAL/OGR.
CPL, or parts of it, is used by some projects external to GDAL (e.g. MITAB, libgeotiff).
Credentials
Information (such as a username and password or tokens) used to verify the identity of a user or system for authentication and access control.
CRS
Coordinate Reference System. Specifies how coordinates correspond to locations on Earth (or other celestial bodies),
including the :term:`coordinate system`, :term:`datum`, and, if applicable, a projection.
CSL
C-String List. Prefix used by a number of functions in the C API, that deal with
an array of NUL-terminated strings, the array itself being terminated by a NULL pointer.
curl
A command-line tool and library for transferring data with URLs, supporting protocols such as HTTP, HTTPS, FTP, and more.
Commonly used for testing and interacting with web services.
Datum
A model of the Earth that specifies the size and shape of the reference :term:`ellipsoid` and its position and orientation
relative to the Earth, providing the basis for a :term:`CRS`. In geodetic datums, this defines horizontal positioning.
Vertical datums define a reference surface for height values (e.g., mean sea level or a geoid) used for vertical coordinates in 3D operations.
DEM
Digital Elevation Model. A raster representation of the height of the earth's surface.
Driver
A software component that enables reading, writing, and processing of specific raster or vector data formats.
DTM
Digital Terrain Model. A raster representation of the bare ground surface of the earth, excluding natural and man-made
objects such as vegetation and buildings.
Ellipsoid
A model used to approximate the Earth's shape in coordinate systems.
Environment Variable
A variable in the operating system that can influence the behavior of running processes or applications.
.. seealso::
:ref:`configoptions`.
Escaped Character
Refers to a character or sequence modified to prevent it from being interpreted as code or control instructions,
allowing it to be treated as literal data.
Euclidean Distance
A measure of the straight-line distance between two points in space.
EPSG
European Petroleum Survey Group. A group of geospatial experts for the petroleum industry (1986โ2005),
now part of IOGP (International Association of Oil & Gas Producers). Known for creating the EPSG Geodetic Parameter Dataset,
a widely used database of coordinate systems and geodetic parameters.
File Handle
An identifier used by an operating system to manage and access an open file during a program's execution.
GEOS
Geometry Engine - Open Source. GEOS is a C/C++ library for computational geometry with a focus on algorithms
used in geographic information systems (GIS) software. GEOS started as a port of the Java Topology Suite (JTS).
.. seealso::
https://libgeos.org/
Gridding
The process of converting scattered or irregularly spaced data points into a regular, structured grid format.
.. seealso::
:ref:`gdal_grid_tut`.
Georeference
Linking data to real-world geographic coordinates so a location can be accurately mapped.
Georeferencing
See :term:`Georeference`.
Geotransform
A set of parameters that defines how to convert pixel locations in an image to real-world geographic coordinates.
.. seealso::
:ref:`geotransforms_tut`.
GNM
Geographic Network Model. A GDAL abstraction for different existed network formats.
.. seealso::
:ref:`gnm_data_model`.
Interpolation
A mathematical and statistical technique used to estimate unknown values between known values.
.. seealso::
:ref:`gdal_grid_tut`.
Hypsometric
The measurement and representation of land elevation (or terrain height) relative to sea level.
Library
A collection of software routines, functions, or classes that can be used by programs to perform specific tasks
without having to write code from scratch. Libraries help developers reuse code and simplify software development.
Linestring
A geometric object consisting of a sequence of connected points forming a continuous line, commonly used to represent
linear features such as roads or rivers in spatial data.
LRU Cache
Least Recently Used Cache. A memory cache that stores a limited number of items, automatically discarding the
least recently used entries to make space for new ones.
Moving Average
A method that smooths data by averaging values over a sliding window of data points.
.. seealso::
:ref:`gdal_grid_tut`.
Multithreading
A programming technique where multiple threads are executed concurrently within a single process,
allowing parallel execution of tasks to improve performance and responsiveness.
Normalizing
The process of adjusting data values to a common scale. In raster analysis, normalizing is commonly used to
scale pixel values to a defined range (such as 0 to 1) to facilitate comparison and visualization.
Nearest Neighbor
A method that finds the closest data point(s) to a given point, often used for classification or estimation based on similarity.
OGC
Open Geospatial Consortium. An international, non-profit organization that develops and promotes open standards
for geospatial data and services.
.. seealso::
https://www.ogc.org/
OGR
Open GIS Reference. OGR used to stand for OpenGIS Simple Features Reference
Implementation. However, since OGR is not fully compliant with the
OpenGIS Simple Feature specification and is not approved as a reference
implementation of the spec the name was changed to OGR Simple Features Library.
The only meaning of OGR in this name is historical. OGR is also the
prefix used everywhere in the source of the library for vector related
functionality.
OSR
OGR Spatial Reference (OSR) - module that handles spatial reference systems and coordinate transformations.
.. seealso::
:ref:`osr_api_tut`.
PAM
Persistent Auxiliary Metadata. Metadata stored separately from the main raster data file,
allowing additional information to persist without modifying the original file.
Raster
A type of spatial data used with GIS, consisting of a regular grid of points spaced at a set distance (the resolution);
often used to represent heights (DEM) or temperature data.
Raster Algebra
See :term:`Band Algebra`.
Resampling
The process of changing the resolution or grid alignment of raster data by interpolating pixel values,
used when scaling, reprojecting, or transforming images to maintain data quality.
RGB
An acronym for Red, Green, and Blue - the three primary colors of light used in digital imaging.
Runtime
The period during which a program or process is actively executing. It refers to the time from the start of a program's execution to its termination.
Search Ellipse
:term:`Search window` in :term:`gridding` algorithms specified in the form of rotated ellipse.
.. seealso::
:ref:`gdal_grid_tut`.
Search Window
A defined area within which data is analyzed or searched, often used in spatial analysis or image processing.
.. seealso::
:ref:`gdal_grid_tut`.
Shell
A command-line interface used to interact with an operating system by typing commands.
Side-car Files
Auxiliary files stored alongside a primary data file that contain metadata or additional information without
altering the original file.
SRS
Spatial Reference System. A system that defines how spatial coordinates map to real-world locations.
Often used interchangeably with :term:`CRS`, though CRS is the more precise term in modern geospatial standards.
SSL
Secure Sockets Layer. A security protocol that encrypts data transmitted over the Internet
to ensure privacy and data integrity between a client and a server.
stdout
Standard output stream used by programs to display output data, typically shown on the console or terminal.
strile
A combination of "strip" and "tile". It is a block of raster data stored in a TIFF file, either as a row of pixels (strip) or a square/rectangle (tile).
GDAL reads and writes each strile as a unit when working with Cloud Optimized GeoTIFFs (COGs).
.. seealso::
:ref:`raster.cog`.
Swath
A contiguous block or strip of raster data processed or read at one time.
Thread
A sequence of executable instructions within a program that can run independently, often used to perform tasks concurrently for better performance.
Topology
The study and representation of spatial relationships between geometric features, such as adjacency, connectivity, and containment,
ensuring data integrity in GIS by defining how points, lines, and polygons share boundaries and connect.
User-Agent
A string sent by a web browser or client identifying itself to a web server, often including information
about the software, version, and operating system.
UTF8
A character encoding that represents text using one to four bytes per character, and capable of encoding all Unicode characters. Also
referred to a UTF-8.
VRT
Virtual Raster Tile: A lightweight XML-based GDAL format that references multiple rasters or vectors to create a
virtual mosaic without duplicating data.
.. seealso::
:ref:`raster.vrt` and :ref:`vector.vrt`
VSI
Virtual System Interface. This is the name of the input/output abstraction layer
that is implemented by different Virtual File Systems (VFS) to provide access
to regular files, in-memory files, network accessible files, compressed files, etc.
The VSI functions retain exactly the same calling pattern as the original
Standard C functions they relate to, for the parts where they are common, and
also extend it to provide more specialized functionality.
.. seealso::
:ref:`virtual_file_systems`.
Warping
The process of geometrically transforming raster data to align with a different coordinate system, projection,
or spatial reference, often involving :term:`resampling` of pixel values.
.. seealso::
:ref:`gdalwarp`.
WFS
Web Feature Service, an :term:`OGC` standard that allows users to access geospatial vector data over the web.
.. seealso::
:ref:`vector.wfs`
WKT
Well-Known Text. Text representation of geometries described in the Simple Features for SQL (SFSQL) specification.
WKT-CRS
Well-Known Text for Coordinate Reference Systems. A text format that defines how to describe coordinate reference
systems and transformations between them in a standardized way.
See the `OGC WKT-CRS standard <https://www.ogc.org/standards/wkt-crs/>`__.
WKB
Well-Known Binary. Binary representation of geometries described in the Simple Features for SQL (SFSQL) specification.
WMS
Web Map Service, an :term:`OGC` standard that allows users to request and display georeferenced map images over the web.
.. seealso::
:ref:`raster.wms`
Credits and Acknowledgments
---------------------------
Some definitions have been created with the help of the following resources.
+ `Introduction to Spatial Data and Using R as a GIS <https://github.com/nickbearman/intro-r-spatial-analysis/blob/main/glossary.tex>`__ by Nick Bearman,
licensed under the `Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International <http://creativecommons.org/licenses/by-nc-sa/4.0/>`__
+ `The Good Docs Project Glossary Initiative <https://drive.google.com/drive/folders/1v5ir_VrR71RFxR8ipf9xmpIIH8muEvEK>`__,
by various contributors to the project, used under the following `Terms of Use <https://www.thegooddocsproject.dev/terms-of-use>`__.
+ The `MapServer Glossary <https://mapserver.org/glossary.html>`__ covered by the `MapServer Licensing <https://mapserver.org/copyright.html>`__.
.. spelling:word-list::
Bearman
---
### Doc Source Index (`doc/source/index.rst`)
================================================================================
GDAL
================================================================================
.. include:: ./about.rst
:start-after: .. descriptionstartshere
.. toctree::
:maxdepth: 2
:includehidden:
download
programs/index
drivers/raster/index
drivers/vector/index
User
api/index
tutorials/index
CLI Workshop <workshop/src/index>
development/index
community/index
sponsors/index
contributing/index
faq
glossary
license
thanks
Index
=====
* :ref:`genindex`
.. meta::
:google-site-verification: 9rQvEBJEGGlTYi0neT9qNthRNbnxE4LCy_hdZ6WDiK4
---
### Doc Source Index Pdf (`doc/source/index_pdf.rst`)
:orphan:
================================================================================
GDAL
================================================================================
.. toctree::
:maxdepth: 4
:hidden:
about
license
download
faq
programs/index
drivers/raster/index
drivers/vector/index
User
api/index
tutorials/index
CLI Workshop <workshop/src/index>
community/index
sponsors/index
contributing/index
thanks
---
### Doc Source Software Using Gdal (`doc/source/software_using_gdal.rst`)
.. _software_using_gdal:
================================================================================
Software using GDAL
================================================================================
Free and open source
--------------------
- `actinia <https://actinia.mundialis.de/>`_ A cloud based geoprocessing platform from mundialis (GPL v3)
- `Biodiverse <http://shawnlaffan.github.io/biodiverse>`_ A tool for the spatial analysis of diversity. Uses GDAL for import/export of data (GPL v3)
- `Bluemapia <https://sourceforge.net/projects/bluemapia/>`_ Multi-Map(Google,Microsoft,Open Street Map, NOAA/BSB Charts,self-calibrated raster) location-based GPS app for Windows Mobile. (GPL v2)
- `BRL-CAD <https://brlcad.org>`_ An open source solid modeling computer-aided design system.
- `Demeter <http://demeter.sourceforge.net/>`_ Another OpenGL based terrain engine somewhat similar to VTP.
- `DuckDB Spatial Extension <https://duckdb.org/docs/extensions/spatial>`_: Spatial extension for DuckDB
- `EOxServer <http://eoxserver.org>`_ OGC-compliant server for Earth Observation (EO) data supporting WMS and WCS with EO application profiles (EOxServer Open License)
- `exactextract <https://github.com/isciences/exactextract>`_ Fast and accurate raster/vector zonal statistics (Apache 2.0)
- `Feature Data Objects (FDO) <http://fdo.osgeo.org>`_ Open source spatial data access libraries (LGPL)
- `Fiona <http://pypi.python.org/pypi/Fiona>`_ Fiona is OGR's neater Python API โ sleek and elegant on the outside, indomitable power on the inside.
- `gdal3.js.org <https://gdal3.js.org>`_ Convert raster and vector geospatial data to various formats and coordinate systems entirely in the browser.
- `GdalToTiles` C# Program (open source) for making image tiles for Google Earth with KML Superoverlay. (project discontinued; was hosted on CodePlex which shut down in December 2017)
- `GeoDa <http://geodacenter.github.io/index.html>`_ Introduction to Spatial Data Analysis (spatial autocorrelation and spatial regression) (GPL)
- `GeoDjango <https://docs.djangoproject.com/en/dev/ref/contrib/gis/>`_ A framework for building geographic web applications.
- `geofileops <https://geofileops.readthedocs.io/en/stable/>`_ Python toolbox to process large vector files faster.
- `GeoKettle <https://live.osgeo.org/archive/10.5/en/overview/geokettle_overview.html>`_ An open source spatial ETL (Extract, Transform and Load) tool (LGPL)
- `GeoNotebook <https://github.com/OpenGeoscience/geonotebook>`_ a Jupyter notebook extension for geospatial visualization and analysis. (Apache 2.0)
- `GeoServer <https://geoserver.org>`_ a open source software server written in Java that allows users to share and edit geospatial data.
- `GMT (Generic Mapping Tools) <https://www.generic-mapping-tools.org>`_ an open source collection of tools for processing and displaying xy and xyz datasets.
- `GRASS GIS <https://grass.osgeo.org/>`_ A raster/vector open source GIS that uses GDAL for raster/vector import and export (via r.in.gdal/r.out.gdal)
- `gstat <https://www.gstat.org>`_ a geostatistical modelling package.
- `GuidosToolbox <https://forest.jrc.ec.europa.eu/en/activities/lpa/gtb/>`_ A multi-platform desktop application for generic image object analysis.
- `gvSIG <http://www.gvsig.com>`_ Desktop GIS Client.
- `ILWIS <http://www.itc.nl/ilwis>`_ Remote Sensing and GIS Desktop Package.
- `Image I/O-Ext <https://github.com/geosolutions-it/imageio-ext>`_ includes gdalframework, a framework leveraging on GDAL via SWIG's generated JAVA bindings to provide support for a broad set of data formats.
- `libLAS <https://liblas.org>`_ Open Source LAS 1.0/1.1 ASPRS LiDAR data translation toolset
- `Loader <https://github.com/AstunTechnology/Loader>`_ A simple loader for geographic data in GML and KML that needs some preparation before loading via ogr2ogr.
- `MapGuide <http://mapguide.osgeo.org>`_ Open source web mapping server.
- `Mapnik <http://mapnik.org>`_ C++/ Python mapping toolkit
- `MapServer <https://mapserver.org/>`_ A popular web mapping application with GDAL support.
- `MapWindow <http://www.mapwindow.org>`_ open source ActiveX control with GIS functionality.
- `Mergin Maps <https://merginmaps.com/>`_ Field data collection app built on top of QGIS with cloud sync.
- `MultiSpec <https://github.com/larrybiehl/MultiSpec>`_ Application for interactively analyzing multispectral/hyperspectral image data.
- `NASA Ames Stereo Pipeline <https://github.com/NeoGeographyToolkit/StereoPipeline>`_ Software for creating terrain models and ortho images from planetary stereo images. (Apache 2.0)
- `NASA WorldWind <https://worldwind.arc.nasa.gov/>`_ Multiplatform virtual globe library to quickly and easily create interactive visualizations of 3D globes, map and geographical information.
- `NextGIS Formbuilder <http://nextgis.com/nextgis-formbuilder>`_ Desktop application for creating and editing forms.
- `NextGIS Web <http://nextgis.com/nextgis-web>`_ Server-side Web GIS and a framework for storage, visualization and permissions management of all kinds
- `Ogr2 GUI <https://sourceforge.net/projects/ogr2gui/>`_ Graphical user interface for ogr2ogr
- `OpenCPN <http://opencpn.org>`_ A concise ChartPlotter/Navigator. A cross-platform ship-borne GUI application.
- `OpenDataCube <https://www.opendatacube.org>`_ FOSS software package that simplifies the management and analysis of large amounts of satellite imagery and other Earth observation data.
- `OpenEV <http://openev.sourceforge.net>`_ An OpenGL/GTK/Python based graphical viewer which exclusively uses GDAL for raster access.
- `OFGT <https://github.com/openforis/geospatial-toolkit>`_ a collection of utilities for multipurpose forest monitoring under the `Open Foris Initiative <https://www.openforis.org>`_ Open Foris Initiative.
- `OpenFLUID <https://www.openfluid-project.org>`_ a software platform for spatial modelling of landscapes dynamics
- `OpenSceneGraph <http://www.openscenegraph.org>`_ 3D rendering engine with `osgdem <http://www.openscenegraph.org/projects/osg/wiki/Support/UserGuides/osgdem>`_ and `osgEarth <https://github.com/pelicanmapping/osgearth>`_ plugins.
- `Opticks <http://opticks.org>`_ an open source remote sensing application and development framework, with a GDAL plugin.
- `Orfeo Toolbox (OTB) <http://www.orfeo-toolbox.org>`_ a general remote sensing image processing library.
- `OSSIM <https://github.com/ossimlabs/ossim>`_ Another geospatial viewing and analysis environment which uses GDAL as one of several plugins.
- `PDAL <https://pdal.io>`_ Point Cloud Data Abstraction Library
- `pktools <http://pktools.nongnu.org/html/index.html>`_ open source (GPLv3) tools written in C++ for remote sensing image processing
- `PNMapcalc <http://pawel.netzel.pl/index.php?id=software#a_mapcalc>`_ A raster map calculator with C-like scripting language.
- `PostGIS <http://www.postgis.net>`_ spatial database extender for PostgreSQL: The raster loader and many of the raster SQL functions rely on GDAL.
- `PostgreSQL OGR Foreign Data Wrapper <https://github.com/pramsey/pgsql-ogr-fdw>`_ Expose OGR layer as PostgreSQL foreign tables.
- `QGIS <https://www.qgis.org>`_ A cross platform desktop GIS.
- `R <https://www.r-project.org>`_ A free software environment for statistical computing and graphics, with GDAL support provided by the `sf <https://r-spatial.github.io/sf/>`_ and `terra <https://rspatial.github.io/terra/>`_ packages. The `gdalraster <https://firelab.github.io/gdalraster/>`_ package provides direct GDAL API bindings.
- `rasdaman <https://rasdaman.org>`_ "raster data manager": scalable datacube engine with APIs and query language for spatio-temporal data.
- `Rasterio <https://rasterio.readthedocs.io>`_ Python library and command line utilities to read and write GDAL rasters.
- `Rasterix <https://github.com/mogasw/rasterix/>`_ A cross platform open source utility to process raster data based on Qt and GDAL.
- `SAGA GIS <https://saga-gis.sourceforge.io/en/index.html>`_ A free geographic information system (GIS), with a special 'Application Programming Interface' (API) for geographic data processing.
- `SedonaDB <https://sedona.apache.org/sedonadb/>`_ A single-node analytical database engine with geospatial as a first-class citizen.
- `SNAP <http://step.esa.int/main/toolboxes/snap>`_ Sentinel Application Platform for Earth Observation processing and analysis.
- `StarSpan <https://github.com/Ecotrust/starspan>`_ raster/vector analysis.
- `t-rex <http://t-rex.tileserver.ch>`_ Vector tile server written in Rust.
- `Thuban <http://thuban.intevation.org>`_ A multi-platform interactive geographic data viewer.
- `Vertual Terrain Project <http://www.vterrain.org>`_ fostering tools for easy construction of the real world in interactive, 3D digital form.
- `ViRGiS <https://www.virgis.org/>`__ Creating a GIS Platform in Virtual Reality / Mixed Reality
Proprietary license / Other
---------------------------
- `3D DEM Viewer <http://www.msmacrosystem.nl/Ilwis/index.html>`_ from MS MacroSystem.
- `Cadcorp SIS: <http://www.cadcorp.com>`_ A Windows GIS with a GDAL and OGR plugins.
- `Carmenta Engine <http://www.carmenta.com>`_ (previously known as SpatialAce): A GIS Rapid Application Development environment
- `CARTO <http://www.carto.com>`_ A cloud mapping platform to analyze and visualize geospatial data.
- `CatchmentSIM <https://csse.com.au/index.php/products/catchmentsim>`_ A Windows terrain analysis model for hydrologic applications.
- `Daylon Leveller <https://www.daylongraphics.com/products/leveller.php>`_ A terrain/heightfield/bumpmap modeler
- `ERDAS ER Viewer <https://hexagon.com/products/other-geospatial-products>`_ Image viewer for very large JPEG 2000 and ECW files.
- `ESRI ArcGIS Pro <http://www.esri.com>`_ A popular GIS platform.
- `Eternix Blaze <http://www.eternix.co.il>`_ Advanced geo-spatial visualization application and SDK.
- `FalconView <http://www.falconview.org>`_ Windows-based GIS platform with roots in military mission planning, now available as a free GIS visualization and analysis package.
- `flighttrack <http://flighttrack.sourceforge.net>`_ GPS track viewing and downloading software for Mac.
- `FME <http://www.safe.com>`_ A GIS translator package includes a GDAL plugin.
- `GenGIS <https://beikolab.cs.dal.ca/gengis/Main_Page>`_ Software for geospatial analysis of genetic data.
- `Geographic Imager <https://www.avenza.com/geographic-imager>`_ DEM / aerial / satellite image processing GIS plug-in for Adobe Photoshop, by Avenza Systems.
- `GeoDMS <https://geodms.nl/>`_ A framework for building spatial calculation models.
- `GeoFusion <http://www.geofusion.com>`_ 3D visualization.
- `Geoweb3d <http://www.geoweb3d.com>`_ A 3D virtual globe that provides on-the-fly, game-quality visualization of GIS data.
- `Google Earth <http://earth.google.com>`_ A 3D world viewer.
- `HydroDaVE Explorer <https://hydrodave-explorer.software.informer.com/>`_ A web-enabled client that provides users an easy to use, secure, and reliable data management platform to efficiently manage, access, and analyze environmental data.
- `IDRISI <http://www.idrisi.com>`_ A GIS and Image Processing Windows Desktop application. Uses GDAL to import/export/warp raster data.
- `Infraworks <https://www.autodesk.com/products/infraworks/overview>`_ a BIM software for infrastructure project design, part of the Autodesk suite.
- `iShare <https://www.astuntechnology.com/cloud-products/ishare/>`_ Web data integration and publishing platform by Astun Technology.
- `Makai Voyager <http://voyager.makai.com>`_ An advanced 3D/4D geospatial visualization platform.
- `MapInfo Professional <https://www.precisely.com/product/mapinfo-professional>`_ Desktop GIS and mapping application
- `MapTiler <http://www.maptiler.com>`_ Generator of tiles for interactive maps and overlays made from raster images and geodata.
- `Maptitude Mapping Software <https://www.caliper.com/maptitude/mapping-software.htm>`_ Desktop GIS and business mapping application
- `MicroImages TNT <http://www.microimages.com>`_ advanced software for geospatial analysis (Windows, Linux, Mac OS X and UNIX)
- `Micromine <https://www.micromine.com>`_ A mining software solution that uses GDAL for reading/writing various geospatial file formats.
- `Mirone <http://joa-quim.pt/mirone/main.html>`_ Matlab based package for geospatial, oceanographic and geophysical analysis of grids
- `MyGeodata Cloud <https://mygeodata.cloud/>`_ Online converter of GDAL raster and OGR vector formats
- `OPALS <https://opals.geo.tuwien.ac.at/html/stable/index.html>`_ Orientation and Processing of Airborne Laser Scanning Data
- `RasterScope <https://rasterscope.simularia.it/>`_ A native macOS viewer for raster data as air quality and meteorological model outputs, by Simularia.
- `Procura <http://www.michellcomputing.co.uk/procura.html>`_ Landholding inspection system developed for the UK Homes and Communities Agency. GDAL is used for checking out background mapping.
- `ScanMagic <https://www.scanex.ru/en/software/vizualizatsiya-i-katalogizatsiya/scan-magic/>`_ Win32 application for visualization, analysis and processing of remote sensing data.
- `Scalable Algorithmics (SCALGO) <https://scalgo.com>`_ Software for efficiently constructing and performing computations on very large raster and TIN terrain models.
- `Scenomics <https://www.scenomics.com>`_ Software for building terrain databases uses GDAL for projection and data import/export.
- `scenProc <http://www.scenerydesign.org/scenproc/>`_ scenProc: A tool to create scenery for Microsoft Flight Simulator and Lockheed Martin Prepar3D by processing G
- `SeaView <https://www.mogasw.com/>`_ A 3D GIS package for geophysical and hydrographical data (side scan sonar, subbottom profiler, magnetometer, multibeam, etc.
- `SkylineGlobe <http://www.skylineglobe.com>`_ The Skyline suite of interactive applications allows you to build, view, query and analyze customized, virtual 3D landscapes.
- `SpacEyes3D <https://spaceyes.com/>`_ 3D visualization software for cartographic data.
- `Spatial Manager <http://www.spatialmanager.com>`_ A product suite designed designed to manage spatial data in a simple, fast and inexpensive way. Uses GDAL to import/export data.
- `TacitView <https://www.insitu.com/information-delivery/information-processing/tacitview>`_ An imagery visualization and exploitation package for military intelligence.
- `TatukGIS <http://www.tatukgis.com>`_ Desktop GIS mapping and data editing application.
- `Team Awareness Kit <https://tak.gov>`_ Suite of georeferenced imagery and situational awareness tools developed for military planning and execution, now available for civilian use.
- `TerrainView <http://www.viewtec.net>`_ Interactive real-time 3D GIS Software.
- `TransCAD GIS <http://www.caliper.com>`_ Desktop Transportation Analysis Software
- `TravTime <https://travtime.software.informer.com/download/>`_ .NET Application for visualizing, processing and analyzing GPS data for travel time, speed, and de
- `VectorWorks <http://www.vectorworks.net>`_ The Vectorworks line of software products provides professional design solutions in the AEC, entertainment and landscape design industries.
- `WindNinja <https://www.firelab.org/project/windninja>`_ wind model for fire behavior modeling.
---
### Doc Source Spelling Wordlist (`doc/source/spelling_wordlist.txt`)
aaa
aalto
abc
abcde
ABcdE
ABCDEF
abcdefgh
abcdefghij
abcdefghijk
abcdefghijkl
AbstractFeature
abyBuffer
accdb
accessMode
accessor
accessors
Acknowledgements
acl
ACL
actinia
ActiveX
adbc
addalpha
addCurve
addfields
addGeometry
AddM
addPoint
adf
adfDstGeoTransform
adfMinMax
advertized
advertizing
AdviseRead
AES
affine
Affine
ahArrays
airphotos
airsar
Aitoff
al
ala
Alamos
Albers
Alessandro
alg
AlgorithmArg
Alibaba
Alicante
allCountries
allocator
alphanumerics
Alpina
alternance
altitudemode
altitudeMode
Amici
amongst
amz
Amz
analyse
Analyse
analysing
Analysing
analytics
analyzed
Andrey
AndreyK
anMapNewAxisToOldAxis
Antalya
antialias
antimeridian
ao
aoDimensions
aoDims
api
Api
apoNewDims
approximator
AppVeyor
APSTILE
apszPartIds
ar
arcgis
arcsec
Arรฉvalo
arg
argc
args
argv
ari
Arrayname
arrayStartIdx
artifacts
ASC
ascii
aspatial
Aspatial
assumerolewithwebidentity
Astrogeology
Astun
AStyle
astylename
astype
async
atable
athematic
Athematic
Athlon
atof
atoi
atomicity
attr
attrib
attrname
attrvalue
atx
au
AUnits
auth
Auth
Authalic
authenticode
autocommit
autoconf
Autoconf
autocorrelation
Autodesk
autodetect
autodetected
autodetection
autodetects
autogenerated
autogrow
Autoincrement
automake
autoselect
autotest
avc
Avenza
Avyav
avyavkumar
aws
axisLabels
axisOrder
axisswap
aXYR
ay
az
azavea
Azimuthal
backend
backends
backmap
backplanes
backport
backported
backporting
Backporting
backports
backslashed
backtick
bak
bAllowPromotingToCurves
bAllowResizeOutptr
bandblockcache
BandMetadataItem
BandN
BandsCount
bAnglesInPackedDMSFormat
bAnglesInPackedFormat
bApprox
bApproxOK
barycentric
BaseDataset
baseheight
BaseLayer
basename
basenames
basisu
Baston
bathymetric
Bathymetric
bathymetry
Bathymetry
baw
baz
Baz
Bazel
bbox
BBoxOrder
bc
bCatchDebug
bCopy
bDelete
bDstToSrc
bedrijven
behavior
behaviours
Belge
benchmarking
Benchmarking
Bergh
bExactMatch
Bezier
bFlag
bFloatingPointWindowValidity
bForce
bForgiving
bGCPUseOK
bidimensional
bigint
bil
bilinear
Bilinear
BILINEAR
BINDIR
binFunction
Bing
bip
bisectability
bIsVSIL
bitmask
Bitmask
bitwise
Bitwise
blackband
Blazek
blockings
blocksize
BlockSizeX
BlockSizeY
BlockWindows
blocky
bLookForCircular
bLookForNonLinear
Blosc
Blowfish
blx
bmp
bmpw
bn
bna
bNativeOrder
bnds
bNotNullable
bNullable
bo
bOnlyBest
Bonne
Bool
boolean
booleans
boto
Boto
bottomfov
boundedBy
Bourke
bourne
bOverrideEnvVars
bOwnMask
bOwnSubtransformer
bPixelIsPoint
bpw
Brashear
bRelativeToReferencePath
Bresenham
bReversed
Brezenham
Brodin
Brotli
Brovey
Brudka
Brunsli
brunslidec
brunslienc
bSingleMatch
bSingleThreadUsage
bsq
bStrict
bSuccess
bt
bTakeOwnership
btfs
bufferDataType
bufferStride
bugfix
bugfixes
buildable
buildbot
Buildbot
BuildVRT
BuildVRTOptions
bulleted
Bulleted
bumpmap
BUnits
bUnlinkAndSeize
bUpdate
burnValues
bValueIsNull
byn
bytecode
bz
cadastral
Cadastral
Cadastre
Cadcorp
calc
Calc
calloc
cancelled
capi
cardinality
Cardinality
cartesian
Carto
Cartodbifi'ed
Cascais
cass
Cassini
casted
cb
CBMTILE
CCache
ceil
celldepth
cellDepth
center
centered
centerline
Centos
CentOS
centre
Centre
centred
Centro
centroid
Centroid
centroids
centry
ceos
ceosdataset
CFB
cfitsio
CFloat
cgi
Cglobal
cgm
cgroups
chAfter
Champaign
changeAttributeValues
changeGeometryValues
changelog
changeset
charset
charsets
Chaundy
chBefore
checksums
Cheeseman
Christoph
Chroma
chrominance
chs
chSep
cid
CInt
circularstrings
ClampRequests
clang
ClassificationCode
Clayers
CleanTimeout
clearerr
cli
CLI
clib
clipdst
clipdstlayer
clipDstLayer
clipdstsql
clipDstSQL
clipdstwhere
clipDstWhere
clipsrc
clipsrclayer
clipSrcLayer
clipsrcsql
clipSrcSQL
clipsrcwhere
clipSrcWhere
closedir
Cloudant
Cloudmade
clr
cmake
Cmake
CMake
CMAKE
CMakeLists
cmd
cmt
cn
cname
cnf
codebase
codeblock
Codeblock
codec
Codec
codepage
codestream
Codestream
codestreams
Codewords
Coeff
Coefs
colname
color
coloring
colorinterp
ColorInterpretation
colorized
colormap
colormapped
colorspace
colortable
colortables
colour
colourised
columnname
columntype
commandline
Commandline
CommitTransaction
comparator
compilable
ComplexSource
compoundcurves
compressiblity
compressions
concat
conceptualhelp
cond
conda
Conda
condBand
conf
config
Config
conformant
Conformant
conformities
connectedness
const
constexpr
contextlib
contextmanager
ContourOptions
conv
Convair
conveniency
Conveniency
coord
COORD
coordinateEpoch
coordinateOperation
CoordinatePrecision
CoordX
CoordY
Corder
Corrigendum
CoverageCollection
coverages
Coverages
Coverity
cpg
CPLAssert
CPLPushErrorHandlerEx
CPLSetErrorHandlerEx
CPLUnescapeString
CPLVirtualMemGetSize
cpp
cppcheck
CPUs
CPython
Cracknell
creatable
CreateCopy
CreateFieldFromArrowSchema
createGeometry
createTopology
Crnlib
cron
crs
CRS
Crypto
cryptographic
Cryptographic
cryptopp
csharp
CSharp
csv
CSV
csvt
csy
CTable
ctest
ctor
CTS
cubicspline
CUnits
cURL
curvepolygon
CurvePolygon
curvepolygons
CurveToLine
CustNo
customize
customized
customly
cutline
cutlineDSName
cutlines
cutlineWKT
cvs
Cxx
Cygwin
dall
Damerau
dan
DanB
DanielM
danlittle
dat
DataArray
dataAxisToSRSAxisMapping
datacube
DATADIR
DataElement
datafile
dataQualityInfo
DataRecord
dataset
Dataset
datasets
Datasets
datasource
Datasource
datasources
Datasources
datastore
Datastores
datastream
datastructures
DataType
datatypes
DataValues
DataWindow
dateStamp
datetime
dateTime
Datetime
DateTime
datums
Datums
dawson
Daylon
dBASE
dbaston
dbf
dbfopen
DBit
dblbnd
dbname
dBZ
DCMAKE
de
De
deaccess
deallocate
Deallocate
deallocated
Deallocates
deallocating
deallocation
deallocator
decompressor
Decompressor
decompressors
decrementing
decrypted
deduplicate
Deegree
defacto
define'ed
degrib
dehazing
Delaunay
deletefeature
dem
DEMProcessing
DEMProcessingOptions
demtif
densification
densify
densifying
der
dereference
Dereference
dereferenced
Dereferences
dereferencing
deregister
Deregister
deregistered
derogations
des
DES
desc
describedby
deserialization
deserialize
deserialized
deserializing
dest
destructor
Destructor
destructors
Destructors
dev
DEV
devel
dfAccuracy
dfAzimuth
dfBurnValue
dfCellSizeX
dfCellSizeY
dfCenterLat
dfCstX
dfCstY
dfCurvCoeff
dfCutlineBlendDist
dfCxtX
dfDistance
dfErrorThreshold
dfGeolocX
dfGeolocY
dfInvisibleVal
dfLLX
dfMax
dfMaxAngleStepSizeDegrees
dfMaxDistance
dfMaxLength
dfMin
dfMResolution
dfMul
dfNoDataValue
dfPixErrThreshold
dfProgressBase
dfProgressScale
dfPseudoStdParallel
dfScale
dfTargetHeight
dfTimeout
dfTolerance
dfURY
dfValue
dfVisibleVal
dfXOff
dfXSize
dfYOff
dfYSize
dfZResolution
dgn
dht
di
diagcross
dialogs
differencing
dimensionality
dimensioned
dimN
DINSTALL
dir
Discoe
discretization
discretizing
disjointness
distros
distunits
divised
dll
dlopen
dlsym
dm
Dmitry
dmorissette
dnf
Dnnn
Dobias
Dockerfile
docstring
docstrings
Docstrings
Doenges
dom
domainSet
domainuser
doo
doq
doubtful
downcasting
downsampled
downsampling
downscaling
dox
doxing
Doxyfiles
Doxygen
dp
drawOrder
drv
ds
dsco
DSN
dsphere
dst
Dst
dstname
dstSRS
dstType
dt
dT
dtype
DummyBand
DUnits
dValue
dve
dvg
dwf
dwg
dx
Dx
dxf
dy
dylib
dzwarg
eAccess
earthengine
eas
easting
Easting
eastings
Eastings
eBufDataType
eBufType
Eckert
Ecologia
ecw
ecwp
eDataType
EDE
eDstType
eDT
eedaconf
eErrClass
eFieldType
eg
eGeomType
eGType
EHdr
eightbit
Elbor
ElementPath
ellps
elpaso
elseBand
emptor
Enablement
Encodings
endian
Endian
endianness
Endianness
endif
EndPoint
endptr
endTime
Ennn
enums
env
Envisat
epsg
EPSG
equalities
Equi
Equirectangular
Erdas
eRequestedInputDT
erer
eResampleAlg
Errno
erroring
errorMsg
ers
eRWFlag
eSrcType
esri
Esri
ESRI
estlayers
eSuperType
esUrl
et
ETag
eTargetType
eTileOrganization
eType
eTypeFrom
eTypeTo
EUnits
eur
eurnasia
Euromap
EvenR
evolutions
eWkbVariant
eWorkingDataType
eXchange
exe
executables
exfiltration
Exif
explodeCollections
eXploration
exponentialBase
exportToESRI
ExportToIsoWkb
ExportToIsoWkt
exportToWk
exportToWkb
ExportToWKB
exportToWkt
ExportToWKT
expr
extendbeyonddateline
ExtendBeyondDateLine
Extensibility
Extensis
ExteriorRing
ExtraQueryParameters
extrasample
Fachschema
facto
failureReason
fallbacks
fallthrough
Farah
Faunalia
favour
Faza
fazamhd
fc
fclose
FCourierOblique
fd
fdw
FeatureCollection
FeatureDefn
featureMember
featurestyle
featuretypes
feedstock
Feedstock
feof
ferror
FFFFFF
fflush
fft
fgb
fgdb
FHelvetica
fi
fid
FID
FieldDomain
fieldname
fieldName
fieldnameN
fieldnames
fieldTypeToString
FIF
filegdb
FileGDB
filemanager
filesystem
filesystems
fillnodata
FillValue
FindFile
fiona
fipszone
fixedLevels
fixup
flatbuffers
flatgeobuf
flattenTo
fld
flippmoke
floodfill
flurstueck
flushable
Fonseca
FootprintOptions
fopen
FOptions
forceNullable
forceTo
ForceTo
forceToMultiPolygon
forecolor
Foris
formatter
formatters
Fortran
fp
fpInput
fpL
fpOut
fpRaw
fpRawL
fprintf
fpSource
fputc
frac
franca
france
FrankW
Frans
fread
free'd
freetext
fRequest
frmsts
frmt
frmts
frontend
fs
fSecond
fseek
fsiz
fsspec
ftell
FTimesBold
FTimesRoman
ftruncate
ftUS
fullExtent
func
funnyline
Furieri
fusiontables
fwhm
fwrite
fx
fy
fZ
garmin
Garmin
Garrard
Gawne
GBool
GByte
gcc
gcore
gcp
GCP
gcps
GCPs
gct
gdal
GDAL
gdalabstractbandblockcache
gdaladdo
gdalalljni
gdalallregister
GDALArgDatasetValue
GDALArgDatasetValue
gdalarraybandblockcache
gdalasyncread
GDALAsyncReader
gdalattachpct
gdalautotest
gdalbarn
gdalbuildvrt
gdalcompare
gdalconst
gdaldata
GDALDataset
gdaldem
gdaldriver
GDALEDTComponent
gdalenhance
gdalframework
gdalg
gdalgmlcoverage
GDALGridDataMetricsOptions
GDALGridInverseDistanceToAPowerNearestNeighborOptions
GDALGridInverseDistanceToAPowerOptions
GDALGridLinearOptions
GDALGridMovingAverageOptions
GDALGridNearestNeighborOptions
gdalhashsetbandblockcache
gdalinfo
gdaljp
gdallocationinfo
gdalmanage
gdalmdiminfo
gdalmdimtranslate
gdalmove
gdalmultidiminfo
gdalnodatamaskband
GDALOpenInfo
gdalplugins
gdalrasterband
GDALRasterBand
gdalrasterblock
gdalrc
gdalsrsinfo
gdaltest
GDALThreadLocalDatasetCache
gdaltindex
gdaltransform
gdalvirtualmem
gdalvsi
gdalwarp
gdalwmscache
gdb
gdbtable
gdriver
gdrivers
GDT
Gelderland
Gemeente
Gรฉnรฉrale
generatePyramid
gensql
geo
geobrowsers
Geobuf
geocode
geocoded
geocoding
Geoconcept
Geodabases
geodata
geodatabase
Geodatabase
geodatabases
Geodatabases
GeodesicArea
GeodesicLength
Geogrid
geohash
geohashes
geoid
Geoid
geoidgrids
GeoJP
geojson
GeoJSON
geojsonl
geojsons
geokey
geoloc
geolocated
geolocation
Geolocation
geolocX
geolocY
Gรฉologiques
Geomatics
Geomedia
geometrycollection
geometrycolumn
GeometryElementPath
geometryProperty
GeometryType
geomfield
GeomPropertyDefn
geopackage
Geopackage
Geopackages
geopandas
GeoPandas
geoprocessing
Geoprocessing
geor
georaster
georef
Georef
georeference
Georeference
georeferenced
georeferencing
Georeferencing
georegistration
geos
GEOS
Geoserver
geoservices
Geosoft
geospatial
geostatistical
geotiff
Geotiff
geotransform
Geotransform
geotransformation
geotransforms
Geotransforms
geotransmatrix
germany
Gershon
GetCapabilities
GetCapabilitiesUrl
getCoordinateDimension
GetCoordinatePrecision
getCurveGeometry
GetCurveGeometry
GetDimension
GetFieldAsDateTime
GetFieldCount
GetFieldDefn
GetFieldSubTypeName
GetFileList
GetGeomFieldCount
GetGeomFieldDefn
GetLayerDefn
getLinearGeometry
GetLinearGeometry
GetMaximum
GetNameRef
GetNextFeature
GetNonLinearGeometriesEnabledFlag
getNumGeometries
getNumPoints
GetProjectionRef
GetSize
GetSpatialRef
getter
getters
GetTiledVirtualMem
GetTileService
GetType
GetView
GetVirtualArray
GetVirtualMem
getX
GF
gff
gfid
gfs
gfsSchemaLocation
gfw
GiB
gif
Gif
giflib
gifw
giga
Gilad
Gillingham
GInt
Girvin
GIS
gisinternals
github
gle
gltp
gmac
gmail
GmbH
gml
GML
gmlas
gmlasconf
gmlcov
gmljp
GMLJP
gmt
gmtime
gnm
gnmanalyse
GNMGenericLayer
GNMGenericNetwork
gnmmanage
Gnomonic
gnot
Gohlke
Golang
Golomb
Goode
goog
googleapis
gpkg
gpkgext
GPL
gpsbabel
gpx
gradians
Grantor
graticule
graylevel
grayscale
Grayscale
grc
grd
greenwich
grey
greyscale
Greyscale
grf
gri
grib
gridded
Gridded
gridding
Gridding
gridio
GridOptions
gridorigin
gridspacing
groupn
gsingle
gsoc
GSoC
GSpacing
gsutil
gtest
gti
gtiff
GTiff
GTO
gtrnctr
gtype
Gusev
gusevmihs
gxt
Gxxxxx
gz
gzip
GZip
gzipped
Hadoop
Haff
Halasz
hana
hardcoded
harnass
hasCurveGeometry
HasCurveGeometry
hashset
hashtable
hAttr
Hayford
hBand
hComp
hCondBand
hCT
hCutline
hdbuserstore
hdf
HDF
hdr
Hdr
hDriver
hDS
hDstDS
HDU
heatmaps
Heckbert
heic
heightfield
Heightfield
heightfields
Helmert
hElseBand
Helvetica
hFeat
hGeom
hGeomCoordPrec
hGridDataset
hGroup
HH
hiaspect
hibase
hicover
hidensity
hiduff
hieast
hielev
hifuel
hiheight
hillshade
hillshaded
hillshading
hinorth
hislope
hiwoody
hkvdataset
HMAC
HMagic
hMaskBand
hMutex
hNewSubGeom
hObject
hobu
hoc
Homebrew
homographies
Homographies
homography
Homography
Homolosine
honour
honoured
honouring
honours
hookable
hOptions
hostname
hotfix
hOther
hOtherFeature
hotine
Hotine
Hough
hOutDS
howard
HowardB
hProximityBand
hRBMutex
href
hrit
hSourceEDT
hSrcBand
hSrcDataset
hSrcDS
hST
hsv
HSV
hsv-value
hTarget
hTargetEDT
hThenBand
hThis
html
hTransformArg
http
https
Huddleston
HUnits
HV
Hydrographic
hydrographical
hydrologic
Hydrologic
Hydrological
hypercubes
hyperspectral
hypsometric
Hypsometric
hZonesDS
iAxis
iBand
iChild
iconv
Iconv
ICurve
Idan
identCode
identificationInfo
IdentificationTolerance
identificator
Identificator
IDisposable
idofic
Idrisi
iDriver
idx
idxN
ie
ieee
ifdef
ifit
ifndef
IfThenElse
ifv
igc
IGeometry
iGeomField
ignorable
igor
IIP
ij
iLayer
iLength
ili
imag
imagefile
ImageFormat
imagepyramid
imath
imd
img
impl
importFromEPSG
importFromEPSGA
importFromURN
importFromWkb
ImportFromWKB
importFromWkt
ImportFromWKT
Impots
imtem
incrementing
individualName
iNewFieldPos
InfoFormat
InfoOptions
Informatisรฉ
Informix
InfraRed
ing
ini
init
Init
initialExtent
initializer
inlined
instantiable
instantiation
integrations
integrators
intentionally
interconversion
Interferometric
Intergraph
Interlis
Intermountain
InternalRing
interoperable
interpolator
intrinsics
ints
invalidities
invdist
invdistnn
iOldFieldPos
iPoint
IPoint
IPolygon
IPR
IsArrowSchemaSupported
IsClosed
isdst
IsEmpty
IsNullable
isspace
iStartRow
iSubGeom
ISurface
itemtypes
iterable
iteratively
itf
itopen
iTXt
iVertex
IWks
iZone
Javadoc
Javascript
jdem
jdemdataset
JDEMDataset
jef
jgw
Jianjun
jjimenezshaw
jml
jni
jolma
Jong
jorgearevalo
jp
jpc
jpeg
Jpeg
jpegw
jpg
jpgw
jpip
jpipkak
jpips
jportiz
jpp
jpx
jq
jratike
js
json
Json
JSon
JSON
Jukka
JukkaR
julian
Julien
Jupyter
Jรผrgen
Ka
Kadaster
kak
kakadu
Kakadu
Kalberer
Kartoza
Kavraisky
kdu
kepts
KEYNAME
keystore
Khronos
Kiselev
Klokan
kml
KML
kmz
KOI
Kรถln
Kor
Kosovo
kOXKyILrJOgafmkODhRAQ
Krassovsky
Krovak
krs
KShortest
kslikebase
KSpread
ktx
Ku
Kubernetes
Kumar
Kuratomi
KurstS
KurtS
labelled
Labelled
Laborde
Lacroix
lanch
lanczos
Lanczos
Landcare
landsat
landuse
Lantmรคteriet
las
LatitudeType
laye
layername
lbl
lco
lcp
ld
ldd
ldem
leftfov
LegalConstraints
len
Leveller
Levenshtein
lf
libaom
libarchive
libarrow
libavif
libblosc
libbsd
libcf
libcfitsio
libcrypto
libcsf
libcurl
libCurl
libdav
libde
libdeflate
libdf
LIBDIR
libexpat
libfreexl
libgdal
libgdalutils
libgeos
libgeotiff
libgta
libhdf
libhdfs
libheif
libiconv
Libiconv
libjpeg
libjson
libjxl
libkdu
libkea
libkml
Libkml
liblerc
libltidsdk
liblz
libmdbodbc
libNCSCnet
libNCSEcw
libNCSEcwC
libNCSUtil
libnetcdf
libopencad
libOpenDRIVE
libopenexr
libopenjp
libparquet
libpng
libpodofo
libpoppler
libpq
libproj
libpython
librarified
librasterlite
libregis
libs
libspatialite
libsqlite
libssl
libtbb
libtiff
libwebp
libXML
libxz
libzstd
Lichun
lifonly
linearities
linearization
linearized
linearring
linestring
lineString
LineString
linestrings
linetype
Linetype
linetypes
lineweight
linework
linga
linters
linux
lis
listgeo
listmdd
listserv
Lizardtech
LNK
lnx
LoadFileSystemFactories
LoadLibrary
loaspect
lobase
localhost
localtime
locover
lodensity
loduff
loeast
loelev
lofuel
logarithmically
loheight
lon
LongitudeDirection
longjmp
lonorth
los
Loskot
ลoskot
loslope
losslessly
lossy
Lossy
LowerRightX
LowerRightY
lowoody
Loximuthal
lpszDriver
lpszPathOut
lrx
lry
lsb
LSB
lsbf
Lucena
Luminance
luts
lvbag
lwf
lyr
macOS
MacOS
MacOSX
magellan
magnetics
Mahamood
makefile
Makefile
makefiles
Malin
malloc
Manningham
manpage
mapbox
Mapbox
Maperitive
mapFieldType
Mapfile
mapinfo
Mapinfo
maplist
mapml
MapML
mapogr
mappable
mapsend
Mapsend
Mapsheet
mapsource
Maptech
maptools
Marek
marshaller
materialize
materialized
materializing
Mateusz
MateuszL
MateuzL
MaxConnections
maxdist
maxdistance
maxheight
maximising
MaximumLong
maxlat
maxlon
maxOccurs
MaxSize
maxwidth
maxx
maxX
MaxX
MaxX
maxy
maxY
MaxY
maxz
MaxZ
mbtiles
mbtowc
MBytes
mcs
md
mdb
mdbtools
mdd
mdim
megt
Melero
mem
Mem
memcpy
memcpy'ed
mempreload
mercator
metadataConstraints
metatiles
Meteosat
methadata
metre
metres
Miara
MiB
Microstation
mif
MikeS
millimetric
mimetype
miniconda
Miniconda
minidriver
Minidriver
minidrivers
Minidrivers
Miniรจres
Miniforge
minilanguage
minimalistic
minimising
Minio
minixml
minlat
minlon
minsize
minX
miny
minY
MinY
minz
MinZ
Mipmaps
MiraD
miramon
mis
mitab
mkdir
mktime
mloskot
mmap
mmm
mnt
moaw
mocomp
modeKnown
modelisation
modelled
modelling
Modernization
modis
MOLA
Mollweide
Mongo
MONGOCXX
mongocxxv
MongoDB
monoblock
Monospace
Morissette
mosaiced
mosaicing
Mosaicing
mpi
mpiexec
mpp
mpx
mremap
MResolution
mrsid
MSB
msbf
msbuild
mscale
msg
msi
msk
msmitherdc
mssql
mssqlspatial
MSVC
msys
MSys
mtime
mtimeKnown
mul
multiband
multibeam
multibyte
multicurve
Multidimension
MultiDimInfo
MultiDimInfoOptions
MultiDimTranslate
MultiDimTranslateOptions
multidirectional
multiDirectional
Multidirectional
multiline
multilines
multilinestring
multilinestrings
Multipage
multipart
multipatch
Multiplatform
multipoint
Multipoint
multipoints
multipolygon
MultiPolygon
multipolygons
multiproc
multiprocess
multireadtest
multirecords
multiscales
multispectral
multistring
multisurface
MultiSurface
multisurfaces
Multitenant
multithread
multithreaded
multithreading
Multithreading
mundialis
muparser
Mutatie
mutex
Mutex
mutexes
Mutexes
mvt
mW
mybucket
mydb
myfeature
myFeature
myfile
myOptions
mysoft
mysql
mะพdelling
Nadeau
nadgrids
nAlignment
namespace
namespaced
namespaces
Namespaces
namespacing
nan
NaN
nanometer
nArgc
nArray
nArrays
NAS
nat
nativeData
natively
nativeMediaType
nBand
nBandCount
nBandId
nBands
nBandSpace
nBitCount
nBlocksPerColumn
nBlocksPerRow
nBlockXOff
nBlockXSize
nBlockYOff
nBlockYSize
nBuckets
nBufferSize
nBufXSize
nBufYSize
nBytes
nc
nChar
nChunkCount
nCoordDimension
nCoordinateDimension
nCount
nd
ndarray
nDataLength
nDataRead
ndBeyondDateLine
nDestSize
ndims
nDstAlphaBand
nDstBufferAllocSize
nDstOff
nDstOffset
nDstStep
nDstXOff
nDstXSize
nDstYOff
nDstYSize
nearblack
Nearblack
NearblackOptions
neatline
Neatline
neatlines
neighbors
neighbour
neighbourhood
neighbouring
neighbours
nEndVertex
nEntryCount
netBSD
netcdf
netCDF
netcore
Netpbm
netrc
networklink
newaxis
newcolumnname
newPath
nextgis
NextGIS
nFacets
nFID
nFieldIdx
nFirstLineToDelete
nFlagRasterVector
nFlagsGGT
nFlagsIn
nGCPCount
nghttp
NGW
nillable
nImgOffset
nInBands
nIndex
nIndex'th
nInputSpectralBands
nInsertAtLineNo
nitf
nLen
nLength
Nline
nLineOffset
nLines
nLineSpace
nln
nlt
nm
nmake
NMake
nMarker
nMaskFlagStop
nMaxChunkMemory
nMaxFiles
nMaxLen
nmea
nMinimumMatchConfidence
nMode
nMStride
nMTime
nn
nNewSize
nNumToRemove
NOAA
NoData
Nodata
noData
nodata
NODATA
NoDataFromMaskSource
NoDataValue
noded
nOffset
noindex
nolock
nologging
nomask
nomd
noNativeData
nOpenFlags
nOptions
norbit
normalized
normanb
NormanB
northing
Northing
northings
Northings
northup
Northwood
notnull
Noureddine
nOutAvailableBytes
nov
nOverviews
nows
np
nPartIdsCount
Npix
nPixelOffset
nPixels
nPixelSpace
nPointCount
nPolygonCount
npos
nptr
nQuadSegs
nr
nRanges
nRecurseDepth
nRefCount
nReqOrder
nSampleStep
nScopeFlags
nSecond
nSize
nSrcBufferAllocSize
nSrcOffset
nSrcStep
nSrcXOff
nSrcXSize
nSrcYExtraSize
nSrcYOff
nSrcYSize
nStartVertex
nStepCount
ntf
ntfdump
ntffilereader
n'th
nTilesCount
nTilesPerCol
nTilesPerRow
nTileXSize
nTileYSize
NTv
nul
NUL
nullability
nullable
Nullable
NullFID
nullptr
num
numaspects
numbase
numbins
Numbins
numcover
numdensity
numduff
numeast
numelev
numfuel
numheight
NumInteriorRings
Nummeraanduiding
numnorth
numpy
Numpy
NumPy
numslope
numwoodies
nUpdatedFieldsCount
nUpdatedGeomFieldsCount
nURLCount
nv
nValidateFlags
nVersionMajor
nVersionMinor
nw
nWordSize
nXOff
nXSize
nXStride
NXXEYYY
nyall
nYOff
nYSize
nYStride
nz
nZStride
OAMS
oauth
OAuth
objdir
objectclasses
OBJECTID
objektkoordinaten
observability
oci
OCI
odbc
odbcinst
Odbcinst
ods
ODsCEmulatedTransactions
ODsCTransactions
OFB
OfflineMode
ofs
OFSTBoolean
OFSTFloat
OFSTInt
OFSTNone
og
ogc
OGC
ogcwkt
ogr
OGR
ogrct
ogrdatasource
ogrfeature
OGRFeature
OGRFeatureDefn
ogrfeaturequery
ogrinfo
ogrlayer
ogrlineref
ogrmerge
ogrocidrivercore
ogrpoint
OGRRawPoint
ogrsf
ogrspatialreference
ogrtindex
ogrutils
ogrvrt
OGRVRTDataSource
OGRWFSDataSource
ok
oldcolumnname
Oleg
oMapFieldDomains
oMDMD
OMI
onboarding
oo
OOI
opendir
openexr
openfilegdb
opengis
openjpeg
OpenJPEG
openlayers
Operationen
opj
optfile
optfiles
optimise
optimized
Optionality
orderByFields
or'ed
Organisation
organisationName
organization
ORing
ortho
Ortho
orthocorrection
orthorectification
Orthorectified
orthorectifying
os
osAfter
osBefore
osgeo
osGridOptions
osm
osName
osr
oss
OSS
osStartingPath
osStr
Ostend
OSX
ot
otherConstraints
otherfeature
otherFeature
othersystems
outdb
outDB
outptr
outputBounds
outputer
outputSchema
outString
Oversample
OverviewCount
ovf
ovr
ozi
pabSuccess
pabyData
pabyDstData
pabyHeader
pabyM
pabySrcData
pabyValue
pabyWKB
pabyX
pabyY
pabyZ
padfCoeff
padfDstNoDataImag
padfDstNoDataReal
padfGeoTransformOut
padfGT
padfH
padfLayerBurnValues
padfM
padfPrjParams
padfSrcNoDataImag
padfSrcNoDataReal
padfTransform
padfX
padfY
padfZ
paeSupportedInputDT
pafScanline
pahGeometries
pahInputSpectralBands
pahLayers
pahSrcDS
paletted
Paletted
pam
panBandList
panBandMap
pand
panDstBands
panErrorCodes
panHistogram
panMap
panOffsets
panOutputFacetIdx
panPermutation
pansharpen
pansharpend
pansharpened
Pansharpened
pansharpening
panSizes
panSrcBands
panSupportedInputBandCount
panUnifiedSrcValid
paoPointsIn
papabyDstImage
papabySrcimage
papabySrcImage
papanBandSrcValid
papanUnitifiedSrcValid
papoBlocks
papoGeometries
papoGeomFieldDefn
papoPolygons
papszDirFiles
papszFields
papszFileList
papszInfo
papszLayerList
papszMetadata
papszOpenOptions
papszOption
papszOptions
papszOverride
papszSiblingFiles
papszSrcDSNames
papszStrList
papszURL
papszVectorTranslateArguments
papszWarpOptions
parallelisation
parallelising
Parallelization
parallelize
parallelized
param
parameterisation
parametrized
params
parentIndex
parsable
parseable
Parseable
parsers
Parsers
partitioning
pasGCPList
pasMimePart
Pasotti
passthrough
pathname
PAux
pauxdataset
pbCannotBeExactlyRepresented
pbError
pbf
pbHasNoData
pbHasNoDataValue
pbNonSequentialUploadSupported
pbNorth
pBuf
pBuffer
pc
pca
pCbkUserData
pcre
pData
pdf
pdfDataPct
pdfium
PDFium
pdfSrcFillRatio
pdfSrcXExtraSize
pdfSrcYExtraSize
pdftoppm
pds
PDS
pDstBuffer
pDstBufferAllocStart
pel
perefix
performant
perl
Petr
pFct
pfnCachePage
pfnClearCaches
pfnCopy
pfnCopyFiles
pfnCreate
pfnCreateCopy
pfnCreateMultiDimensional
pfnDelete
pfnFreeUserData
pfnFunc
pfnIdentify
pfnInit
pfnOpen
pfnProcess
pfnProgress
pfnRename
pfnTransform
pfnTransformer
pfnUnCachePage
pfnUnloadDriver
pfSecond
pFunc
pgdump
pgeo
PGeo
pggeometry
pgm
pgr
pgRouting
pgsql
pgw
phGeometry
phLockFileHandle
Photogrammetric
photometric
photooverlay
Photoshop
pigz
pImage
pInBuffer
Pirmin
pixelfunction
pixelfunctions
pixelsize
pixi
Pixi
Pixmap
pkgconfig
pkid
Placemark
plaintext
planView
Plessis
plmosaic
plscenes
plscenesconf
pM
pnBufferSize
pnCount
pnCountOutputArrays
PND
pnEntries
pnEntryCount
png
Png
pngdataset
pngw
pnLines
pnLineSpace
pnOutBands
pnOutSize
pnPixels
pnPixelSpace
pnSecond
pnSize
pnSrcXOff
pnSrcXSize
pnSrcYOff
pnSrcYSize
pnt
pnXSize
pnYSize
poCRS
podaac
Podman
podofo
PoDoFo
poDS
poFeature
poFeatureDefn
poFieldDefn
poFilterGeom
poGCP
poGeom
poGeomFieldDefn
PointFromColumns
PointOnSurface
polarimetric
Polarimetric
polarizations
poLayer
Polyconic
Polyface
polygonization
polygonize
Polygonize
polygonized
Polygonizes
polylayer
polyline
Polyline
polylines
poMask
ponctual
poOpenInfo
poOtherGeom
poppler
Poppler
poRootGroup
pos
positionName
posix
Posix
posList
poSR
poSrcDS
poSrcFDefn
poSrcFeature
poSRS
Postel
postfix
postfixes
PostGIS
Postgres
Postgresql
poTargetSRS
pOutBuffer
ppabyRet
ppabyWKB
ppadfOutNoData
ppadfPrjParams
ppanHistogram
ppanMatchConfidence
ppapszKeyValues
ppapszRetStrings
ppBuffer
ppd
ppData
ppoBelongingLayer
ppoReturn
pppppppppppp
pProgressArg
ppszAreaName
ppszData
ppszDetailedFormat
ppszDstText
ppszFailureReason
ppszGridMappingName
ppszKey
ppszMethodAuthName
ppszMethodCode
ppszName
ppszOutputPayload
ppszProj
ppszRawXML
ppszResult
ppszUnits
ppWorkingData
pre
Pre
pread
prebuild
prebuilt
precisions
precompiled
precompute
predefine
predelete
prefetch
preinstalled
preload
premultiplication
premultiplied
Prepar
preparse
prepended
prepending
preprocessing
prescanning
preserveFID
pRet
prf
printf
Printf
priorly
Priorly
priv
Prizren
prj
processings
processStep
ProcessStep
profiler
programmatically
Programmatically
programme
proj
PROJ
projectionCheck
projinfo
projjson
projwin
projWin
PropertyDefn
Provincie
proximities
proxyauth
proxyuserpwd
ps
psBlockInfo
psChild
psDT
psEnvelope
pseudocolor
pseudocolored
pseudocolour
pseudocoloured
psExtent
psExtraArg
psField
psGCP
psNewOptions
psNewSibling
psNext
psOlderSibling
psOlderSiblings
psOptions
psOptionsIn
psOwnedTransformerArg
psql
pSrcBuffer
pSrcBufferAllocStart
psResult
psRoot
psv
pszAccess
pszAngularUnits
pszBase
pszBaseDir
pszBaseFile
pszBaseFilename
pszBuffer
pszDatasource
pszDefault
pszDest
pszDestDataset
pszDestFilename
pszDomain
pszDstFilename
pszElement
pszExt
pszFile
pszFilename
pszFileName
pszFormat
pszFormatName
pszId
pszInfo
pszInputFilename
pszInputPayload
pszKey
pszLayerName
pszName
pszNativeData
pszNativeMediaType
pszNewFilename
pszNewName
pszNewString
pszOldFilename
pszPath
pszPreferredAuthority
pszPrefix
pszProj
pszReferencePath
pszRequest
pszSource
pszSrc
pszSrcFilename
pszStr
pszString
pszTarget
pszTargetKey
pszTmpFieldValue
pszValue
pszXMLMetadata
ptr
pTransformerArg
pTranslationTable
pugixml
Pulkovo
PUnits
pUserData
PushFinderLocation
px
pX
py
pY
Py
pyarrow
pymod
pyogrio
pypi
pyproj
pyproject
pytest
Pytest
Pythonic
pythonX
pZ
qGIS
qgis
qix
qlr
qml
qtcreator
quadkey
Quadrilateralized
quadtree
quantile
Quantile
quantizeCoordinates
quantized
Quantized
quartile
queryable
Radarsat
Radim
Rahkonen
rangeSet
rangeType
rar
rasterband
Rasterband
rasterbands
rasterio
rasterization
rasterize
Rasterize
rasterized
RasterizeOptions
rasterizes
rasterizing
rasterlite
Rasterlite
rasterlitedb
rasters
Rasters
rasterXSize
rasterYSize
ratvalues
RawData
Rawlinson
rb
rbz
rc
rdb
rdblib
RDBMS
rdc
rdensty
ReadAsArray
ReadCompressedData
readdir
ReadDir
ReadRaster
RealList
realloc
rebased
Recherches
recode
Recode
recoded
recoding
recognise
recognised
recognising
recompressing
recompression
recomputation
recordbatch
RecordBatch
RecordBatchAsNumpy
recurse
recursionLevel
redirections
Redistributable
reentrancy
reentrant
ReferenceSystem
referenceSystemIdentifier
referenceSystemInfo
referer
Referer
reflectance
reflectances
refSysID
refSysInfo
RefSystem
Regione
reimplemented
Reiner
reinvoked
Relatedly
relativeToVRT
relativizing
relaxedFieldNameMatch
relink
RemoveM
renderer
replayable
repo
reportings
reportSrcColumn
representable
reproducibility
reproject
Reproject
reprojected
Reprojected
reprojecting
Reprojecting
reprojection
Reprojection
reprojections
reprojects
repurpose
resample
Resample
RESAMPLE
resampled
resampler
resampling
Resampling
rescale
Rescale
rescaling
rescanning
ResetReading
ResponsibleParty
restartable
RestrictionCode
reStructuredText
resultset
Resurs
resx
resy
retile
retiling
RetrieveNumericColumnsAsDouble
rewrap
rewrapped
rfc
rgb
RGB
rgba
RGBA
rgdal
rgx
RHEL
riegl
rightfov
Rijndael
RIXmLbLbiagYnUd
rl
RLE
RMagic
rmdir
RMin
RMinSize
rn
ro
roadmap
roff
RollbackTransaction
Ronnen
rorient
rouault
roundCoordinates
roundoff
roundtrip
roundtripping
Roundtripping
rowid
rowset
rpath
rpc
RPF
rpr
RRaster
rrd
rsc
rsiz
rst
rsync
RTD
rteptid
rtree
RTree
ru
Ruland
runtime
Runtime
rvalue
rw
Rweight
salestax
samplelib
Sandia
sar
sbn
sbx
scalability
scalable
Scalable
scaleaxes
scanf
scanline
scanlines
ScanSAR
scenProc
schemaLocation
schemas
Schemas
Schreiber
schwehr
sd
sdat
sdk
SDK
sdo
se
sean
SeanG
SecurityConstraints
seg
SEG
segmentization
segmentize
sel
Selafin
selectable
semimajor
semiminor
Semykin
sep
sequenceRule
Seraphin
serializable
Serializer
serverless
ServerUrl
setAccessControl
setAccessControlRecursive
setargv
SetAxisMappingStrategy
setCoordinateDimension
setfeature
SetFeature
SetFieldAsDateTime
SetFrom
setlocale
setMeasured
SetNonLinearGeometriesEnabledFlag
setPoint
setProperties
sg
sgillies
sgrd
SHA
SHACAL
shapefil
shapefile
Shapefile
shapefiles
Shapefiles
shapelib
Shapelib
sharded
shortname
shortnames
shp
shpopen
shptree
shx
shz
si
sig
Sightlines
signedness
Simmon
Simularia
sinc
sizeBytes
sizeKnown
sizeof
SizeX
SizeY
skipfailures
SKIPJACK
sl
slc
smallint
SMax
SMean
SMin
smp
snprintf
soConnLayerName
Softchart
Solaris
Soldner
somearray
sooon
sosi
soSrcLayerName
soTgtLayerName
Soule
Sourcepole
southing
sozip
SOZip
sp
spacings
Spack
Sparc
spatFilter
spatialite
Spatialite
SpatiaLite
spatialref
SpatialReference
spatialys
Spatialys
spatio
Spatio
spc
specialised
specificities
SpectralBand
spf
sprintf
sprintfs
spx
sql
sqlite
sqlspecials
sqrt
sr
src
Src
SRC
srcfile
srcmaskband
srcnodata
srcwin
sRGB
srs
SRS
srsDimension
srsName
sscanf
sss
sta
Stacktraces
Standaard
Startig
StartPoint
startTime
StartTransaction
stat'ed
stateful
stderr
stdev
stdin
stdout
stealInteriorRing
Steinberg
stepsize
stereographic
Stereographic
Stigter
sto
storageCRS
storageV
str
strcasecmp
strdup
streamable
strezen
strftime
stricty
strile
stringlist
Stripmap
strlcat
strlcpy
strlen
strncasecmp
strncat
strncpy
strout
strstr
strtod
strtof
Struct
StructArray
Struve
styleurl
styleurls
su
subalgorithm
subalgorithms
subarcs
subarray
subbottom
subClass
subclassed
Subclassed
subclasses
Subclasses
subcommand
subcommands
subdataset
Subdataset
subdatasets
Subdatasets
subdirectories
subdirectory
Subdirectory
subdocument
subelement
subelements
Subexpressions
subfield
subfields
subfile
subfiles
subfolders
subgeometries
subgeometry
subheader
sublicense
subline
sublines
submodules
Submodules
subnode
subnodes
suboptimal
subpackages
subpaths
subportion
subprocess
subprocesses
subregion
subregions
subsample
Subsample
subsampled
subsampling
subsecond
subsetted
subsetting
Subsetting
subsettings
substitutable
substring
subsubgroup
subtiles
subtree
subtype
Subtype
subtypes
Subtypes
subunits
subwindow
sudo
summarization
SUnits
supercompressed
supercomputing
supergrid
supergrids
Superoverlay
supportsPagination
sv
svn
swe
swedish
swi
Swif
swiftclient
swq
sxf
sym
symlinked
syntaxes
sys
sysconfdir
Szekeres
szekerest
Szekerest
szlib
szName
szTempBuffer
tablename
Tamas
TamasS
tangency
targetCoordinateSystem
TargetName
te
teardown
tehre
Teigha
tem
templated
Terragen
testblockcache
testblockcachelimits
testcondition
testcopywords
testCreate
tfw
tgt
tgz
th
thebuffer
thenBand
thescale
thf
THH
Thorne
threadsafe
threadsafety
thresholding
tiepoint
tiepoints
tif
tiffmedian
tiffw
tifw
tigerpoly
Tike
TileByteCounts
TileCountX
TileCountY
tiledb
TiledGroupName
tiledriver
tileindex
TileIndex
tileindexed
TileIndexOptions
TileLevel
TileM
tilematrix
TileMatrix
tilematrixset
TileMatrixSet
tilename
TileOffset
TileOffsets
tileset
Tileset
tilesets
Tilesets
tilesize
tilex
TileX
tiley
TileY
tim
timePosition
timesheet
timezones
Timiศoara
TinZ
tippecanoe
tm
tmerc
tms
tmscompatible
TNS
toc
TOC
Tokenize
tokenizer
Tokenizes
tokenizing
tolower
toml
Toolchain
toolchain
toolchains
toolkits
toolset
topfov
topleft
toplevel
Topo
TopoGrid
topojson
topologies
tos
Toscana
Toshio
toupper
towgs
tpk
tpkx
tps
trac
Trac
transactional
Transactional
transcode
transcoded
transcoding
TranslateOptions
travis
tre
TRE
triaging
trigonometic
trksegid
trksegptid
ttyS
Tunesia
tunings
Turton
Twofish
twopasses
txt
TXT
typedefs
typeless
typemaps
typename
typenames
typestr
tz
ubyte
UByte
ucs
UCS
uDefault
uint
Uint
UInt
ULink
ullr
ulx
uly
umask
un
unallocated
unary
uncached
uncalibrated
unclamped
unclosed
uncoded
uncomment
Uncompress
uncompressing
undirected
Undirected
unencrypted
unescape
Unescape
unescaped
ungeoreference
ungeoreferenced
ungridded
unicode
uninvertable
unioned
unistd
unitconvert
unix
unixodbc
unixODBC
unlabelled
unlink
Unlink
unlogged
Unlogged
unmanaged
unmapped
unoptimized
unrecognised
unreferenced
unregister
Unregister
unregistration
unsafessl
UnsafeSSL
unscale
unscaled
Unscaled
unsetDefault
unsetFid
unsetnodata
unsetting
untiled
untransformable
untrusted
updatable
updateable
UpdateFeature
updateTime
UpperLeftX
UpperLeftY
upsampling
upsert
uri
url
Url
usb
useConstraints
UseMaskBand
useragent
UserAgent
userfaultfd
userid
Userid
userNote
USERPROFILE
UserPwd
usgsdemdataset
ushort
usr
utf
UTF
utils
utm
utmsmall
va
Vaisala
valgrind
Valgrind
Validify
valN
valonly
valueN
vapour
Vapour
varchar
variadic
vasprintf
Vax
vc
vcpkg
vct
vcvars
vdc
vdv
VectorInfo
VectorInfoOptions
vectorization
vectorized
VectorTranslate
VectorTranslateOptions
Vectorworks
vendored
vendorized
ver
Ver
VerifyAdviseRead
vetoers
vetos
Vexcel
vfk
vfs
Viersen
viewshed
Viewshed
Viewsheds
virtualenv
virtualized
virtualmem
visualisation
vmaplv
vnd
voxel
vrf
vrt
VRT
VRTDataset
VRTDerivedRasterBand
VRTPansharpenedDataset
VRTWarpedDataset
vsgis
vsi
vsiadls
vsiaz
vsicached
vsicrypt
vsicurl
VSIFile
VSIFOpen
vsigs
vsigz
vsigzip
vsihdfs
vsil
vsimem
vsioss
vsipmtiles
vsiPREFIX
vsirar
vsis
vsisparse
vsistdin
vsistdout
vsisubfile
vsiswift
vsitar
VSIVirtualHandle
vsiwebhdfs
vsiXXX
vsizip
vsnprintf
vsprintf
vv
VV
vXYR
Wallner
warmerda
warmerdam
warper
Warper
warpers
WarpOptions
WAsP
watrcrsl
Waupotitsch
waypoints
Waypoints
wb
wchar
wcs
wctomb
wday
webHdfs
webmercator
WebP
WEBP
webviewer
weighted_frac
weighted_stdev
wellformedness
Westervelt
westing
wfopen
wfs
wgrib
wgs
WGS
whileUnsealing
whitepoint
whitespace
whitespaces
wildland
Winkel
wkb
WKB
wkbCircularString
wkbCompoundCurve
wkbCurve
wkbCurvePolygon
wkbFlatten
wkbGeometryCollection
wkbHasZ
wkbLineString
wkbLineStrings
wkbMulti
wkbMultiCurve
wkbMultiLineString
wkbMultiPoint
wkbMultiPolygon
wkbMultiSurface
wkbNDR
wkbNone
wkbPoint
wkbPoints
wkbPolygon
wkbPolygons
wkbPolyhedralSurface
wkbSetZ
WkbSize
wkbSurface
wkbTIN
wkbTINZ
wkbTriangle
wkbUnknown
wkbVariant
wkbVariantIso
wkbVariantOgc
wkbVariantOldOgc
wkbVariantPostGIS
wkbXDR
wkbXXXXX
wkbZ
wkbzm
wkt
WKT
wld
wm
wms
WMS
WOptions
workarounded
worldfile
worldfiles
WriteArray
WriteArrowBatch
www
Wx
xA
XArray
xblock
xCF
xD
xDF
xE
Xenial
Xerces
XercesC
xF
xFC
xFF
xfs
xlink
xlinks
xlsx
xm
xmax
xmin
xml
xmlns
XMP
xn
xN
xoff
xOff
XOR'ed
Xp
xpath
XPath
XPATH
XPaths
xpdf
XPlane
XRef
xres
XResol
xs
xsd
xsi
xsize
XSize
XTEA
xtf
xxxx
XXXX
xxxxx
XXXXX
xxxxxx
xy
XYM
xyscale
xyXY
xyY
xyz
XYZ
yacc
yblock
YCbCr
yday
Yesson
yj
yk
ym
ymax
ymin
yml
yoff
yOff
YOrigin
Yp
YRef
yres
YResol
ysize
YSize
yyyy
YYYY
yyyyddmm
YYYYMMDDHHmmSSOHH'mm
YYYYY
Zarr
zarray
zer
ZeroBlockHttpCodes
ZeroBlockOnServerException
Zevenbergen
zFactors
zlib
Zlib
ZLib
ZMap
zmax
zmetadata
zmin
ZoomLevel
zres
ZResolution
zscale
zstd
Zstd
ZStd
Zuid
Zwarg
ZZ
---
### Doc Source Substitutions (`doc/source/substitutions.rst`)
.. |PDAL| replace:: `PDAL <https://pdal.io/>`__
.. |Proj.4| replace:: `PROJ <https://proj.org>`__
.. |PROJ| replace:: `PROJ <http://proj.org>`__
.. |GeoTIFF| replace:: `GeoTIFF <https://trac.osgeo.org/geotiff/>`__
.. |QGIS| replace:: `QGIS <http://qgis.org>`__
.. |GDAL| replace:: `GDAL <https://gdal.org/>`__
.. |JSON| replace:: `JSON <https://en.wikipedia.org/wiki/JSON>`__
.. |XML| replace:: `XML <https://en.wikipedia.org/wiki/XML>`__
.. |jq| replace:: `jq <https://jqlang.org/>`__
.. |CSV| replace:: `CSV <https://en.wikipedia.org/wiki/Comma-separated_values>`__
.. |NumPy| replace:: `NumPy <http://www.numpy.org/>`__
.. |Bash| replace:: `Bash <https://en.wikipedia.org/wiki/Bash_(Unix_shell)>`__
.. |Python| replace:: `Python <https://python.org/>`__
.. |Docker| replace:: `Docker <https://www.docker.com/>`__
.. |gdal-dev| replace:: `gdal-dev <https://lists.osgeo.org/mailman/listinfo/gdal-dev>`__
.. |OSGeo/gdal| replace:: `OSGeo/gdal <https://github.com/OSGeo/gdal>`__
.. |OGC| replace:: `OGC <https://www.ogc.org/>`__
.. |Sphinx| replace:: `Sphinx <https://www.sphinx-doc.org/>`__
.. |sphinx-autobuild| replace:: `sphinx-autobuild <https://pypi.org/project/sphinx-autobuild/>`__
.. |about-config-options| replace:: :ref:`Configuration options <configoptions>` can be specified in command-line tools using the syntax ``--config <NAME>=<VALUE>`` or using functions such as :cpp:func:`CPLSetConfigOption` (C) or :py:func:`gdal.config_options<osgeo.gdal.config_options>` (Python).
.. |about-open-options| replace:: Open options can be specified in command-line tools using the syntax ``-oo <NAME>=<VALUE>`` or by providing the appropriate arguments to :cpp:func:`GDALOpenEx` (C) or :py:meth:`gdal.OpenEx<osgeo.gdal.OpenEx>` (Python).
.. |about-creation-options| replace:: Creation options can be specified in command-line tools using the syntax ``-co <NAME>=<VALUE>`` or by providing the appropriate arguments to :cpp:func:`GDALCreate` (C) or :py:meth:`Driver.Create<osgeo.gdal.Driver.Create>` (Python).
.. |about-dataset-creation-options| replace:: Dataset creation options can be specified in command-line tools using the syntax ``-dsco <NAME>=<VALUE>`` or by providing the appropriate arguments to :cpp:func:`GDALCreate` (C) or :py:meth:`Driver.Create<osgeo.gdal.Driver.Create>` (Python).
.. |about-layer-creation-options| replace:: Layer creation options can be specified in command-line tools using the syntax ``-lco <NAME>=<VALUE>`` or by providing the appropriate arguments to :cpp:func:`GDALDatasetCreateLayer` (C) or :py:meth:`Dataset.CreateLayer<osgeo.gdal.Dataset.CreateLayer>` (Python).
---
### Doc Source Thanks (`doc/source/thanks.rst`)
.. _thanks:
================================================================================
Thanks
================================================================================
As of 2024, GDAL has now a 26 year-long existence, and many individuals, companies,
and :ref:`sponsors` have contributed to its development and success.
While it is always difficult to properly acknowledge all contributions, a few
individuals particularly stand out:
- `Frank Warmerdam <https://github.com/warmerdam>`__, creator of GDAL, initial chair of its Project Steering Committee
(PSC) and maintainer from 1998 to 2012, founding member of OSGeo, and currently
Principal Engineer at Planet.
GDAL would not be what is is without his outstanding work. Support for GeoTIFF,
JPEG, PNG, VRT, Shapefile, CSV, PostGIS and dozens of other popular (or niche)
formats, as well as gdal_translate, gdalwarp, ogr2ogr and most other utilities
are all to be credited to Frank.
- `Howard Butler <https://github.com/hobu>`__, director of Hobu Inc., active on GDAL since 2004, contributor to
the Python SWIG bindings, PSC member, founding member of OSGeo.
Howard was the coordinator of the fundraising that lead to the advent of
GDAL 3 and PROJ 6, and since 2021, he has been instrumental in setting up the
GDAL Sponsorship Program and serves as its head, liaising with our sponsors
and NumFOCUS, and hosting GDAL contributor monthly meetings.
- `Jukka Rahkonen <https://github.com/jratike80>`__, Chief IT Specialist at the National Land Survey of Finland,
power-user and long-time passionate of GDAL, PSC member.
Over the last 15 years, Jukka has been tirelessly helping users and triaging
reports on the issue tracker and other support forums.
- `Even Rouault <https://github.com/rouault>`__, involved since 2007, main maintainer since 2014, current PSC chair,
director of Spatialys.
Even has authored dozens of drivers (and happy to have managed to retire
a few of them!) and many enhancements. He has also been involved in code
modernization, extension of the regression test suite, continuous integration
and security efforts.
Among `code contributors <https://github.com/OSGeo/gdal/graphs/contributors>`__,
we want to acknowledge the key, past or current, documentation or code contributions
of the following persons:
- `Ben Ahmed Daho Ali <https://github.com/allilou>`__: SXF driver
- `Jorge Arevalo <https://github.com/jorgeas80>`__: PostGIS Raster driver
- `Dan Baston <https://github.com/dbaston>`__: modernization of the Python test suite and Python bindings.
- `Norman Barker <https://github.com/normanb>`__: JPIPKAK and TileDB drivers, PSC member.
- `Dmitry Baryshnikov <https://github.com/bishopgis>`__: SXF and CAD drivers and the GNM component.
- `Andrew Bell <https://github.com/abellgithub>`__: gdal_viewshed enhancements.
- `Pete Bunting <https://github.com/petebunting>`__: KEA driver.
- `Ragi Yaser Burhum <https://github.com/rburhum>`__: FileGDB driver.
- Brian Case: LIBKML driver.
- `Victor Chernetsky <https://github.com/vchernetsky>`__: AmigoCloud driver.
- Benjamin Collins: SWIG Java bindings.
- Christopher Condit: OGR to KML conversion.
- `Nyall Dawson <https://github.com/nyalldawson>`__: GeoPackage, OpenFileGDB, ODBC/PGeo and OGR core enhancements. Past co-maintainer.
- `Jรผrgen Fischer <https://github.com/jef-n/>`__: NAS driver.
- `Alessandro Furieri <https://www.gaia-gis.it/gaia-sins>`__: Spatialite support in SQLite driver, enhancements in GML driver.
- `Andrea Giudiceandrea <https://github.com/agiudiceandrea>`__: documentation fixes
- `Ari Jolma <https://github.com/ajolma>`__: Author of (ex) SWIG Perl bindings.
- `Trent Hare <https://github.com/thareusgs>`__: PDS, ISIS2 and ISIS3 drivers.
- `Bjรถrn Harrtell <https://github.com/bjornharrtell>`__: FlatGeoBuf driver.
- `Thomas Hirsch <https://github.com/relet>`__: SOSI driver.
- Franรงois Hissel: Selafin driver.
- `Pirmin Kalberer <https://github.com/pka>`__: Interlis drivers.
- `Andrey Kiselev <https://github.com/dron>`__: BMP, HDF4, HDF5, L1B, MrSID and RMF support, gdal_grid, past PSC member.
- `Dan Jacobson <https://github.com/jidanni>`__: documentation enhancements.
- `Kor de Jong <https://github.com/kordejong>`__: PCRaster driver.
- `Peter A. Jonsson <https://github.com/pjonsson>`__: Docker scripts enhancements.
- Chaitanya Kumar CH: past GDAL maintainer.
- `Martin Lambers <https://github.com/marlam>`__: GTA driver.
- `Martin Landa <https://github.com/landam>`__: VFK driver.
- `Kikitte Lee <https://github.com/kikitte>`__: Two-Arm chains edge tracing algorithm of gdal_polygonize.
- `Alexandr Lisovenko <https://github.com/alisovenko>`__: SXF driver
- `Mateusz ลoskot <https://github.com/mloskot>`__: GeoJSON driver, (ex) Windows CE support, past GDAL maintainer.
- `Ivan Lucena <https://github.com/IvanLucena>`__: Idrisi, Intergraph and Oracle drivers, (ex) Windows build scripts.
- `Hugo Mercier <https://github.com/mhugo>`__: marching square algorithm of gdal_contour
- `Idan Miara <https://github.com/idanmiara>`__: gdal-utils Python package.
- `Martin Mikita <https://github.com/martinmikita>`__: PDFium backend of the PDF driver.
- `Hiroshi Miura <https://github.com/miurahr>`__: Initial CMake build system.
- `Vincent Mora <https://github.com/vmora>`__: WAsP driver
- `Daniel Morissette <https://github.com/dmorissette>`__: CPL library, MapInfo .mif/.tab and Arc/Info vector coverage (AVC) support, PSC member.
- Denis Nadeau: netCDF support.
- `Markus Neteler <https://github.com/neteler>`__: various contributions to GDAL documentation
- Adam Nowacki: WMS driver.
- Jens Oberender: KML driver.
- `Alessandro Pasotti <https://github.com/elpaso>`__: co-maintainer since 2022.
- `Kai Pastor <https://github.com/dg0yt>`__: contributions to the CMake build system.
- `Abel Pau <https://github.com/AbelPau>`__: MiraMon driver.
- `Matthew Perry <https://github.com/perrygeo>`__: gdaldem
- Mark Phillips: TIGER driver.
- `Lucian Plesea <https://github.com/lucianpls>`__: ESRIC and MRF drivers.
- `Petr Pridal <https://github.com/klokan>`__: gdal2tiles utility.
- `Paul Ramsey <https://github.com/pramsey>`__: GeoPackage and FileGDB drivers.
- Bas Retsios: MSG driver.
- Didier Richard: Geoconcept driver.
- Kevin Ruland: SWIG bindings refactor.
- `Maxim Rylov <https://github.com/mrylov>`__: Hana driver.
- `Michael Scholz <https://github.com/michikommader>`__: OpenDRIVE driver.
- `Kurt Schwehr <https://github.com/schwehr>`__: code linting through the whole codebase, PSC member.
- `Avyav Kumar Singh <https://github.com/avyavkumar>`__: enhancements in the OGR geometry support, SFCGAL support.
- `Craig de Stigter <https://github.com/craigds>`__: port of GDAL Python autotest suite to the pytest framework.
- `Michael Sumner <https://github.com/mdsumner>`__: documentation enhancements, vrt:// enhancements.
- `Tamas Szekeres <https://github.com/szekerest>`__: SWIG CSharp bindings, gdal_viewshed, PSC member.
- `Alan Thomas <https://github.com/atlight>`__: major enhancements in the DXF driver.
- `Etienne Tourigny <https://github.com/etiennesky>`__: major enhancements in the netCDF driver.
- Philippe Vachon: COASP, GFF, JaxaPalsar, TSX drivers.
- Stephane Villeneuve: OGR Feature Style support, MapInfo .mif.
- `Yorick de Wid <https://github.com/yorickdewid>`__: LVBAG driver.
- Chris Yesson: gdaldem
Graphical contributions:
- Marin Byrne: for producing the current GDAL icon set (based on the earlier version by Martin Daly).
- Darek Krawczyk: for producing design of the initial GDAL Team Member t-shirt (based on Marin's and Martin's graphics).
- `Joe Morrison <https://www.linkedin.com/in/joe-morrison>`__: for producing the new `GDAL t-shirt <https://teespring.com/gdal?pid=387&cid=101810>`__
Packaging:
- Alpine Linux: `Holger Jaekel <https://github.com/hjaekel>`__
- Debian: `Bas Couwenberg <https://github.com/sebastic>`__, `Francesco Paolo Lovergine <https://github.com/fpl>`__
- Conda-Forge: `Filipe Fernandes <https://github.com/ocefpaf>`__, `Daryl Herzmann <https://github.com/akrherz>`__ and `others <https://github.com/conda-forge/gdal-feedstock/graphs/contributors>`__
- Fedora: `Sandro Mani <https://github.com/manisandro>`__
- GISInternals: `Tamas Szekeres <https://github.com/szekerest>`__
- Homebrew: `GDAL Homebrew maintainers <https://github.com/Homebrew/homebrew-core/commits/master/Formula/g/gdal.rb>`__
- MS4W: `Jeff McKenna <https://github.com/jmckenna>`__
- OpenBSD: `Landry Breuil <https://github.com/landryb>`__
- OSGeo4W: `Jรผrgen Fischer <https://github.com/jef-n/>`__
- netBSD: `Greg Troxel <https://github.com/gdt>`__
- Spack: `Adam J. Stewart <https://github.com/adamjstewart>`__
- Ubuntu: `Angelos Tzotsos <https://github.com/kalxas>`__
- vcpkg: `Kai Pastor <https://github.com/dg0yt>`__
You can also consult `Frank Warmerdam's sponsors, acknowledgments and credits <http://web.archive.org/web/20130509110604/http://www.gdal.org/credits.html>`__ for the period 1998-2010.
.. below is an allow-list for spelling checker.
.. spelling:word-list::
Daho
Arevalo
Ragi
Yaser
Burhum
Chernetsky
Condit
Giudiceandrea
Bjรถrn
Harrtell
Hirsch
Franรงois
Hissel
Lambers
Landa
Kikitte
Alexandr
Lisovenko
Mercier
Mikita
Hiroshi
Miura
Mora
Markus
Neteler
Nowacki
Jens
Oberender
Passoti
Kai
Pau
Plesea
Pridal
Bas
Retsios
Didier
Rylov
Scholz
Etienne
Tourigny
Vachon
Stephane
Villeneuve
Yorick
Wid
Byrne
Daly
Darek
Krawczyk
Couwenberg
Herzmann
Filipe
Fernandes
Sandro
Angelos
Tzotzos
Landry
Breuil
Holger
Jaekel
Francesco
Paolo
Lovergine
netBSD
Troxel
Chaitanya
Kumar
CH
---
### Doc Source Api Cli Algorithm C (`doc/source/api/cli_algorithm_c.rst`)
..
The documentation displayed on this page is automatically generated from
Doxygen comments using the Breathe extension. Edits to the documentation
can be made by making changes in the appropriate .cpp files.
.. _cli_algorithm_c:
================================================================================
gdalalgorithm.h: GDALAlgorithm (CLI) C API
================================================================================
Include file
------------
:source_file:`gcore/gdalalgorithm.h`
API
---
.. doxygenfile:: gdalalgorithm_c.h
:project: api
.. below is an allow-list for spelling checker.
.. spelling:word-list::
gdalalgorithm
hAlg
hArg
pnValues
hValue
---
### Doc Source Api Cli Algorithm Cpp (`doc/source/api/cli_algorithm_cpp.rst`)
..
The documentation displayed on this page is automatically generated from
Doxygen comments using the Breathe extension. Edits to the documentation
can be made by making changes in the appropriate .cpp files.
.. _cli_algorithm_cpp:
================================================================================
GDALAlgorithm C++ API
================================================================================
Include file
------------
:source_file:`gcore/gdalalgorithm.h`
GDALAlgorithm class
-------------------
.. doxygenclass:: GDALAlgorithm
:project: api
:members:
GDALAlgorithmArg class
----------------------
.. doxygenclass:: GDALAlgorithmArg
:project: api
:members:
GDALAlgorithmArgDecl class
--------------------------
.. doxygenclass:: GDALAlgorithmArgDecl
:project: api
:members:
GDALArgDatasetValue class
-------------------------
.. doxygenclass:: GDALArgDatasetValue
:project: api
:members:
GDALAlgorithmRegistry class
---------------------------
.. doxygenclass:: GDALAlgorithmRegistry
:project: api
:members:
GDALGlobalAlgorithmRegistry class
---------------------------------
.. doxygenclass:: GDALGlobalAlgorithmRegistry
:project: api
:members:
---
### Doc Source Api Cpl (`doc/source/api/cpl.rst`)
..
The documentation displayed on this page is automatically generated from
Doxygen comments using the Breathe extension. Edits to the documentation
can be made by making changes in the appropriate .cpp files.
.. _cpl_api:
================================================================================
Common Portability Library C API
================================================================================
- :ref:`c_cpl_conv_h`
- :ref:`c_cpl_csv_h`
- :ref:`c_cpl_compressor_h`
- :ref:`c_cpl_error_h`
- :ref:`c_cpl_http_h`
- :ref:`c_cpl_minixml_h`
- :ref:`c_cpl_multiproc_h`
- :ref:`c_cpl_port_h`
- :ref:`c_cpl_progress_h`
- :ref:`c_cpl_string_h`
- :ref:`c_cpl_time_h`
- :ref:`c_cpl_virtualmem_h`
- :ref:`c_cpl_vsi_h`
- :ref:`c_cpl_vsi_error_h`
.. seealso::
:ref:`cpl_cpp_api`.
.. _c_cpl_conv_h:
:source_file:`port/cpl_conv.h`
------------------------------
.. doxygenfile:: cpl_conv.h
:project: api
:sections: briefdescription related detaileddescription define typedef enum func innerclass public-attrib var
.. _c_cpl_csv_h:
:source_file:`port/cpl_csv.h`
-----------------------------
.. doxygenfile:: cpl_csv.h
:project: api
:sections: briefdescription related detaileddescription define typedef enum func innerclass public-attrib var
.. _c_cpl_compressor_h:
:source_file:`port/cpl_compressor.h`
------------------------------------
.. doxygenfile:: cpl_compressor.h
:project: api
:sections: briefdescription related detaileddescription define typedef enum func innerclass public-attrib var
.. _c_cpl_error_h:
:source_file:`port/cpl_error.h`
-------------------------------
.. doxygenfile:: cpl_error.h
:project: api
:sections: briefdescription related detaileddescription define typedef enum func innerclass public-attrib var
.. _c_cpl_http_h:
:source_file:`port/cpl_http.h`
------------------------------
.. doxygenfile:: cpl_http.h
:project: api
:sections: briefdescription related detaileddescription define typedef enum func innerclass public-attrib var
.. _c_cpl_minixml_h:
:source_file:`port/cpl_minixml.h`
---------------------------------
.. doxygenfile:: cpl_minixml.h
:project: api
:sections: briefdescription related detaileddescription define typedef enum func innerclass public-attrib var
.. _c_cpl_multiproc_h:
:source_file:`port/cpl_multiproc.h`
-----------------------------------
.. doxygenfile:: cpl_multiproc.h
:project: api
:sections: briefdescription related detaileddescription define typedef enum func innerclass public-attrib var
.. _c_cpl_port_h:
:source_file:`port/cpl_port.h`
------------------------------
.. doxygenfile:: cpl_port.h
:project: api
:sections: briefdescription related detaileddescription define typedef enum func innerclass public-attrib var
.. _c_cpl_progress_h:
:source_file:`port/cpl_progress.h`
----------------------------------
.. doxygenfile:: cpl_progress.h
:project: api
:sections: briefdescription related detaileddescription define typedef enum func innerclass public-attrib var
.. _c_cpl_string_h:
:source_file:`port/cpl_string.h`
--------------------------------
.. doxygenfile:: cpl_string.h
:project: api
:sections: briefdescription related detaileddescription define typedef enum func innerclass public-attrib public-func var
.. _c_cpl_time_h:
:source_file:`port/cpl_time.h`
------------------------------
.. doxygenfile:: cpl_time.h
:project: api
:sections: briefdescription related detaileddescription define typedef enum func innerclass public-attrib var
.. _c_cpl_virtualmem_h:
:source_file:`port/cpl_virtualmem.h`
------------------------------------
.. doxygenfile:: cpl_virtualmem.h
:project: api
:sections: briefdescription related detaileddescription define typedef enum func innerclass public-attrib var
.. _c_cpl_vsi_h:
:source_file:`port/cpl_vsi.h`
-----------------------------
.. doxygenfile:: cpl_vsi.h
:project: api
:sections: briefdescription related detaileddescription define typedef enum func innerclass public-attrib var
.. _c_cpl_vsi_error_h:
:source_file:`port/cpl_vsi_error.h`
-----------------------------------
.. doxygenfile:: cpl_vsi_error.h
:project: api
:sections: briefdescription related detaileddescription define typedef enum func innerclass public-attrib var
.. below is an allow-list for spelling checker.
.. spelling:word-list::
subdir
subsubdir
---
### Doc Source Api Cpl Cpp (`doc/source/api/cpl_cpp.rst`)
..
The documentation displayed on this page is automatically generated from
Doxygen comments using the Breathe extension. Edits to the documentation
can be made by making changes in the appropriate .cpp files.
.. _cpl_cpp_api:
================================================================================
Common Portability Library C++ API
================================================================================
cpl_odbc.h
----------
.. doxygenfile:: cpl_odbc.h
:project: api
cpl_vsi_virtual.h
-----------------
.. doxygenfile:: cpl_vsi_virtual.h
:project: api
.. seealso::
:ref:`cpl_api`.
---
### Doc Source Api Error Handling (`doc/source/api/error_handling.rst`)
.. _error_handling:
Error handling in GDAL
======================
Overview
--------
GDAL provides a centralized error reporting system used across the
C and C++ APIs, and also available through SWIG binding languages.
C++ exceptions do not reach callers of the C++ public API,
unless otherwise stated in the documentation of the methods.
A global error handler is installed by default, which redirects non-debugging
warning and error messages, to the standard error stream. It is possible to
install a custom error handler to modify that default behavior.
An error is composed of an error level (warning, failure, etc.), an error category
(I/O error, memory error, etc.) and an error message.
For GDAL users
--------------
Include file
++++++++++++
GDAL error handling routines are available by including the public :file:`cpl_error.h`
header file (:source_file:`port/cpl_error.h`).
.. _error_handling_levels:
Error levels
++++++++++++
GDAL defines several error levels in the :cpp:enum:`CPLErr` enumeration:
- ``CE_None``: no error. This level is only used as a potential return code
for functions.
- ``CE_Debug``: Debug message. This error level is generated by the
:cpp:func:`CPLDebug`. Debug messages are not visible to users by default,
unless they install a custom error handler, or set the :config:`CPL_DEBUG`
configuration option.
- ``CE_Warning``: Warning. This error level corresponds to a non-nominal
situation that is worth bringing to the attention of the user, but that does
not prevent the ongoing operation to complete.
- ``CE_Failure``: Error that prevents the current operation to succeed. Other
following GDAL operations might succeed.
- ``CE_Fatal``: Fatal unrecoverable error. The process is terminated with
``abort`` after it is emitted. Such errors are very rarely encountered, and
are typical of a situation where a dynamic memory allocation fails on a very
small allocation. Failures to allocate a large amount of memory will result
instead to a recoverable ``CE_Failure``.
Error category
++++++++++++++
The error category is reported as an integer value aliased to the :cpp:type:`CPLErrorNum`
type. While most errors belong to the following categories, drivers are allowed
to emit custom codes.
- :c:macro:`CPLE_None`: no error. Category used by :cpp:func:`CPLDebug`
- :c:macro:`CPLE_AppDefined`: Application defined error.
- :c:macro:`CPLE_OutOfMemory`: Out of memory error.
- :c:macro:`CPLE_FileIO`: File I/O error.
- :c:macro:`CPLE_OpenFailed`: Open failed.
- :c:macro:`CPLE_IllegalArg`: Illegal argument.
- :c:macro:`CPLE_NotSupported`: Not supported.
- :c:macro:`CPLE_AssertionFailed`: Assertion failed.
- :c:macro:`CPLE_NoWriteAccess`: No write access.
- :c:macro:`CPLE_UserInterrupt`: User interrupted.
- :c:macro:`CPLE_ObjectNull`: NULL object.
Network filesystem related errors:
- :c:macro:`CPLE_HttpResponse`: HTTP response.
- :c:macro:`CPLE_BucketNotFound`: Corresponds to :c:macro:`VSIE_BucketNotFound`
- :c:macro:`CPLE_ObjectNotFound`: Corresponds to :c:macro:`VSIE_ObjectNotFound`
- :c:macro:`CPLE_AccessDenied`: Corresponds to :c:macro:`VSIE_AccessDenied`
- :c:macro:`CPLE_InvalidCredentials`: Corresponds to :c:macro:`VSIE_InvalidCredentials`
- :c:macro:`CPLE_SignatureDoesNotMatch`: Corresponds to :c:macro:`VSIE_SignatureDoesNotMatch`
- :c:macro:`CPLE_ObjectStorageGenericError`: Corresponds to :c:macro:`VSIE_ObjectStorageGenericError`
Retrieving error codes and messages
+++++++++++++++++++++++++++++++++++
Several warnings or errors can be emitted during the call of a GDAL public C/C++
function, in the current thread. Users can retrieve the last error with:
- :cpp:func:`CPLGetLastErrorType`: return the level of the last error
- :cpp:func:`CPLGetLastErrorNo`: return the category of the last error
- :cpp:func:`CPLGetLastErrorMsg`: return the message of the last error. The
returned string is short-lived and must not be freed.
It is also possible to detect if one or several errors have been emitted during
the call of a function/method by comparing the value returned by
:cpp:func:`CPLGetErrorCounter` before and after that call.
Custom error handlers
+++++++++++++++++++++
Applications can install a global custom error handler using :cpp:func:`CPLSetErrorHandler`,
or :cpp:func:`CPLSetErrorHandlerEx` if they need to attach an arbitrary user data
that can be retrieved with :cpp:func:`CPLGetErrorHandlerUserData` in the error handler.
Such global custom error handler is mostly meant for applications that control
all uses of GDAL, and not for library code that may coexist with other application
or library code that also uses GDAL.
A per-thread temporary error handler can be installed with :cpp:func:`CPLPushErrorHandler`,
or :cpp:func:`CPLPushErrorHandlerEx` if they need to attach an arbitrary user data
that can be retrieved with :cpp:func:`CPLGetErrorHandlerUserData` in the error handler.
It must be paired with a call to :cpp:func:`CPLPopErrorHandler` (from the same
thread that called :cpp:func:`CPLPushErrorHandler`).
For example:
.. code-block:: c
#include <cpl_error.h>
struct ErrorContext
{
const char* context;
};
/* note: CPL_STDCALL needed for Windows 32-bit builds */
static void CPL_STDCALL MyErrorHandler(CPLErr eErr, CPLErrorNo nErrorNum, const char* pszMessage)
{
const ErrorContext* context = (const ErrorContext*) CPLGetErrorHandlerUserData();
fprintf(stderr, "context %s: error level=%d, error num=%d, msg=%s\n", eErr nErrorNum, pszMessage)
}
void MyFunc()
{
ErrorContext ctxt;
ctxt.context = "Called from MyFunc";
CPLPushErrorHandlerEx(MyErrorHandler, &ctxt);
GDALClose(GDALOpen("i_do_not_exist", GA_ReadOnly));
CPLPopErrorHandler();
}
A special error handler :cpp:func:`CPLQuietErrorHandler` can be used to completely
silence error messages.
To ensure that :cpp:func:`CPLPushErrorHandler` and :cpp:func:`CPLPopErrorHandler`
are always paired, C++ users can instantiate :cpp:class:`CPLErrorHandlerPusher`. The
above example can be modified as:
.. code-block:: c++
void MyFunc()
{
ErrorContext ctxt;
ctxt.context = "Called from MyFunc";
{
// Create a scope to limit the scope of the temporary error
// handler.
CPLErrorHandlerPusher oCurrentHandler(MyErrorHandler, &ctxt);
GDALClose(GDALOpen("i_do_not_exist", GA_ReadOnly));
}
}
Error handling from Python
++++++++++++++++++++++++++
Most GDAL functions do not emit a Python exception by default, unless the
:py:meth:`osgeo.gdal.UseExceptions` method is called.
When exceptions are enabled, ``CE_Failure`` errors are turned into a Python
exception.
It is possible to install a custom error handler like in the following example:
.. code-block:: python
from osgeo import gdal
gdal.DontUseExceptions()
class MyErrorHandler:
def __init__(self):
pass
def handler(self, level, error_num, message):
print(f"Error level {level}, num {error_num}: {message}")
def __enter__(self):
gdal.PushErrorHandler(self.handler)
def __exit__(self, *args):
gdal.PopErrorHandler()
with MyErrorHandler():
gdal.Open("/i/do/not/exist")
Note that such custom error handler will only catch warnings when exceptions
are enabled. To also catch ``CE_Failure`` error, which are translated as Python exceptions
when exceptions are enabled, exceptions must not be enabled, or explicitly
disabled with :py:meth:`osgeo.gdal.DontUseExceptions`.
For GDAL developers
-------------------
Emitting debug messages and errors
++++++++++++++++++++++++++++++++++
Errors are reported using the :cpp:func:`CPLError` function.
Example:
.. code-block:: cpp
CPLError(CE_Failure, CPLE_AppDefined,
"Something went wrong during processing of %s", pszFilename);
For an error message that must be emitted only once during the lifetime of the
process, ``CPLErrorOnce`` can be used.
Debug messages are reported using the :cpp:func:`CPLDebug` function.
Example:
.. code-block:: cpp
CPLDebug("GTiff", "Tile %d is empty", nTileId);
Debug messages that must appear only in GDAL Debug builds (typically because
they are emitted in a performance critical loop) can be emitted with
:c:macro:`CPLDebugOnly`. Those calls are completely omitted in release builds.
For debug messages that must be emitted only once during the lifetime of the
process, ``CPLDebugOnce`` can be used.
Preserving the error state (C++)
++++++++++++++++++++++++++++++++
It is sometimes desirable to avoid the error state from being modified by a
call to another function. This can be accomplished with an instance of
:cpp:class:`CPLErrorStateBackuper`
.. code-block:: cpp
// 4 below statements just to demonstrate the effect of CPLErrorStateBackuper
const std::string osLastErrorMsg = CPLGetLastErrorMsg();
const CPLErr eLastErrLevel = CPLGetLastErrorType();
const CPLErrorNum nLastErrorNum = CPLGetLastErrorNo();
const GUInt32 nLastErrorCount = CPLGetErrorCounter();
{
CPLErrorStateBackuper oErrorBackuper(CPLQuietErrorHandler);
CPLError(CE_Failure, CPLE_AppDefined,
"Something went wrong but nobody will notice...");
}
// 4 below statements just to demonstrate the effect of CPLErrorStateBackuper
CPLAssert(osLastErrorMsg == CPLGetLastErrorMsg());
CPLAssert(eLastErrLevel == CPLGetLastErrorType());
CPLAssert(nLastErrorNum == CPLGetLastErrorNo());
CPLAssert(nLastErrorCount == CPLGetErrorCounter());
Accumulating errors (C++)
+++++++++++++++++++++++++
:source_file:`port/cpl_error_internal.h` provides a :cpp:class:`CPLErrorAccumulator`
class typically used by a worker thread to store errors emitted by their
worker functions, and replay them in the main thread.
.. code-block:: cpp
#include "cpl_error_internal.h"
CPLErrorAccumulator oErrorAccumulator;
std::thread my_thread([&oErrorAccumulator]() {
// Catches errors emitted in the current thread
CPLErrorAccumulator::Context oInstalledAccumulator = oErrorAccumulator.InstallForCurrentScope()
CPLError(CE_Failure, CPLE_AppDefined, "Something went wrong");
});
my_thread.join();
// Re-emit errors from the calling thread
oErrorAccumulator.Replay();
.. doxygenclass:: CPLErrorAccumulator
:project: api
:members:
.. doxygenclass:: CPLErrorHandlerAccumulatorStruct
:project: api
:members:
---
### Doc Source Api Gdal Alg (`doc/source/api/gdal_alg.rst`)
..
The documentation displayed on this page is automatically generated from
Doxygen comments using the Breathe extension. Edits to the documentation
can be made by making changes in the appropriate .cpp files.
.. _gdal_alg:
================================================================================
gdal_alg.h: GDAL Algorithms C API
================================================================================
gdal_alg.h
----------
.. doxygenfile:: gdal_alg.h
:project: api
.. below is an allow-list for spelling checker.
.. spelling:word-list::
numGCPs
---
### Doc Source Api Gdal Fwd (`doc/source/api/gdal_fwd.rst`)
..
The documentation displayed on this page is automatically generated from
Doxygen comments using the Breathe extension. Edits to the documentation
can be made by making changes in the appropriate .cpp files.
.. _gdal_fwd:
================================================================================
gdal_fwd.h: Forward definitions of GDAL/OGR/OSR C handle types.
================================================================================
.. doxygenfile:: gdal_fwd.h
:project: api
---
### Doc Source Api Gdal Multidim Cpp (`doc/source/api/gdal_multidim_cpp.rst`)
.. _gdal_multidim_cpp:
================================================================================
Entry point for C++ Multi-dimensional Array API
================================================================================
Since GDAL 3.12, :source_file:`gcore/multidim/gdal_multidim_cpp.h` is the include file
for all headers related to the C++ Multi-dimensional Array API.
In earlier versions (and still available in the GDAL 3.x series), :file:`gdal_priv.h`
is the equivalent include file.
Note that the C++ API is also used by GDAL internals and may be subject from
time to time to backwards incompatible changes.
---
### Doc Source Api Gdal Raster Cpp (`doc/source/api/gdal_raster_cpp.rst`)
.. _gdal_raster_cpp:
================================================================================
Entry point for C++ Raster API
================================================================================
Since GDAL 3.12, :source_file:`gcore/gdal_raster_cpp.h` is the include file
for all headers related to the C++ Raster API.
In earlier versions (and still available in the GDAL 3.x series), :file:`gdal_priv.h`
is the equivalent include file.
Note that the C++ API is also used by GDAL internals and may be subject from
time to time to backwards incompatible changes.
---
### Doc Source Api Gdal Utils (`doc/source/api/gdal_utils.rst`)
..
The documentation displayed on this page is automatically generated from
Doxygen comments using the Breathe extension. Edits to the documentation
can be made by making changes in the appropriate .cpp files.
.. _gdal_utils:
================================================================================
gdal_utils.h: GDAL Algorithms C API
================================================================================
.. doxygenfile:: gdal_utils.h
:project: api
---
### Doc Source Api Gdal Vector Cpp (`doc/source/api/gdal_vector_cpp.rst`)
.. _gdal_vector_cpp:
================================================================================
Entry point for C++ Vector API
================================================================================
Since GDAL 3.12, :source_file:`gcore/gdal_vector_cpp.h` is the include file
for all headers related to the C++ Vector API.
In earlier versions, the equivalent is to include :file:`gdal_priv.h`,
:file:`ogrsf_frmts.h`, :file:`ogr_feature.h` and :file:`ogr_geometry.h`
Note that the C++ API is also used by GDAL internals and may be subject from
time to time to backwards incompatible changes.
---
### Doc Source Api Gdalabstractmdarray Cpp (`doc/source/api/gdalabstractmdarray_cpp.rst`)
..
The documentation displayed on this page is automatically generated from
Doxygen comments using the Breathe extension. Edits to the documentation
can be made by making changes in the appropriate .cpp files.
.. _gdalabstractmdarray_cpp:
================================================================================
GDALAbstractMDArray C++ API
================================================================================
Include file
------------
:source_file:`gcore/multidim/gdal_multidim.h`
GDALAbstractMDArray class
-------------------------
.. doxygenclass:: GDALAbstractMDArray
:project: api
:members:
---
### Doc Source Api Gdalattribute Cpp (`doc/source/api/gdalattribute_cpp.rst`)
..
The documentation displayed on this page is automatically generated from
Doxygen comments using the Breathe extension. Edits to the documentation
can be made by making changes in the appropriate .cpp files.
.. _gdalattribute_cpp:
================================================================================
GDALAttribute C++ API
================================================================================
Include file
------------
:source_file:`gcore/multidim/gdal_multidim.h`
GDALAttribute class
-------------------
.. doxygenclass:: GDALAttribute
:project: api
:members:
GDALIHasAttribute interface
---------------------------
.. doxygenclass:: GDALIHasAttribute
:project: api
:members:
---
### Doc Source Api Gdalcolortable Cpp (`doc/source/api/gdalcolortable_cpp.rst`)
..
The documentation displayed on this page is automatically generated from
Doxygen comments using the Breathe extension. Edits to the documentation
can be made by making changes in the appropriate .cpp files.
.. _gdalcolortable_cpp:
================================================================================
GDALColorTable C++ API
================================================================================
Include file
------------
:source_file:`gcore/gdal_colortable.h`
GDALColorTable class
--------------------
.. doxygenclass:: GDALColorTable
:project: api
:members:
---
### Doc Source Api Gdaldataset Cpp (`doc/source/api/gdaldataset_cpp.rst`)
..
The documentation displayed on this page is automatically generated from
Doxygen comments using the Breathe extension. Edits to the documentation
can be made by making changes in the appropriate .cpp files.
.. _gdaldataset_cpp:
================================================================================
GDALDataset C++ API
================================================================================
Include files
-------------
- :source_file:`gcore/gdal_dataset.h`
- :source_file:`gcore/gdal_openinfo.h`
- :source_file:`gcore/gdal_geotransform.h`
- :source_file:`gcore/gdal_relationship.h`
GDALDataset class
-----------------
.. doxygenclass:: GDALDataset
:project: api
:members:
GDALOpenInfo class
----------------------
.. doxygenclass:: GDALOpenInfo
:project: api
:members:
GDALGeoTransform class
----------------------
.. doxygenclass:: GDALGeoTransform
:project: api
:members:
GDALRelationship class
----------------------
.. doxygenclass:: GDALRelationship
:project: api
:members:
.. below is an allow-list for spelling checker.
.. spelling:word-list::
GetMetadataItem
CREATIONOPTIONLIST
nDeltaDegreeOfFreedom
padfCovMatrix
xscale
xorig
yscale
yorig
---
### Doc Source Api Gdaldimension Cpp (`doc/source/api/gdaldimension_cpp.rst`)
..
The documentation displayed on this page is automatically generated from
Doxygen comments using the Breathe extension. Edits to the documentation
can be made by making changes in the appropriate .cpp files.
.. _gdaldimension_cpp:
================================================================================
GDALDimension C++ API
================================================================================
Include file
------------
:source_file:`gcore/multidim/gdal_multidim.h`
GDALDimension class
-------------------
.. doxygenclass:: GDALDimension
:project: api
:members:
---
### Doc Source Api Gdaldriver Cpp (`doc/source/api/gdaldriver_cpp.rst`)
..
The documentation displayed on this page is automatically generated from
Doxygen comments using the Breathe extension. Edits to the documentation
can be made by making changes in the appropriate .cpp files.
.. _gdaldriver_cpp:
================================================================================
GDALDriver C++ API
================================================================================
Include files
-------------
- :source_file:`gcore/gdal_driver.h`
- :source_file:`gcore/gdal_drivermanager.h`
GDALDriver class
----------------
.. doxygenclass:: GDALDriver
:project: api
:members:
GDALDriverManager class
-----------------------
.. doxygenclass:: GDALDriverManager
:project: api
:members:
---
### Doc Source Api Gdalextendeddatatype Cpp (`doc/source/api/gdalextendeddatatype_cpp.rst`)
..
The documentation displayed on this page is automatically generated from
Doxygen comments using the Breathe extension. Edits to the documentation
can be made by making changes in the appropriate .cpp files.
.. _gdalextendeddatatype_cpp:
================================================================================
GDALExtendedDataType C++ API
================================================================================
Include file
------------
:source_file:`gcore/multidim/gdal_multidim.h`
GDALExtendedDataType class
--------------------------
.. doxygenclass:: GDALExtendedDataType
:project: api
:members:
GDALEDTComponent class
----------------------
.. doxygenclass:: GDALEDTComponent
:project: api
:members:
---
### Doc Source Api Gdalgroup Cpp (`doc/source/api/gdalgroup_cpp.rst`)
..
The documentation displayed on this page is automatically generated from
Doxygen comments using the Breathe extension. Edits to the documentation
can be made by making changes in the appropriate .cpp files.
.. _gdalgroup_cpp:
================================================================================
GDALGroup C++ API
================================================================================
Include file
------------
:source_file:`gcore/multidim/gdal_multidim.h`
GDALGroup class
---------------
.. doxygenclass:: GDALGroup
:project: api
:members:
---
### Doc Source Api Gdalmajorobject Cpp (`doc/source/api/gdalmajorobject_cpp.rst`)
..
The documentation displayed on this page is automatically generated from
Doxygen comments using the Breathe extension. Edits to the documentation
can be made by making changes in the appropriate .cpp files.
.. _gdalmajorobject_cpp:
================================================================================
GDALMajorObject C++ API
================================================================================
Include file
------------
:source_file:`gcore/gdal_majorobject.h`
GDALMajorObject class
---------------------
.. doxygenclass:: GDALMajorObject
:project: api
:members:
---
### Doc Source Api Gdalmdarray Cpp (`doc/source/api/gdalmdarray_cpp.rst`)
..
The documentation displayed on this page is automatically generated from
Doxygen comments using the Breathe extension. Edits to the documentation
can be made by making changes in the appropriate .cpp files.
.. _gdalmdarray_cpp:
================================================================================
GDALMDArray C++ API
================================================================================
Include file
------------
:source_file:`gcore/multidim/gdal_multidim.h`
GDALMDArray class
-----------------
.. doxygenclass:: GDALMDArray
:project: api
:members:
---
### Doc Source Api Gdalrasterattributetable Cpp (`doc/source/api/gdalrasterattributetable_cpp.rst`)
..
The documentation displayed on this page is automatically generated from
Doxygen comments using the Breathe extension. Edits to the documentation
can be made by making changes in the appropriate .cpp files.
.. _gdalrasterattributetable_cpp:
================================================================================
GDALRasterAttributeTable C++ API
================================================================================
Include file
------------
:source_file:`gcore/gdal_rat.h`
GDALRasterAttributeTable class
------------------------------
.. doxygenclass:: GDALRasterAttributeTable
:project: api
:members:
GDALDefaultRasterAttributeTable class
--------------------------------------
.. doxygenclass:: GDALDefaultRasterAttributeTable
:project: api
:members:
---
### Doc Source Api Gdalrasterband Cpp (`doc/source/api/gdalrasterband_cpp.rst`)
..
The documentation displayed on this page is automatically generated from
Doxygen comments using the Breathe extension. Edits to the documentation
can be made by making changes in the appropriate .cpp files.
.. _gdal_rasterband_cpp:
================================================================================
GDALRasterBand C++ API
================================================================================
Include file
------------
:source_file:`gcore/gdal_rasterband.h`
GDALRasterBand class
--------------------
.. doxygenclass:: GDALRasterBand
:project: api
:members:
:protected-members:
GDALRasterBand related functions
--------------------------------
.. doxygenfunction:: gdal::min
:project: api
.. doxygenfunction:: gdal::max
:project: api
.. doxygenfunction:: gdal::mean
:project: api
.. doxygenfunction:: gdal::abs
:project: api
.. doxygenfunction:: gdal::sqrt
:project: api
.. doxygenfunction:: gdal::pow
:project: api
.. doxygenfunction:: gdal::log
:project: api
.. doxygenfunction:: gdal::log10
:project: api
.. doxygenfunction:: gdal::IfThenElse
:project: api
GDALMaskValueRange enumeration
------------------------------
.. doxygenenum:: GDALMaskValueRange
:project: api
GDALRasterBlock class
---------------------
.. doxygenclass:: GDALRasterBlock
:project: api
:members:
GDALRasterWindow class
----------------------
.. doxygenclass:: GDALRasterWindow
:project: api
:members:
.. below is an allow-list for spelling checker.
.. spelling:word-list::
posDetailMessage
---
### Doc Source Api Gdalwarp Cpp (`doc/source/api/gdalwarp_cpp.rst`)
..
The documentation displayed on this page is automatically generated from
Doxygen comments using the Breathe extension. Edits to the documentation
can be made by making changes in the appropriate .cpp files.
.. _gdalwarp_cpp:
================================================================================
Warper C++ API
================================================================================
Include file
------------
:source_file:`alg/gdalwarper.h`
Warper C++ API
--------------
.. doxygenfile:: gdalwarper.h
:project: api
---
### Doc Source Api Gnm Cpp (`doc/source/api/gnm_cpp.rst`)
..
The documentation displayed on this page is automatically generated from
Doxygen comments using the Breathe extension. Edits to the documentation
can be made by making changes in the appropriate .cpp files.
.. _gnm_cpp:
================================================================================
Geographic Network C++ API
================================================================================
Include file
------------
:source_file:`gnm/gnm.h`
Geographic Network C++ API
--------------------------
.. doxygenfile:: gnm.h
:project: api
---
### Doc Source Api Index (`doc/source/api/index.rst`)
.. _api:
================================================================================
API
================================================================================
.. only:: not latex
`Full Doxygen output <../doxygen/index.html>`_
----------------------------------------------
General topics
--------------
.. toctree::
:maxdepth: 1
error_handling
C API
-----
.. toctree::
:maxdepth: 1
cpl
gdal_fwd
raster_c_api
vector_c_api
gdal_alg
cli_algorithm_c
ogr_srs_api
gdal_utils
C++ API
-------
Raster API
+++++++++++++++++++++++++++
.. toctree::
:maxdepth: 1
gdal_raster_cpp
gdalmajorobject_cpp
gdaldriver_cpp
gdaldataset_cpp
gdalrasterband_cpp
gdalcolortable_cpp
gdalrasterattributetable_cpp
gdalwarp_cpp
Vector API
+++++++++++++++++++++++++++
.. toctree::
:maxdepth: 1
gdal_vector_cpp
ogrfeature_cpp
ogrfeaturestyle_cpp
ogrgeometry_cpp
ogrgeomcoordinateprecision_cpp
ogrlayer_cpp
Spatial reference system API
++++++++++++++++++++++++++++
.. toctree::
:maxdepth: 1
ogrspatialref
Multi-dimensional array API
+++++++++++++++++++++++++++
.. toctree::
:maxdepth: 1
gdal_multidim_cpp
gdalgroup_cpp
gdaldimension_cpp
gdalabstractmdarray_cpp
gdalmdarray_cpp
gdalattribute_cpp
gdalextendeddatatype_cpp
Miscellaneous C++ API
++++++++++++++++++++++++++++
.. toctree::
:maxdepth: 1
cli_algorithm_cpp
cpl_cpp
gnm_cpp
Python API
----------
.. toctree::
:maxdepth: 2
python/index
`Java API <../java/index.html>`_
--------------------------------
GDAL/OGR In Other Languages
---------------------------
There is a set of generic `SWIG <http://www.swig.org/>`__ interface files in the GDAL source tree (subdirectory swig) and a set of language bindings based on those. Currently active ones are:
.. toctree::
:maxdepth: 1
csharp/index
java/index
There are also other bindings that are developed outside of the GDAL source tree (**note**: those offer APIs not strictly coupled to the GDAL/OGR C/C++ API). These include bindings for
.. toctree::
:maxdepth: 1
Go <https://github.com/lukeroth/gdal>
Julia <https://github.com/JuliaGeo/GDAL.jl>
Original Node.js bindings <https://github.com/naturalatlas/node-gdal>
Node.js fork with full Promise-based async and TypeScript support <https://www.npmjs.com/package/gdal-async>
Perl <https://metacpan.org/release/Geo-GDAL-FFI>
PHP <http://dl.maptools.org/dl/php_ogr/php_ogr_documentation.html>
R <https://cran.r-project.org/web/packages/gdalraster/index.html>
Ruby <https://github.com/telus-agcg/ffi-gdal>
Rust <https://github.com/georust/gdal>
There are also more Pythonic ways of using the vector/OGR functions with
.. toctree::
:maxdepth: 1
Fiona <https://github.com/Toblerity/Fiona>
Rasterio <https://github.com/mapbox/rasterio>
There is a more idiomatic Golang way of using the raster functions with
.. toctree::
:maxdepth: 1
Godal <https://github.com/airbusgeo/godal>
.. only:: latex
API is omitted in this PDF document. You can consult it on
https://gdal.org/api/index.html
---
### Doc Source Api Ogr Srs Api (`doc/source/api/ogr_srs_api.rst`)
..
The documentation displayed on this page is automatically generated from
Doxygen comments using the Breathe extension. Edits to the documentation
can be made by making changes in the appropriate .cpp files.
.. _ogr_srs_api:
================================================================================
ogr_srs_api.h: Spatial Reference System C API
================================================================================
.. doxygenfile:: ogr_srs_api.h
:project: api
:sections: briefdescription related detaileddescription define typedef enum func innerclass public-attrib var
---
### Doc Source Api Ogrfeature Cpp (`doc/source/api/ogrfeature_cpp.rst`)
..
The documentation displayed on this page is automatically generated from
Doxygen comments using the Breathe extension. Edits to the documentation
can be made by making changes in the appropriate .cpp files.
.. _ogrfeature_cpp:
================================================================================
OGRFeature C++ API
================================================================================
Include file
------------
:source_file:`ogr/ogr_feature.h`
OGRFeature class
----------------
.. doxygenclass:: OGRFeature
:project: api
:members:
OGRFeatureDefn class
--------------------
.. doxygenclass:: OGRFeatureDefn
:project: api
:members:
OGRFieldDefn class
------------------
.. doxygenclass:: OGRFieldDefn
:project: api
:members:
OGRGeomFieldDefn class
----------------------
.. doxygenclass:: OGRGeomFieldDefn
:project: api
:members:
OGRFieldDomain class
--------------------
.. doxygenclass:: OGRFieldDomain
:project: api
:members:
OGRCodedFieldDomain class
+++++++++++++++++++++++++
.. doxygenclass:: OGRCodedFieldDomain
:project: api
:members:
OGRRangeFieldDomain class
+++++++++++++++++++++++++
.. doxygenclass:: OGRRangeFieldDomain
:project: api
:members:
OGRGlobFieldDomain class
++++++++++++++++++++++++
.. doxygenclass:: OGRGlobFieldDomain
:project: api
:members:
---
### Doc Source Api Ogrfeaturestyle Cpp (`doc/source/api/ogrfeaturestyle_cpp.rst`)
..
The documentation displayed on this page is automatically generated from
Doxygen comments using the Breathe extension. Edits to the documentation
can be made by making changes in the appropriate .cpp files.
.. _ogrfeaturestyle_cpp:
================================================================================
OGRFeature Style C++ API
================================================================================
Include file
------------
:source_file:`ogr/ogr_featurestyle.h`
OGRFeature Style C++ API
------------------------
.. doxygenfile:: ogr_featurestyle.h
:project: api
---
### Doc Source Api Ogrgeomcoordinateprecision Cpp (`doc/source/api/ogrgeomcoordinateprecision_cpp.rst`)
..
The documentation displayed on this page is automatically generated from
Doxygen comments using the Breathe extension. Edits to the documentation
can be made by making changes in the appropriate .cpp files.
.. _ogrgeomcoordinateprecision_cpp:
================================================================================
OGRGeomCoordinatePrecision C++ API
================================================================================
Include file
------------
:source_file:`ogr/ogr_geomcoordinateprecision.h`
OGRGeomCoordinatePrecision struct
---------------------------------
.. doxygenstruct:: OGRGeomCoordinatePrecision
:project: api
:members:
.. below is an allow-list for spelling checker.
.. spelling:word-list::
poSRSDst
xytolerance
xorigin
yorigin
---
### Doc Source Api Ogrgeometry Cpp (`doc/source/api/ogrgeometry_cpp.rst`)
..
The documentation displayed on this page is automatically generated from
Doxygen comments using the Breathe extension. Edits to the documentation
can be made by making changes in the appropriate .cpp files.
.. _ogrgeometry_cpp:
================================================================================
OGRGeometry C++ API
================================================================================
Include file
------------
:source_file:`ogr/ogr_geometry.h`
OGRGeometryFactory class
------------------------
.. doxygenclass:: OGRGeometryFactory
:project: api
:members:
OGRGeometry class
-----------------
.. doxygenclass:: OGRGeometry
:project: api
:members:
OGRRawPoint class
------------------
.. doxygenclass:: OGRRawPoint
:project: api
:members:
OGRPoint class
--------------
.. doxygenclass:: OGRPoint
:project: api
:members:
OGRSimpleCurve class
--------------------
.. doxygenclass:: OGRSimpleCurve
:project: api
:members:
OGRLineString class
-------------------
.. doxygenclass:: OGRLineString
:project: api
:members:
OGRLinearRing class
-------------------
.. doxygenclass:: OGRLinearRing
:project: api
:members:
OGRCircularString class
-----------------------
.. doxygenclass:: OGRCircularString
:project: api
:members:
OGRCurve class
--------------
.. doxygenclass:: OGRCurve
:project: api
:members:
OGRSurface class
----------------
.. doxygenclass:: OGRSurface
:project: api
:members:
OGRPolygon class
----------------
.. doxygenclass:: OGRPolygon
:project: api
:members:
OGRCompoundCurve class
----------------------
.. doxygenclass:: OGRCompoundCurve
:project: api
:members:
OGRCurvePolygon class
---------------------
.. doxygenclass:: OGRCurvePolygon
:project: api
:members:
OGRMultiPoint class
-------------------
.. doxygenclass:: OGRMultiPoint
:project: api
:members:
OGRMultiLineString class
------------------------
.. doxygenclass:: OGRMultiLineString
:project: api
:members:
OGRMultiPolygon class
---------------------
.. doxygenclass:: OGRMultiPolygon
:project: api
:members:
OGRGeometryCollection class
---------------------------
.. doxygenclass:: OGRGeometryCollection
:project: api
:members:
OGRMultiCurve class
-------------------
.. doxygenclass:: OGRMultiCurve
:project: api
:members:
OGRMultiSurface class
---------------------
.. doxygenclass:: OGRMultiSurface
:project: api
:members:
OGRPolyhedralSurface class
--------------------------
.. doxygenclass:: OGRPolyhedralSurface
:project: api
:members:
OGRTriangle class
-----------------
.. doxygenclass:: OGRTriangle
:project: api
:members:
OGRTriangulatedSurface class
----------------------------
.. doxygenclass:: OGRTriangulatedSurface
:project: api
:members:
OGRWktOptions class
-------------------
.. doxygenclass:: OGRWktOptions
:project: api
:members:
IOGRGeometryVisitor class
-------------------------
.. doxygenclass:: IOGRGeometryVisitor
:project: api
:members:
IOGRConstGeometryVisitor class
------------------------------
.. doxygenclass:: IOGRConstGeometryVisitor
:project: api
:members:
OGRGeomCoordinateBinaryPrecision class
--------------------------------------
.. doxygenclass:: OGRGeomCoordinateBinaryPrecision
:project: api
:members:
OGRWktFormat enumeration
------------------------
.. doxygenenum:: OGRWktFormat
:project: api
---
### Doc Source Api Ogrlayer Cpp (`doc/source/api/ogrlayer_cpp.rst`)
..
The documentation displayed on this page is automatically generated from
Doxygen comments using the Breathe extension. Edits to the documentation
can be made by making changes in the appropriate .cpp files.
.. _ogrlayer_cpp:
================================================================================
OGRLayer C++ API
================================================================================
Include file
------------
:source_file:`ogr/ogrsf_frmts/ogrsf_frmts.h`
OGRLayer class
--------------
.. doxygenclass:: OGRLayer
:project: api
:members:
---
### Doc Source Api Ogrspatialref (`doc/source/api/ogrspatialref.rst`)
..
The documentation displayed on this page is automatically generated from
Doxygen comments using the Breathe extension. Edits to the documentation
can be made by making changes in the appropriate .cpp files.
.. _ogrspatialref:
================================================================================
Spatial Reference System C++ API
================================================================================
Include file
------------
:source_file:`ogr/ogr_spatialref.h`
Spatial Reference System C++ API
--------------------------------
.. doxygenfile:: ogr_spatialref.h
:project: api
.. below is an allow-list for spelling checker.
.. spelling:word-list::
bInnerMostGeogCRS
IProj
---
### Doc Source Api Raster C Api (`doc/source/api/raster_c_api.rst`)
..
The documentation displayed on this page is automatically generated from
Doxygen comments using the Breathe extension. Edits to the documentation
can be made by making changes in the appropriate .cpp files.
.. _raster_c_api:
================================================================================
gdal.h: Raster C API
================================================================================
.. doxygenfile:: gdal.h
:project: api
:sections: briefdescription related detaileddescription define typedef enum func innerclass public-attrib var
.. below is an allow-list for spelling checker.
.. spelling:word-list::
nSrcHeight
nSrcWidth
pSrc
pDst
SetMetadataItem
nDatasetTypeFlag
nDeltaDegreeOfFreedom
padfCovMatrix
---
### Doc Source Api Vector C Api (`doc/source/api/vector_c_api.rst`)
..
The documentation displayed on this page is automatically generated from
Doxygen comments using the Breathe extension. Edits to the documentation
can be made by making changes in the appropriate .cpp files.
.. _vector_c_api:
================================================================================
ogr_core.h and ogr_api.h: Vector C API
================================================================================
- :ref:`c_ogr_core_h`
- :ref:`c_ogr_api_h`
- :ref:`c_ogr_adbc_h`
.. _c_ogr_core_h:
:source_file:`ogr/ogr_core.h`
-----------------------------
.. doxygenfile:: ogr_core.h
:project: api
:sections: briefdescription related detaileddescription define typedef enum func innerclass public-attrib var
.. _c_ogr_api_h:
:source_file:`ogr/ogr_api.h`
----------------------------
.. doxygenfile:: ogr_api.h
:project: api
:sections: briefdescription related detaileddescription define typedef enum func innerclass public-attrib var
.. _c_ogr_adbc_h:
:source_file:`ogr/ogrsf_frmts/adbc/ogr_adbc.h`
----------------------------------------------
.. doxygenfile:: gdal_adbc.h
:project: api
:sections: briefdescription related detaileddescription define typedef enum func innerclass public-attrib var
---
### Doc Source Community Ai Tool Policy (`doc/source/community/ai_tool_policy.rst`)
.. _ai_tool_policy:
================================================================================
LLM tool policy
================================================================================
Rationale
--------------------------------------------------------------------------------
LLMs are changing software development in many ways. What was once scarce, the
time and expertise to *write* software, is now plentiful. This scarcity was a
choke point that limited consumption of related resources in open source
projects. With that scarcity effectively gone in 2026, the dynamics and economics
of a project like GDAL are being disrupted.
A project like GDAL is not simply code. It is also design, review, coordinated
refactoring, deprecation scheduling, coordinated communication, distribution,
and historical outlook. The plentiful convenience of code writing LLMs do not
effectively replace the human maintainers, architects, and documenters doing
the jobs that provide much of the value GDAL users actually derive. If they
did, LLM contributors would not need to bother to upstream activity to the
project at all.
With the explosion of LLM usage in software development, the constrained
resource is now "maintenance". It is the time to review your contribution, the
time to make it concise, the time to refactor it in to a larger system, and the
time to protect the larger software system from disruption, breakage, and
performance degradation. Indiscriminate usage of LLMs in open source projects
*consume* maintenance, and the GDAL LLM tool policy attempts to conserve that
resource.
Additionally, legal systems across the world (including US and EU) have not
definitely determined whether LLM outputs are derived works of training data or
if LLM-written code can even be copyrighted by a human. This is despite it
being latently extracted and originated from open source software in the first
place.
Policy
--------------------------------------------------------------------------------
Contributors can make **limited use** of LLMs for contributions in GDAL,
subject to details mentioned below:
* **Human contributors must be the primary author(s) of GDAL contributions**
* All contributions including code, ticket comments, and commit messages
should be fully understood by the author(s) submitting them to the
project.
* Submission of `vibe-coded <https://en.wikipedia.org/wiki/Vibe_coding>`__ contributions is *banned*.
* LLMs may only be used as an improved auto-completion mechanism, or
for repeated tasks (mechanical refactoring) that could potentially be
completed with a deterministic algorithm.
* Human-coordinated or uncoordinated (OpenClaw, etc) use of agents for
submission of contributions to the GDAL repository is *banned*.
* *Any* LLM usage must be indicated by ticket label, comment, or commit
message indication and account for what was written by whom/what.
* The contributing human author is ultimately responsible for every line of
code, comment, or mailing list interaction they initiate, and all of it
is subject to the project's :ref:`code_of_conduct`.
* The typical high verbosity of LLM code and text is actively discouraged.
More code is more code to maintain. High verbosity contribution (tickets,
code, messages, etc) will be seen as indication of LLM-generated content
when not labeled otherwise and may be ignored, closed, left unmerged, or
removed at maintainers' discretion.
Violations
--------------------------------------------------------------------------------
If a maintainer judges that a contribution does not comply with this policy,
they should paste the following response to request changes:
.. code-block:: text
This PR does not appear to comply with our policy on tool-generated content,
and requires additional justification for why it is valuable enough to the
project for us to review it. Please see our developer policy on
AI-generated contributions:
https://gdal.org/community/ai_tool_policy.html
If a contributor fails to rectify their contribution to comply with the policy,
maintainers may lock the conversation and/or close the pull request/issue/RFC.
In case of repeated violations of our policy, the GDAL project reserves itself
the right to temporarily or permanently ban the infringing person/account.
Mitigation
--------------------------------------------------------------------------------
The GDAL :ref:`sponsorship_program` is one way your organization can help
buffer the cost and disruption of LLMs in keystone projects such as GDAL. The
constrained resource is maintenance, not adding more code/capability. The
Sponsorship Program financially supports operation of GDAL as an ongoing open source
software project, and without it, much of the activity GDAL users take for granted
would simply not happen.
.. below is an allow-list for spelling checker.
.. spelling:word-list::
LLM
documenters
unmerged
latently
---
### Doc Source Community Code Of Conduct (`doc/source/community/code_of_conduct.rst`)
.. _code_of_conduct:
================================================================================
Code of Conduct
================================================================================
This code of conduct governs how we behave in any GDAL forum or event and
whenever we will be judged by our actions. We expect it to be honored by everyone
who participates in the GDAL community formally or informally, or claims any
affiliation with the project.
Introduction
-------------
This code of conduct governs how we behave in any GDAL forum or event and
whenever we will be judged by our actions. We expect it to be honored by
everyone who participates in the GDAL community formally or informally, or
claims any affiliation with the GDAL project.
It applies to in-person events (such as conferences and related social events),
IRC, public and private mailing lists, the issue tracker, the wiki, blogs,
social media, and any other forums which the community uses for communication and
interactions.
This code is not exhaustive or complete. It serves to distill our common
understanding of a collaborative, shared environment and goals. We expect it to
be followed in spirit as much as in the letter, so that it can enrich all of
us and the technical communities in which we participate.
Diversity Statement
-------------------
GDAL welcomes and encourages participation by everyone. We are committed to
being a community that everyone feels good about joining, and we will always
work to treat everyone well. No matter how you identify yourself or how others
perceive you: we welcome you.
Specific Guidelines
We strive to:
- Be open.
We invite anyone to participate in our community. We preferably use public
methods of communication for project-related messages, unless discussing
something sensitive. This applies to messages for help or project-related
support, too; not only is a public support request much more likely to result
in an answer to a question, it also makes sure that any inadvertent mistakes
made by people answering will be more easily detected and corrected.
- Be empathetic, welcoming, friendly, and patient.
We work together to resolve conflict, assume good intentions, and do our best
to act in an empathetic fashion. We may all experience some frustration from
time to time, but we do not allow frustration to turn into a personal attack.
A community where people feel uncomfortable or threatened is not a productive
one. Note that we have a multi-cultural, multi-lingual community and some of
us are non-native speakers. We should be respectful when dealing with other
community members as well as with people outside our community.
- Be collaborative.
Our work will be used by other people, and in turn we will depend on the work
of others. When we make something for the benefit of GDAL, we are willing to
explain to others how it works, so that they can build on the work to make it
even better. Any decision we make will affect users and colleagues, and we
take those consequences seriously when making decisions.
- Be inquisitive.
Nobody knows everything! Asking questions early avoids many problems later,
so questions are encouraged, though they may be directed to the appropriate
forum. Those who are asked should be responsive and helpful, within the
context of our shared goal of improving GDAL.
- Be careful in the words that we choose.
Whether we are participating as professionals or volunteers, we value
professionalism in all interactions, and take responsibility for our own
speech. Be kind to others. Do not insult or put down other participants.
- Be concise.
Keep in mind that what you write once will be read by hundreds of persons.
Writing a short email means people can understand the conversation as
efficiently as possible. Short emails should always strive to be empathetic,
welcoming, friendly and patient. When a long explanation is necessary,
consider adding a summary.
Try to bring new ideas to a conversation so that each mail adds something
unique to the thread, keeping in mind that the rest of the thread still
contains the other messages with arguments that have already been made.
Try to stay on topic, especially in discussions that are already fairly large.
- Step down considerately.
Members of every project come and go. When somebody leaves or disengages
from the project they should tell people they are leaving and take the proper
steps to ensure that others can pick up where they left off. In doing so,
they should remain respectful of those who continue to participate in the
project and should not misrepresent the project's goals or achievements.
Likewise, community members should respect any individual's choice to leave
the project.
Anti-Harassment
---------------
Harassment and other exclusionary behavior are not acceptable.
This includes, but is not limited to:
- Personal insults or discriminatory jokes and language, especially those using racist or sexist terms.
- Offensive comments, excessive or unnecessary profanity.
- Intimidation, violent threats or demands.
- Sustained disruption of sessions or events.
- Stalking, harassing photography or recording.
- Unwelcome physical contact or sexual attention.
- Repeated harassment of others. In general, if someone asks you to stop, then stop.
- Posting (or threatening to post) other people's personally identifying information ("doxing").
- Sharing private content, such as emails sent privately or non-publicly, or unlogged forums such as IRC channel history.
- Advocating for, or encouraging, any of the above behavior.
Reporting Guidelines
--------------------
If you believe someone is breaking this code of conduct, you may reply to them,
and point to this code of conduct. Such messages may be in public or in private,
whatever is most appropriate. Assume good faith; it is more likely that
participants are unaware of their bad behavior than that they intentionally try
to degrade the quality of the discussion. Should there be difficulties in
dealing with the situation, you may report your concerns to event staff, a forum
leader or the GDAL Board. Serious or persistent offenders may be expelled from
the event or forum by event organizers or forum leaders.
To privately email the code of conduct committee leadership use [email protected].
Credits
-------
GDAL re-uses the `OSGeo Code of Conduct <https://www.osgeo.org/resources/osgeo-code-of-conduct/>`__
---
### Doc Source Community Index (`doc/source/community/index.rst`)
.. _community:
================================================================================
Community
================================================================================
GDAL's community interacts through `Mailing List`_, `GitHub`_, and
`Chat`_. Please feel welcome to ask questions and participate in all of the
venues. The `Mailing List`_ communication channel is for general questions,
development discussion, and feedback. The `GitHub`_ communication channel is
for development activities, bug reports, and testing. The `Chat`_
room is for real-time chat activities such as meetings and interactive
debugging sessions.
Code of Conduct
---------------
.. only:: html
GDAL uses a :ref:`code_of_conduct` which governs how we behave in any GDAL
forum or event and whenever we will be judged by our actions. We expect it to
be honored by everyone who participates in the GDAL community formally or
informally, or claims any affiliation with the project.
.. toctree::
:hidden:
code_of_conduct
AI Tool Use Policy
------------------
See :ref:`ai_tool_policy`.
.. toctree::
:hidden:
ai_tool_policy
.. _mailing_list:
Mailing List
------------
Developers and users of GDAL participate on the GDAL mailing list. It is OK to
ask questions about how to use GDAL, how to integrate GDAL into your own software,
and report issues that you might have.
http://lists.osgeo.org/mailman/listinfo/gdal-dev
GitHub
------
Visit http://github.com/OSGeo/GDAL to file issues you might be having with the
software. GitHub is also where you can obtain a current development version of the
software in the `git`_ revision control system. The GDAL project is eager to
take contributions in all forms, and we welcome those who are willing to roll
up their sleeves and start filing tickets, pushing code, generating builds, and
answering questions.
Chat
----
You can find some GDAL developers in the IRC channel #gdal on `Libera.Chat`_.
This mechanism is usually reserved for active meetings and other outreach
with the community.
The `Mailing List`_ and `GitHub`_ avenues are going to be more productive
communication channels in most situations.
.. _`git`: https://en.wikipedia.org/wiki/Git_(software)
.. _`Libera.Chat`: https://web.libera.chat/#gdal
Social media
------------
You can follow GDAL official news on the following platforms:
* Mastodon: https://mastodon.social/@gdal / ``@[email protected]``
* LinkedIn: https://www.linkedin.com/company/gdalorg/
Conferences
-----------
Upcoming
++++++++
* International event:
.. image:: ../../images/community/foss4g2026.png
:alt: FOSS4G 2026
:target: https://2026.foss4g.org/
`FOSS4G 2026 <https://2026.foss4g.org/>`__, August 30 - September 5 2026, Hiroshima, Japan, is the Open Source Geospatial Foundation (OSGeo) annual FOSS4G event.
* North-America event:
.. image:: ../../images/community/foss4gna2026.png
:alt: FOSS4G North-America 2026
:target: https://www.foss4gna.org/
`FOSS4G North-America 2026 <https://www.foss4gna.org/>`__, November 2-4 2026, Sacramento, CA, USA
.. spelling:word-list::
Sacramento
CA
Previous
++++++++
GDAL presentations have been given at FOSS4G, the leading annual conference for free and open source geospatial software.
It is the event for those interested in GDAL/OGR, other FOSS geospatial technologies and the community around them.
+ `State of GDAL 3.12 & 3.13 <https://download.osgeo.org/gdal/presentations/State%20of%20GDAL%20%28FOSS4G-E%202026%29.pdf>`__
by Even Rouault, Spatialys, at `FOSS4G Europe 2026 <https://2026.europe.foss4g.org/>`_ in Timiศoara, Romania.
+ `GDAL's New CLI <https://download.osgeo.org/gdal/presentations/FOSS4G-NA 2025.pdf>`__ by Dan Baston, ISciences LLC, at `FOSS4G NA 2025 <https://www.foss4gna.org/>`_ in Washington DC, USA. `Recording <https://youtu.be/caprt4axc1U?t=18>`__.
+ `State of GDAL 3.10 & 3.11 <https://download.osgeo.org/gdal/presentations/State%20of%20GDAL%20%28FOSS4G-E%202025%29.pdf>`__
by Even Rouault, Spatialys, at `FOSS4G Europe 2025 <https://2025.europe.foss4g.org/>`_ in Mostar, Bosnia-Herzegovina.
+ `State of GDAL 3.8 & 3.9 <https://download.osgeo.org/gdal/presentations/State%20of%20GDAL%20%28FOSS4G-E%202024%29.pdf>`__
by Even Rouault, Spatialys, at `FOSS4G Europe 2024 <https://2024.europe.foss4g.org/>`_ in Tartu, Estonia. `Recording <https://av.tib.eu/media/68541>`__.
+ `State of GDAL 3.6 & 3.7 <https://download.osgeo.org/gdal/presentations/State%20of%20GDAL%20%28FOSS4G%202023%29.pdf>`__
by Even Rouault, Spatialys, at `FOSS4G 2023 <https://2023.foss4g.org/>`_ in Prizren, Kosovo. `Recording <https://av.tib.eu/media/66550>`__.
+ `State of GDAL 3.4 & 3.5 <https://download.osgeo.org/gdal/presentations/State%20of%20GDAL%20%28FOSS4G%202022%29.pdf>`__
by Even Rouault, Spatialys, at `FOSS4G 2022 <https://2022.foss4g.org/>`_ in Firenze, Italy. `Recording <https://av.tib.eu/media/69002>`__.
+ `State of GDAL 3.1, 3.2, 3.3โฆ <https://download.osgeo.org/gdal/presentations/State%20of%20GDAL%20%28FOSS4G%202021%29.pdf>`__
by Even Rouault, Spatialys, at `FOSS4G 2021 <https://2021.foss4g.org/>`_ in Buenos Aires, Argentina. `Recording <https://av.tib.eu/media/57241>`__.
+ `State of GDAL 2.4 and 3.0 <https://download.osgeo.org/gdal/presentations/GDAL%202.4%20and%203.0%20%28FOSS4G%202019%29.pdf>`__
by Even Rouault, Spatialys, at `FOSS4G 2019 <https://2019.foss4g.org/>`_ in Bucharest, Romania. `Recording <https://av.tib.eu/media/43447>`__.
.. spelling:word-list::
Timiศoara
Mostar
Tartu
Firenze
Buenos
ISciences
Governance and Community Participation
--------------------------------------
OSGeo Project Membership
++++++++++++++++++++++++
Originally, GDAL has been lead by Frank Warmerdam, the original author of much
of GDAL/OGR, though with contributions and input from a variety of people.
As of February 2006 GDAL/OGR became a founding project of the
`Open Source Geospatial Foundation (OSGeo) <https://www.osgeo.org/>`_
and began a transition to a more community oriented governance
model - in keeping with OSGeo expectations.
Membership as an OSGeo project provides assurances that a variety of best practices
are being employed by the GDAL/OGR project, and that users and contributors can be
assured of responsible project operation and continuity of the project. In particular:
- A consensus oriented Project Management Committee will be in charge of the project.
- Project source code and contributions will be vetted to ensure code is properly
made available, protecting contributors and users of GDAL/OGR.
- Part of the systems infrastructure used by the project is provided by the foundation,
with responsible backup and redundancy to minimize disruptions.
.. _psc:
Project Steering Committee
++++++++++++++++++++++++++
As of April 2006 (following the GDAL/OGR 1.3.2 release) the project has been
placed in the hands of a Project Steering Committee. This project steering
committee operates under the rules of :ref:`rfc-1`, and is overall responsible for
decisions related to the GDAL/OGR project. The current members are (@github username):
- Frank Warmerdam (`@warmerdam <https://github.com/warmerdam>`__)
- Daniel Morissette (`@dmorissette <https://github.com/dmorissette>`__)
- Howard Butler (`@hobu <https://github.com/hobu>`__)
- Tamas Szekeres (`@szekerest <https://github.com/szekerest>`__)
- Even Rouault (chair) (`@rouault <https://github.com/rouault>`__)
- Jukka Rahkonen (`@jratike80 <https://github.com/jratike80>`__)
- Kurt Schwehr (`@schwehr <https://github.com/schwehr>`__)
- Norman Barker (`@normanb <https://github.com/normanb>`__)
- Javier Jimenez Shaw (`@jjimenezshaw <https://github.com/jjimenezshaw>`__)
- Dan Baston (`@dbaston <https://github.com/dbaston>`__)
- Michael Smith (`@msmitherdc <https://github.com/msmitherdc>`__)
Past members:
- Andrey Kiselev (@strezen) (retired in 2019)
- Mateusz ลoskot (@mloskot) (retired in 2023)
- Sean Gillies (@sgillies) (retired in 2025)
Note that discussion of proposals to the PSC take place on gdal-dev, and input
from all subscribers is welcome. A :ref:`list of past RFC <rfclist>` is available for review.
User survey
+++++++++++
Results of the :ref:`survey_2025` are available for review.
.. toctree::
:hidden:
user_survey_2024
user_survey_2025
GDAL Service Providers
----------------------
.. only:: html
GDAL is developed and supported by a rich ecosystem of businesses and
individuals around the world. You can consult a list of :ref:`service_providers`
who can assist you in getting the best out of your GDAL investment.
.. toctree::
:hidden:
service_providers
---
### Doc Source Community Service Providers (`doc/source/community/service_providers.rst`)
.. _service_providers:
*****************************************************************************
GDAL Service Providers
*****************************************************************************
GDAL is developed and supported by a rich ecosystem of businesses and
individuals around the world.
In this page we provide a list of service providers who
can assist you in getting the best out of your GDAL investment.
Their services can range from training and technical support to help you
get started, all the way to specialized development and support services
to advance the software and support your organization's mission-critical
applications.
.. note::
This list is non-exhaustive, and there are quite likely other service
providers in your region of the world who are not listed here.
If you think your organization should be listed here, please submit a
pull request to add it to this page.
.. note::
We take responsibility for the accuracy, reliability or completeness
of the provided information for Core Contributors only.
.. only:: html
.. note::
Service Providers order is randomized on page load.
Core Contributors
-----------------
Core Contributor organizations have GDAL Committers and/or PSC members
as part of their team and as such they are the closest to the core development
of the software and are usually the best to go to for support.
They are close enough to the architecture to know what is possible, and to
ensure that any improvement to be made to GDAL gets done in the right
way and will be included in future releases of the software.
They wrote the software that you use, so you can trust them to help you get
the most out of it.
.. container:: service-provider
|logo_spatialys|
.. container:: service-provider-description
`Spatialys`_ (France) is a company founded by Even Rouault that is dedicated
to providing to its clients the best of its expertise around Open Source
geospatial software - such as GDAL/OGR, PROJ, MapServer, and QGIS - and Open standards.
.. container:: service-provider
|logo_hobu|
.. container:: service-provider-description
`Hobu, Inc.`_ (United States) is a `sam.gov
<https://sam.gov>`__-registered company founded by Howard Butler with
more than twenty years experience supporting the creation, enhancement,
and management of geospatial open source geospatial software such as
`PDAL <https://pdal.io>`__, GDAL/OGR, PROJ, and open standards such as
`GeoJSON <https://datatracker.ietf.org/doc/html/rfc7946>`__, `PROJJSON
<https://proj.org/en/latest/specifications/projjson.html>`__, and `Cloud
Optimized Point Cloud <https://copc.io/>`__.
Contributors
------------
The Contributors listed here usually have power users and experienced
integrators as part of their team who are recognized in the GDAL
community for their contributions to various aspects of the software over
the years and are very well positioned to assist you with GDAL.
.. container:: service-provider
None listed yet.
Other Service Providers
-----------------------
The service providers in this category offer services around GDAL
and related Open Source technologies.
.. container:: service-provider
|logo_faunalia|
.. container:: service-provider-description
`Faunalia`_ (Italy) is a company that operates since more than 15 years in the field of Geographic Information Systems (GIS) based on free and open source software (chiefly QGIS, PostGIS, and more). Our main customers are public administrations, private companies, associations. Faunalia has its main branch in Italy, and operates worldwide. Faunalia provides training services on GDAL.
.. container:: service-provider
|logo_kartoza|
.. container:: service-provider-description
`Kartoza`_ (South Africa) is a South Africa-based Free and Open Source GIS (FOSSGIS) service provider. We use GIS software to solve complex location-related problems for individuals, businesses and governments around the world. Kartoza provides training services on GDAL.
.. container:: service-provider
|logo_mundialis|
.. container:: service-provider-description
`mundialis`_ (Germany) is specialized in the processing of massive geospatial and remote sensing data. Our services centered on the Open Source geospatial systems GRASS GIS, actinia and QGIS are incorporated into our process chains, projects and tailored solutions. We analyse satellite, aerial and drone imagery for land degradation and landuse change. We offer support and training for GRASS GIS and GDAL.
.. raw:: html
<script type="text/javascript">
// Randomize logos
$.fn.randomize = function(selector){
var $elems = selector ? $(this).find(selector) : $(this).children(),
$parents = $elems.parent();
// found at: http://stackoverflow.com/a/2450976/746961
function shuffle(array) {
var currentIndex = array.length, temporaryValue, randomIndex;
// While there remain elements to shuffle...
while (0 !== currentIndex) {
// Pick a remaining element...
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
// And swap it with the current element.
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
}
$parents.each(function(){
var elements = $(this).children(selector);
shuffle(elements);
$(this).append(elements);
});
return this;
};
$('#core-contributors').randomize('div.service-provider');
$('#contributors').randomize('div.service-provider');
$('#other-service-providers').randomize('div.service-provider');
</script>
.. seealso::
Search for GDAL service providers with the `OSGeo Service Providers <https://www.osgeo.org/service-providers/>`__
How to Add a Company
--------------------
The steps to add a company to the service providers list are outlined in the :ref:`rfc-79` document.
.. ###########
.. Core Contributors - use max(width=200px,height=200px) for logo
.. ###########
.. _`Spatialys`: http://www.spatialys.com/
.. |logo_spatialys| image:: ../../images/logo-spatialys.png
:class: img-logos
:height: 200 px
:target: `Spatialys`_
.. ###########
.. Contributors - use max(width=150px,height=150px) for logo
.. ###########
.. ###########
.. Other service providers - use max(width=100px,height=100px) for logo
.. ###########
.. _`Faunalia`: https://www.faunalia.eu/
.. |logo_faunalia| image:: ../../images/logo-faunalia.png
:class: img-logos
:width: 100 px
:target: `Faunalia`_
.. _`Kartoza`: https://kartoza.erpnext.com/
.. |logo_kartoza| image:: ../../images/logo-kartoza.png
:class: img-logos
:width: 100 px
:target: `Kartoza`_
.. _`mundialis`: https://www.mundialis.de/
.. |logo_mundialis| image:: ../../images/logo-mundialis.png
:class: img-logos
:width: 100 px
:target: `mundialis`_
.. _`Hobu, Inc.`: https://hobu.co/
.. |logo_hobu| image:: ../../images/logo-hobu.png
:class: img-logos
:width: 100 px
:target: `Hobu, Inc.`_
---
### Doc Source Community User Survey 2024 (`doc/source/community/user_survey_2024.rst`)
.. _survey_2024:
2024 GDAL user survey
=====================
.. only:: not html
Results of the 2024 GDAL user survey are available at https://gdal.org.
.. only:: html
In October 2024, The GDAL maintenance program created an open survey to collect
feedback on user's experience with GDAL and the direction of the maintenance
program. The survey was publicized on gdal.org, the gdal-dev mailing list, the
project GitHub page, and social media. From October 28 to November 21, the
survey received 602 responses.
Who responded to the survey?
----------------------------
Survey respondents were generally very experienced users, with 79% of users
having spent 5 or more years working with GDAL. Surprisingly, two respondents
claimed to be Frank Warmerdam, who originated the project in 1998. More than
half (52%) have built GDAL from source, 29% subscribe to the gdal-dev mailing
list, and 29% have contributed to the project by submitting bug reports or pull
requests. The high experience level of respondents reflects the challenge of
reaching users who may use GDAL less often, through other software, or are not
connected to the project community via mailing lists or social media.
.. image:: ../../images/community/survey_2024/years_experience.svg
Operating system
^^^^^^^^^^^^^^^^
Most survey respondents use GDAL on Linux, followed by Windows and OS X.
Responses to "Other" included WSL2 and iOS.
.. image:: ../../images/community/survey_2024/operating_system.svg
Local or cloud?
^^^^^^^^^^^^^^^
Most survey respondents use GDAL primarily with local file systems.
.. image:: ../../images/community/survey_2024/local_or_cloud_read.svg
.. image:: ../../images/community/survey_2024/local_or_cloud_write.svg
Data formats
^^^^^^^^^^^^
Among raster data formats, GeoTIFF commands an overwhelming majority of GDAL
usage:
.. image:: ../../images/community/survey_2024/raster_data_formats.svg
The most popular vector format was GeoPackage, followed by classics such as
Shapefile, GeoJSON, and PostGIS. GeoParquet, Esri FileGeodatabase, FlatGeobuf,
and GML each earned enough votes to remain out of the "Other" category.
.. image:: ../../images/community/survey_2024/vector_data_formats.svg
Installing GDAL
---------------
Survey respondents obtain GDAL from a variety of channels, depending on the
platform. On Linux, standard system packages are the most popular solution.
OSX users rely primarily on Homebrew; most Windows users user OSGeo4W. The
popularity of Homebrew among Windows users may indicate that GDAL is being used
through the Windows Subsystem for Linux (WSL). The reported usage of OSGeo4W by
Linux users is more difficult to explain.
.. image:: ../../images/community/survey_2024/where_gdal_obtained_linux.svg
.. image:: ../../images/community/survey_2024/where_gdal_obtained_osx.svg
.. image:: ../../images/community/survey_2024/where_gdal_obtained_windows.svg
As may be expected for a group of experienced users, most respondents reported
that GDAL is easy to install with the options they need. Still, installation
remains a difficulty for many users.
.. image:: ../../images/community/survey_2024/easy_to_install_gdal.svg
Installation difficulties were not associated with a particular operating
system.
.. image:: ../../images/community/survey_2024/easy_to_install_gdal_os.svg
How is GDAL used?
-----------------
The greatest number of respondents reported using GDAL from Python, with a
roughly 50/50 split between the GDAL Python bindings and higher-level packages
such as shapely, rasterio, and geopandas. After Python, the greatest number of
respondents reported using the command line interface, followed by smaller
number of users working in R, PostGIS, and QGIS.
.. image:: ../../images/community/survey_2024/way_gdal_used.svg
Getting help with GDAL
----------------------
Most users use gdal.org (directly or via a search engine) as their starting
point when trying to get help with GDAL.
.. image:: ../../images/community/survey_2024/gdal_help_source.svg
Difficulties using GDAL
-----------------------
Users did not identify a single area as a source of their challenges with GDAL.
However, the top responses of "finding examples" and "understanding features"
point to a shortage of documentation.
.. image:: ../../images/community/survey_2024/gdal_challenge.svg
Consistent with the above, respondents reported "examples", "workflows", and
"API usage" as high priorities for documentation efforts.
.. image:: ../../images/community/survey_2024/documentation_needs.svg
And "examples" and "doc" rank highly among open-ended responses to
"what could make GDAL easier to use?"
.. image:: ../../images/community/survey_2024/gdal_easier_to_use.svg
Maintenance program activities
------------------------------
Among activities undertaken by the maintenance program so far, respondents found
the most value in enhancements to GDAL's dependencies (such as PROJ, GEOS, and
libtiff), its Python bindings, and documentation.
.. image:: ../../images/community/survey_2024/maintenance_program_activities.svg
Asked about a variety of tasks the maintenance program could take on beyond
those listed above, respondents showed some enthusiasm for almost everything!
Still, high priorities were given to performance, improving format
capabilities, and improving the command line interface while preserving
backward compatibility.
.. image:: ../../images/community/survey_2024/maintenance_program_areas_of_focus.svg
Next steps
----------
The maintenance program will use these results to inform work over the coming
year. Some work has already been performed to `develop an improved
command-line interface <https://github.com/OSGeo/gdal/pull/11303>`__ and `add a
mechanism for usage examples to be cross-referenced in the
documentation <https://github.com/OSGeo/gdal/pull/11271>`__.
---
### Doc Source Community User Survey 2025 (`doc/source/community/user_survey_2025.rst`)
.. _survey_2025:
2025 GDAL user survey
=====================
.. only:: not html
Results of GDAL user surveys are available at https://gdal.org.
.. only:: html
In December 2025, The GDAL maintenance program conducted its second open survey to collect feedback on userโs experience with GDAL and the direction of the maintenance program. The survey was publicized on gdal.org, the gdal-dev mailing list, the project GitHub page, and social media. From December 01 to January 12, the survey received 592 responses.
Responses to the survey were broadly consistent with 2024. This page presents the results of key survey questions with a comparison to the 2024 survey where applicable.
Who responded to the survey?
----------------------------
As in 2024, survey respondents were generally very experienced users, with 78% of users having spent 5 or more years working with GDAL. Nearly half (49%) have built GDAL from source, 28% have contributed to the project by submitting bug reports or pull requests, and 8% participate in the gdal-dev mailing list. The high experience level of respondents reflects the challenge of reaching users who may use GDAL less often, through other software, or are not connected to the project community via mailing lists or social media.
.. image:: ../../images/community/survey_2025/years_experience.svg
Respondents get news about GDAL (presumably including the availability of the survey itself) from a variety of sources.
.. image:: ../../images/community/survey_2025/news_source.svg
How is GDAL used?
-----------------
GDAL encompasses many different capabilities, with support for more than 200 data formats, a large command line interface, and bindings to multiple programming languages.
Several questions were included in the survey to learn more about which parts of GDAL are most used.
Raster data formats
^^^^^^^^^^^^^^^^^^^
Among raster data formats, GeoTIFF continues to command an overwhelming majority of GDAL usage:
.. image:: ../../images/community/survey_2025/raster_data_formats.svg
Although difficult to see given the scale of the plot above, reported Zarr usage increased significantly between 2024 and 2025. More than a third of users expect to be using this format in the future, even if they are not using it currently.
.. image:: ../../images/community/survey_2025/raster_data_formats_future.svg
Vector data formats
^^^^^^^^^^^^^^^^^^^
The most popular vector formats remain GeoPackage, Shapefile, GeoJSON and PostGIS. The responses clearly show increasing adoption of GeoParquet.
.. image:: ../../images/community/survey_2025/vector_data_formats.svg
More than half of respondents anticipate using GeoParquet in the future:
.. image:: ../../images/community/survey_2025/vector_data_formats_future.svg
Local or cloud?
^^^^^^^^^^^^^^^^
.. image:: ../../images/community/survey_2025/local_or_cloud_1.svg
.. image:: ../../images/community/survey_2025/local_or_cloud_2.svg
Usage environments
------------------
Python remains the most common way for users to work with GDAL, with an approximately 50/50 split between the GDAL Python bindings and higher-level packages such as shapely, rasterio, and geopandas. Approximately a third of GDAL users work primarily with the โclassicโ command-line interface, followed by smaller numbers of using R and QGIS.
Although 41% of respondents reported using the new command line interface (introduced in the May 2025 release), fewer than 10% report that it is the most common way they use GDAL.
.. image:: ../../images/community/survey_2025/way_gdal_used.svg
Focus areas for GDAL development
--------------------------------
Several questions asked users for information about their difficulties working
with GDAL and ideas for future improvements to the software.
Difficulties using GDAL
^^^^^^^^^^^^^^^^^^^^^^^
Users did not identify a single area as a source of their challenges with GDAL. The top response of โfinding examplesโ indicates a continued shortage of documentation. Installation remains a persistent challenge for some users.
.. image:: ../../images/community/survey_2025/gdal_challenge.svg
Similarly โexamples,โ โdocumentation,โ and โinstallโ are often mentioned in the open-ended responses to โwhat could make GDAL easier to use?โ
.. image:: ../../images/community/survey_2025/gdal_easier_to_use.svg
Installation difficulties
^^^^^^^^^^^^^^^^^^^^^^^^^
Installation difficulties are not limited to a single platform, with a contingent of users across multiple platforms reporting challenges. Several responses to the โgeneral feedbackโ flagged Python installation as an area of difficulty, especially compared to third-party Python packages that use GDAL such as ``fiona`` and ``rasterio``.
.. image:: ../../images/community/survey_2025/easy_to_install_gdal.svg
Documentation needs
^^^^^^^^^^^^^^^^^^^
Respondents reported โexamplesโ, โworkflowsโ, and โAPI usageโ as high priorities for documentation efforts.
.. image:: ../../images/community/survey_2025/documentation_needs.svg
Sponsorship program activities
------------------------------
Among activities undertaken by the sponsorship program so far, respondents found the most value in enhancements to GDALโs dependencies (such as PROJ, GEOS, and libtiff), its Python bindings, and documentation.
About a third of users reported that the new command-line interface already improved their usability of GDAL.
.. image:: ../../images/community/survey_2025/maintenance_program_activities.svg
Respondents suggested similar areas of maintenance program focus in 2024 and 2025, with high value given to performance improvements, format compatibility, integration with other software, and continued (backwards-compatible!) command-line development.
.. image:: ../../images/community/survey_2025/maintenance_program_areas_of_focus.svg
Security
--------
Some questions about security issues were added to the 2025 survey.
Most users assess GDAL to be secure software, although 5% report that their usage of GDAL has been affected by security vulnerabilities.
.. image:: ../../images/community/survey_2025/is_gdal_secure.svg
LLM usage by GDAL developers and users
--------------------------------------
Most users (67%) consider it appropriate for GDAL code to be developed using LLMs. A smaller fraction (40%) report that LLMs have been helpful in their own usage of GDAL.
The areas where users support GDALโs LLM usage vary, with usage in code review and test development supported by a majority of users.
.. image:: ../../images/community/survey_2025/llm_use_areas.svg
---
### Doc Source Contributing Index (`doc/source/contributing/index.rst`)
.. _contributing:
================================================================================
How to contribute?
================================================================================
There are several ways for users to contribute to GDAL:
* :ref:`contributing code<development>` (bug fixes or enhancements)
* filing high-quality `bug reports <https://github.com/osgeo/gdal/issues>`_
* improving :ref:`documentation<dev_documentation>`
* :ref:`financial sponsorship<sponsors>`
---
### Doc Source Development Building From Source (`doc/source/development/building_from_source.rst`)
.. _building_from_source:
================================================================================
Building GDAL from source
================================================================================
.. _build_requirements:
Build requirements
--------------------------------------------------------------------------------
The minimum requirements to build GDAL are:
- CMake >= 3.16, and an associated build system (make, ninja, Visual Studio, etc.)
- C99 compiler
- C++17 compiler since GDAL 3.9 (C++11 in previous versions)
- PROJ >= 6.3.1
Additional requirements to run the GDAL test suite are:
- SWIG >= 4, for building bindings to other programming languages
- Python >= 3.8
- Python packages listed in `autotest/requirements.txt`
A number of optional libraries are also strongly recommended for most builds:
SQLite3, expat, libcurl, zlib, libtiff, libgeotiff, libpng, libjpeg, etc.
Consult :ref:`raster_drivers` and :ref:`vector_drivers` pages for information
on dependencies of optional drivers.
CMake (GDAL versions >= 3.5.0)
--------------------------------------------------------------------------------
Since version 3.5.0, GDAL can be built using the CMake build system.
With the CMake build system you can compile and install GDAL on more or less any
platform. After unpacking the source distribution archive (or cloning the repository)
step into the source tree:
.. code-block:: bash
cd gdal-{VERSION}
Create a build directory and step into it:
.. code-block:: bash
mkdir build
cd build
From the build directory you can now configure CMake, build and install the binaries:
.. code-block:: bash
cmake ..
cmake --build .
cmake --build . --target install
.. _minimal_build:
.. note::
For a minimal build, add these options to the initial ``cmake`` command: ``-DGDAL_BUILD_OPTIONAL_DRIVERS=OFF -DOGR_BUILD_OPTIONAL_DRIVERS=OFF``.
To enable specific drivers, add ``-DGDAL_ENABLE_DRIVER_<driver_name>=ON`` or ``-DOGR_ENABLE_DRIVER_<driver_name>=ON``.
See :ref:`selection-of-drivers` for more details.
.. note::
The ``--prefix /installation/prefix`` option of CMake (>= 3.14) is supported since GDAL 3.7.0,
but note that contrary to setting the CMAKE_INSTALL_PREFIX at configuration time,
it will not result in the GDAL_DATA path to be hardcoded into the libgdal binary,
and is thus not recommended. It is also not supported on Windows multi-configuration
generator (such as VisualStudio).
If a dependency is installed in a custom location, specify the
paths to the include directory and the library:
.. code-block:: bash
cmake -DSQLite3_INCLUDE_DIR=/opt/SQLite/include -DSQLite3_LIBRARY=/opt/SQLite/lib/libsqlite3.so ..
Alternatively, a custom prefix can be specified:
.. code-block:: bash
cmake -DCMAKE_PREFIX_PATH=/opt/SQLite ..
It is strongly recommended (and sometimes compulsory) to specify paths on Windows
using forward slashes as well, e.g.: ``c:/path/to/include``.
You can unset existing cached variables, by using the -U switch of cmake, for example with wildcards:
.. code-block:: bash
cmake .. -UGDAL_USE_*
You can assemble dependency settings in a file ``ConfigUser.cmake`` and use it with the -C option.
The file contains set() commands that use the CACHE option. You can set for example a different name
for the shared lib, *e.g.* ``set (GDAL_LIB_OUTPUT_NAME gdal_x64 CACHE STRING "" FORCE)``:
.. code-block:: bash
cmake .. -C ConfigUser.cmake
.. warning::
When iterating to configure GDAL to add/modify/remove dependencies,
some cache variables can remain in CMakeCache.txt from previous runs, and
conflict with new settings. If strange errors appear during cmake run,
you may try removing CMakeCache.txt to start from a clean state.
Refer to :ref:`using_gdal_in_cmake` for how to use GDAL in a CMake project.
To uninstall GDAL, from the build directory (be careful: this does not restore the files that pre-existed to the last installation, but just removes the last installed files!)
.. code-block:: bash
cmake --build . --target uninstall
Building on Windows
+++++++++++++++++++
On Windows, one may need to specify generator:
.. code-block:: bash
cmake -G "Visual Studio 15 2017" ..
Building on MacOS
+++++++++++++++++
On MacOS, there are a couple of libraries that do not function properly when the GDAL build requirements are installed using Homebrew.
The `Apache Arrow <https://arrow.apache.org/docs/index.html>`_ library included in the current distribution of Homebrew is broken, and causes a detection issue. In order to build GDAL successfully, configure CMake to not find the Arrow package:
.. code-block:: bash
cmake -DCMAKE_DISABLE_FIND_PACKAGE_Arrow=ON ..
Similarly, recent versions of Homebrew no longer bundle `Boost <https://www.boost.org/>`_ with libkml, causing a failure to find Boost headers. You should either install Boost manually or disable libkml when building on MacOS:
.. code-block:: bash
cmake -DGDAL_USE_LIBKML=OFF ..
The following commands have been used to successfully build GDAL using dependencies fetched
from Conda that supports unit tests. They assume that you have git, cmake and ninja installed
and that you're building from a `build` directory that you've created in the main directory
of the cloned GDAL repository.
.. code-block:: bash
conda create -c conda-forge --only-deps -n gdal libgdal-core
conda activate gdal
conda install -c conda-forge setuptools swig pytest filelock numpy
cmake -G Ninja -DCMAKE_PREFIX_PATH=$CONDA_PREFIX -DGDAL_USE_LIBKML=OFF ..
. ../scripts/setdevenv.sh
ninja
CMake general configure options
+++++++++++++++++++++++++++++++
Options to configure a CMake are provided using ``-D<var>=<value>``.
All cached entries can be viewed using ``cmake -LAH`` from a build directory.
.. option:: BUILD_APPS=ON
Build applications. Default is ON.
.. option:: BUILD_SHARED_LIBS
Build GDAL library shared. Default is ON. See also the CMake
documentation for `BUILD_SHARED_LIBS
<https://cmake.org/cmake/help/v3.10/variable/BUILD_SHARED_LIBS.html>`_.
.. option:: CMAKE_BUILD_TYPE
Choose the type of build, options are: None (default), Debug, Release,
RelWithDebInfo, or MinSizeRel. See also the CMake documentation for
`CMAKE_BUILD_TYPE
<https://cmake.org/cmake/help/v3.10/variable/CMAKE_BUILD_TYPE.html>`_.
.. note::
A default build is not optimized without specifying
``-DCMAKE_BUILD_TYPE=Release`` (or similar) during configuration,
or by specifying ``--config Release`` with CMake
multi-configuration build tools (see example below).
.. option:: CMAKE_C_COMPILER
C compiler. Ignored for some generators, such as Visual Studio.
.. option:: CMAKE_C_FLAGS
Flags used by the C compiler during all build types. This is
initialized by the :envvar:`CFLAGS` environment variable.
.. option:: CMAKE_CXX_COMPILER
C++ compiler. Ignored for some generators, such as Visual Studio.
.. option:: CMAKE_CXX_FLAGS
Flags used by the C++ compiler during all build types. This is
initialized by the :envvar:`CXXFLAGS` environment variable.
.. option:: CMAKE_INSTALL_PREFIX
Where to install the software.
Default for Unix-like is ``/usr/local/``.
.. option:: CMAKE_PREFIX_PATH
List of directories specifying installation prefixes to be searched when
external dependencies are looked for.
Starting with CMake 3.12, it is also possible to use a
``_ROOT`` variable to define the prefix for a particular
package. See https://cmake.org/cmake/help/latest/release/3.12.html?highlight=root#commands
.. option:: CMAKE_UNITY_BUILD=OFF
.. versionadded:: 3.9
Default is OFF. This can be set to ON to build GDAL using the
https://cmake.org/cmake/help/latest/variable/CMAKE_UNITY_BUILD.html feature.
This helps speeding GDAL build times. This feature is still considered
experimental for now, and could hide subtle bugs (we are not aware of
any at writing time though). We don't recommend it for mission critical
builds.
.. option:: ENABLE_IPO=OFF
Build library using the compiler's `interprocedural optimization
<https://en.wikipedia.org/wiki/Interprocedural_optimization>`_
(IPO), if available, default OFF.
.. option:: GDAL_SET_INSTALL_RELATIVE_RPATH=OFF
Set to ON so that the rpath of installed binaries is written as a relative
path to the library. This option overrides the
`CMAKE_INSTALL_RPATH <https://cmake.org/cmake/help/latest/variable/CMAKE_INSTALL_RPATH.html>`__
variable, and assumes that the
`CMAKE_SKIP_INSTALL_RPATH <https://cmake.org/cmake/help/latest/variable/CMAKE_SKIP_INSTALL_RPATH.html>`__
variable is not set.
.. option:: USE_CCACHE=ON
Whether cached build using `ccache <https://ccache.dev/>`__ should be enabled.
This defaults to ON when :program:`ccache` is found.
.. option:: USE_PRECOMPILED_HEADER=OFF
Whether builds with precompiled headers should be enabled. This may speed
up the build process. This is still a bit experimental, so it is disabled by
default. It also cannot be enabled when using the Visual Studio C++ compiler.
.. option:: GDAL_ENABLE_ALGORITHMS=ON
Whether algorithms available under the :ref:`gdal <gdal_program>` entry point
are compiled in. Default is ON. Note that setting it to OFF will disable will
disable building the ogrtindex utility.
Resource files embedding
++++++++++++++++++++++++
Starting with GDAL 3.11, if a C23-compatible compiler is used, such as
clang >= 19 or GCC >= 15, it is possible to embed resource files inside
the GDAL library, without relying on resource files to be available on the file
system (such resource files are located through an hard-coded
path at build time in ``${CMAKE_INSTALL_PREFIX}/share/gdal``, or at run-time
through the :config:`GDAL_DATA` configuration option).
The following CMake options control that behavior:
.. option:: EMBED_RESOURCE_FILES=ON/OFF
.. versionadded:: 3.11
Default is OFF for shared library builds (BUILD_SHARED_LIBS=ON), and ON
for static library builds (BUILD_SHARED_LIBS=OFF).
When ON, resource files needed by GDAL will be embedded into the GDAL library
and/or relevant plugins.
.. option:: USE_ONLY_EMBEDDED_RESOURCE_FILES=ON/OFF
.. versionadded:: 3.11
Even if EMBED_RESOURCE_FILES=ON, GDAL will still try to locate resource
files on the file system by default , and fallback to the embedded version if
not found. By setting USE_ONLY_EMBEDDED_RESOURCE_FILES=ON, no attempt
at locating resource files on the file system is made. Default is OFF.
CMake package dependent options
+++++++++++++++++++++++++++++++
.. Put packages in alphabetic order.
Generally speaking, packages (external dependencies) will be automatically found if
they are in default locations used by CMake. This can also be tuned for example
with the ``CMAKE_PREFIX_PATH`` variable.
Starting with CMake 3.12, it is also possible to use a
``_ROOT`` variable to define the prefix for a particular
package. See https://cmake.org/cmake/help/latest/release/3.12.html?highlight=root#commands
Note that the case of the package name matters for the _ROOT, _INCLUDE_DIR
and _LIBRARY variables.
Most dependencies that would be found can also be disabled by setting the
following option:
.. option:: GDAL_USE_:BOOL=ON/OFF
Control whether a found dependency can be used for the GDAL build.
Note that CMake will still attempt to detect a package even if it has been disabled.
It is also possible to ask GDAL to disable the use of any external dependency
(besides the required one, PROJ) by default by setting the following option to
OFF. Individual libraries shall then be enabled explicitly with
GDAL_USE_:BOOL=ON.
.. option:: GDAL_USE_EXTERNAL_LIBS:BOOL=ON/OFF
Defaults to ON. When set to OFF, all external dependencies (but mandatory
ones) will be disabled, unless individually enabled with
GDAL_USE_:BOOL=ON.
This option should be set before CMakeCache.txt is created. If it is set
to OFF after CMakeCache.txt is created, then cmake should be reinvoked with
"-UGDAL_USE_*" to cancel the activation of previously detected libraries.
Some of the GDAL dependencies (GEOTIFF, GIF, JPEG, JSONC, LERC, OPENCAD, PNG, QHULL, TIFF, ZLIB)
have a copy of their source code inside the GDAL source code tree. It is possible
to enable this internal copy by setting the GDAL_USE__INTERNAL:BOOL=ON
variable. When set, this has precedence over the external library that may be
detected. The behavior can also be globally controlled with the following variable:
.. option:: GDAL_USE_INTERNAL_LIBS=ON/OFF/WHEN_NO_EXTERNAL
Control how internal libraries should be used.
If set to ON, they will always be used.
If set to OFF, they will never be used (unless individually enabled with
GDAL_USE__INTERNAL:BOOL=ON)
If set to WHEN_NO_EXTERNAL (default value), they will be used only if no
corresponding external library is found and enabled.
This option should be set before CMakeCache.txt is created.
.. note::
Using together GDAL_USE_EXTERNAL_LIBS=OFF and GDAL_USE_INTERNAL_LIBS=OFF
will result in a CMake configuration failure, because the following libraries
(either as external dependencies or using the internal copy) are at least
required: ZLIB, TIFF, GEOTIFF and JSONC. Enabling them as external or internal
libraries is thus required.
Archive
*******
`libarchive <https://www.libarchive.org/>`_ is a library that supports a variety
of archive and compression formats. It might be used since GDAL 3.7 to enable
the :ref:`/vsi7z/ <vsi7z>` virtual file system.
.. option:: ARCHIVE_INCLUDE_DIR
Path to an include directory with the ``archive.h`` header file.
.. option:: ARCHIVE_LIBRARY
Path to a shared or static library file.
.. option:: GDAL_USE_ARCHIVE=ON/OFF
Control whether to use libarchive. Defaults to ON when libarchive is found.
Armadillo
*********
The `Armadillo <http://arma.sourceforge.net/>`_ C++ library is used to speed up computations related to the
Thin Plate Spline transformer. See https://cmake.org/cmake/help/latest/module/FindArmadillo.html
for details.
On Windows builds using Conda-Forge dependencies, the following packages may also
need to be installed: ``blas blas-devel libblas libcblas liblapack liblapacke``
.. option:: GDAL_USE_ARMADILLO=ON/OFF
Control whether to use Armadillo. Defaults to ON when Armadillo is found.
Arrow
*****
The `Apache Arrow C++ <https://github.com/apache/arrow/tree/master/cpp>`__ library
is required for the :ref:`vector.arrow` and :ref:`vector.parquet` drivers.
Specify install prefix in the ``CMAKE_PREFIX_PATH`` variable.
.. option:: GDAL_USE_ARROW=ON/OFF
Control whether to use Arrow. Defaults to ON when Arrow is found.
.. option:: ARROW_USE_STATIC_LIBRARIES=ON/OFF
Control whether to use statically built Arrow libraries. Defaults to OFF when Arrow is found.
basisu
******
The `Basis Universal <https://github.com/rouault/basis_universal/tree/cmake>`__ library
is required for the :ref:`raster.basisu` and :ref:`raster.ktx2` drivers.
Specify install prefix in the ``CMAKE_PREFIX_PATH`` variable or ``basisu_ROOT`` variable.
.. option:: GDAL_USE_BASISU=ON/OFF
Control whether to use basisu. Defaults to ON when basisu is found.
Blosc
*****
`Blosc <https://github.com/Blosc/c-blosc>`_ is a library which offers
a meta-compression, with different backends (LZ4, Snappy, Zlib, Zstd, etc.).
It is used by the :ref:`raster.zarr` driver.
.. option:: BLOSC_INCLUDE_DIR
Path to an include directory with the ``blosc.h`` header file.
.. option:: BLOSC_LIBRARY
Path to a shared or static library file.
.. option:: GDAL_USE_BLOSC=ON/OFF
Control whether to use Blosc. Defaults to ON when Blosc is found.
BRUNSLI
*******
The `Brunsli <https://github.com/google/brunsli>`_ JPEG repacking library, used
by the :ref:`raster.marfa` driver.
.. option:: BRUNSLI_INCLUDE_DIR
Path to an include directory with the ``brunsli/decode.h`` and ``brunsli\encode.h`` header files.
.. option:: BRUNSLI_ENC_LIB
Path to the brunslienc-c library file.
.. option:: BRUNSLI_DEC_LIB
Path to the brunslidec-c library file.
.. option:: GDAL_USE_BRUNSLI=ON/OFF
Control whether to use BRUNSLI. Defaults to ON when Brunsli is found.
CFITSIO
*******
The `C FITS I/O <https://heasarc.gsfc.nasa.gov/fitsio/>`_ library is required for the :ref:`raster.fits` driver.
It can be detected with pkg-config.
.. option:: CFITSIO_INCLUDE_DIR
Path to an include directory with the ``fitsio.h`` header file.
.. option:: CFITSIO_LIBRARY
Path to a shared or static library file.
.. option:: GDAL_USE_CFITSIO=ON/OFF
Control whether to use CFITSIO. Defaults to ON when CFITSIO is found.
Crnlib
******
`Crnlib / crunch <https://github.com/rouault/crunch/tree/build_fixes>`_ is
required for the :ref:`raster.dds` driver.
.. option:: Crnlib_INCLUDE_DIR
Path to Crnlib include directory with ``crunch/crnlib.h`` header.
.. option:: Crnlib_LIBRARY
Path to Crnlib library to be linked.
.. option:: GDAL_USE_CRNLIB=ON/OFF
Control whether to use Crnlib. Defaults to ON when Crnlib is found.
CURL
****
`libcurl <https://curl.se/>`_ is required for all network accesses (HTTP, etc.).
.. option:: CURL_INCLUDE_DIR
Path to an include directory with the ``curl`` directory.
.. option:: CURL_LIBRARY_RELEASE
Path to a shared or static library file, such as
``libcurl.so``, ``libcurl.lib``, or other name.
.. option:: CURL_USE_STATIC_LIBS=ON/OFF
.. versionadded:: 3.7.1
Must be set to ON when linking against a static build of Curl.
.. option:: GDAL_USE_CURL=ON/OFF
Control whether to use Curl. Defaults to ON when Curl is found.
CryptoPP
********
The `Crypto++ <https://github.com/weidai11/cryptopp>`_ library can be used for the RSA SHA256 signing
functionality used by some authentication methods of Google Cloud. It might be
required to use the :ref:`raster.eedai` images or use the :ref:`/vsigs/ <vsigs>` virtual file
system.
It is also required for the :ref:`/vsicrypt/ <vsicrypt>` virtual file system.
.. option:: CRYPTOPP_INCLUDE_DIR
Path to the base include directory.
.. option:: CRYPTOPP_LIBRARY_RELEASE
Path to a shared or static library file. A similar variable
``CRYPTOPP_LIBRARY_DEBUG`` can also be specified to a similar library for
building Debug releases.
.. option:: CRYPTOPP_USE_ONLY_CRYPTODLL_ALG=ON/OFF
Defaults to OFF. Might be required to set to ON when linking against
cryptopp.dll
.. option:: GDAL_USE_CRYPTOPP=ON/OFF
Control whether to use CryptoPP. Defaults to ON when CryptoPP is found.
Deflate
*******
`libdeflate <https://github.com/ebiggers/libdeflate>`_ is a compression library
which offers the lossless Deflate/Zip compression algorithm.
It offers faster performance than ZLib, but is not a full replacement for it,
consequently it must be used as a complement to ZLib.
.. option:: Deflate_INCLUDE_DIR
Path to an include directory with the ``libdeflate.h`` header file.
.. option:: Deflate_LIBRARY_RELEASE
Path to a shared or static library file. A similar variable
``Deflate_LIBRARY_DEBUG`` can also be specified to a similar library for
building Debug releases.
.. option:: GDAL_USE_DEFLATE=ON/OFF
Control whether to use Deflate. Defaults to ON when Deflate is found.
ECW
***
The Hexagon ECW SDK (closed source/proprietary) is required for the :ref:`raster.ecw` driver.
Currently only support for ECW SDK 3.3 and 5.5 is offered.
For ECW SDK 5.5, ECW_ROOT or CMAKE_PREFIX_PATH should point to the directory
into which there are include and lib subdirectories, typically
ending with ERDAS-ECW_JPEG_2000_SDK-5.5.0/Desktop_Read-Only.
.. option:: ECW_INCLUDE_DIR
Path to the include directory with the ``NCSECWClient.h`` header file.
.. option:: ECW_LIBRARY
Path to library file libNCSEcw
.. option:: ECWnet_LIBRARY
Path to library file libNCSCnet (only needed for SDK 3.3)
.. option:: ECWC_LIBRARY
Path to library file libNCSEcwC (only needed for SDK 3.3)
.. option:: NCSUtil_LIBRARY
Path to library file libNCSUtil (only needed for SDK 3.3)
.. option:: GDAL_USE_ECW=ON/OFF
Control whether to use ECW. Defaults to ON when ECW is found.
EXPAT
*****
`Expat <https://github.com/libexpat/libexpat>`_ is a stream-oriented XML parser
library which is required to enable XML parsing capabilities in an important
number of OGR drivers (GML, GeoRSS, GPX, KML, LVBAG, OSM, ODS, SVG, WFS, XSLX, etc.).
It is strongly recommended. Other driver such as ILI or GMLAS may also require
the XercesC library.
.. option:: EXPAT_INCLUDE_DIR
Path to the include directory with the ``expat.h`` header file.
.. option:: EXPAT_LIBRARY
Path to a shared or static library file.
.. option:: EXPAT_USE_STATIC_LIBS=ON/OFF
.. versionadded:: 3.7.1
Must be set to ON when linking against a static build of Expat.
.. option:: GDAL_USE_EXPAT=ON/OFF
Control whether to use EXPAT. Defaults to ON when EXPAT is found.
ExprTk
******
`ExprTk <https://www.partow.net/programming/exprtk/index.html>`__ is a
mathematical expression parser and evaluation engine. It can be used by the
:ref:`raster.vrt` driver. Building with ExprTk may increase the size of the
GDAL library by several megabytes.
.. option:: GDAL_USE_EXPRTK=ON/OFF
Control whether to use ExprTk. Defaults to OFF even if ExprTk is found.
.. option:: EXPRTK_INCLUDE_DIR
Path to the include directory with the :file:`exprtk.hpp` header file.
FileGDB
*******
The `FileGDB SDK <https://github.com/Esri/file-geodatabase-api>`_ (closed source/proprietary)
is required for the :ref:`vector.filegdb` driver (not to be confused with
the :ref:`vector.openfilegdb` driver that has no external requirements)
FileGDB_ROOT or CMAKE_PREFIX_PATH should point to the directory of the SDK.
.. option:: FileGDB_INCLUDE_DIR
Path to the include directory with the ``FileGDBAPI.h`` header file.
.. option:: FileGDB_LIBRARY
Path to library file
.. option:: FileGDB_LIBRARY_RELEASE
Path to Release library file (only used on Windows)
.. option:: FileGDB_LIBRARY_DEBUG
Path to Debug library file (only used on Windows)
.. option:: GDAL_USE_FILEGDB=ON/OFF
Control whether to use FileGDB. Defaults to ON when FileGDB is found.
FreeXL
******
The `FreeXL <https://www.gaia-gis.it/fossil/freexl/index>`_ library is required
for the :ref:`vector.xls` driver.
.. option:: FREEXL_INCLUDE_DIR
Path to an include directory with the ``freexl.h`` header file.
.. option:: FREEXL_LIBRARY
Path to a shared or static library file.
.. option:: GDAL_USE_FREEXL=ON/OFF
Control whether to use FreeXL. Defaults to ON when FreeXL is found.
FYBA
****
The `OpenFyba <https://github.com/kartverket/fyba>`_ libraries are needed to build the :ref:`vector.sosi` driver.
.. option:: FYBA_INCLUDE_DIR
Path to an include directory with the ``fyba.h`` header file.
.. option:: FYBA_FYBA_LIBRARY
Path to a library file ``fyba``
.. option:: FYBA_FYGM_LIBRARY
Path to a library file ``fygm``
.. option:: FYBA_FYUT_LIBRARY
Path to a library file ``fyut``
.. option:: GDAL_USE_FYBA=ON/OFF
Control whether to use FYBA. Defaults to ON when FYBA is found.
GEOTIFF
*******
It is required for the :ref:`raster.gtiff` drivers, and a few other drivers.
If not found, an internal copy of libgeotiff can be used.
.. option:: GEOTIFF_INCLUDE_DIR
Path to an include directory with the libgeotiff header files.
.. option:: GEOTIFF_LIBRARY_RELEASE
Path to a shared or static library file, such as
``libgeotiff.so``, ``geotiff.lib``, or other name. A similar variable
``GEOTIFF_LIBRARY_DEBUG`` can also be specified to a similar library for
building Debug releases.
.. option:: GDAL_USE_GEOTIFF=ON/OFF
Control whether to use external libgeotiff. Defaults to ON when external libgeotiff is found.
.. option:: GDAL_USE_GEOTIFF_INTERNAL=ON/OFF
Control whether to use internal libgeotiff copy. Defaults depends on GDAL_USE_INTERNAL_LIBS. When set
to ON, has precedence over GDAL_USE_GEOTIFF=ON
GEOS
****
`GEOS <https://github.com/libgeos/geos>`_ is a C++ library for performing operations
on two-dimensional vector geometries. It is used as the backend for most geometry
processing operations available in OGR (intersection, buffer, etc.).
The ``geos-config`` program can be used to detect it.
.. option:: GEOS_INCLUDE_DIR
Path to an include directory with the ``geos_c.h`` header file.
.. option:: GEOS_LIBRARY
Path to a shared or static library file (libgeos_c).
.. option:: GDAL_USE_GEOS=ON/OFF
Control whether to use GEOS. Defaults to ON when GEOS is found.
GIF
***
`giflib <http://giflib.sourceforge.net/>`_ is required for the :ref:`raster.gif` driver.
If not found, an internal copy can be used.
.. option:: GIF_INCLUDE_DIR
Path to an include directory with the ``gif_lib.h`` header file.
.. option:: GIF_LIBRARY
Path to a shared or static library file.
.. option:: GDAL_USE_GIF=ON/OFF
Control whether to use external giflib. Defaults to ON when external giflib is found.
.. option:: GDAL_USE_GIF_INTERNAL=ON/OFF
Control whether to use internal giflib copy. Defaults depends on GDAL_USE_INTERNAL_LIBS. When set
to ON, has precedence over GDAL_USE_GIF=ON
GTA
***
The `GTA <https://marlam.de/gta/>`_ library is required for the :ref:`raster.gta` driver.
.. option:: GTA_INCLUDE_DIR
Path to an include directory with the ``gta/gta.h`` header file.
.. option:: GTA_LIBRARY
Path to a shared or static library file.
.. option:: GDAL_USE_GTA=ON/OFF
Control whether to use GTA. Defaults to ON when GTA is found.
Grok
****
The `Grok <https://github.com/GrokImageCompression/grok>`_ (>= 20.2) library is an
open-source JPEG-2000 codec. It is required for the :ref:`raster.jp2grok` driver.
It can be detected with pkg-config.
.. option:: GROK_INCLUDE_DIR
Path to an include directory with the ``grk_config.h`` header file.
.. option:: GROK_LIBRARY
Path to a shared or static library file.
.. option:: GDAL_USE_GROK=ON/OFF
Control whether to use Grok. Defaults to ON when Grok is found.
HEIF
****
The `HEIF <https://github.com/strukturag/libheif>`_ (>= 1.1) library used by the :ref:`raster.heif` driver.
It can be detected with pkg-config.
.. option:: HEIF_INCLUDE_DIR
Path to an include directory with the ``libheif/heif.h`` header file.
.. option:: HEIF_LIBRARY
Path to a shared or static library file.
.. option:: GDAL_USE_HEIF=ON/OFF
Control whether to use HEIF. Defaults to ON when HEIF is found.
HDF4
****
The `HDF4 <https://support.hdfgroup.org/products/hdf4/>`_ C library is needed
for the :ref:`raster.hdf4` driver.
.. option:: HDF4_INCLUDE_DIR
Path to an include directory with the ``hdf.h`` header file.
.. option:: HDF4_df_LIBRARY_RELEASE
Path to a shared or static ``dfalt`` or ``df`` library file. A similar variable
``HDF4_df_LIBRARY_DEBUG`` can also be specified to a similar library for
building Debug releases.
.. option:: HDF4_mfhdf_LIBRARY_RELEASE
Path to a shared or static ``mfhdfalt`` or ``mfhdf`` library file. A similar variable
``HDF4_mfhdf_LIBRARY_DEBUG`` can also be specified to a similar library for
building Debug releases.
.. option:: HDF4_xdr_LIBRARY_RELEASE
Path to a shared or static ``xdr`` library file. A similar variable
``HDF4_xdr_LIBRARY_DEBUG`` can also be specified to a similar library for
building Debug releases.
It is generally not needed for Linux builds
.. option:: HDF4_szip_LIBRARY_RELEASE
Path to a shared or static ``szip`` library file. A similar variable
``HDF4_szip_LIBRARY_DEBUG`` can also be specified to a similar library for
building Debug releases.
It is generally not needed for Linux builds
.. option:: HDF4_COMPONENTS
The value of this option is a list which defaults to ``df;mfhdf;xdr;szip``.
It may be customized if the linking of HDF4 require different libraries,
in which case HDF4_{comp_name}_LIBRARY_[RELEASE/DEBUG] variables will be
available to configure the library file.
.. option:: GDAL_USE_HDF4=ON/OFF
Control whether to use HDF4. Defaults to ON when HDF4 is found.
HDF5
****
The `HDF5 <https://github.com/HDFGroup/hdf5>`_ C library is needed for the
:ref:`raster.hdf5` and :ref:`raster.bag` drivers.
The HDF5 CXX library is needed for the :ref:`raster.kea` driver.
The https://cmake.org/cmake/help/latest/module/FindHDF5.html module is used to
detect the HDF5 library.
.. option:: GDAL_USE_HDF5=ON/OFF
Control whether to use HDF5. Defaults to ON when HDF5 is found.
.. option:: GDAL_ENABLE_HDF5_GLOBAL_LOCK=ON/OFF
Control whether to add a global lock around calls to HDF5 library. This is
needed if the HDF5 library is not built with thread-safety enabled and if
the HDF5 driver is used in a multi-threaded way. On Unix, a heuristics
try to detect if the HDF5 library has been built with thread-safety enabled
when linking against a HDF5 library. In other situations, the setting must
be manually set when needed.
.. _building_from_source_hdfs:
HDFS
****
The `Hadoop File System <https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/LibHdfs.html>`_ native library is needed
for the :ref:`/vsihdfs/ <vsihdfs>` virtual file system.
.. option:: HDFS_INCLUDE_DIR
Path to an include directory with the ``hdfs.h`` header file.
.. option:: HDFS_LIBRARY
Path to a shared or static ``hdfs`` library file.
.. option:: GDAL_USE_HDFS=ON/OFF
Control whether to use HDFS. Defaults to ON when HDFS is found.
Iconv
*****
The `Iconv <https://www.gnu.org/software/libiconv/>`_ library is used to convert
text from one encoding to another encoding.
It is generally available as a system library for Unix-like systems. On Windows,
GDAL can leverage the API of the operating system for a few base conversions,
but using Iconv will provide additional capabilities.
.. option:: Iconv_INCLUDE_DIR
Path to an include directory with the ``iconv.h`` header file.
.. option:: Iconv_LIBRARY
Path to a shared or static library file.
.. option:: GDAL_USE_ICONV=ON/OFF
Control whether to use Iconv. Defaults to ON when Iconv is found.
IDB
***
The Informix DataBase Client SDK (closed source/proprietary) is needed to build
the :ref:`vector.idb` driver.
IDB_ROOT or CMAKE_PREFIX_PATH should point to the directory of the SDK.
.. option:: IDB_INCLUDE_DIR
Path to an include directory (typically ending with ``incl``) with the ``c++/it.h`` header file.
.. option:: IDB_IFCPP_LIBRARY
Path to a library file ``ifc++`` (typically in the ``lib/c++`` sub directory)
.. option:: IDB_IFDMI_LIBRARY
Path to a library file ``ifdmi`` (typically in the ``lib/dmi`` sub directory)
.. option:: IDB_IFSQL_LIBRARY
Path to a library file ``ifsql`` (typically in the ``lib/esql`` sub directory)
.. option:: IDB_IFCLI_LIBRARY
Path to a library file ``ifcli`` (typically in the ``lib/cli`` sub directory)
.. option:: GDAL_USE_IDB=ON/OFF
Control whether to use IDB. Defaults to ON when IDB is found.
JPEG
****
libjpeg is required for the :ref:`raster.jpeg` driver, and may be used by a few
other drivers (:ref:`raster.gpkg`, :ref:`raster.marfa`, internal libtiff, etc.)
If not found, an internal copy of libjpeg (6b) can be used.
Using `libjpeg-turbo <https://github.com/libjpeg-turbo/libjpeg-turbo>`_ is highly
recommended to get best performance.
See https://cmake.org/cmake/help/latest/module/FindJPEG.html for more details
on how the library is detected.
.. note::
When using libjpeg-turbo, JPEG_LIBRARY[_RELEASE/_DEBUG] should point to a
library with libjpeg ABI, not TurboJPEG.
See https://libjpeg-turbo.org/About/TurboJPEG for the difference.
.. option:: JPEG_INCLUDE_DIR
Path to an include directory with the ``jpeglib.h`` header file.
.. option:: JPEG_LIBRARY_RELEASE
Path to a shared or static library file. A similar variable
``JPEG_LIBRARY_DEBUG`` can also be specified to a similar library for
building Debug releases.
.. option:: GDAL_USE_JPEG=ON/OFF
Control whether to use external libjpeg. Defaults to ON when external libjpeg is found.
.. option:: GDAL_USE_JPEG_INTERNAL=ON/OFF
Control whether to use internal libjpeg copy. Defaults depends on GDAL_USE_INTERNAL_LIBS. When set
to ON, has precedence over GDAL_USE_JPEG=ON
.. option:: EXPECTED_JPEG_LIB_VERSION=number
Used with external libjpeg. number is for example 80, for libjpeg 8 ABI.
This can be used to check a build time that the expected JPEG library is
the one that is included by GDAL.
JPEG12
******
libjpeg-12 bit can be used by the :ref:`raster.jpeg`, :ref:`raster.gtiff` (when using internal libtiff),
:ref:`raster.jpeg`, :ref:`raster.marfa` and :ref:`raster.nitf` drivers to handle
JPEG images with a 12 bit depth. It is only supported with the internal libjpeg (6b).
This can be used independently of if for regular 8 bit JPEG an external or internal
libjpeg is used.
.. option:: GDAL_USE_JPEG12_INTERNAL=ON/OFF
Control whether to use internal libjpeg-12 copy. Defaults to ON.
.. note::
Starting with GDAL 3.7, if using libjpeg-turbo >= 2.2, which adds native
support for dual 8/12-bit, using internal libjpeg-12 is no longer needed to
get 12-bit JPEG support in the JPEG, MRF, NITF or GeoTIFF (when built with
internal libtiff) drivers. If using external libtiff, libtiff >= 4.5
built against libjpeg-turbo >= 2.2 is needed to get 12-bit JPEG support in the
GeoTIFF support.
JSON-C
******
The `json-c <https://github.com/json-c/json-c>`_ library is required to read and
write JSON content.
It can be detected with pkg-config.
If not found, an internal copy of json-c can be used.
.. option:: JSONC_INCLUDE_DIR
Path to an include directory with the ``json.h`` header file.
.. option:: JSONC_LIBRARY
Path to a shared or static library file.
.. option:: GDAL_USE_JSONC=ON/OFF
Control whether to use JSON-C. Defaults to ON when JSON-C is found.
.. option:: GDAL_USE_JSONC_INTERNAL=ON/OFF
Control whether to use internal JSON-C copy. Defaults depends on GDAL_USE_INTERNAL_LIBS. When set
to ON, has precedence over GDAL_USE_JSONC=ON
JXL
***
The `libjxl <https://github.com/libjxl/libjxl>`__ library used by the
:ref:`raster.gtiff` driver, when built against internal libtiff.
It can be detected with pkg-config.
.. option:: JXL_INCLUDE_DIR
Path to an include directory with the ``jxl/decode.h`` header file.
.. option:: JXL_LIBRARY
Path to a shared or static library file.
.. option:: GDAL_USE_JXL=ON/OFF
Control whether to use JXL. Defaults to ON when JXL is found.
KDU
***
The Kakadu library (proprietary) is required for the :ref:`raster.jp2kak` and
:ref:`raster.jpipkak` drivers.
There is no standardized installation layout, nor fixed library file names, so finding
Kakadu artifacts is a bit challenging. Currently automatic finding of it from
the KDU_ROOT variable is only implemented for Linux, Mac and Windows x86_64
builds. For other platforms, users need to manually specify the KDU_LIBRARY
and KDU_AUX_LIBRARY variable.
.. option:: KDU_INCLUDE_DIR
Path to the root of the Kakadu build tree, from which the
``coresys/common/kdu_elementary.h`` header file should be found.
.. option:: KDU_LIBRARY
Path to a shared library file whose name is like libkdu_vXYR.so on Unix
or kdu_vXYR.lib on Windows, where X.Y is the Kakadu version.
.. option:: KDU_AUX_LIBRARY
Path to a shared library file whose name is like libkdu_aXYR.so on Unix
or kdu_aXYR.lib on Windows, where X.Y is the Kakadu version.
.. option:: GDAL_USE_KDU=ON/OFF
Control whether to use KDU. Defaults to ON when KDU is found.
KEA
***
The `KEA <http://www.kealib.org/>`_ library is required for the :ref:`raster.kea`
driver. The HDF5 CXX library is also required.
.. option:: KEA_INCLUDE_DIR
Path to an include directory with the ``libkea/KEACommon.h`` header file.
.. option:: KEA_LIBRARY
Path to a shared or static library file.
.. option:: GDAL_USE_KEA=ON/OFF
Control whether to use KEA. Defaults to ON when KEA is found.
LERC
****
`LERC <https://github.com/esri/lerc>`_ is an open-source image or raster format
which supports rapid encoding and decoding for any pixel type (not just RGB or Byte).
Users set the maximum compression error per pixel while encoding, so the precision
of the original input image is preserved (within user defined error bounds).
.. option:: LERC_INCLUDE_DIR
Path to an include directory with the ``Lerc_c_api.h`` header file.
.. option:: LERC_LIBRARY
Path to a shared or static library file.
.. option:: GDAL_USE_LERC=ON/OFF
Control whether to use LERC. Defaults to ON when LERC is found.
.. option:: GDAL_USE_LERC_INTERNAL=ON/OFF
Control whether to use the LERC internal library. Defaults depends on GDAL_USE_INTERNAL_LIBS. When set
to ON, has precedence over GDAL_USE_LERC=ON
LIBAEC
******
`libaec <https://gitlab.dkrz.de/k202009/libaec>`_ is a compression library which offers
the extended Golomb-Rice coding as defined in the CCSDS recommended standard 121.0-B-3.
It is used by the :ref:`raster.grib` driver.
.. option:: LIBAEC_INCLUDE_DIR
Path to an include directory with the ``libaec.h`` header file.
.. option:: LIBAEC_LIBRARY
Path to a shared or static library file.
.. option:: GDAL_USE_LIBAEC=ON/OFF
Control whether to use LIBAEC. Defaults to ON when LIBAEC is found.
LibKML
******
`LibKML <https://github.com/libkml/libkml>`_ is required for the :ref:`vector.libkml` driver.
It can be detected with pkg-config.
.. option:: LIBKML_INCLUDE_DIR
Path to the base include directory.
.. option:: LIBKML_BASE_LIBRARY
Path to a shared or static library file for ``kmlbase``
.. option:: LIBKML_DOM_LIBRARY
Path to a shared or static library file for ``kmldom``
.. option:: LIBKML_ENGINE_LIBRARY
Path to a shared or static library file for ``kmlengine``
.. option:: LIBKML_MINIZIP_LIBRARY
Path to a shared or static library file for ``minizip``
.. option:: LIBKML_URIPARSER_LIBRARY
Path to a shared or static library file for ``uriparser``
.. option:: GDAL_USE_LIBKML=ON/OFF
Control whether to use LibKML. Defaults to ON when LibKML is found.
LibLZMA
*******
`LibLZMA <https://tukaani.org/xz/>`_ is a compression library which offers
the lossless LZMA2 compression algorithm.
It is used by the internal libtiff library or the :ref:`raster.zarr` driver.
.. option:: LIBLZMA_INCLUDE_DIR
Path to an include directory with the ``lzma.h`` header file.
.. option:: LIBLZMA_LIBRARY
Path to a shared or static library file.
.. option:: GDAL_USE_LIBLZMA=ON/OFF
Control whether to use LibLZMA. Defaults to ON when LibLZMA is found.
libOpenDRIVE
************
`libOpenDRIVE <https://github.com/pageldev/libOpenDRIVE>`_ in version >= 0.6.0 is required for the :ref:`vector.xodr` driver.
.. option:: OpenDrive_DIR
Path to libOpenDRIVE CMake configuration directory ``/cmake/``. The :file:`cmake/` path is usually automatically created when installing libOpenDRIVE and contains the necessary configuration files for inclusion into other project builds.
.. option:: GDAL_USE_OPENDRIVE=ON/OFF
Control whether to use libOpenDRIVE. Defaults to ON when libOpenDRIVE is found.
LibQB3
******
The `QB3 <https://github.com/lucianpls/QB3>`_ compression, used
by the :ref:`raster.marfa` driver.
.. option:: GDAL_USE_LIBQB3=ON/OFF
Control whether to use LibQB3. Defaults to ON when LibQB3 is found.
LibXml2
*******
The `LibXml2 <http://xmlsoft.org/>`_ processing library is used to do validation of XML files against
a XML Schema (.xsd) in a few drivers (PDF, GMLAS, GML OGR VRT) and for advanced
capabilities in GMLJP2v2 generation.
.. option:: LIBXML2_INCLUDE_DIR
Path to the base include directory.
.. option:: LIBXML2_LIBRARY
Path to a shared or static library file.
.. option:: GDAL_USE_LIBXML2=ON/OFF
Control whether to use LibXml2. Defaults to ON when LibXml2 is found.
LZ4
***
`LZ4 <https://github.com/lz4/lz4>`_ is a compression library which offers
the lossless LZ4 compression algorithm.
It is used by the :ref:`raster.zarr` driver.
.. option:: LZ4_INCLUDE_DIR
Path to an include directory with the ``lz4.h`` header file.
.. option:: LZ4_LIBRARY_RELEASE
Path to a shared or static library file. A similar variable
``LZ4_LIBRARY_DEBUG`` can also be specified to a similar library for
building Debug releases.
.. option:: GDAL_USE_LZ4=ON/OFF
Control whether to use LZ4. Defaults to ON when LZ4 is found.
MONGOCXX
********
The `MongoCXX <https://github.com/mongodb/mongo-cxx-driver>`_ and BsonCXX libraries
are needed to build the :ref:`vector.mongodbv3` driver.
They can be detected with pkg-config.
.. option:: MONGOCXX_INCLUDE_DIR
Path to an include directory with the ``mongocxx/client.hpp`` header file.
.. option:: BSONCXX_INCLUDE_DIR
Path to an include directory with the ``bsoncxx/config/version.hpp`` header file.
.. option:: MONGOCXX_LIBRARY
Path to a library file ``mongocxx``
.. option:: BSONCXX_LIBRARY
Path to a library file ``bsoncxx``
.. option:: GDAL_USE_MONGOCXX=ON/OFF
Control whether to use MONGOCXX. Defaults to ON when MONGOCXX is found.
MRSID
*****
The MRSID Raster DSDK (closed source/proprietary) is required for the
:ref:`raster.mrsid` driver.
MRSID_ROOT or CMAKE_PREFIX_PATH should point to the directory of the SDK ending with
Raster_DSDK. Note that on Linux, its lib subdirectory should be in the
LD_LIBRARY_PATH so that the linking of applications succeeds and libtbb.so can
be found.
.. option:: MRSID_INCLUDE_DIR
Path to the include directory with the ``lt_base.h`` header file.
.. option:: MRSID_LIBRARY
Path to library file libltidsdk
.. option:: GDAL_ENABLE_DRIVER_JP2MRSID
Whether to enable JPEG2000 support through the MrSID SDK. The default value
of this option is OFF.
.. option:: GDAL_USE_MRSID=ON/OFF
Control whether to use MRSID. Defaults to ON when MRSID is found.
MSSQL_NCLI
**********
The Microsoft SQL Native Client Library (closed source/proprietary) is required
to enable bulk copy in the :ref:`vector.mssqlspatial` driver.
If both MSSQL_NCLI and MSSQL_ODBC are found and enabled, MSSQL_ODBC will be used.
The library is normally found if installed in standard location, and at version 11.
.. option:: MSSQL_NCLI_VERSION
Major version of the Native Client, typically 11
.. option:: MSSQL_NCLI_INCLUDE_DIR
Path to include directory with ``sqlncli.h`` header.
.. option:: MSSQL_NCLI_LIBRARY
Path to library to be linked.
.. option:: GDAL_USE_MSSQL_NCLI=ON/OFF
Control whether to use MSSQL_NCLI. Defaults to ON when MSSQL_NCLI is found.
MSSQL_ODBC
**********
The Microsoft SQL Native ODBC driver Library (closed source/proprietary) is required
to enable bulk copy in the :ref:`vector.mssqlspatial` driver.
If both MSSQL_NCLI and MSSQL_ODBC are found and enabled, MSSQL_ODBC will be used.
The library is normally found if installed in standard location, and at version 17+.
.. option:: MSSQL_ODBC_VERSION
Major version of the Native Client, typically 17 or 18
.. option:: MSSQL_ODBC_INCLUDE_DIR
Path to include directory with ``msodbcsql.h`` header.
.. option:: MSSQL_ODBC_LIBRARY
Path to library to be linked.
.. option:: GDAL_USE_MSSQL_ODBC=ON/OFF
Control whether to use MSSQL_ODBC. Defaults to ON when MSSQL_ODBC is found.
muparser
********
`muparser <https://beltoforion.de/en/muparser/>`__ is a mathematical expression
parser and evaluation engine. It can be used by the :ref:`raster.vrt` driver.
.. option:: GDAL_USE_MUPARSER=ON/OFF
Control whether to use muparser. Defaults to ON when muparser is found.
.. option:: MUPARSER_INCLUDE_DIR
Path to directory with muparser headers.
.. option:: MUPARSER_LIBRARY
Path to library to be linked.
MYSQL
*****
The MySQL or MariaDB client library is required to enable the :ref:`vector.mysql`
driver.
.. option:: MYSQL_INCLUDE_DIR
Path to include directory with ``mysql.h`` header file.
.. option:: MYSQL_LIBRARY
Path to library to be linked.
.. option:: GDAL_USE_MYSQL=ON/OFF
Control whether to use MYSQL. Defaults to ON when MYSQL is found.
NetCDF
******
The `netCDF <https://github.com/Unidata/netcdf-c>`_ is required to enable the
:ref:`raster.netcdf` driver.
The ``nc-config`` program can be used to detect it.
.. option:: NETCDF_INCLUDE_DIR
Path to an include directory with the ``netcdf.h`` header file.
.. option:: NETCDF_LIBRARY
Path to a shared or static library file.
.. option:: GDAL_USE_NETCDF=ON/OFF
Control whether to use netCDF. Defaults to ON when netCDF is found.
ODBC
****
ODBC is required for various drivers: :ref:`vector.odbc`, :ref:`vector.pgeo`,
:ref:`vector.hana` and :ref:`vector.mssqlspatial`.
It is normally automatically found in system directories on Unix and Windows.
.. option:: ODBC_INCLUDE_DIR
Path to ODBC include directory with ``sql.h`` header.
.. option:: ODBC_LIBRARY
Path to ODBC library to be linked.
.. option:: GDAL_USE_ODBC=ON/OFF
Control whether to use ODBC. Defaults to ON when ODBC is found.
ODBC-CPP
********
The `odbc-cpp-wrapper library <https://github.com/SAP/odbc-cpp-wrapper>`_ is required for
the :ref:`vector.hana` driver.
.. option:: ODBCCPP_INCLUDE_DIR
Path to an include directory with the ``odbc/Environment.h`` header file.
.. option:: ODBCCPP_LIBRARY
Path to a shared or static library file.
.. option:: GDAL_USE_ODBCCPP=ON/OFF
Control whether to use ODBC-CPP. Defaults to ON when ODBC-CPP is found.
OpenCAD
*******
`libopencad <https://github.com/nextgis-borsch/lib_opencad>`_ is required for the :ref:`vector.cad`
driver. If not found, an internal copy can be used.
.. option:: OPENCAD_INCLUDE_DIR
Path to an include directory with the ``opencad.h`` header file.
.. option:: OPENCAD_LIBRARY
Path to a shared or static library file.
.. option:: GDAL_USE_OPENCAD=ON/OFF
Control whether to use external libopencad. Defaults to ON when external libopencad is found.
.. option:: GDAL_USE_OPENCAD_INTERNAL=ON/OFF
Control whether to use internal libopencad copy. Defaults depends on GDAL_USE_INTERNAL_LIBS. When set
to ON, has precedence over GDAL_USE_OPENCAD=ON
OpenEXR
*******
`OpenEXR <https://github.com/AcademySoftwareFoundation/openexr>`_ is required for the :ref:`raster.exr` driver
Specify ``OpenEXR_ROOT`` variable pointing to the parent directory of
/lib and /include subdirectories, i.e. /DEV/lib/openexr-3.0.
For OpenEXR >= 3 additionally specify ``Imath_ROOT`` as this is a
separate library now, i.e. /DEV/lib/imath-3.1.3
or
Specify root directory adding to the ``CMAKE_PREFIX_PATH`` variable to find OpenEXR's pkgconfig.
For example -DCMAKE_PREFIX_PATH=/DEV/lib/openexr-3.0;/DEV/lib/imath-3.1.3
or
Get real specific and set
``OpenEXR_INCLUDE_DIR``, ``Imath_INCLUDE_DIR``,
``OpenEXR_LIBRARY``, ``OpenEXR_UTIL_LIBRARY``,
``OpenEXR_HALF_LIBRARY``, ``OpenEXR_IEX_LIBRARY``
explicitly
.. option:: GDAL_USE_OPENEXR=ON/OFF
Control whether to use OpenEXR. Defaults to ON when OpenEXR is found.
OpenJPEG
********
The `OpenJPEG <https://github.com/uclouvain/openjpeg>`_ library is an open-source
JPEG-2000 codec written in C language. It is required for the
:ref:`raster.jp2openjpeg` driver, or other drivers that use JPEG-2000 functionality.
.. option:: OPENJPEG_INCLUDE_DIR
Path to an include directory with the ``openjpeg.h`` header file.
.. option:: OPENJPEG_LIBRARY
Path to a shared or static library file.
.. option:: GDAL_USE_OPENJPEG=ON/OFF
Control whether to use OpenJPEG. Defaults to ON when OpenJPEG is found.
.. option:: GDAL_FIND_PACKAGE_OpenJPEG_MODE=MODULE/CONFIG/empty string
.. versionadded:: 3.9
Control the mode used for find_package(OpenJPEG). Defaults to MODULE
for compatibility with OpenJPEG < 2.5.1. If set to CONFIG, only Config mode
search is attempted. If set to empty string, default CMake logic
(https://cmake.org/cmake/help/latest/command/find_package.html) applies.
OpenSSL
*******
The Crypto component of the `OpenSSL <https://github.com/openssl/openssl>`_ library
can be used for the RSA SHA256 signing functionality used by some authentication
methods of Google Cloud. It might be required to use the :ref:`raster.eedai`
images or use the :ref:`/vsigs/ <vsigs>` virtual file system.
See https://cmake.org/cmake/help/latest/module/FindOpenSSL.html for details on
how to configure the library. For static linking, the following options may
be needed: -DOPENSSL_USE_STATIC_LIBS=TRUE -DOPENSSL_MSVC_STATIC_RT=TRUE
.. option:: GDAL_USE_OPENSSL=ON/OFF
Control whether to use OpenSSL. Defaults to ON when OpenSSL is found.
Oracle
******
The Oracle Instant Client SDK (closed source/proprietary) is required for the
:ref:`vector.oci` and the :ref:`raster.georaster` drivers
.. option:: Oracle_ROOT
Path to the root directory of the Oracle Instant Client SDK.
.. option:: GDAL_USE_ORACLE=ON/OFF
Control whether to use Oracle. Defaults to ON when Oracle is found.
Parquet
*******
The Parquet component of the `Apache Arrow C++ <https://github.com/apache/arrow/tree/master/cpp>`__
library is required for the :ref:`vector.parquet` driver.
Specify install prefix in the ``CMAKE_PREFIX_PATH`` variable.
.. option:: GDAL_USE_PARQUET=ON/OFF
Control whether to use Parquet. Defaults to ON when Parquet is found.
.. option:: ARROW_USE_STATIC_LIBRARIES=ON/OFF
Control whether to use statically built Arrow libraries. Defaults to OFF when Parquet is found.
``Pcodec``
**********
The `Pcodec <https://github.com/pcodec/pcodec>`_ library is an optional
dependency for the :ref:`raster.zarr` driver.
See :ref:`raster.zarr.pcodec` for details.
.. option:: GDAL_USE_PCODEC=ON/OFF
Control whether to use ``pcodec``.
Defaults to ON when the ``pcodec`` C library (``cpcodec``) is found automatically,
or by setting ``PCODEC_C_INCLUDE_DIR`` and ``PCODEC_C_LIBRARY``.
If an already built ``cpcodec`` library is not available, ``GDAL_USE_PCODEC``
can be explicitly set to ON to download ``pcodec`` sources using ``git``.
This requires a Rust toolchain to be available.
.. option:: PCODEC_C_INCLUDE_DIR
Path to an include directory with the ``pcodec.h`` header file.
.. option:: PCODEC_C_LIBRARY
Path to a shared or static library file with ``cpcodec`` in its name.
.. option:: CORROSION_SOURCE_DIR
Path to a checkout of https://github.com/corrosion-rs/corrosion.git
.. option:: PCODEC_SOURCE_DIR
Path to a checkout of https://github.com/pcodec/pcodec.git
``PCODEC_C_INCLUDE_DIR`` and ``PCODEC_C_LIBRARY`` are used in priority over
``CORROSION_SOURCE_DIR`` and ``PCODEC_SOURCE_DIR``.
PCRE2
*****
`PCRE2 <https://github.com/PhilipHazel/pcre2>`_ implements Perl-compatible
Regular Expressions support. It is used for the REGEXP operator in drivers using SQLite3.
.. option:: PCRE2_INCLUDE_DIR
Path to an include directory with the ``pcre2.h`` header file.
.. option:: PCRE2_LIBRARY
Path to a shared or static library file with "pcre2-8" in its name.
.. option:: GDAL_USE_PCRE2=ON/OFF
Control whether to use PCRE2. Defaults to ON when PCRE2 is found.
PDFIUM
******
The `PDFium <https://github.com/rouault/pdfium_build_gdal_3_5>`_ library is one
of the possible backends for the :ref:`raster.pdf` driver.
.. option:: PDFIUM_INCLUDE_DIR
Path to an include directory with the ``public/fpdfview.h`` header file.
.. option:: PDFIUM_LIBRARY
Path to a shared or static library file.
.. option:: GDAL_USE_PDFIUM=ON/OFF
Control whether to use PDFIUM. Defaults to ON when PDFIUM is found.
PNG
***
`libpng <https://github.com/glennrp/libpng>`_ is required for the :ref:`raster.png`
driver, and may be used by a few other drivers (:ref:`raster.grib`, :ref:`raster.gpkg`, etc.)
If not found, an internal copy of libpng can be used.
See https://cmake.org/cmake/help/latest/module/FindPNG.html for more details
on how the library is detected.
.. option:: PNG_PNG_INCLUDE_DIR
Path to an include directory with the ``png.h`` header file.
.. option:: PNG_LIBRARY_RELEASE
Path to a shared or static library file. A similar variable
``PNG_LIBRARY_DEBUG`` can also be specified to a similar library for
building Debug releases.
.. option:: GDAL_USE_PNG=ON/OFF
Control whether to use external libpng. Defaults to ON when external libpng is found.
.. option:: GDAL_USE_PNG_INTERNAL=ON/OFF
Control whether to use internal libpng copy. Defaults depends on GDAL_USE_INTERNAL_LIBS. When set
to ON, has precedence over GDAL_USE_PNG=ON
Poppler
*******
The `Poppler <https://poppler.freedesktop.org/>`_ library is one
of the possible backends for the :ref:`raster.pdf` driver.
Note that GDAL requires Poppler private headers, that are only installed
if configuring Poppler with -DENABLE_UNSTABLE_API_ABI_HEADERS.
.. option:: Poppler_INCLUDE_DIR
Path to an include directory with the ``poppler-config.h`` header file.
.. option:: Poppler_LIBRARY
Path to a shared or static library file.
.. option:: GDAL_USE_POPPLER=ON/OFF
Control whether to use Poppler. Defaults to ON when Poppler is found.
PostgreSQL
**********
The `PostgreSQL client library <https://www.postgresql.org/>`_ is required for
the :ref:`vector.pg` and :ref:`raster.postgisraster` drivers.
.. option:: PostgreSQL_INCLUDE_DIR
Path to an include directory with the ``libpq-fe.h`` header file.
.. option:: PostgreSQL_LIBRARY_RELEASE
Path to a shared or static library file ``pq`` / ``libpq``. A similar variable
``PostgreSQL_LIBRARY_DEBUG`` can also be specified to a similar library for
building Debug releases.
.. option:: GDAL_USE_POSTGRESQL=ON/OFF
Control whether to use PostgreSQL. Defaults to ON when PostgreSQL is found.
PROJ
****
`PROJ <https://github.com/OSGeo/PROJ/>`_ >= 6.3 is a *required* dependency for GDAL.
.. option:: PROJ_INCLUDE_DIR
Path to an include directory with the ``proj.h`` header file.
.. option:: PROJ_LIBRARY_RELEASE
Path to a shared or static library file, such as
``libproj.so``, ``proj.lib``, or other name. A similar variable
``PROJ_LIBRARY_DEBUG`` can also be specified to a similar library for
building Debug releases.
.. option:: GDAL_FIND_PACKAGE_PROJ_MODE=CUSTOM/MODULE/CONFIG/empty string
.. versionadded:: 3.9
Control the mode used for find_package(PROJ).
Alters how the default CMake search logic
(https://cmake.org/cmake/help/latest/command/find_package.html) applies.
Defaults to CUSTOM, where the CONFIG mode is applied for PROJ >= 8, and
fallbacks to default MODULE mode otherwise.
Other values are passed directly to find_package()
QHULL
*****
The `QHULL <https://github.com/qhull/qhull>`_ library is used for the linear
interpolation of gdal_grid. If not found, an internal copy can be used.
.. option:: QHULL_PACKAGE_NAME
Name of the pkg-config package, typically ``qhull_r`` or ``qhullstatic_r``. Defaults to ``qhull_r``
.. option:: QHULL_INCLUDE_DIR
Path to an include directory with the ``libqhull_r/libqhull_r.h`` header file.
.. option:: QHULL_LIBRARY
Path to a shared or static library file to the reentrant library.
.. option:: GDAL_USE_QHULL=ON/OFF
Control whether to use QHULL. Defaults to ON when QHULL is found.
.. option:: GDAL_USE_QHULL_INTERNAL=ON/OFF
Control whether to use internal QHULL copy. Defaults depends on GDAL_USE_INTERNAL_LIBS. When set
to ON, has precedence over GDAL_USE_QHULL=ON
RASTERLITE2
***********
The `RasterLite2 <https://www.gaia-gis.it/fossil/librasterlite2/index>`_ (>= 1.1.0)
library used by the :ref:`raster.rasterlite2` driver.
It can be detected with pkg-config.
.. option:: RASTERLITE2_INCLUDE_DIR
Path to an include directory with the ``rasterlite2/rasterlite2.h`` header file.
.. option:: RASTERLITE2_LIBRARY
Path to a shared or static library file.
.. option:: GDAL_USE_RASTERLITE2=ON/OFF
Control whether to use RasterLite2. Defaults to ON when RasterLite2 is found.
SPATIALITE
**********
The `Spatialite <https://www.gaia-gis.it/fossil/libspatialite/index>`_ library
used by the :ref:`vector.sqlite` and :ref:`vector.gpkg` drivers, and the :ref:`sql_sqlite_dialect`.
It can be detected with pkg-config.
.. option:: SPATIALITE_INCLUDE_DIR
Path to an include directory with the ``spatialite.h`` header file.
.. option:: SPATIALITE_LIBRARY
Path to a shared or static library file.
.. option:: GDAL_USE_SPATIALITE=ON/OFF
Control whether to use Spatialite. Defaults to ON when Spatialite is found.
SQLite3
*******
The `SQLite3 <https://sqlite.org/index.html>`_ library is required for the
:ref:`vector.sqlite` and :ref:`vector.gpkg` drivers (and also used by other drivers),
and the :ref:`sql_sqlite_dialect`.
.. option:: SQLite3_INCLUDE_DIR
Path to an include directory with the ``sqlite3.h`` header file.
.. option:: SQLite3_LIBRARY
Path to a shared or static library file, such as
``libsqlite3.so``, ``sqlite3.lib`` or other name.
.. option:: GDAL_USE_SQLITE3=ON/OFF
Control whether to use SQLite3. Defaults to ON when SQLite3 is found.
SFCGAL
******
`SFCGAL <https://github.com/Oslandia/SFCGAL>`_ is a geometry library which
supports ISO 19107:2013 and OGC Simple Features Access 1.2 for 3D operations
(PolyhedralSurface, TINs, ...)
.. option:: SFCGAL_INCLUDE_DIR
Path to the base include directory.
.. option:: SFCGAL_LIBRARY_RELEASE
Path to a shared or static library file. A similar variable
``SFCGAL_LIBRARY_DEBUG`` can also be specified to a similar library for
building Debug releases.
.. option:: GDAL_USE_SFCGAL=ON/OFF
Control whether to use SFCGAL. Defaults to ON when SFCGAL is found.
SWIG
****
`SWIG <http://swig.org/>`_ is a software development tool that connects
programs written in C and C++ with a variety of high-level programming languages.
It is used for the Python, Java and CSharp bindings.
.. option:: SWIG_EXECUTABLE
Path to the SWIG executable.
Note that setting it explicitly might be needed, and that putting the
directory of the installed binary into the PATH might not be sufficient.
The reason is that when building from source, a "swig" binary will be
generated, but FindSWIG will prefer a "swig-4.0" binary if found elsewhere
in the PATH.
TEIGHA
******
The TEIGHA / Open Design Alliance libraries (closed source/proprietary) are
required for the :ref:`vector.dwg` and :ref:`vector.dgnv8` drivers.
Note that on Linux, with a SDK consisting of shared libraries,
the bin/{platform_name} subdirectory of the SDK should be in the LD_LIBRARY_PATH
so that the linking of applications succeeds.
The TEIGHA_ROOT variable must be set.
.. option:: TEIGHA_ROOT
Path to the base directory where the Kernel and Drawings package must be
extracted.
.. option:: TEIGHA_ACTIVATION_FILE_DIRECTORY
Path to a directory where a ``OdActivationInfo`` file is located. If the
file is somewhere under TEIGHA_ROOT, it will be automatically discovered.
Otherwise this variable must be set for recent SDK versions (at least with
2021 and later).
.. option:: GDAL_USE_TEIGHA=ON/OFF
Control whether to use TEIGHA. Defaults to ON when TEIGHA is found.
TIFF
****
`libtiff <https://gitlab.com/libtiff/libtiff/>`_ is required for the
:ref:`raster.gtiff` drivers, and a few other drivers.
If not found, an internal copy of libtiff can be used.
.. option:: TIFF_INCLUDE_DIR
Path to an include directory with the ``tiff.h`` header file.
.. option:: TIFF_LIBRARY_RELEASE
Path to a shared or static library file, such as
``libtiff.so``, ``tiff.lib``, or other name. A similar variable
``TIFF_LIBRARY_DEBUG`` can also be specified to a similar library for
building Debug releases.
.. option:: GDAL_USE_TIFF=ON/OFF
Control whether to use external libtiff. Defaults to ON when external libtiff is found.
.. option:: GDAL_USE_TIFF_INTERNAL=ON/OFF
Control whether to use internal libtiff copy. Defaults depends on GDAL_USE_INTERNAL_LIBS. When set
to ON, has precedence over GDAL_USE_TIFF=ON
TileDB
******
The `TileDB <https://github.com/TileDB-Inc/TileDB>`__ library is required for the :ref:`raster.tiledb` driver.
Specify install prefix in the ``CMAKE_PREFIX_PATH`` variable.
TileDB >= 2.15 is required since GDAL 3.9
.. option:: GDAL_USE_TILEDB=ON/OFF
Control whether to use TileDB. Defaults to ON when TileDB is found.
WebP
****
`WebP <https://github.com/webmproject/libwebp>`_ is a image compression library.
It is required for the :ref:`raster.webp` driver, and may be used by the
:ref:`raster.gpkg` and the internal libtiff library.
.. option:: WEBP_INCLUDE_DIR
Path to an include directory with the ``webp/encode.h`` header file.
.. option:: WEBP_LIBRARY
Path to a shared or static library file.
.. option:: GDAL_USE_WEBP=ON/OFF
Control whether to use WebP. Defaults to ON when WebP is found.
XercesC
*******
`Xerces-C <https://github.com/apache/xerces-c>`_ is a stream-oriented XML parser
library which is required to enable XML parsing capabilities in the :ref:`vector.nas`,
:ref:`vector.ili` and :ref:`vector.gmlas` drivers.
It can also be used as an alternative to Expat for the GML driver.
.. option:: XercesC_INCLUDE_DIR
Path to the base include directory.
.. option:: XercesC_LIBRARY
Path to a shared or static library file.
.. option:: GDAL_USE_XERCESC=ON/OFF
Control whether to use XercesC. Defaults to ON when XercesC is found.
ZLIB
****
`ZLib <https://github.com/madler/zlib>`_ is a compression library which offers
the lossless Deflate/Zip compression algorithm.
.. option:: ZLIB_INCLUDE_DIR
Path to an include directory with the ``zlib.h`` header file.
.. option:: ZLIB_LIBRARY_RELEASE
Path to a shared or static library file. A similar variable
``ZLIB_LIBRARY_DEBUG`` can also be specified to a similar library for
building Debug releases.
.. option:: ZLIB_IS_STATIC
Link to static external ZLIB directory.
Only used if GDAL_USE_ZLIB_INTERNAL=OFF and MSVC.
.. option:: GDAL_USE_ZLIB=ON/OFF
Control whether to use ZLIB. Defaults to ON when ZLIB is found.
.. option:: GDAL_USE_ZLIB_INTERNAL=ON/OFF
Control whether to use internal zlib copy. Defaults depends on GDAL_USE_INTERNAL_LIBS. When set
to ON, has precedence over GDAL_USE_ZLIB=ON
ZSTD
****
`ZSTD <https://github.com/facebook/zstd>`_ is a compression library which offers
the lossless ZStd compression algorithm (faster than Deflate/ZIP, but incompatible
with it). It is used by the internal libtiff library or the :ref:`raster.zarr` driver.
.. option:: ZSTD_INCLUDE_DIR
Path to an include directory with the ``zstd.h`` header file.
.. option:: ZSTD_LIBRARY
Path to a shared or static library file.
.. option:: GDAL_USE_ZSTD=ON/OFF
Control whether to use ZSTD. Defaults to ON when ZSTD is found.
.. _selection-of-drivers:
Selection of drivers
++++++++++++++++++++
By default, all drivers that have their build requirements satisfied will be
built-in in the GDAL core library.
The following options are available to select a subset of drivers:
.. option:: GDAL_ENABLE_DRIVER_<driver_name>:BOOL=ON/OFF
.. option:: OGR_ENABLE_DRIVER_<driver_name>:BOOL=ON/OFF
Independently of options that control global behavior, drivers can be individually
enabled or disabled with those options.
.. note::
<driver_name> above and below is *generally*, but not systematically the short driver name.
Some drivers may also be grouped together for build purposes.
- A number of "raw" raster drivers (ACE2, BT, BYN, CPG, CTable2, DIPEx, DOQ1,
DOQ2, EHDR, EIR, ENVI, FAST, GenBIN, GSC, GTX, MFF2, ISCE, KRO, MFF, LAN,
LCP, LOSLAS, NDF, NTv2, PAUX, PNM, ROIPAC, RRASTER, SNODAS) are controlled
by the GDAL_ENABLE_DRIVER_RAW option.
- Planetary raster formats (PDS, PDS4, ISIS2, ISIS3, VICAR) are controlled by
the GDAL_ENABLE_DRIVER_PDS option.
- The AAIGRID, GRASSASCIIGRID and ISG raster drivers are controlled by the GDAL_ENABLE_DRIVER_AAIGRID option.
- The ECW and JP2ECW raster drivers are controlled by the GDAL_ENABLE_DRIVER_ECW option.
- The vector EEDA and raster EEDAI drivers are controlled by the GDAL_ENABLE_DRIVER_EEDA option.
- The GSAG, GSBG and GS7BG raster drivers are controlled by the GDAL_ENABLE_DRIVER_GSG option.
- The HDF5 and BAG raster drivers are controlled by the GDAL_ENABLE_DRIVER_HDF5 option.
- The MrSID and JP2MrSID raster drivers are controlled by the GDAL_ENABLE_DRIVER_MRSID option.
- The NITF, RPFTOC and ECRGTOC raster drivers are controlled by the GDAL_ENABLE_DRIVER_NITF option.
- The NWT_GRD and NWT_GRC raster drivers are controlled by the GDAL_ENABLE_DRIVER_NORTHWOOD option.
- The SRP and ADRG raster drivers are controlled by the GDAL_ENABLE_DRIVER_ADRG option.
- The Interlis 1 and Interlis 2 vector drivers are controlled by the GDAL_ENABLE_DRIVER_ILI option.
- The WFS and OAPIF vector drivers are controlled by the GDAL_ENABLE_DRIVER_WFS option.
- The AVCBIN and AVCE00 vector drivers are controlled by the GDAL_ENABLE_DRIVER_AVC option.
- The DWG and DGNv8 vector drivers are controlled by the GDAL_ENABLE_DRIVER_DWG option.
There might be variations in naming, e.g. :
- the "AIG" raster driver is controlled by GDAL_ENABLE_DRIVER_AIGRID.
- the "ESAT" raster driver is controlled by GDAL_ENABLE_DRIVER_ENVISAT.
- the "GeoRaster" raster driver is controlled by GDAL_ENABLE_DRIVER_GEOR.
- the "RST" raster driver is controlled by GDAL_ENABLE_DRIVER_IDRISI.
- the "ElasticSearch" vector driver is controlled by OGR_ENABLE_DRIVER_ELASTIC.
- the "PostgreSQL" vector driver is controlled by OGR_ENABLE_DRIVER_PG.
- the "UK .NTF" vector driver is controlled by OGR_ENABLE_DRIVER_NTF.
.. note::
Drivers that have both a raster and vector side (and are internally implemented by a
single GDALDriver instance) are controlled by either a GDAL_ENABLE_DRIVER_<driver_name>
option or a OGR_ENABLE_DRIVER_<driver_name> one, but not both:
- The CAD drivers are controlled by the OGR_ENABLE_DRIVER_CAD option.
- The netCDF drivers are controlled by the GDAL_ENABLE_DRIVER_NETCDF option.
- The PDF drivers are controlled by the GDAL_ENABLE_DRIVER_PDF option.
- The GPKG drivers are controlled by the OGR_ENABLE_DRIVER_GPKG option.
- The NGW drivers are controlled by the OGR_ENABLE_DRIVER_NGW option.
- The SQLite drivers are controlled by the OGR_ENABLE_DRIVER_SQLITE option.
.. note::
The GDAL_ENABLE_DRIVER_<driver_name> and OGR_ENABLE_DRIVER_<driver_name> options are
only created when their required dependencies are found.
.. option:: GDAL_BUILD_OPTIONAL_DRIVERS:BOOL=ON/OFF
.. option:: OGR_BUILD_OPTIONAL_DRIVERS:BOOL=ON/OFF
Globally enable/disable all optional GDAL/raster, resp. all optional OGR/vector drivers.
More exactly, setting those variables to ON affect the default value of the
``GDAL_ENABLE_DRIVER_<driver_name>`` or ``OGR_ENABLE_DRIVER_<driver_name>`` variables
(when they are not yet set).
This can be combined with individual activation of a subset of drivers by using
the ``GDAL_ENABLE_DRIVER_<driver_name>:BOOL=ON`` or ``OGR_ENABLE_DRIVER_<driver_name>:BOOL=ON``
variables. Note that changing the value of GDAL_BUILD_OPTIONAL_DRIVERS/
OGR_BUILD_OPTIONAL_DRIVERS after a first run of CMake does not change the
activation of individual drivers. It might be needed to pass
``-UGDAL_ENABLE_DRIVER_* -UOGR_ENABLE_DRIVER_*`` to reset their state.
.. note::
The following GDAL drivers cannot be disabled: VRT, DERIVED, GTiff, COG, HFA, MEM.
The following OGR drivers cannot be disabled: "ESRI Shapefile", "MapInfo File", OGR_VRT, Memory, KML, GeoJSON, GeoJSONSeq, ESRIJSON, TopoJSON.
.. note::
Disabling all OGR/vector drivers with -DOGR_BUILD_OPTIONAL_DRIVERS=OFF may affect
the ability to enable some GDAL/raster drivers that require some vector
drivers to be enabled (and reciprocally with some GDAL/raster drivers depending
on vector drivers).
When such dependencies are not met, a CMake error will be emitted with a hint
for the way to resolve the issue.
It is also possible to anticipate such errors by looking at files
:source_file:`frmts/CMakeLists.txt` for dependencies of raster drivers
and :source_file:`ogr/ogrsf_frmts/CMakeLists.txt` for dependencies of vector drivers.
Example of minimal build with the JP2OpenJPEG and SVG drivers enabled::
cmake .. -UGDAL_ENABLE_DRIVER_* -UOGR_ENABLE_DRIVER_* \
-DGDAL_BUILD_OPTIONAL_DRIVERS:BOOL=OFF -DOGR_BUILD_OPTIONAL_DRIVERS:BOOL=OFF \
-DGDAL_ENABLE_DRIVER_JP2OPENJPEG:BOOL=ON \
-DOGR_ENABLE_DRIVER_SVG:BOOL=ON
Driver specific options
+++++++++++++++++++++++
For the VRT driver
------------------
.. option:: GDAL_VRT_ENABLE_RAWRASTERBAND:BOOL=ON/OFF
Defaults to ON. Can be set to OFF to disable the Raw Files (VRTRawRasterBand)
capability of the :ref:`raster.vrt` driver. Consult
:ref:`vrtrawrasterband_restricted_access` for more details.
Build drivers as plugins
++++++++++++++++++++++++
An important subset, but not all, drivers can be also built as plugin, that is
to say as standalone .dll/.so shared libraries, to be installed in the ``gdalplugins``
subdirectory of the GDAL installation. This can be useful in particular for
drivers that depend on libraries that have a license different (proprietary, copyleft, ...)
from the core GDAL library.
The list of drivers that can be built as plugins can be obtained with::
cmake .. -L | grep -e "_ENABLE.*PLUGIN"
The following options are available to select the plugin/builtin status of
a driver:
.. option:: GDAL_ENABLE_DRIVER_<driver_name>_PLUGIN:BOOL=ON/OFF
.. option:: OGR_ENABLE_DRIVER_<driver_name>_PLUGIN:BOOL=ON/OFF
Independently of options that control global behavior, drivers can be individually
enabled or disabled with those options.
Note that for the driver to be built, the corresponding base
``GDAL_ENABLE_DRIVER_{driver_name}:BOOL=ON`` or ``OGR_ENABLE_DRIVER_{driver_name}:BOOL=ON`` option must
be set.
.. option:: GDAL_ENABLE_PLUGINS:BOOL=ON/OFF
Globally enable/disable building all (plugin capable), GDAL and OGR, drivers as plugins.
More exactly, setting that variable to ON affects the default value of the
``GDAL_ENABLE_DRIVER_<driver_name>_PLUGIN`` or ``OGR_ENABLE_DRIVER_<driver_name>_PLUGIN``
variables (when they are not yet set).
This can be combined with individual activation/deactivation of the plugin status with the
``GDAL_ENABLE_DRIVER_{driver_name}_PLUGIN:BOOL`` or ``OGR_ENABLE_DRIVER_{driver_name}_PLUGIN:BOOL`` variables.
Note that changing the value of GDAL_ENABLE_PLUGINS after a first
run of CMake does not change the activation of the plugin status of individual drivers.
It might be needed to pass ``-UGDAL_ENABLE_DRIVER_* -UOGR_ENABLE_DRIVER_*`` to reset their state.
Example of build with all potential drivers as plugins, except the JP2OpenJPEG one::
cmake .. -UGDAL_ENABLE_DRIVER_* -UOGR_ENABLE_DRIVER_* \
-DGDAL_ENABLE_PLUGINS:BOOL=ON \
-DGDAL_ENABLE_DRIVER_JP2OPENJPEG_PLUGIN:BOOL=OFF
There is a subtlety regarding ``GDAL_ENABLE_PLUGINS:BOOL=ON``. It only controls
the plugin status of plugin-capable drivers that have external dependencies,
that are not part of GDAL core dependencies (e.g. are netCDF, HDF4, Oracle, PDF, etc.).
.. option:: GDAL_ENABLE_PLUGINS_NO_DEPS:BOOL=ON/OFF
Globally enable/disable building all (plugin capable), GDAL and OGR, drivers as plugins,
for drivers that have no external dependencies (e.g. BMP, FlatGeobuf), or that have
dependencies that are part of GDAL core dependencies (e.g GPX).
Building such drivers as plugins is generally not necessary, hence
the use of a different option from GDAL_ENABLE_PLUGINS.
In some circumstances, it might be desirable to prevent loading of GDAL plugins.
This can be done with:
.. option:: GDAL_AUTOLOAD_PLUGINS:BOOL=ON/OFF
Set to OFF to disable loading of GDAL plugins. Default is ON.
Deferred loaded plugins
+++++++++++++++++++++++
Starting with GDAL 3.9, a number of in-tree drivers, that can be built as
plugins, are loaded in a deferred way. This involves that some part of their
code, which does not depend on external libraries, is included in core libgdal,
whereas most of the driver code is in a separated dynamically loaded library.
For builds where libgdal and its plugins are built in a single operation, this
is fully transparent to the user.
When a plugin driver is known of core libgdal, but not available as a plugin at
runtime, GDAL will inform the user that the plugin is not available, but could
be installed. It is possible to give more hints on how to install a plugin
by setting the following option:
.. option:: GDAL_DRIVER_<driver_name>_PLUGIN_INSTALLATION_MESSAGE:STRING
.. option:: OGR_DRIVER_<driver_name>_PLUGIN_INSTALLATION_MESSAGE:STRING
Custom message to give a hint to the user how to install a missing plugin
For example, if doing a build with::
cmake .. -DOGR_DRIVER_PARQUET_PLUGIN_INSTALLATION_MESSAGE="You may install it with with 'conda install -c conda-forge libgdal-arrow-parquet'"
and opening a Parquet file while the plugin is not installed will display the
following error::
$ ogrinfo poly.parquet
ERROR 4: `poly.parquet' not recognized as a supported file format. It could have been recognized by driver Parquet, but plugin ogr_Parquet.so is not available in your installation. You may install it with with 'conda install -c conda-forge libgdal-arrow-parquet'
For more specific builds where libgdal would be first built, and then plugin
drivers built in later incremental builds, this approach would not work, given
that the core libgdal built initially would lack code needed to declare the
plugin(s).
In that situation, the user building GDAL will need to explicitly declare at
initial libgdal build time that one or several plugin(s) will be later built.
Note that it is safe to distribute such a libgdal library, even if the plugins
are not always available at runtime.
This can be done with the following option:
.. option:: GDAL_REGISTER_DRIVER_<driver_name>_FOR_LATER_PLUGIN:BOOL=ON
.. option:: OGR_REGISTER_DRIVER_<driver_name>_FOR_LATER_PLUGIN:BOOL=ON
Declares that a driver will be later built as a plugin.
Setting this option to drivers not ready for it will lead to an explicit
CMake error.
For some drivers (ECW, HEIF, JP2KAK, JPEG, JPEGXL, KEA, LERC, MrSID,
MSSQLSpatial, netCDF, OpenJPEG, PDF, TileDB, WEBP), the metadata and/or dataset
identification code embedded on libgdal, will depend on optional capabilities
of the dependent library (e.g. libnetcdf for netCDF)
In that situation, it is desirable that the dependent library is available at
CMake configuration time for the core libgdal built, but disabled with
GDAL_USE_<driver_name>=OFF. It must of course be re-enabled later when the plugin is
built.
For example for netCDF::
cmake .. -DGDAL_REGISTER_DRIVER_NETCDF_FOR_LATER_PLUGIN=ON -DGDAL_USE_NETCDF=OFF
cmake --build .
cmake .. -DGDAL_USE_NETCDF=ON -DGDAL_ENABLE_DRIVER_NETCDF=ON -DGDAL_ENABLE_DRIVER_NETCDF_PLUGIN=ON
cmake --build . --target gdal_netCDF
For other drivers, GDAL_REGISTER_DRIVER_<driver_name>_FOR_LATER_PLUGIN /
OGR_REGISTER_DRIVER_<driver_name>_FOR_LATER_PLUGIN can be declared at
libgdal build time without requiring the dependent libraries needed to build
the plugin later to be available.
Out-of-tree deferred loaded plugins
+++++++++++++++++++++++++++++++++++
Out-of-tree drivers can also benefit from the deferred loading capability, provided
libgdal is built with CMake variable(s) pointing to external code containing the
code for registering a proxy driver.
This can be done with the following option:
.. option:: ADD_EXTERNAL_DEFERRED_PLUGIN_<driver_name>:FILEPATH=/path/to/some/file.cpp
The pointed file must declare a ``void DeclareDeferred<driver_name>(void)``
method with C linkage that takes care of creating a GDALPluginDriverProxy
instance and calling :cpp:func:`GDALDriverManager::DeclareDeferredPluginDriver` on it.
.. _building-python-bindings:
Python bindings options
+++++++++++++++++++++++
.. option:: BUILD_PYTHON_BINDINGS:BOOL=ON/OFF
Whether Python bindings should be built. It is ON by default, but only
effective if a Python installation is found.
A nominal Python installation should comprise the Python runtime (>= 3.6) and
the setuptools module.
numpy and its header and development library are also strongly recommended.
The Python installation is normally found if found in the path or registered
through other standard installation mechanisms of the Python installers.
It is also possible to specify it using several variables, as detailed in
https://cmake.org/cmake/help/git-stage/module/FindPython.html
GDAL also provides the following option:
.. option:: Python_LOOKUP_VERSION:STRING=major.minor.patch
When it is specified, Python_FIND_STRATEGY=VERSION is assumed. Note that
the patch number must be provided, as the EXACT strategy is used
Other useful options:
.. option:: Python_FIND_VIRTUALENV
Specify 'ONLY' to use virtualenv activated.
.. option:: Python_ROOT
Specify Python installation prefix.
Examples::
cmake -DPython_LOOKUP_VERSION=3.6.0 ..
cmake -DPython_FIND_VIRTUALENV=ONLY ..
cmake -DPython_ROOT=C:\Python36 ..
The following options are advanced ones and only taken into account during
the ``install`` CMake target.
.. option:: GDAL_PYTHON_INSTALL_PREFIX
This option can be specified to a directory name, to override the
``CMAKE_INSTALL_PREFIX`` option.
It is used to set the value of the ``--prefix`` option of ``python3 setup.py install``.
.. option:: GDAL_PYTHON_INSTALL_LAYOUT
This option can be specified to set the value of the ``--install-layout``
option of ``python3 setup.py install``. The install layout is by default set to
``deb`` when it is detected that the Python installation looks for
the ``site-packages`` subdirectory. Otherwise it is unspecified.
.. note::
The Python bindings are made of several modules (osgeo.gdal, osgeo.ogr, etc.)
which link each against libgdal. Consequently, a static build of libgdal is
not compatible with the bindings.
.. _building_from_source_java:
Java bindings options
+++++++++++++++++++++
.. option:: BUILD_JAVA_BINDINGS:BOOL=ON/OFF
Whether Java bindings should be built. It is ON by default, but only
effective if Java runtime and development packages are found.
The relevant options that can be set are described in
https://cmake.org/cmake/help/latest/module/FindJava.html and
https://cmake.org/cmake/help/latest/module/FindJNI.html.
The ``ant`` binary must also be available in the PATH.
.. option:: GDAL_JAVA_INSTALL_DIR
Subdirectory into which to install the :file:`gdal.jar` file.
It defaults to "${CMAKE_INSTALL_DATADIR}/java"
.. note::
Prior to GDAL 3.8, the gdalalljni library was also installed in that
directory. Starting with GDAL 3.8, this is controlled by the
``GDAL_JAVA_JNI_INSTALL_DIR`` variable.
.. option:: GDAL_JAVA_JNI_INSTALL_DIR
.. versionadded:: 3.8
Subdirectory into which to install the :file:`libgdalalljni.so` /
:file:`libgdalalljni.dylib` / :file:`gdalalljni.dll` library.
It defaults to "${CMAKE_INSTALL_LIBDIR}/jni".
.. note::
Prior to GDAL 3.8, the gdalalljni library was installed in the
directory controlled by the ``GDAL_JAVA_INSTALL_DIR`` variable.
.. note::
The Java bindings are made of several modules (org.osgeo.gdal, org.osgeo.ogr, etc.)
which link each against libgdal. Consequently, a static build of libgdal is
not compatible with the bindings.
Option only to be used by maintainers:
.. option:: GPG_KEY
GPG key to sign build artifacts. Needed to generate bundle.jar.
.. option:: GPG_PASS
GPG pass phrase to sign build artifacts.
C# bindings options
+++++++++++++++++++
For more details on how to build and use the C# bindings read the dedicated section :ref:`csharp_compile_cmake`.
.. option:: BUILD_CSHARP_BINDINGS:BOOL=ON/OFF
Whether C# bindings should be built. It is ON by default, but only
effective if a valid .NET SDK is found.
.. option:: CSHARP_LIBRARY_VERSION
Sets the .NET target Framework (in TFM format) to be used when compiling the C# binding libraries. `List of acceptable contents for .NET <https://docs.microsoft.com/en-us/dotnet/standard/frameworks#supported-target-frameworks>`_.
Defaults to `netstandard2.0`.
.. option:: CSHARP_APPLICATION_VERSION
Sets the .NET target Framework (in TFM format) to be used when compiling the C# sample applications. `List of acceptable contents for .NET <https://docs.microsoft.com/en-us/dotnet/standard/frameworks#supported-target-frameworks>`_.
Defaults to the highest version installed on the build system, i.e. `latest`.
.. option:: GDAL_CSHARP_ONLY=OFF/ON
Build the C# bindings without building GDAL. This should be used when building the bindings on top of an existing GDAL installation - for instance on top of the CONDA package.
.. option:: CSHARP_BUILD_SAMPLES=OFF/ON
Whether to build the C# sample applications. Defaults to the value of `BUILD_TESTING` (i.e. ON when tests are enabled, OFF otherwise).
.. option:: CSHARP_RUN_TESTS=OFF/ON
Whether to run the C# tests. Defaults to the value of `CSHARP_BUILD_SAMPLES` (i.e. ON when tests are enabled, OFF otherwise).
.. option:: CSHARP_INSTALL_NUGET_PACKAGE=OFF/ON
Whether to install the generated NuGet packages for the C# bindings. Defaults to ON.
.. note::
The C# bindings are made of several modules (OSGeo.GDAL, OSGeo.OGR, etc.)
which link each against libgdal. Consequently, a static build of libgdal is
not compatible with the bindings.
Driver specific options
+++++++++++++++++++++++
.. option:: GDAL_USE_PUBLICDECOMPWT
The :ref:`raster.msg` driver is built only if this option is set to ON (default is OFF).
Its effect is to download the https://gitlab.eumetsat.int/open-source/PublicDecompWT.git
repository (requires the ``git`` binary to be available at configuration time)
into the build tree and build the needed files from it into the driver.
Cross-compiling for Android
+++++++++++++++++++++++++++
First refer to https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html#cross-compiling-for-android
and to :source_file:`.github/workflows/android_cmake/start.sh` for
an example of a build script to cross-compile from Ubuntu.
Typical build issues
++++++++++++++++++++
How do I get PROJ ?
*******************
PROJ is the only required build-time dependency of GDAL that is not vendorized
in the GDAL source code tree. Consequently, the PROJ header and library must be available
when configuring GDAL's CMake. Consult `PROJ installation <https://proj.org/install.html>`__.
Conflicting PROJ libraries
**************************
If using a custom PROJ build (that is a PROJ build that does not come from
a distribution channel), it can sometimes happen that this custom PROJ build
conflicts with packaged dependencies, such as spatialite or libgeotiff, that
themselves link to another copy of PROJ.
The clean way to solve this is to rebuild from sources those other libraries
against the custom PROJ build.
For Linux based systems, given that C API/ABI has been preserved in the
PROJ 6, 7, 8, 9 series, if the custom PROJ build is more recent than the
PROJ used by those other libraries, doing aliases of the older ``libproj.so.XX``
name to the newer ``libproj.so.YY`` (with ``ln -s``) should work, although it is
definitely not recommended to use this solution in a production environment.
In any case, if ``ldd libgdal.so | grep libproj`` reports more than one line,
crashes will occur at runtime (often at process termination with a
``malloc_consolidate(): invalid chunk size`` and/or ``Aborted (core dumped)`` error message)
Autoconf/nmake (GDAL versions < 3.5.0)
--------------------------------------------------------------------------------
See http://web.archive.org/https://trac.osgeo.org/gdal/wiki/BuildHints for hints for GDAL < 3.5
autoconf and nmake build systems.
---
### Doc Source Development Cmake (`doc/source/development/cmake.rst`)
.. _using_gdal_in_cmake:
********************************************************************************
Using GDAL in CMake projects
********************************************************************************
.. versionadded:: 3.5
The recommended way to use the GDAL library 3.5 or higher in a CMake project is to
link to the imported library target ``GDAL::GDAL`` provided by
the CMake configuration which comes with the library. Typical usage is:
.. code:: cmake
find_package(GDAL CONFIG REQUIRED)
target_link_libraries(MyApp PRIVATE GDAL::GDAL)
By adding the imported library target ``GDAL::GDAL`` to the
target link libraries, CMake will also pass the include directories to
the compiler.
The CMake command ``find_package`` will look for the configuration in a
number of places. The lookup can be adjusted for all packages by setting
the cache variable or environment variable ``CMAKE_PREFIX_PATH``. In
particular, CMake will consult (and set) the cache variable
``GDAL_DIR``.
If a specific minor version is at least required, you can search for this via:
.. code:: cmake
find_package(GDAL 3.11 CONFIG REQUIRED)
If only a single minor version should be accepted, you need to pass a version
range to ``find_package`` (requires CMake 3.19):
.. code:: cmake
find_package(GDAL 3.11.0...3.11.9 CONFIG REQUIRED)
.. versionchanged:: 3.11
Until GDAL 3.10, GDAL has specified the same minor version as compatibility.
If you want older GDAL versions to be accepted, the version number must be
checked manually.
.. code:: cmake
find_package(GDAL CONFIG REQUIRED)
if(GDAL_VERSION VERSION_LESS "3.7" OR GDAL_VERSION VERSION_GREATER "3.11")
message(FATAL_ERROR "Required at least GDAL version 3.7 - 3.11, but found ${GDAL_VERSION}.")
endif()
Before GDAL 3.5, it is recommended to use `find module supplied with CMake <https://cmake.org/cmake/help/latest/module/FindGDAL.html>`__.
This also creates the ``GDAL::GDAL`` target. It requires CMake version 3.14.
.. code:: cmake
cmake_minimum_required(VERSION 3.14)
find_package(GDAL CONFIG)
if(NOT GDAL_FOUND)
find_package(GDAL REQUIRED)
endif()
target_link_libraries(MyApp PRIVATE GDAL::GDAL)
---
### Doc Source Development Dev Documentation (`doc/source/development/dev_documentation.rst`)
.. _dev_documentation:
================================================================================
Building documentation
================================================================================
Documentation overview
###########################
GDAL's documentation includes C and C++ :ref:`API documentation <api>` built
automatically from source comments using Doxygen and reStructuredText (rst)
files containing manually-edited content.
|Sphinx| is used to combine the above components into a complete set of documentation in HTML, PDF, and other formats.
|Sphinx| and extensions used by GDAL can be installed by running ``python3 -m pip install -r requirements.txt`` from
the ``doc`` subdirectory.
Building documentation
######################
Documentation can be generated with the CMake targets listed below. These
targets are only available if the CMake ``BUILD_DOCS=ON`` variable is set,
which is the default if Doxygen and Sphinx are detected.
.. note::
CMake will attempt to detect Sphinx at configuration time (i.e, when ``cmake``
is first run). If Sphinx is provided via a Conda or a Python virtual environment,
that environment should be activated during CMake configuration.
.. note::
Because some documentation pages execute GDAL command-line utilities or Python
code when generating, these GDAL components must also be available to build the
documentation without warnings. See :ref:`build instructions <minimal_build>` for hints on reducing
this build time.
The following targets are available:
* ``html``: build HTML documentation into the ``doc/build/html`` directory, where
they can be viewed using a web browser.
* ``man``: build MAN pages into the ``doc/build/man`` directory.
* ``latexpdf``: build PDF documentation into the ``doc/build/latex`` directory
* ``doxygen_xml`` : regenerate API Doxygen XML outputs, used by the above targets.
* ``doxygen_html``: generate Doxygen HTML documentation (this is distinct from the
API documentation included in the ``html`` target above).
If ``BUILD_TESTING`` is enabled, the documentation can be spell-checked using
the ``doc-spelling`` test (invoked using ``ctest -V -R doc-spelling --output-on-failure``.)
Documentation generated from C/C++ API (Doxygen) and Python API is included in
the check. Words unknown to the spell checker but still considered valid should
be added to the list in :file:`doc/source/spelling_wordlist.txt`
To visualize documentation changes while editing, it may be useful to install the |sphinx-autobuild| Python package.
Once installed, running ``sphinx-autobuild -b html source_dir build_dir`` with appropriate values of ``source_dir`` and
``build_dir`` will build documentation
and serve it on a local web server at ``http://127.0.0.1:8000``. The pages served will be automatically refreshed as changes
are made to underlying ``rst`` documentation files.
Python API documentation
------------------------
Sphinx uses the `autodoc <https://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html>`_ extension
to generate documentation for the Python API from Python function docstrings.
To be correctly parsed by ``autodoc``, docstrings should follow the `numpydoc Style guide <https://numpydoc.readthedocs.io/en/latest/format.html>`_.
Docstrings may be found in two locations. If the function was defined in Python
(i.e., using a ``%pythoncode`` SWIG directive), then the docstring must be
placed within the function definition. If the function is defined in C++ only,
then the docstring should be placed in a separate file
containing only docstrings (located in :source_file:`swig/include/python/docs`).
Sphinx loads the Python bindings when generating documentation, so for it to see any changes
the updated Python module must be loadable by the Python interpreter Sphinx is using. When building
documentation using CMake (e..g, ``cmake --build . --target html``) this will be done automatically.
If using ``sphinx-build`` or ``sphinx-autobuild`` manually, the updated Python bindings must be
rebuilt (``cmake --build . --target python_binding``) and made visible to Python, either by installing
them or by sourcing ``scripts/setdevenv.sh`` from the build directory.
Sphinx cannot detect changes to the Python module, so when iteratively rebuilding Python API documentation it is
necessary to manually update the timestamp of the ``rst`` files associated with the page where the modified
documentation appears (e.g., ``touch doc/source/api/python/osgeo.ogr.rst``)
.. _rst_style:
Sphinx RST Style guide
######################
This section contains syntax rules, tips, and tricks for using Sphinx and reStructuredText. For more information, please see this `comprehensive guide to reStructuredText <http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html>`_, as well as the `Sphinx reStructuredText Primer <http://sphinx.pocoo.org/rest.html>`_.
Basic markup
------------
A reStructuredText document is written in plain text. Without the need for complex formatting, one can be composed simply, just like one would any plain text document. For basic formatting, see this table:
.. list-table::
:widths: 30 40 30
* - **Format**
- **Syntax**
- **Output**
* - Italics
- ``*italics*`` (single asterisk)
- *italics*
* - Bold
- ``**bold**`` (double asterisk)
- **bold**
* - Monospace
- ````monospace```` (double back quote)
- ``monospace``
.. warning:: Use of the basic markup above is **not recommended**! Where possible use sphinx inline directives (described below) to logically mark commands, parameters, options, input, and files. By using directives consistently these items can be styled appropriately.
Lists
-----
There are two types of lists, bulleted lists and numbered lists. A **bulleted list** looks like this:
* An item
* Another item
* Yet another item
This is accomplished with the following code::
* An item
* Another item
* Yet another item
A **numbered list** looks like this:
#. First item
#. Second item
#. Third item
This is accomplished with the following code::
#. First item
#. Second item
#. Third item
Note that numbers are automatically generated, making it easy to add/remove items.
List-tables
-----------
Bulleted lists can sometimes be cumbersome and hard to follow. When dealing with a long list of items, use list-tables. For example, to talk about a list of options, create a table that looks like this:
.. list-table::
:widths: 20 80
:header-rows: 1
* - Shapes
- Description
* - Square
- Four sides of equal length, 90 degree angles
* - Rectangle
- Four sides, 90 degree angles
This is done with the following code::
.. list-table::
:widths: 20 80
:header-rows: 1
* - Shapes
- Description
* - Square
- Four sides of equal length, 90 degree angles
* - Rectangle
- Four sides, 90 degree angles
Page labels
-----------
**Ensure every page has a label that matches the name of the file.** For example if the page is named ``foo_bar.rst`` then the page should have the label::
.. _foo_bar:
Other pages can then link to that page by using the following code::
:ref:`foo_bar`
.. _linking:
Linking
-------
Links to other pages should never be titled as "here". Sphinx makes this easy by automatically inserting the title of the linked document.
Bad
More information about linking can be found :ref:`here <linking>`.
Good
For more information, please see the section on :ref:`linking`.
To insert a link to an external website::
`Text of the link <http://example.com>`__
The resulting link would look like this: `Text of the link <http://example.com>`__
.. warning:: It is very easy to have two links with the same text resulting in the following error::
**(WARNING/2) Duplicate explicit target name:foo**
To avoid these warnings use of a double `__` generates an anonymous link.
Sections
--------
Use sections to break up long pages and to help Sphinx generate tables of contents.
::
================================================================================
Document title
================================================================================
First level
-----------
Second level
++++++++++++
Third level
***********
Fourth level
~~~~~~~~~~~~
Notes and warnings
------------------
When it is beneficial to have a section of text stand out from the main text, Sphinx has two such boxes, the note and the warning. They function identically, and only differ in their coloring. You should use notes and warnings sparingly, however, as adding emphasis to everything makes the emphasis less effective.
Here is an example of a note:
.. note:: This is a note.
This note is generated with the following code::
.. note:: This is a note.
Similarly, here is an example of a warning:
.. warning:: Beware of dragons.
This warning is generated by the following code::
.. warning:: Beware of dragons.
Images
------
Add images to your documentation when possible. Images, such as screenshots, are a very helpful way of making documentation understandable. When making screenshots, try to crop out unnecessary content (browser window, desktop, etc). Avoid scaling the images, as the Sphinx theme automatically resizes large images. It is also helpful to include a caption underneath the image.::
.. figure:: image.png
:align: center
*Caption*
In this example, the image file exists in the same directory as the source page. If this is not the case, you can insert path information in the above command. The root :file:`/` is the directory of the :file:`conf.py` file.::
.. figure:: /../images/gdalicon.png
Several images in the documentation are generated by a Python script located at :source_file:`doc/generate_images.py`.
To regenerate these images, install the required Python dependencies and run the script in a Conda environment with GDAL:
.. code-block:: bash
conda install pytest geopandas --yes
pytest generate_images.py
Pipeline images are generated by a Python script located at :source_file:`doc/generate_pipeline_images.py`.
.. code-block:: bash
conda install pytest graphviz --yes
pip install gdalgviz
pytest generate_pipeline_images.py
External files
--------------
Text snippets, large blocks of downloadable code, and even zip files or other binary sources can all be included as part of the documentation.
To include a link to a file, use the ``download`` directive::
:download:`An external file <example.txt>`
The result of this code will generate a standard link to an :download:`external file <example.txt>`
To include the contents of a file, use the ``literalinclude`` directive::
Example of :command:`gdalinfo` use:
.. literalinclude:: example.txt
Example of :command:`gdalinfo` use:
.. literalinclude:: example.txt
The ``literalinclude`` directive has options for syntax highlighting, line numbers and extracting just a snippet::
Example of :command:`gdalinfo` use:
.. literalinclude:: example.txt
:language: txt
:linenos:
:emphasize-lines: 2-6
:start-after: Coordinate System is:
:end-before: Origin =
Reference files and paths (without link)
----------------------------------------
Use the following syntax to reference files and paths::
:file:`myfile.txt`
This will output: :file:`myfile.txt`.
You can reference paths in the same way::
:file:`path/to/myfile.txt`
This will output: :file:`path/to/myfile.txt`.
For Windows paths, use double backslashes::
:file:`C:\\myfile.txt`
This will output: :file:`C:\\myfile.txt`.
If you want to reference a non-specific path or file name::
:file:`{your/own/path/to}/myfile.txt`
This will output: :file:`{your/own/path/to}/myfile.txt`
Reference files in GDAL source tree (with link)
-----------------------------------------------
To reference a file in the GDAL source tree, use::
:source_file:`gcore/gdaldriver.cpp`
This will output a link to the file on GitHub: :source_file:`gcore/gdaldriver.cpp`
This is a GDAL Sphinx extension defined at :source_file:`doc/source/_extensions/source_file.py`.
The two parameters are set in :source_file:`doc/source/conf.py`:
.. code-block:: rst
source_file_root = os.path.join(os.path.dirname(__file__), os.pardir, os.pardir)
source_file_url_template = "https://github.com/OSGeo/gdal/blob/master/{}"
Reference code
--------------
To reference a class::
:cpp:class:`MyClass`
To reference a method or function::
:cpp:func:`MyClass::MyMethod`
:cpp:func:`MyFunction`
Command-line program usage
--------------------------
To document a command-line tool, use the ``example`` directive.
An example may have a title as well as an id that can be used to generate
a cross-reference from the same document.
.. code-block:: rst
.. example::
:title: Listing files
:id: basic-ls
Files can be listed as follows:
.. code-block:: bash
ls
The ``ls`` command is demonstrated in :example:`basic-ls`.
If the output of a command is to be included in the listing, the code language
should be set to ``console``:
.. code-block:: rst
.. code-block:: console
$ gdalinfo --version
GDAL 3.4.1, released 2021/12/27
To run the command and collect its output when the documentation is built, use the ``command-output`` directive.
.. code-block:: rst
.. command-output:: ogrinfo poly.shp
:cwd: ../../../autotest/ogr/data
.. _config_option_syntax:
Define and reference configuration options
------------------------------------------
To define a configuration option, use::
.. config:: OPTION_NAME
:choices: COMMA, SEPARATED, LIST
:default: DEFAULT_VALUE
:since: GDAL.MIN.VERSION
Narrative about the option.
Similar syntax can be used to define opening options (``.. oo::``),
creation options (``.. co::``), dataset creation options (``.. dsco::``), or layer creation options
(``.. lco::``).
To reference a configuration option, such as **GDAL_CACHEMAX**,
use the syntax in the table below.
.. list-table::
:header-rows: 1
* - Option type
- Syntax
* - Configuration option
- ::
:config:`option_name`
* - Creation option
- ::
:co:`option_name`
* - Open option
- ::
:oo:`option_name`
* - Dataset creation option
- ::
:dsco:`option_name`
* - Layer creation option
- ::
:lco:`option_name`
Reference commands
------------------
Reference commands (such as :program:`gdalinfo`) with the following syntax::
:program:`gdalinfo`
Use ``option`` directive for command line options::
.. option:: -json
Display the output in json format.
Use ``describe`` to document create parameters::
.. describe:: WORLDFILE=YES
Force the generation of an associated ESRI world file (with the extension .wld).
MyST-NB - Executable notebooks
##############################
Quoting `MyST-NB documentation <https://myst-nb.readthedocs.io/en/latest/index.html>`__,
"MyST-NB is a module within the Executable Books Project, an international
collaboration to build open source tools that facilitate publishing computational
narratives using the Jupyter ecosystem. It is also a core component of Jupyter Book."
The documentation is written in a special markdown dialect, MyST Markdown,
that can include code cells:
.. code-block:: markdown
```{code-cell}
:tags: [hide-output]
from osgeo import gdal
import pprint
gdal.UseExceptions()
with gdal.Open("data/byte.tif") as ds:
info = gdal.Info(ds, format='json')
del info["stac"] # to avoid cluttering below output
pprint.pprint(info, indent=2, width=100)
```
See :file:`doc/source/api/python/python_examples.myst` for an example.
Consult how to author `text-based notebooks <https://myst-nb.readthedocs.io/en/latest/authoring/text-notebooks.html>`__
for more details.
Building full GDAL documentation, even in incremental mode, is rather slow.
It is possible to partly render to HTML a MyST file with:
.. code-block:: shell
$ mystnb-docutils-html5 --nb-read-as-md=true source/api/python/python_examples.myst > out.html
You will get some warnings, but executable run will be executed and rendered.
---
### Doc Source Development Dev Environment (`doc/source/development/dev_environment.rst`)
.. _dev_environment:
================================================================================
Setting up a development environment
================================================================================
Build requirements
------------------
See :ref:`build_requirements`
Vagrant
-------
`Vagrant <https://www.vagrantup.com>`_ is a tool that works with a virtualization product such as
VirtualBox to create a reproducible development environment. GDAL includes a Vagrant configuration
file that sets up an Ubuntu virtual machine with a comprehensive set of dependencies.
Once Vagrant has been installed and the GDAL source downloaded, the virtual machine can be set up
by running the following from the source root directory:
.. code-block:: bash
# VAGRANT_VM_CPU=number_of_cpus
vagrant up
The source root directory is exposed inside the virtual machine at ``/vagrant``, so changes made to
GDAL source files on the host are seen inside the VM. To rebuild GDAL after changing source files,
you can connect to the VM and re-run the build command:
.. code-block:: bash
vagrant ssh
cmake --build .
Note that the following directories on the host will be created (and can be
removed if the Vagrant environment is no longer needed):
- ``../apt-cache/ubuntu/jammy64``: contains a cache of Ubuntu packages of the VM,
to allow faster VM reconstruction
- ``build_vagrant``: CMake build directory
- ``ccache_vagrant``: CCache directory
Docker
------
The Linux environments used for building and testing GDAL on GitHub Actions are
defined by Docker images that can be pulled to any machine for development. The
Docker image used for each build is specified in :source_file:`.github/workflows/linux_build.yml`. As an
example, the following commands can be run from the GDAL source root to build
and test GDAL using the clang address sanitizer (ASAN) in the same environment
that is used in GitHub Actions:
.. code-block:: bash
docker run -it \
-v $(pwd):/gdal:rw \
ghcr.io/osgeo/gdal-deps:ubuntu20.04-master
cd /gdal
mkdir build-asan
cd build-asan
../.github/workflows/asan/build.sh
../.github/workflows/asan/test.sh
To avoid built objects being owned by root, it may be desirable to add ``-u $(id
-u):$(id -g) -v /etc/passwd:/etc/passwd`` to the ``docker run`` command above.
Building on Windows with Conda dependencies and Visual Studio
--------------------------------------------------------------------------------
This approach is less appropriate for Debug builds of GDAL, than other methods, such as using vcpkg.
A minimal Windows build configuration utilizing Conda is provided within the GitHub Actions workflow
defined in :source_file:`.github/workflows/windows_build.yml` - see the ``build-windows-conda`` job.
Install git
+++++++++++
Install `git <https://git-scm.com/download/win>`_
Install miniconda
+++++++++++++++++
Install `miniconda <https://repo.anaconda.com/miniconda/Miniconda3-latest-Windows-x86_64.exe>`_
Install Visual Studio
+++++++++++++++++++++
Install `Visual Studio <https://visualstudio.microsoft.com/vs/community/>`_
In Visual Studio Installer Workloads tab check Desktop development with C++.
Only the latest Community Edition (2022) is available.
Install GDAL dependencies
+++++++++++++++++++++++++
Start a Conda-enabled PowerShell console and assuming there is a ``c:\\dev`` directory
.. code-block:: ps1
cd c:\dev
conda create --yes --name gdal
conda activate gdal
conda install --yes --quiet -c conda-forge compilers cmake curl libiconv icu python swig numpy `
zlib lxml setuptools
# --only-deps only installs the dependencies of the listed packages, not the packages themselves
conda install --yes --quiet -c gdal-master -c conda-forge --only-deps `
libgdal libgdal-hdf4 libgdal-hdf5 libgdal-netcdf libgdal-pdf libgdal-jp2openjpeg
.. note::
The ``compilers`` package will install ``vs2022_win-64`` (at time of writing)
to set the appropriate environment for CMake to pick up. It also finds and works
with Visual Studio 2022 (Professional or Enterprise) if that is installed.
Checkout GDAL sources
+++++++++++++++++++++
.. code-block:: ps1
cd c:\dev
git clone https://github.com/OSGeo/gdal.git
Build GDAL
++++++++++
From a Conda-enabled PowerShell console:
.. code-block:: ps1
conda activate gdal
cd c:\dev\gdal
cmake -S . -B build -DCMAKE_PREFIX_PATH:FILEPATH="$env:CONDA_PREFIX"
cmake --build build --config Release -j 8
Run GDAL tests
++++++++++++++
Check everything has built correctly, and then run the test suite using
the commands below from a Conda-enabled PowerShell console:
.. code-block:: ps1
cd c:\dev\gdal\build
# install the Python dependencies for autotest
python -m pip install -r ../autotest/requirements.txt
# set environment variables, see section below
..\scripts\setdevenv.ps1
# check the version
gdal --version
# check the Python module and version
python -c "import osgeo; import inspect; print(inspect.getfile(osgeo))"
python -c "from osgeo import gdal; print(gdal.__version__)"
# run the test suite
ctest -V --build-config Release
.. _setting_dev_environment_variables:
Setting development environment variables
-----------------------------------------
Once GDAL has been built, a number of environment variables must be set to be
able to execute C++ or Python utilities of the build directory, or run tests.
This can be done by sourcing the following from the build directory:
.. code-block:: bash
. ../scripts/setdevenv.sh
(with adjustments to the above path if the build directory is not a subdirectory of the GDAL source root).
For Windows, a similar ``scripts/setdevenv.bat`` script exists.
.. code-block:: console
cd c:\dev\gdal\build
..\scripts\setdevenv.bat REM uses "Release" (default)
..\scripts\setdevenv.bat Debug REM uses "Debug"
Alternatively, on Windows, you can set up a PowerShell development environment using the ``scripts/setdevenv.ps1`` script:
.. code-block:: ps1
cd c:\dev\gdal\build
..\scripts\setdevenv.ps1 # uses "Release" (default)
..\scripts\setdevenv.ps1 RelWithDebInfo # uses "RelWithDebInfo"
To verify that environment variables have been set correctly, you can check the version of a GDAL binary:
.. code-block:: bash
gdal --version
# GDAL 3.14.0dev-b0b8dcc320-dirty, released 2026/09/04
and the Python bindings:
.. code-block:: bash
python -c 'from osgeo import gdal; print(gdal.__version__)'
# 3.14.0dev-b0b8dcc320-dirty
---
### Doc Source Development Dev Practices (`doc/source/development/dev_practices.rst`)
.. _development_practices:
================================================================================
Development practices
================================================================================
Making changes to GDAL
----------------------
Minor changes to GDAL, such as bug fixes, may be made by opening a GitHub pull request.
Major changes should be discussed on the |gdal-dev| listserv and may require the drafting
of a RFC (request for comment) document.
GDAL's policy on substantial code additions is documented at :ref:`rfc-85`.
Please also consult our policy regarding :ref:`AI/LLM tool use <ai_tool_policy>`.
.. _cpl:
Portability
-----------
GDAL strives to be widely portable to 32 bit and 64 bit computing
environments, as well as little-endian and big-endian ordered CPUs.
CPL functions in the port directory provide services to abstract platform
specific operations.
Generally speaking, where available CPL functions should be used in
preference to operating system functions for operations like memory
allocation, path parsing, filesystem I/O (using VSILFILE* / VSIVirtualFile*),
ODBC access, etc.
C/C++ standards
---------------
The current C and C++ standards adopted by GDAL/OGR are C99 and C++17
(last updated per :ref:`rfc-98`).
Variable naming
---------------
Much of the existing GDAL/OGR code uses an adapted Hungarian naming
convention. Use of this convention is not mandatory, but when
maintaining code using this convention it is desirable to continue
adhering to it with changes. Most importantly, please avoiding using it
improperly as that can be very confusing.
In Hungarian prefixing the prefix tells something about about the type,
and potentially semantics of a variable. The following are some prefixes
used in GDAL/OGR.
- *a*: array
- *b*: C/C++ bool. In C code that pre-dates C99 adoption, it is also used for ints with only TRUE/FALSE values.
- *by*: byte (GByte / unsigned char).
- *df*: floating point value (double precision)
- *e*: enumeration
- *i*: integer number used as a zero based array or loop index.
- *f*: floating point value (single precision)
- *h*: an opaque handle (such as GDALDatasetH).
- *hf*: floating point value (half precision)
- *n*: integer number (size unspecified)
- *o*: C++ object
- *os*: CPLString or std::string
- *p*: pointer
- *psz*: pointer to a null-terminated string. (eg. "char \*pszName;")
- *sz*: null-terminated string (eg." char szName[100];")
- *k*: compile-time constant
Prefixes can be stacked. The following are some examples of meaningful
variables.
- \*char !\*\ *papszTokens*: Pointer to an array of strings.
- \*int *panBands*: Pointer to the first element of an array of
numbers.
- \*double *padfScanline*: Pointer to the first element of an array of
doubles.
- \*double *pdfMeanRet*: Pointer to a single double.
- \*GDALRasterBand *poBand*: Pointer to a single object.
- \*GByte *pabyHeader*: Pointer to an array of bytes.
It may also be noted that the standard convention for variable names is
to capitalize each word in a variable name.
Function and class naming
-------------------------
- Functions and classes should have a selective enough namespace ("GDAL" or "OGR" prefix, or use of C++ namespace) to avoid symbol collision.
File naming and code formatting
-------------------------------
- All source files (.h, .c, .cpp, .py, etc.) should have a header with copyright attribution and the text of the GDAL X/MIT license.
- Use lower case filenames.
- Use .cpp extension for C++ files (not .cc).
- C/C++ code formatting rules are defined in :source_file:`.clang-format`. Python code formatting
is enforced by Black. The pre-commit utility should be used to enforce them automatically. See :ref:`commit_hooks`.
Memory allocation
-----------------
Large memory allocations should be performed using the :cpp:func:`VSIMalloc` family of functions, which will return ``nullptr`` on allocation failure.
As per :ref:`rfc-19`, you can use ``VSIMalloc2(x, y)`` instead of
doing ``CPLMalloc(x * y)`` or ``VSIMalloc(x * y)``. :cpp:func:`VSIMalloc2` will detect
potential overflows in the multiplication and return a NULL pointer if
it happens. This can be useful in GDAL raster drivers where x and y are
related to the raster dimensions or raster block sizes. Similarly,
``VSIMalloc3(x, y, z)`` can be used as a replacement for ``CPLMalloc(x * y * z)``.
When working with standard library data structures such as ``std::vector`` that may throw ``std::bad_alloc``, a try/catch block should be used around blocks that may allocate a large amount of memory.
Adding a new driver
-------------------
- If the driver depends on a third-party library, compilation of the driver must be made conditional on the presence of the library. Drivers should try to re-use existing library dependencies as much as possible, e.g. Expat for SAX XML parsing.
- For a vector driver, check that the Open() method of the driver (often delegated to a Open() method of the datasource) is selective enough (i.e. it will not accept data files that are not meant for the driver), and robust enough (it will not crash for small variations w.r.t content that it would recognize). Check that it can deal with unusual filenames. For a GDAL driver, similar checks, as well for the optional Identify() method.
- A set of tests covering the driver should be added to the Python test suite. If appropriate, small sample data files may be added to autotest/gdrivers/data or autotest/ogr/data. The ``test_ogrsf`` utility and ``GDALTest`` class may simplify testing of basic driver functionality.
- A documentation page should be created for the driver. Documentation should, at a minimum, briefly describe the format handled by the driver and, when relevant, describe the particular syntax for the connection string, creation options, configuration options, etc. The documentation should provide a link to a more detailed format description and mention needed third-party libraries.
Writing tests
-------------
See :ref:`writing_tests`.
Git usage
---------
This section collects a few best practices for git usage for GDAL development.
Initiating your work repository
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Fork |OSGeo/gdal| from the GitHub UI, and then run:
.. code-block:: bash
git clone https://github.com/OSGeo/gdal
cd gdal
git remote add my_user_name [email protected]:my_user_name/gdal.git
Working with a feature branch
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: bash
git checkout master
# potentially update your local master against upstream, as described above
git checkout -b my_new_feature_branch
# do work. For example:
git add my_new_file
git add my_modifid_message
git rm old_file
git commit -a
# you may need to resynchronize against master if you need some bugfix
# or new capability that has been added since you created your branch
git fetch origin
git rebase origin/master
# At end of your work, make sure history is reasonable by folding non
# significant commits into a consistent set
git rebase -i master
# use 'fixup' for example to merge several commits together,
# and 'reword' to modify commit messages
# or alternatively, in case there is a big number of commits and marking
# all them as 'fixup' is tedious
git fetch origin
git rebase origin/master
git reset --soft origin/master
git commit -a -m "Put here the synthetic commit message"
# push your branch
git push my_user_name my_new_feature_branch
From the GitHub UI, issue a pull request.
If the pull request discussion or automated checks require changes, commit
locally and push. To get a reasonable history, you may need to combine commits
using ``git rebase -i master``, in which case you will have to force-push your
branch with ``git push -f my_user_name my_new_feature_branch``.
Updating your local master against upstream master
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: bash
git checkout master
git fetch origin
# Be careful: this will lose all local changes you might have done now
git reset --hard origin/master
Commit messages
^^^^^^^^^^^^^^^
Commit messages should indicate a component name (eg a driver name), a short
description, and when relevant, a reference to a issue (with 'fixes #' if it
actually fixes it)
::
COMPONENT_NAME: fix bla bla (fixes #1234)
Details here...
.. _commit_hooks:
Commit hooks
^^^^^^^^^^^^
GDAL provides pre-commit hooks to run code formatters and linters before a commit is made. The
hooks are cloned with the repository and can be installed using
`pre-commit <https://pre-commit.com>`_:
.. code-block:: bash
python3 -m pip install pre-commit
pre-commit install
Once installed, the hooks can be run manually via ``pre-commit run --all-files``.
Blame ignore file
^^^^^^^^^^^^^^^^^
Due to whole-tree code reformatting done during GDAL 3.7 development,
``git blame`` information might be misleading. To avoid that, you need
to modify your git configuration as following to ignore the revision of
the whole-tree reformatting:
.. code-block:: bash
git config blame.ignoreRevsFile .git-blame-ignore-revs
Backporting bugfixes from master to a stable branch
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: bash
git checkout master
With git log, identify the sha1sum of the commit you want to backport
git checkout 2.2 # if you want to backport to 2.2
git pull origin 2.2
# git checkout -b branch_name # if you intend to submit the backport as a pull request
git cherry-pick the_sha1_sum
git push ...
If changes are needed, do them and ``git commit -a --amend``
Things you should NOT do
^^^^^^^^^^^^^^^^^^^^^^^^
(For anyone with push rights to |OSGeo/gdal|) Never modify a commit or
the history of anything that has been
committed to https://github.com/OSGeo/gdal
Committing symbolic links is allowed only under the .github directory in order to
avoid potential problems on Windows.
Source tree layout
------------------
- :file:`alg`: Algorithms: rasterization, polygonization, warper engine, etc.
- :file:`apps`: C++ command line utilities
- :file:`autotest`: Regression test suite (C++ and Python)
- :file:`cmake`: CMake modules and helpers functions
- :file:`doc`: Source code of GDAL documentation and scripts
- :file:`docker`: Dockerfile's for GDAL Docker images :source_file:`docker/README.md`
- :file:`gcore`: Raster core functionality. Base classes: :cpp:class:`GDALDataset`, :cpp:class:`GDALRasterBand`, :cpp:class:`GDALDriver`, overview building, etc.
- :file:`frmts`: GDAL/raster drivers (mostly, with the exception of the GDAL GeoPackage raster support in ogr/ogrsf_frmts/gpkg)
- :file:`fuzzer`: Source code and scripts for GDAL `OSS-Fuzz integration <https://github.com/google/oss-fuzz>`__
- :file:`gnm`: Source code for :ref:`gnm_data_model`
- :file:`ogr`: OGR vector core classes: :cpp:class:`OGRFieldDefn`, :cpp:class:`OGRGeomFieldDefn`, :cpp:class:`OGRFeatureDefn`, :cpp:class:`OGRGeometry` and derived classes, OGR SQL, etc.
- :file:`ogr/ogrsf_frmts`: OGR/vector drivers
- :file:`ogr/ogrsf_frmts/generic`: OGR vector core class: `OGRLayer`, OGR SQL generic layer
- :file:`port`: :ref:`CPL (Common Portability Library) <cpl>`
- :file:`perftests`: C++ and Python scripts to check the speed/performance of various aspects of GDAL.
- :file:`scripts`: various utility scripts used for Continuous Integration, release generation, and other auxiliary tasks. None of them are for end users.
- :file:`swig/include`: definition of SWIG Python, Java, C# bindings
- :file:`swig/python/gdal-utils/scripts`: Launcher scripts for installed/public GDAL Python utilities. No real functionality there
- :file:`swig/python/gdal-utils/osgeo_utils`: Core code for GDAL Python utilities. Available in the PyPI gdal and gdal-utils packages.
- :file:`swig/python/gdal-utils/samples`: Scripts that are not installed and generally not or very little documented. May serve as a staging area for future scripts that are going to be promoted as official.
- :file:`swig/python/gdal-utils/auxiliary`: Helper methods and classes used by GDAL Python utilities. Available in the PyPI gdal and gdal-utils packages.
- :file:`third_party`: Third-party libraries used by libgdal. Other may be found in:
* :file:`alg/internal_libqhull`
* :file:`apps/argparse`
* :file:`frmts/gtiff/libtiff`
* :file:`frmts/gtiff/libgeotiff`
* :file:`frmts/hdf4/hdf-eos`
* :file:`frmts/jpeg/libjpeg`
* :file:`frmts/jpeg/libjpeg12`
* :file:`frmts/grib/degrib/degrib`
* :file:`frmts/grib/degrib/g2clib`
* :file:`frmts/pcidsk/sdk`
* :file:`frmts/pcraster/libcsf`
* :file:`frmts/png/libpng`
* :file:`frmts/gif/giflib`
* :file:`frmts/zlib/`
* :file:`ogr/ogrsf_frmts/cad/libopencad`
* :file:`ogr/ogrsf_frmts/geojson/libjson`
* :file:`ogr/ogrsf_frmts/flatgeobuf/flatbuffers`
* :file:`ogr/ogrsf_frmts/pmtiles/pmtiles`
* :file:`ogr/ogrsf_frmts/sqlite/sqlite_rtree_bulk_load`
---
### Doc Source Development Example (`doc/source/development/example.txt`)
Driver: GTiff/GeoTIFF
Size is 512, 512
Coordinate System is:
PROJCS["NAD27 / UTM zone 11N",
GEOGCS["NAD27",
DATUM["North_American_Datum_1927",
SPHEROID["Clarke 1866",6378206.4,294.978698213901]],
PRIMEM["Greenwich",0],
UNIT["degree",0.0174532925199433]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],
PARAMETER["central_meridian",-117],
PARAMETER["scale_factor",0.9996],
PARAMETER["false_easting",500000],
PARAMETER["false_northing",0],
UNIT["metre",1]]
Origin = (440720.000000,3751320.000000)
Pixel Size = (60.000000,-60.000000)
Corner Coordinates:
Upper Left ( 440720.000, 3751320.000) (117d38'28.21"W, 33d54'8.47"N)
Lower Left ( 440720.000, 3720600.000) (117d38'20.79"W, 33d37'31.04"N)
Upper Right ( 471440.000, 3751320.000) (117d18'32.07"W, 33d54'13.08"N)
Lower Right ( 471440.000, 3720600.000) (117d18'28.50"W, 33d37'35.61"N)
Center ( 456080.000, 3735960.000) (117d28'27.39"W, 33d45'52.46"N)
Band 1 Block=512x16 Type=Byte, ColorInterp=Gray
---
### Doc Source Development Index (`doc/source/development/index.rst`)
.. _development:
================================================================================
How to develop GDAL?
================================================================================
.. toctree::
:maxdepth: 1
building_from_source
dev_environment
dev_practices
testing
dev_documentation
cmake
rfc_process
rfc/index
---
### Doc Source Development Rfc Process (`doc/source/development/rfc_process.rst`)
.. _rfc_process:
================================================================================
Request For Comments (RFC) process for code changes
================================================================================
While most bug fixes and small enhancements following the existing logic of code
do not require a RFC and can be done using pull requests, we require contributors
to write a RFC and go through a formal adoption process in the following cases:
- Anything that could cause backward compatibility issues.
- Adding substantial amounts of new code (see :ref:`rfc-85`)
- Changing inter-subsystem APIs, or objects.
- Anything that might be controversial.
A good rule of thumb is that if you wonder "does this require a RFC?", the
answer is generally "yes".
The RFC process is the following one:
- add a new .rst file in :file:`doc/source/development/rfc` with the RFC text,
and references it in :file:`doc/source/development/rfc/index.rst`, and issue
a pull request.
You can look at https://github.com/OSGeo/gdal/pull/10913 as a potential example
for the expected content. Typical sections are:
- Title: RFC {XYZ}: {Description of the RFC in a short sentence}
- Author: your name.
- Contact: your email.
- Started: date at which this is started.
- Status: "Draft", when the RFC is started.
- Summary: what the RFC accomplishes in a few sentences.
- Motivation: Paragraph describing why this RFC is needed.
- Technical solution: organized in several sub-paragraph depending on the
complexity of the RFC. You may need to mention new API calls, impacted
files, etc., and other needed details.
- Backward compatibility: API, ABI, and other compatibility concerns.
- Performance impacts.
- Documentation: how this will be documented.
- Testing: how this will be tested.
- Related issues and PRs: points at potential existing tickets about the topic,
and pull request with a candidate implementation
- Voting history: "TBD" (to be defined), when the RFC is started
- Send an email to the :ref:`gdal-dev mailing list <mailing_list>` with a title like:
"Call for discussion on RFC {XYZ}: {Description of the RFC in a short sentence}"
where you point to the pull request. You may get feedback both in the pull
request or in the mailing list.
- Wait for feedback (give readers at least one week, or more if holiday season).
If it seems positive and reasonable consensus can be reached, you can start
working on a candidate implementation, and issue a pull request for it,
separate for the pull request with the RFC text.
Reference this candidate implementation pull request in the "Related issues
and PRs" section of the RFC text.
- Once your candidate implementation is representative enough, and you and other
contributors can have a good confidence that the RFC can be implemented in the
way it has been described, send an email to the gdal-dev mailing list with
a title like "Motion: adopt RFC {XYZ}: {Description of the RFC in a short sentence}"
where you point to the pull request.
All subscribers can vote, but only votes from members of the GDAL Project
Steering Committee are binding. The voting rules are covered by :ref:`rfc-1`.
- Once the RFC is approved, finish your candidate implementation if not already
finished, and wait for the review process and for it to be merged.
- Update the Status to "Adopted, implemented" and Voting history sections of the
RFC text.
---
### Doc Source Development Testing (`doc/source/development/testing.rst`)
.. _testing:
================================================================================
Automated testing
================================================================================
GDAL includes a comprehensive test suite, implemented using a combination of Python (via pytest) and C++ (via gtest).
After building GDAL using CMake (with the option ``-DBUILD_TESTING=ON`` which is enabled by default),
the complete test suite can be run using ``ctest -V --output-on-failure``.
This will automatically set environment variables so that tests are run on the built version of GDAL, rather than an installed system copy.
See also the autotest :source_file:`autotest/README.md`.
``pytest`` and the other test dependencies listed in :source_file:`autotest/requirements.txt` need to be installed,
if not already added to the environment.
.. code-block:: bash
# from within the build directory
python -m pip install -r ../autotest/requirements.txt
Running a subset of tests using ``ctest``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The complete set of test suites known to ``ctest`` can be viewed by running ``ctest -N``.
A subset of tests can be run using the ``-R`` argument to ``ctest``, which selects tests using a provided regular expression.
For example, ``ctest -R autotest`` would run the Python-based tests.
The ``-E`` argument can be used to exclude tests using a regular expression. For example, ``ctest -E gdrivers`` would exclude the suite of driver tests.
Running a subset of tests using ``pytest``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The test subsets exposed by ``ctest`` are still rather large and some may take several minutes to run.
If a higher level of specificity is needed, ``pytest`` can be called directly to run groups of tests or individual tests.
Before running ``pytest``, it is important to set :ref:`development environment variables <setting_dev_environment_variables>` so that the development build of GDAL is tested, rather than a system version.
Tests can then be run by calling ``pytest``, for example on an individual file.
On Linux and MacOS builds, the tests are symlinked into the build directory, so this
can be done by running the following from the build directory:
.. code-block:: bash
pytest autotest/gcore/vrt_read.py
On Windows, the test files remain in the source tree, but the pytest configuration file ``pytest.ini`` is only available in the ``build/autotest`` directory.
To accommodate this, the above command would be modified as follows:
.. code-block:: console
# from within the build directory
pytest -c autotest/pytest.ini ../autotest/gcore/vrt_read.py
A subset of tests within an individual test file can be run by providing a regular expression to the ``-k`` argument to ``pytest``.
.. code-block:: bash
pytest autotest/gcore/vrt_read.py -k test_vrt_read_non_existing_source
``pytest`` can also report information on the tests without running them. For
example, to list tests containing "tiff" in the name:
.. code-block:: bash
pytest --collect-only autotest -k tiff
.. warning:: Not all Python tests can be run independently; some tests depend on state set by previous tests in the same file.
Checking for memory leaks and access errors using Valgrind
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The GDAL unit test suite can be run using the Valgrind tool to detect memory
errors such as leaks and incorrect reads/writes.
The test suite will run considerably slower under Valgrind (perhaps by a factor
of ten) so it is generally advisable to run a subset of the tests using the
methods described above.
.. warning:: Calling ``valgrind ctest`` will _not_ run the tests under
``valgrind``. Although it is possible to use Valgrind with ctest, it is
simpler to call ``pytest`` or ``gdal_unit_test`` directly.
The following preparatory steps are necessary to avoid numerous false-positive
errors from Valgrind:
1. Many false-positive errors are generated by Python itself. Most of these can be
removed by obtaining a suppression file that corresponds to the version of
the Python interpreter used to run the tests. This file can be located in a
source distribution of Python, or downloaded directly from GitHub (for
example, at
https://raw.githubusercontent.com/python/cpython/3.11/Misc/valgrind-python.supp)
2. A few false-positive errors are generated by the GDAL test suite or
libraries that it uses (e.g., SWIG, numpy). These can be removed by
``autotest/valgrind-gdal.supp`` file in the GDAL repository.
3. When running Python unit tests, the default system memory allocator should
be used instead of Python's internal memory allocator. This can be done by
setting the ``PYTHONMALLOC`` environment variable to ``malloc``.
4. When running Python unit tests, Valgrind will report numerous "Invalid file
descriptor" warnings that cannot currently be suppressed. These can be
removed from the output using ``grep -v "invalid file
descriptor\|alternative log fd"``.
Combining the following, we can run valgrind for a subset of Python tests as
follows:
.. code-block:: bash
PYTHONMALLOC=malloc valgrind \
--leak-check=full \
--suppressions=/home/dan/dev/valgrind-python.supp \
--suppressions=/home/dan/dev/gdal/autotest/valgrind-gdal.supp \
pytest -v autotest/utilities 2>&1 | (grep -v "invalid file descriptor\|alternative log fd" || true) | tee valgrind-out
.. note:: To avoid verbose commands such as the one above, it may be useful to
reference the suppression files and other common arguments in a
``~/.valgrindrc`` file.
.. _writing_tests:
Recommendations on how to write new tests
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Python-based tests should be preferred when possible, as productivity is higher
in Python and there is no associated compilation time (compilation time affects
feedback received from continuous integration).
C/C++-based tests should be reserved for C++-specific aspects that cannot be tested
with the SWIG Python bindings, which use the C interface. For example testing
of C++ operators (copy/move constructors/assignment operators, iterator interfaces,
etc.) or C/C++ functionality not mapped to SWIG (e.g. CPL utility functions/classes)
Python tests
------------
Python tests use the `pytest <https://docs.pytest.org/en/latest/>`__
framework since :ref:`rfc-72`.
Test cases should be written in a way where they are independent from other
ones, so they can potentially be run in isolation or in parallel with other
test cases. In particular temporary files should be created with a name that
cannot conflict with other tests: preferably use pytest's
`tmp_path <https://docs.pytest.org/en/latest/how-to/tmp_path.html#the-tmp-path-fixture>`__
fixture.
Use ``@pytest.mark.require_driver(driver_name)`` as an annotation for a test
case that requires an optional driver to be present.
Use ``pytestmark = pytest.mark.require_driver("driver_name")`` towards the
beginning of a test file that requires a given driver to be available for
all its test cases. This is typically when writing tests for a particular
driver.
Use ``@pytest.mark.require_run_on_demand`` as an annotation to signal a test
that should not be run by default, typically because it requires special
pre-conditions, use a lot of RAM, etc. and is thus not appropriate to be
automatically run by continuous integration.
Use ``@pytest.mark.parametrize(...)`` as an annotation for test functions
that test for variations, instead of for() constructs.
More details at https://docs.pytest.org/en/latest/parametrize.html
e.g.:
.. code-block:: python
@pytest.mark.parametrize("dt,expected_size", [(gdal.GDT_UInt8, 1),
(gdal.GDT_UInt16, 2)]
def test_datatypesize(dt,expected_size):
assert gdal.GetDataTypeSizeBytes(dt) == expected_size
instead of
.. code-block:: python
def test_datatypesize_DO_NOT_DO_THAT():
for dt, expected_size in [(gdal.GDT_UInt8, 1), (gdal.GDT_UInt16, 2)]:
assert gdal.GetDataTypeSizeBytes(dt) == expected_size
`Fixtures <https://docs.pytest.org/en/latest/how-to/fixtures.html>`__ can
be used to share set-up and tear-down code between test cases.
e.g. a fixture automatically loaded for all test cases of a test file, that
takes care to unregister a given driver before the test case is run, and
re-register it afterwards:
.. code-block:: python
@pytest.fixture(scope="module", autouse=True)
def without_filegdb_driver():
# remove FileGDB driver before running tests
filegdb_driver = ogr.GetDriverByName("FileGDB")
if filegdb_driver is not None:
filegdb_driver.Deregister()
yield
if filegdb_driver is not None:
print("Reregistering FileGDB driver")
filegdb_driver.Register()
or a fixture that runs preliminary checks to discover if a driver has
some optional capabilities, and skip a test case if not:
.. code-block:: python
@pytest.fixture()
def require_auto_load_extension():
if ogr.GetDriverByName("SQLite") is None:
pytest.skip()
ds = ogr.Open(":memory:")
with gdaltest.error_handler():
sql_lyr = ds.ExecuteSQL("PRAGMA compile_options")
if sql_lyr:
for f in sql_lyr:
if f.GetField(0) == "OMIT_LOAD_EXTENSION":
ds.ReleaseResultSet(sql_lyr)
pytest.skip("SQLite3 built with OMIT_LOAD_EXTENSION")
ds.ReleaseResultSet(sql_lyr)
def test_ogr_virtualogr_1(require_auto_load_extension):
# Invalid syntax
assert not ogr_virtualogr_run_sql("CREATE VIRTUAL TABLE poly USING VirtualOGR()")
C++ tests
---------
GDAL C++ tests use the `GoogleTest <https://github.com/google/googletest>`__
framework since :ref:`rfc-88`.
Common non-failing assertions are: ``EXPECT_TRUE(cond)``, ``EXPECT_FALSE(cond)``,
``EXPECT_EQ(a, b)``, ``EXPECT_NE(a, b)``, ``EXPECT_STREQ(a, b)``, ``EXPECT_LE(a, b)``,
``EXPECT_LT(a, b)``, ``EXPECT_GE(a, b)``, ``EXPECT_GT(a, b)``, ``EXPECT_NEAR(a, b, tolerance)``
If one of those assertions fail, the execution of the rest of the test cases
continues, hence they should not typically be used if testing a pointer against
NULL and dereferencing it unconditionally afterwards. The ASSERT_xxxx family
of assertions should be used for such cases where early exit of the test case
is desired.
GoogleTest also offers capabilities for parameterized tests. For example:
.. code-block:: c++
class DataTypeTupleFixture:
public test_gdal,
public ::testing::WithParamInterface<std::tuple<GDALDataType, GDALDataType>>
{
public:
static std::vector<std::tuple<GDALDataType, GDALDataType>> GetTupleValues()
{
std::vector<std::tuple<GDALDataType, GDALDataType>> ret;
for( GDALDataType eIn = GDT_UInt8; eIn < GDT_TypeCount; eIn = static_cast<GDALDataType>(eIn + 1) )
{
for( GDALDataType eOut = GDT_UInt8; eOut < GDT_TypeCount; eOut = static_cast<GDALDataType>(eOut + 1) )
{
ret.emplace_back(std::make_tuple(eIn, eOut));
}
}
return ret;
}
};
// Test GDALDataTypeUnion() on all (GDALDataType, GDALDataType) combinations
TEST_P(DataTypeTupleFixture, GDALDataTypeUnion_generic)
{
GDALDataType eDT1 = std::get<0>(GetParam());
GDALDataType eDT2 = std::get<1>(GetParam());
GDALDataType eDT = GDALDataTypeUnion(eDT1,eDT2 );
EXPECT_EQ( eDT, GDALDataTypeUnion(eDT2,eDT1) );
EXPECT_GE( GDALGetDataTypeSize(eDT), GDALGetDataTypeSize(eDT1) );
EXPECT_GE( GDALGetDataTypeSize(eDT), GDALGetDataTypeSize(eDT2) );
EXPECT_TRUE( (GDALDataTypeIsComplex(eDT) && (GDALDataTypeIsComplex(eDT1) || GDALDataTypeIsComplex(eDT2))) ||
(!GDALDataTypeIsComplex(eDT) && !GDALDataTypeIsComplex(eDT1) && !GDALDataTypeIsComplex(eDT2)) );
EXPECT_TRUE( !(GDALDataTypeIsFloating(eDT1) || GDALDataTypeIsFloating(eDT2)) || GDALDataTypeIsFloating(eDT));
EXPECT_TRUE( !(GDALDataTypeIsSigned(eDT1) || GDALDataTypeIsSigned(eDT2)) || GDALDataTypeIsSigned(eDT));
}
INSTANTIATE_TEST_SUITE_P(
test_gdal,
DataTypeTupleFixture,
::testing::ValuesIn(DataTypeTupleFixture::GetTupleValues()),
[](const ::testing::TestParamInfo<DataTypeTupleFixture::ParamType>& l_info) {
GDALDataType eDT1 = std::get<0>(l_info.param);
GDALDataType eDT2 = std::get<1>(l_info.param);
return std::string(GDALGetDataTypeName(eDT1)) + "_" + GDALGetDataTypeName(eDT2);
}
);
Test coverage reports
^^^^^^^^^^^^^^^^^^^^^
GDAL continuous integration has a ``coverage`` configuration that builds
GDAL with the ``gcov`` GCC module to get the line coverage of running Python
and C++ autotest tests.
This is used by the `Coveralls GitHub Action <https://github.com/marketplace/actions/coveralls-github-action>`__
to upload results to https://coveralls.io/github/OSGeo/gdal, for both push
and pull request events.
A somewhat nicer looking output of line coverage results for the latest master
build, generated by ``lcov``, is also available at
https://gdalautotest-coverage-results.github.io/coverage_html/index.html
Post-commit testing
^^^^^^^^^^^^^^^^^^^
A weekly static analysis is run by `Coverity <https://scan.coverity.com>`__. Developers/maintainers can request access on the `GDAL project page <https://scan.coverity.com/projects/749>`__.
---
### Doc Source Extra Path Robots (`doc/source/extra_path/robots.txt`)
User-agent: *
Allow: /en/stable/
Disallow: /en/
Sitemap: https://gdal.org/sitemap.xml
---
### Doc Source Programs Argument Syntax (`doc/source/programs/argument_syntax.rst`)
.. _argument_syntax:
================================================================================
Syntax of arguments of command-line utilities
================================================================================
The following table describes the notation used to document the syntax of
arguments of command-line utilities.
.. list-table::
:header-rows: 1
* - Notation
- Description
* - Text without brackets or braces
- Text that must be typed as shown
* - ``<value>``
- Placeholder for which a value must be substituted.
* - ``[`` Text inside square brackets ``]``
- Optional item.
* - ``{`` Text inside braces ``}``
- Set of required items, separated by a vertical bar.
* - Vertical bar (``|``)
- Separator between mutually exclusive items. At least one must be specified.
* - Ellipsis (``...``)
- Placed after an item that can be repeated.
Example
+++++++
Given the following synopsis:
.. code-block::
my_utility [-wkt_format {WKT1|WKT2}] [-oo <NAME>=<VALUE>]...
<datasetname>
The following command lines are valid:
.. code-block::
my_utility foo.tif
.. code-block::
my_utility -wkt_format WKT1 foo.tif
.. code-block::
my_utility -oo FOO=BAR -oo BAR=BAZ foo.tif
---
### Doc Source Programs Gdal Config (`doc/source/programs/gdal-config.rst`)
.. _gdal-config:
================================================================================
gdal-config (Unix)
================================================================================
.. only:: html
Determines various information about a GDAL installation.
.. Index:: gdal-config
Synopsis
--------
.. code-block::
gdal-config [OPTIONS]
Options:
[--prefix[=DIR]]
[--libs]
[--cflags]
[--version]
[--ogr-enabled]
[--formats]
Description
-----------
This utility script (available on Unix systems) can be used to determine
various information about a GDAL installation. It is normally just used
by configure scripts for applications using GDAL but can be queried by
an end user.
.. option:: --prefix
the top level directory for the GDAL installation.
.. option:: --libs
The libraries and link directives required to use GDAL.
.. option:: --cflags
The include and macro definition required to compiled modules using
GDAL.
.. option:: --version
Reports the GDAL version.
.. option:: --ogr-enabled
Reports "yes" or "no" to standard output depending on whether OGR is
built into GDAL.
.. option:: --formats
Reports which formats are configured into GDAL to stdout.
---
### Doc Source Programs Gdal (`doc/source/programs/gdal.rst`)
.. _gdal_program:
.. program:: gdal_program
================================================================================
Main ``gdal`` entry point
================================================================================
.. versionadded:: 3.11
.. only:: html
Main "gdal" entry point.
.. Index:: gdal
Synopsis
--------
.. program-output:: gdal --help-doc
.. Return status code
.. ------------------
.. include:: return_code.rst
Examples
--------
.. example::
:title: Display the GDAL version
:id: gdal-version
.. command-output:: gdal --version
.. example::
:title: Getting information on the file :file:`utm.tif` (with JSON output)
.. code-block:: console
$ gdal info utm.tif
.. example::
:title: Converting file :file:`utm.tif` to GeoPackage raster
.. code-block:: console
$ gdal convert utm.tif utm.gpkg
.. example::
:title: Getting information on all available commands and subcommands as a JSON document.
.. code-block:: console
$ gdal --json-usage
.. example::
:title: Getting list of all formats supported by the current GDAL build, as text
.. code-block:: console
$ gdal --formats
.. example::
:id: gdal-driver-search
:title: Search for Parquet in the list of all formats using ``jq``
.. tabs::
.. code-tab:: bash
$ gdal --drivers | jq '.[] | select(.short_name == "Parquet")'
.. code-tab:: ps1
gdal --drivers | jq '.[] | select(.short_name == \"Parquet\")'
---
### Doc Source Programs Gdal2tiles (`doc/source/programs/gdal2tiles.rst`)
.. _gdal2tiles:
================================================================================
gdal2tiles
================================================================================
.. only:: html
Generates directory with TMS tiles, KMLs and simple web viewers.
.. Index:: gdal2tiles
Synopsis
--------
.. code-block::
gdal2tiles [--help] [--help-general]
[--legacy]
[-p ] [-r resampling] [-s <srs>] [-z <zoom>]
[-e] [-a nodata] [-v] [-q] [-h] [-k] [-n] [-u ]
[-w <webviewer>] [-t <title>] [-c <copyright>]
[--processes=<NB_PROCESSES>] [--mpi] [--xyz]
[--tilesize=] --tiledriver=<DRIVER> [--tmscompatible]
[--excluded-values=<EXCLUDED_VALUES>]
[--excluded-values-pct-threshold=<EXCLUDED_VALUES_PCT_THRESHOLD>]
[--nodata-values-pct-threshold=<NODATA_VALUES_PCT_THRESHOLD>]
[-g <googlekey] [-b ] [<output_dir>] [<COMMON_OPTIONS>]
Description
-----------
.. warning::
Starting with GDAL 3.13, :program:`gdal2tiles` is deprecated, and by default
is remapped to :ref:`gdal_raster_tile`. For now, you may force the use of
the legacy code by specifying `--legacy`, but legacy mode will be
removed in GDAL 3.15. If you find yourself to need legacy mode
and cannot find workarounds using gdal raster tile, please file a ticket at
https://github.com/OSGeo/GDAL
This utility generates a directory with small tiles and metadata, following
the OSGeo Tile Map Service Specification. Simple web pages with viewers based on
Google Maps, OpenLayers and Leaflet are generated as well - so anybody can comfortably
explore your maps on-line and you do not need to install or configure any
special software (like MapServer) and the map displays very fast in the
web browser. You only need to upload the generated directory onto a web server.
GDAL2Tiles also creates the necessary metadata for Google Earth (KML
SuperOverlay), in case the supplied map uses EPSG:4326 projection.
World files and embedded georeferencing is used during tile generation, but you
can publish a picture without proper georeferencing too.
.. note::
Inputs with non-Byte data type (i.e. ``Int16``, ``UInt16``,...) will be clamped to
the ``Byte`` data type, causing wrong results. To avoid this it is necessary to
rescale input to the ``Byte`` data type using `gdal_translate` utility.
.. note::
Config options of the input drivers may have an effect on the output of gdal2tiles. An example driver config option is GDAL_PDF_DPI, which can be found at :ref:`configoptions`
.. note::
gdal2tiles is a Python utility, and is only available if GDAL Python bindings are available.
.. tip:: Equivalent in new "gdal" command line interface:
See :ref:`gdal_raster_tile`
.. program:: gdal2tiles
.. include:: options/help_and_help_general.rst
.. option:: --legacy
.. versionadded:: 3.13
Force the use of the legacy code base. Since GDAL 3.13, by default, gdal2tiles
is implemented using :ref:`gdal_raster_tile`.
.. option:: -p , --profile=
Tile cutting profile (mercator, geodetic, raster) - default 'mercator' (Google Maps compatible).
Starting with GDAL 3.2, additional profiles are available from tms_XXXX.json files
placed in GDAL data directory (provided all zoom levels use same origin, tile dimensions,
and resolution between consecutive zoom levels vary by a factor of two).
.. option:: -r <RESAMPLING>, --resampling=<RESAMPLING>
Resampling method (average, near, bilinear, cubic, cubicspline, lanczos, mode, max, min, med, q1, q3) - default 'average'.
.. option:: -s <SRS>, --s_srs=<SRS>
The spatial reference system used for the source input data.
.. option:: --xyz
Generate XYZ tiles (OSM Slippy Map standard) instead of TMS.
In the default mode (TMS), tiles at y=0 are the southern-most tiles, whereas
in XYZ mode (used by OGC WMTS too), tiles at y=0 are the northern-most tiles.
.. versionadded:: 3.1
.. option:: -d, --tmscompatible
When using the geodetic profile, specifies the base resolution as 0.703125
or 2 tiles at zoom level 0.
.. option:: -z <ZOOM>, --zoom=<ZOOM>
Zoom levels to render (format:'2-5', '10-' or '10').
.. option:: -e, --resume
Resume mode. Generate only missing files.
.. option:: -a <NODATA>, --srcnodata=<NODATA>
Value in the input dataset considered as transparent. If the input dataset
had already an associate nodata value, it is overridden by the specified value.
.. option:: -v, --verbose
Generate verbose output of tile generation.
Starting with GDAL 3.7, that verbose output is emitted through the
``logging.getLogger("gdal2tiles")`` object.
.. option:: -x, --exclude
Exclude transparent tiles from result tileset.
.. option:: -q, --quiet
Disable messages and status to stdout
.. option:: --processes=<NB_PROCESSES>
Number of parallel processes to use for tiling, to speed-up the computation.
.. option:: --mpi
.. versionadded:: 3.5
Assume launched by mpiexec, enable MPI parallelism and ignore --processes.
Requires working MPI environment and the MPI for Python (mpi4py) package.
User should set GDAL_CACHEMAX to an appropriate cache size per process
based on memory per node and the number of processes launched per node.
.. warning::
--mpi mode is not supported in :ref:`gdal_raster_tile` non-legacy mode.
You may specify :option:`--legacy` to go on, but this legacy mode is going
to be removed in GDAL 3.15.
.. option:: --tilesize=
.. versionadded:: 3.1
Width and height in pixel of a tile. Default is 256.
.. option:: --tiledriver=<DRIVER>
Which output driver to use for the tiles, determines the file format of the tiles.
Currently PNG, WEBP and JPEG (JPEG added in GDAL 3.9) are supported. Default is PNG.
Additional configuration for the WEBP and JPEG drivers are documented below.
.. versionadded:: 3.6
.. option:: --excluded-values=<EXCLUDED_VALUES>
Comma-separated tuple of values (thus typically "R,G,B"), that are ignored
as contributing source pixels during resampling. The number of values in
the tuple must be the same as the number of bands, excluding the alpha band.
Several tuples of excluded values may be specified using the "(R1,G1,B2),(R2,G2,B2)" syntax.
Only taken into account by Average currently.
This concept is a bit similar to nodata/alpha, but the main difference is
that pixels matching one of the excluded value tuples are still considered
as valid, when determining the target pixel validity/density.
.. versionadded:: 3.9
.. option:: --excluded-values-pct-threshold=EXCLUDED_VALUES_PCT_THRESHOLD
Minimum percentage of source pixels that must be set at one of the --excluded-values to cause the excluded
value, that is in majority among source pixels, to be used as the target pixel value. Default value is 50(%)
.. versionadded:: 3.9
.. option:: --nodata-values-pct-threshold=<NODATA_VALUES_PCT_THRESHOLD>
Minimum percentage of source pixels that must be at nodata (or alpha=0 or any
other way to express transparent pixel) to cause the target pixel value to
be transparent. Default value is 100 (%), which means that a target pixel is
transparent only if all contributing source pixels are transparent.
Only taken into account for average resampling.
.. versionadded:: 3.9
.. option:: -h, --help
Show help message and exit.
.. option:: --version
Show program's version number and exit.
KML (Google Earth) options
++++++++++++++++++++++++++
Options for generated Google Earth SuperOverlay metadata
.. option:: -k, --force-kml
Generate KML for Google Earth - default for 'geodetic' profile and 'raster' in EPSG:4326. For a dataset with different projection use with caution!
.. option:: -n, --no-kml
Avoid automatic generation of KML files for EPSG:4326.
.. option:: -u , --url=
URL address where the generated tiles are going to be published.
Web viewer options
++++++++++++++++++
Options for generated HTML viewers a la Google Maps
.. option:: -w <WEBVIEWER>, --webviewer=<WEBVIEWER>
Web viewer to generate (all, google, openlayers, leaflet, mapml, none) - default 'all'.
.. option:: -t <TITLE>, --title=<TITLE>
Title of the map.
.. option:: -c <COPYRIGHT>, --copyright=<COPYRIGHT>
Copyright for the map.
.. option:: -g <GOOGLEKEY>, --googlekey=<GOOGLEKEY>
Google Maps API key from https://developers.google.com/maps/get-started.
.. option:: -b , --bingkey=
Bing Maps API key from https://www.bingmapsportal.com/
MapML options
+++++++++++++
MapML support is new to GDAL 3.2. When --webviewer=mapml is specified,
--xyz is implied, as well as --tmscompatible if --profile=geodetic.
The following profiles are supported:
- mercator: mapped to OSMTILE MapML tiling scheme
- geodetic: mapped to WGS84 MapML tiling scheme
- APSTILE: from the tms_MapML_APSTILE.json data file
The generated MapML file in the output directory is ``mapml.mapml``
Available options are:
.. option:: --mapml-template=<filename>
Filename of a template mapml file where variables will
be substituted. If not specified, the generic
template_tiles.mapml file from GDAL data resources
will be used
The --url option is also used to substitute ``${URL}`` in the template MapML file.
WEBP options
+++++++++++++
WEBP tiledriver support is new to GDAL 3.6. It is enabled by using --tiledriver=WEBP.
The following configuration options are available to further customize the WebP output:
.. option:: --webp-quality=<QUALITY>
QUALITY is a integer between 1-100. Default is 75.
.. option:: --webp-lossless
Use WEBP lossless compression, default is lossy
.. note::
GDAL :ref:`WEBP driver <raster.webp>` documentation can be consulted
JPEG options
+++++++++++++
JPEG tiledriver support is new to GDAL 3.9. It is enabled by using --tiledriver=JPEG.
Note that JPEG does not support transparency, hence edge tiles will display black
pixels in areas not covered by the source raster.
The following configuration options are available to further customize the JPEG output:
.. option:: ---jpeg-quality=JPEG_QUALITY
QUALITY is a integer between 1-100. Default is 75.
.. Return status code
.. ------------------
.. include:: return_code.rst
Examples
--------
.. example::
:title: Basic example
.. code-block:: bash
gdal2tiles --zoom=2-5 input.tif output_folder
.. example::
:title: MapML generation
.. code-block:: bash
gdal2tiles --zoom=16-18 -w mapml -p APSTILE --url "https://example.com" input.tif output_folder
.. example::
:title: MPI example
.. code-block:: bash
mpiexec -n $NB_PROCESSES gdal2tiles --mpi --config GDAL_CACHEMAX 500 --zoom=2-5 input.tif output_folder
---
### Doc Source Programs Gdal2xyz (`doc/source/programs/gdal2xyz.rst`)
.. _gdal2xyz:
================================================================================
gdal2xyz
================================================================================
.. only:: html
Translates a raster file into `xyz` format.
.. Index:: gdal2xyz
Synopsis
--------
.. code-block::
gdal2xyz [--help] [--help-general]
[-skip <factor>]
[-srcwin <xoff> <yoff> <xsize> <ysize>]
[-b ]... [-allbands]
[-skipnodata]
[-csv]
[-srcnodata <value>] [-dstnodata <value>]
<src_dataset> <dst_dataset>
Description
-----------
The :program:`gdal2xyz` utility can be used to translate a raster file into xyz format.
`gdal2xyz` can be used as an alternative to `gdal_translate of=xyz`. Features include:
* Select more then one band
* Skip or replace nodata value
* Return the output as numpy arrays.
.. note::
gdal2xyz is a Python utility, and is only available if GDAL Python bindings are available.
.. tip:: Equivalent in new "gdal" command line interface:
See :ref:`gdal_raster_convert` with ``--of XYZ``.
.. program:: gdal2xyz
.. include:: options/help_and_help_general.rst
.. option:: -skip
How many rows/cols to skip in each iteration.
.. option:: -srcwin <xoff> <yoff> <xsize> <ysize>
Selects a subwindow from the source image for copying based on pixel/line location.
.. option:: -b, -band
Select band *band* from the input spectral bands for output.
Bands are numbered from 1 in the order spectral bands are specified.
Multiple **-b** switches may be used.
When no -b switch is used, the first band will be used.
In order to use all input bands set `-allbands` or `-b 0`.
.. option:: -allbands
Select all input bands.
.. option:: -csv
Use comma instead of space as a delimiter.
.. option:: -skipnodata
Exclude the output lines with nodata value (as determined by srcnodata)
.. option:: -srcnodata
The nodata value of the dataset (for skipping or replacing)
Default (`None`) - Use the dataset nodata value;
`Sequence`/`Number` - Use the given nodata value (per band or per dataset).
.. option:: -dstnodata
Replace source nodata with a given nodata. Has an effect only if not setting `-skipnodata`.
Default(`None`) - Use `srcnodata`, no replacement;
`Sequence`/`Number` - Replace the `srcnodata` with the given nodata value (per band or per dataset).
.. option:: -h, --help
Show help message and exit.
.. option:: <src_dataset>
The source dataset name. It can be either file name, URL of data source or
subdataset name for multi-dataset files.
.. option:: <dst_dataset>
The destination file name.
Examples
--------
.. example::
.. code-block:: bash
gdal2xyz -b 1 -b 2 -dstnodata 0 input.tif output.txt
To create a text file in `xyz` format from the input file `input.tif`.
The first columns, x and y, are the coordinates of the centers of each cell.
The remaining columns represent the first and second bands.
We also replace the dataset nodata values with zeros.
.. Return status code
.. ------------------
.. include:: return_code.rst
Caveats
-------
gdal2xyz output values with a limited precision. Use ``gdal_translate -of XYZ`` if more precision is desired.
---
### Doc Source Programs Gdal Bash Completion (`doc/source/programs/gdal_bash_completion.rst`)
.. _gdal_bash_completion:
================================================================================
Bash completion for ``gdal``
================================================================================
.. versionadded:: 3.11
If Bash is used as an interactive shell, users can benefit from completion,
using the <TAB> key. Bash completion is enabled by first sourcing the
:file:`${install_prefix}/share/bash-completion/completions/gdal` file, which
should be automatically done on a number of binary distributions of GDAL.
That script can also be sourced when using :program:`zsh` as a shell (starting
with GDAL 3.11.1)
Examples of completion
++++++++++++++++++++++
.. example::
:title: Listing sub-commands of "gdal":
.. code-block:: console
$ gdal <TAB><TAB>
==>
convert info pipeline raster vector
.. example::
:title: Completion of a sub-command from its initial letters:
.. code-block:: console
$ gdal r<TAB>
==>
$ gdal raster
.. example::
:title: Listing sub-commands of "gdal raster":
.. code-block:: console
$ gdal raster<TAB><TAB>
==>
convert edit info pipeline reproject
.. example::
:title: Listing switches of "gdal raster"
.. code-block:: console
$ gdal raster -<TAB><TAB>
==>
--approx-stats -f --help --if --json-usage --min-max --no-fl --no-md --oo --stats
--checksum --format --hist --input --list-mdd --mm --no-gcp --no-nodata --open-option --subdataset
--drivers -h -i --input-format --mdd --no-ct --no-mask --of --output-format --version
.. example::
:title: Listing allowed values for a switch
.. code-block:: console
$ gdal raster info --of=<TAB><TAB>
==>
json text
.. example::
:title: Listing allowed creation options, restricted to those valid for the output format, once the output filename has been specified
.. code-block:: console
$ gdal raster convert in.tif out.tif --co <TAB><TAB>
==>
ALPHA= ENDIANNESS= JXL_EFFORT= PIXELTYPE= SOURCE_PRIMARIES_RED= TIFFTAG_TRANSFERRANGE_BLACK=
BIGTIFF= GEOTIFF_KEYS_FLAVOR= JXL_LOSSLESS= PREDICTOR= SOURCE_WHITEPOINT= TIFFTAG_TRANSFERRANGE_WHITE=
BLOCKXSIZE= GEOTIFF_VERSION= LZMA_PRESET= PROFILE= SPARSE_OK= TILED=
[ ... snip ... ]
.. example::
:title: Listing known configuration options starting with AWS
.. code-block:: console
$ gdal --config AWS_<TAB><TAB>
==>
AWS_ACCESS_KEY_ID= AWS_DEFAULT_REGION= AWS_REQUEST_PAYER= AWS_STS_ENDPOINT=
AWS_CONFIG_FILE= AWS_HTTPS= AWS_ROLE_ARN= AWS_STS_REGION=
AWS_CONTAINER_AUTHORIZATION_TOKEN= AWS_MAX_KEYS= AWS_ROLE_SESSION_NAME= AWS_STS_REGIONAL_ENDPOINTS=
AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE= AWS_NO_SIGN_REQUEST= AWS_S3_ENDPOINT= AWS_TIMESTAMP=
AWS_CONTAINER_CREDENTIALS_FULL_URI= AWS_PROFILE= AWS_SECRET_ACCESS_KEY= AWS_VIRTUAL_HOSTING=
AWS_DEFAULT_PROFILE= AWS_REGION= AWS_SESSION_TOKEN= AWS_WEB_IDENTITY_TOKEN_FILE=
.. example::
:title: Auto-completion of EPSG CRS codes
:id: gdal-bash-completion-crs
.. code-block:: console
$ gdal raster reproject --output-crs EPSG:432<TAB>
==>
4322 -- WGS 72 4324 -- WGS 72BE 4326 -- WGS 84 4327 -- WGS 84 (geographic 3D) 4328 -- WGS 84 (geocentric) 4329 -- WGS 84 (3D)
.. example::
:title: Auto-completion of filenames in a cloud storage (assuming credentials are properly set up)
.. code-block:: console
$ gdal raster info /vsis3/my_bucket/b<TAB><TAB>
==>
/vsis3/my_bucket/byte.tif /vsis3/my_bucket/byte2.tif
---
### Doc Source Programs Gdal Calc (`doc/source/programs/gdal_calc.rst`)
.. _gdal_calc:
================================================================================
gdal_calc
================================================================================
.. only:: html
Command line raster calculator with numpy syntax.
.. Index:: gdal_calc
Synopsis
--------
.. code-block::
gdal_calc [--help] [--help-general]
--calc=expression --outfile=<out_filename> [-A <filename>]
[--A_band=<n>] [-B...-Z <filename>] [<other_options>]
.. rubric:: DESCRIPTION
:name: description
Command line raster calculator with numpy syntax. Use any basic
arithmetic supported by numpy arrays such as ``+``, ``-``, ``*``, and
``/`` along with logical operators such as ``>``.
Note that all files must have the same dimensions (unless the :option:`--extent` option is used),
but no projection checking is performed (unless the :option:`--projectionCheck` option is used).
.. note::
gdal_calc is a Python utility, and is only available if GDAL Python bindings are available.
.. tip:: Equivalent in new "gdal" command line interface:
See :ref:`gdal_raster_calc`.
.. include:: options/help_and_help_general.rst
.. option:: --calc=<expression>
Calculation in numpy syntax using ``+``, ``-``, ``/``, ``*``, or any numpy array functions (i.e. ``log10()``).
Multiple :option:`--calc` options can be listed to produce a multiband file (GDAL >= 3.2).
See :example:`gdal-calc-multiple-expr`.
.. warning::
Security: The expression is evaluated with Python ``eval()`` method which
can be used to run arbitrary code. Be careful when using ``gdal_calc`` in a
context where users can control the expression.
.. option:: -A <filename>
Input GDAL raster file, you can use any letter (a-z, A-Z). (lower case supported since GDAL 3.3)
A letter may be repeated, or several values (separated by space) can be provided (GDAL >= 3.3).
The effect will be to create a 3D numpy array.
Since GDAL 3.5, wildcard exceptions (using ?, \*) are supported for all shells/platforms.
In such a case, the calculation formula must use this input as a 3D array and must return a 2D array (see :example:`gdal-calc-3d-sum`).
If the calculation does not return a 2D array an error will be generated.
.. option:: --A_band=<n>
Number of raster band for file A (default 1).
.. option:: --outfile=<filename>
Output file to generate or fill.
.. option:: --NoDataValue=<value>
Output NoDataValue (default datatype specific value).
To indicate not setting a NoDataValue use --NoDataValue=none (GDAL >= 3.3)
.. note::
Using the Python API:
``None`` value will indicate default datatype specific value.
``'none'`` value will indicate not setting a NoDataValue.
.. option:: --hideNoData
.. versionadded:: 3.3
Ignores the input bands NoDataValue.
By default, the input bands NoDataValue are not participating in the calculation.
By setting this setting - no special treatment will be performed on the input NoDataValue. and they will be participating in the calculation as any other value.
The output will not have a set NoDataValue, unless you explicitly specified a specific value by setting --NoDataValue=<value>.
.. option:: --type=<datatype>
Output datatype, must be one of [``Byte``, ``Int8``, ``UInt16``, ``Int16``, ``UInt32``, ``Int32``, ``UInt64``, ``Int64``, ``Float64``, ``Float32``, ``CInt16``, ``CInt32``, ``CFloat64``, ``CFloat32``].
.. note::
Despite the datatype set using ``--type``, when doing intermediate arithmetic operations using operands of the
same type, the operation result will honor the original datatype. This may lead into unexpected results in the final result.
.. note::
UInt64, Int64, CInt16, CInt32, CFloat32, CFloat64 have been added in GDAL 3.5.3
Int8 has been added in GDAL 3.7
.. option:: --format=<gdal_format>
GDAL format for output file.
.. option:: --color-table=<filename>
Allows specifying a filename of a color table (or a ColorTable object) (with Palette Index interpretation) to be used for the output raster.
Supported formats: txt (i.e. like gdaldem, but color names are not supported), qlr, qml (i.e. exported from QGIS)
.. option:: --extent=<option>
.. versionadded:: 3.3
This option determines how to handle rasters with different extents.
This option is mutually exclusive with the `projwin` option, which is used for providing a custom extent.
For all the options below the pixel size (resolution) and SRS (Spatial Reference System) of all the input rasters must be the same.
``ignore`` (default) - only the dimensions of the rasters are compared. if the dimensions do not agree the operation will fail.
``fail`` - the dimensions and the extent (bounds) of the rasters must agree, otherwise the operation will fail.
``union`` - the extent (bounds) of the output will be the minimal rectangle that contains all the input extents.
``intersect`` - the extent (bounds) of the output will be the maximal rectangle that is contained in all the input extents.
.. option:: --projwin <lrx> <lry>
.. versionadded:: 3.3
This option provides a custom extent for the output, it is mutually exclusive with the `extent` option.
.. option:: --projectionCheck
.. versionadded:: 3.3
By default, no projection checking will be performed.
By setting this option, if the projection is not the same for all bands then the operation will fail.
.. _creation-option:
.. option:: --creation-option=<option>
Passes a creation option to the output format driver. Multiple
options may be listed. See format specific documentation for legal
creation options for each format.
.. option:: --co=<option>
The same as creation-option_.
.. option:: --allBands=[a-z, A-Z]
Apply the expression to all bands of a given raster. When
:option:`--allBands` is used, :option:`--calc` may be specified only once.
See :example:`gdal-calc-allbands-1` and :example:`gdal-calc-allbands-2`.
.. option:: --overwrite
Overwrite output file if it already exists. Overwriting must be understood
here as deleting and recreating the file from scratch. Note that if this option
is *not* specified and the output file already exists, it will be updated in
place.
.. option:: --debug
Print debugging information.
.. option:: --quiet
Suppress progress messages.
.. Return status code
.. ------------------
.. include:: return_code.rst
Python options
--------------
.. versionadded:: 3.3
The following options are available by using the Python interface of :program:`gdal_calc`.
They are not available using the command prompt.
.. option:: user_namespace
A dictionary of custom functions or other names to be available for use in the Calc expression.
.. option:: return_ds
If enabled, the output dataset will be returned from the function and not closed.
.. option:: color_table
Allows specifying a ColorTable object (with Palette Index interpretation) to be used for the output raster.
Examples
--------
.. example::
:title: Average of two files
.. code-block:: bash
gdal_calc -A input1.tif -B input2.tif --outfile=result.tif --calc="(A+B)/2"
.. caution::
If A and B inputs both have integer data types, integer division will be
performed. To avoid this, you can convert one of the operands to a
floating point type before the division operation.
.. code-block:: bash
gdal_calc -A input.tif -B input2.tif --outfile=result.tif --calc="(A.astype(numpy.float64) + B) / 2"
.. example::
:title: Summing three files
.. code-block:: bash
gdal_calc -A input1.tif -B input2.tif -C input3.tif --outfile=result.tif --calc="A+B+C"
.. example::
:title: Combining three files into a 3D array and summing
:id: gdal-calc-3d-sum
.. code-block:: bash
gdal_calc -A input1.tif -A input2.tif -A input3.tif --outfile=result.tif --calc="numpy.sum(A,axis=0)".
.. example::
:title: Average of three files
.. code-block:: bash
gdal_calc -A input1.tif -B input2.tif -C input3.tif --outfile=result.tif --calc="(A+B+C)/3"
.. example::
:title: Average of three files, using 3D array
.. code-block:: bash
gdal_calc -A input1.tif input2.tif input3.tif --outfile=result.tif --calc="numpy.average(a,axis=0)".
.. example::
:title: Maximum of three files
.. code-block:: bash
gdal_calc -A input1.tif -B input2.tif -C input3.tif --outfile=result.tif --calc="numpy.max((A,B,C),axis=0)"
.. example::
:title: Maximum of three files, using a 3D array
.. code-block:: bash
gdal_calc -A input1.tif input2.tif input3.tif --outfile=result.tif --calc="numpy.max(A,axis=0)"
.. example::
:title: Setting values of zero and below to NODATA
.. code-block:: bash
gdal_calc -A input.tif --outfile=result.tif --calc="A*(A>0)" --NoDataValue=0
.. example::
:title: Using logical operator to keep a range of values from input
.. code-block:: bash
gdal_calc -A input.tif --outfile=result.tif --calc="A*logical_and(A>100,A<150)"
.. example::
:title: Performing two calculations and storing results in separate bands
:id: gdal-calc-multiple-expr
.. code-block:: bash
gdal_calc -A input.tif --A_band=1 -B input.tif --B_band=2 \
--outfile=result.tif --calc="(A+B)/2" --calc="B*logical_and(A>100,A<150)"
.. example::
:title: Add a raster to each band in a 3-band raster
:id: gdal-calc-allbands-1
.. code-block:: bash
gdal_calc -A 3band.tif -B 1band.tif --outfile result.tif --calc "A+B" --allBands A
The result will have three bands, where each band contains the values of ``1band.tif``
added to the corresponding band in ``3band.tif``.
.. example::
:title: Add two three-band rasters
:id: gdal-calc-allbands-2
.. code-block:: bash
gdal_calc -A 3band_a.tif -B 3band_b.tif --outfile result.tif --calc "A+B" --allBands A --allBands B
The result will have three bands, where each band contains the values of the corresponding
band of ``3band_a.tif`` added to the corresponding band of ``3band_b.tif``.
---
### Doc Source Programs Gdal Cli From C (`doc/source/programs/gdal_cli_from_c.rst`)
.. _gdal_cli_from_c:
================================================================================
How to use ``gdal`` CLI algorithms from C
================================================================================
.. versionadded:: 3.12
The C API for ``gdal`` CLI algorithms is available in :file:`gdalalgorithm.h`.
The first step is to get the instance of the ``GDALGlobalAlgorithmRegistry`` with
:cpp:func:`GDALGetGlobalAlgorithmRegistry` and then call
:cpp:func:`GDALAlgorithmRegistryInstantiateAlgFromPath` with the path of the algorithm.
Once done with a ``GDALAlgorithmRegistryH`` handle, the memory associated to it
can be released with :cpp:func:`GDALAlgorithmRegistryRelease` (the algorithm handles
got from the registry will still be valid).
For example:
.. code-block:: cpp
GDALAlgorithmRegistryH hRegistry = GDALGetGlobalAlgorithmRegistry();
const char *const papszAlgPath[] = { "raster", "reproject", NULL };
GDALAlgorithmH hAlg = GDALAlgorithmRegistryInstantiateAlgFromPath(hRegistry, papszAlgPath);
GDALAlgorithmRegistryRelease(hRegistry);
Arguments can be queried with :cpp:func:`GDALAlgorithmGetArg` and set through
different setters depending on the type of the argument, such as
:cpp:func:`GDALAlgorithmArgSetAsString`, :cpp:func:`GDALAlgorithmArgSetAsInteger`,
:cpp:func:`GDALAlgorithmArgSetAsDouble`, etc. Once done with the argument handle,
it must be released with :cpp:func:`GDALAlgorithmArgRelease`.
For example:
.. code-block:: cpp
{
GDALAlgorithmArgH hArg = GDALAlgorithmGetArg(hAlg, "input");
GDALAlgorithmArgSetAsString(hArg, "byte.tif");
GDALAlgorithmArgRelease(hArg);
}
{
GDALAlgorithmArgH hArg = GDALAlgorithmGetArg(hAlg, "resolution");
const double res[] = {60, 60};
GDALAlgorithmArgSetAsDoubleList(hArg, 2, res);
GDALAlgorithmArgRelease(hArg);
}
Execution of the algorithm is performed by :cpp:func:`GDALAlgorithmRun`, with an optional
progress function. Proper closing of the output dataset must be performed with
:cpp:func:`GDALAlgorithmFinalize`. Once done with the algorithm handle,
it must be released with :cpp:func:`GDALAlgorithmFinalize`.
.. code-block:: cpp
int ret = 0;
if( GDALAlgorithmRun(hAlg, NULL, NULL) )
{
// do something
GDALAlgorithmArgRelease(hArg);
}
else
{
fprintf(stderr, "failure\n");
ret = 1;
}
GDALAlgorithmFinalize(hAlg);
GDALAlgorithmRelease(hAlg);
When outputting to a :ref:`raster.mem` dataset, you typically want to get
the output dataset with:
.. code-block:: cpp
GDALAlgorithmArgH hArg = GDALAlgorithmGetArg(hAlg, "output");
GDALArgDatasetValueH hVal = GDALAlgorithmArgGetAsDatasetValue(hArg);
GDALDatasetH hDS = GDALArgDatasetValueGetDatasetRef(hVal);
Putting all things together:
.. code-block:: cpp
#include "gdal.h"
#include "gdalalgorithm.h"
#include <stdio.h>
int main()
{
GDALAllRegister();
GDALAlgorithmRegistryH hRegistry = GDALGetGlobalAlgorithmRegistry();
const char *const papszAlgPath[] = { "raster", "reproject", NULL };
GDALAlgorithmH hAlg = GDALAlgorithmRegistryInstantiateAlgFromPath(hRegistry, papszAlgPath);
GDALAlgorithmRegistryRelease(hRegistry);
if( !hAlg )
{
fprintf(stderr, "cannot instantiate algorithm\n");
return 1;
}
{
GDALAlgorithmArgH hArg = GDALAlgorithmGetArg(hAlg, "input");
GDALAlgorithmArgSetAsString(hArg, "byte.tif");
GDALAlgorithmArgRelease(hArg);
}
{
GDALAlgorithmArgH hArg = GDALAlgorithmGetArg(hAlg, "output-format");
GDALAlgorithmArgSetAsString(hArg, "MEM");
GDALAlgorithmArgRelease(hArg);
}
{
GDALAlgorithmArgH hArg = GDALAlgorithmGetArg(hAlg, "dst-crs");
GDALAlgorithmArgSetAsString(hArg, "EPSG:26711");
GDALAlgorithmArgRelease(hArg);
}
{
GDALAlgorithmArgH hArg = GDALAlgorithmGetArg(hAlg, "resolution");
const double res[] = {60, 60};
GDALAlgorithmArgSetAsDoubleList(hArg, 2, res);
GDALAlgorithmArgRelease(hArg);
}
int ret = 0;
if( GDALAlgorithmRun(hAlg, NULL, NULL) )
{
GDALAlgorithmArgH hArg = GDALAlgorithmGetArg(hAlg, "output");
GDALArgDatasetValueH hVal = GDALAlgorithmArgGetAsDatasetValue(hArg);
GDALDatasetH hDS = GDALArgDatasetValueGetDatasetRef(hVal);
printf("width=%d, height=%d\n", GDALGetRasterXSize(hDS), GDALGetRasterYSize(hDS));
GDALAlgorithmArgRelease(hArg);
}
else
{
fprintf(stderr, "failure\n");
ret = 1;
}
GDALAlgorithmFinalize(hAlg);
GDALAlgorithmRelease(hAlg);
return ret;
}
---
### Doc Source Programs Gdal Cli From Cpp (`doc/source/programs/gdal_cli_from_cpp.rst`)
.. _gdal_cli_from_cpp:
================================================================================
How to use ``gdal`` CLI algorithms from C++
================================================================================
.. versionadded:: 3.12
``gdal`` CLI algorithms are available as :cpp:class:`GDALAlgorithm` instances,
and the include file to use is :file:`gdalalgorithm.h`.
The first step is to get the instance of the ``GDALGlobalAlgorithmRegistry`` with
:cpp:func:`GDALGlobalAlgorithmRegistry::GetSingleton` and then call
:cpp:func:`GDALAlgorithmRegistry::Instantiate` with the path of the algorithm.
For example:
.. code-block:: cpp
auto &singleton = GDALGlobalAlgorithmRegistry::GetSingleton();
GDALAlgorithm *algPtr = singleton.Instantiate("raster", "reproject");
if (!algPtr)
{
std::cout << "cannot instantiate algorithm" << std::endl;
return 1;
}
GDALAlgorithm &alg = *algPtr;
Arguments can be queried and set through :cpp:func:`GDALAlgorithm::operator[]`.
For example:
.. code-block:: cpp
alg["input"] = "byte.tif";
alg["output"] = "out.tif";
alg["dst-crs"] = "EPSG:26711";
alg["resampling"] = "cubic";
alg["resolution"] = std::vector<double>{60, 60};
alg["overwrite"] = true;
Execution of the algorithm is performed by :cpp:func:`GDALAlgorithm::Run`, with an optional
progress function. Proper closing of the output dataset must be performed with
:cpp:func:`GDALAlgorithm::Finalize`
For example:
.. code-block:: cpp
if (alg.Run() && alg.Finalize())
{
std::cout << "success" << std::endl;
return 0;
}
else
{
std::cout << "failure" << std::endl;
return 1;
}
When outputting to a :ref:`raster.mem` dataset, you typically want to get
the output dataset with:
.. code-block:: cpp
GDALDataset *poDS = alg["output"].Get<GDALArgDatasetValue>().GetDatasetRef();
Putting all things together:
.. code-block:: cpp
#include "gdal.h"
#include "gdalalgorithm.h"
#include "gdal_dataset.h"
#include
int main()
{
GDALAllRegister();
auto& singleton = GDALGlobalAlgorithmRegistry::GetSingleton();
GDALAlgorithm *algPtr = singleton.Instantiate("raster", "reproject");
if( !algPtr )
{
std::cout << "cannot instantiate algorithm" << std::endl;
return 1;
}
GDALAlgorithm& alg = *algPtr;
alg["input"] = "byte.tif";
alg["output-format"] = "MEM";
alg["dst-crs"] = "EPSG:26711";
alg["resampling"] = "cubic";
alg["resolution"] = std::vector<double>{60, 60};
if( alg.Run() )
{
GDALDataset *poDS = alg["output"].Get<GDALArgDatasetValue>().GetDatasetRef();
std::cout << "width=" << poDS->GetRasterXSize() << std::endl;
std::cout << "height=" << poDS->GetRasterYSize() << std::endl;
alg.Finalize();
return 0;
}
else
{
std::cout << "failure" << std::endl;
return 1;
}
}
---
### Doc Source Programs Gdal Cli From Python (`doc/source/programs/gdal_cli_from_python.rst`)
.. _gdal_cli_from_python:
================================================================================
How to use ``gdal`` CLI algorithms from Python
================================================================================
Principles
----------
``gdal`` CLI algorithms are available as :py:class:`osgeo.gdal.Algorithm` instances.
A convenient way to access an algorithm and run it is to use the :py:func:`osgeo.gdal.Run`
function.
.. py:function:: Run(*alg, arguments={}, progress=None, **kwargs)
Run a GDAL algorithm and return it.
.. versionadded:: 3.11
:param alg: Path to the algorithm or algorithm instance itself. For example "raster info", or ["raster", "info"] or "raster", "info".
:type alg: str, list[str], tuple[str], Algorithm
:param arguments: Input arguments of the algorithm. For example {"format": "json", "input": "byte.tif"}
:type arguments: dict
:param progress: Progress function whose arguments are a progress ratio, a string and a user data
:type progress: callable
:param kwargs: Instead of using the ``arguments`` parameter, it is possible to pass
algorithm arguments directly as named parameters of gdal.Run().
If the named argument has dash characters in it, the corresponding
parameter must replace them with an underscore character.
For example ``output_crs`` as a a parameter of gdal.Run(), instead of
``output-crs`` which is the name to use on the command line.
:rtype: a :py:class:`osgeo.gdal.Algorithm` instance
If you do not need to access output value(s) of the algorithm, you can call
``Run`` directly:
``gdal.Run(["raster", "convert"], input="in.tif", output="out.tif")``
The name of algorithm arguments are the long names as documented in the
documentation page of each algorithm. They can also be obtained with
:py:meth:`osgeo.gdal.Algorithm.GetArgNames`.
.. code-block:: python
>>> gdal.Algorithm("raster", "convert").GetArgNames()
['help', 'help-doc', 'version', 'json-usage', 'drivers', 'config', 'progress', 'output-format', 'open-option', 'input-format', 'input', 'output', 'creation-option', 'overwrite', 'append']
For a command such as :ref:`gdal_raster_info` that returns a JSON
output, you can get the return value of :py:func:`osgeo.gdal.Run` and call the
:py:meth:`osgeo.gdal.Algorithm.Output` method.
.. code-block:: python
alg = gdal.Run("raster", "info", input="byte.tif")
info_as_dict = alg.Output()
If the return value is a dataset, :py:func:`osgeo.gdal.Run` can be used
within a context manager, in which case :py:meth:`osgeo.gdal.Algorithm.Finalize`
will be called at the exit of the context manager.
.. code-block:: python
with gdal.Run("raster reproject", input=src_ds, output_format="MEM",
dst_crs="EPSG:4326") as alg:
values = alg.Output().ReadAsArray()
When not using a context manager, :py:meth:`osgeo.gdal.Algorithm.Finalize` can be called directly to
release the algorithm's references to the output dataset and free associated resources. If a variable
still references the dataset, it will not be closed and may still be accessed:
.. code-block:: python
>>> alg = gdal.Run("raster reproject", input=src_ds, output_format="MEM",
dst_crs="EPSG:4326")
>>> out_ds = alg.Output()
>>> print(out_ds.GetRefCount())
2
>>> alg.Finalize()
>>> print(out_ds.GetRefCount())
1
>>> alg.Output().ReadAsArray() # no longer available from the algorithm
AttributeError: 'NoneType' object has no attribute 'ReadAsMaskedArray'
>>> out_ds.ReadAsArray() # still accessible via the existing reference
array([[-9999., -9999., -9999., ...,
``gdal.alg`` module
-------------------
.. versionadded:: 3.12
The ``gdal.alg`` module is also available with submodules and
functions reflecting the hierarchy of algorithms. Functions return an
:py:class:`osgeo.gdal.Algorithm` instance similarly to :py:func:`osgeo.gdal.Run`
The above example running "gdal raster convert" can also be rewritten as:
.. code-block:: python
>>> from osgeo import gdal
>>> gdal.alg.raster.convert(input="in.tif", output="out.tif")
The documentation of the function lists argument names, types and semantics:
.. code-block:: python
>>> from osgeo import gdal
>>> help(gdal.alg.raster.convert)
Help on function convert:
convert(input: Union[List[osgeo.gdal.Dataset], List[str], List[os.PathLike[str]]], output: Union[osgeo.gdal.Dataset, str, os.PathLike[str]], input_format: Union[List[str], str, NoneType] = None, open_option: Union[List[str], str, NoneType] = None, output_format: Optional[str] = None, creation_option: Union[List[str], str, NoneType] = None, overwrite: Optional[bool] = None, append: Optional[bool] = None)
Convert a raster dataset.
Consult https://gdal.org/programs/gdal_raster_convert.html for more details.
Parameters
----------
input: Union[List[gdal.Dataset], List[str], List[os.PathLike[str]]]
Input raster datasets
output: Union[gdal.Dataset, str, os.PathLike[str]]
Output raster dataset
input_format: Optional[Union[List[str], str]]=None
Input formats
open_option: Optional[Union[List[str], dict, str]]=None
Open options
output_format: Optional[str]=None
Output format ("GDALG" allowed)
creation_option: Optional[Union[List[str], dict, str]]=None
Creation option
overwrite: Optional[bool]=None
Whether overwriting existing output is allowed
append: Optional[bool]=None
Append as a subdataset to existing output
Output parameters
-----------------
output: gdal.ArgDatasetValue
Output raster dataset
Raster commands examples
------------------------
.. example::
:title: Getting information on a raster dataset as JSON
.. code-block:: python
from osgeo import gdal
gdal.UseExceptions()
info_as_dict = gdal.alg.raster.info(input="byte.tif").Output()
.. example::
:title: Converting a georeferenced netCDF file to cloud-optimized GeoTIFF
.. code-block:: python
from osgeo import gdal
gdal.UseExceptions()
gdal.alg.raster.convert(input="in.tif", output="out.tif", output_format="COG", overwrite=True)
or
.. code-block:: python
from osgeo import gdal
gdal.UseExceptions()
gdal.Run("raster", "convert", input="in.tif", output="out.tif",
output_format="COG", overwrite=True)
or
.. code-block:: python
from osgeo import gdal
gdal.UseExceptions()
gdal.Run(["raster", "convert"], {"input": "in.tif", "output": "out.tif", "output-format": "COG", "overwrite": True})
.. example::
:title: Reprojecting a GeoTIFF file to a Deflate-compressed tiled GeoTIFF file
.. code-block:: python
from osgeo import gdal
gdal.UseExceptions()
gdal.alg.raster.reproject(
input="in.tif", output="out.tif",
dst_crs="EPSG:4326",
creation_options={ "TILED": "YES", "COMPRESS": "DEFLATE"})
.. example::
:title: Reprojecting a (possibly in-memory) dataset to a in-memory dataset
.. code-block:: python
from osgeo import gdal
gdal.UseExceptions()
with gdal.alg.raster.reproject(input=src_ds, output_format="MEM",
dst_crs="EPSG:4326") as alg:
values = alg.Output().ReadAsArray()
Vector commands examples
------------------------
.. example::
:title: Getting information on a vector dataset as JSON
.. code-block:: python
from osgeo import gdal
gdal.UseExceptions()
info_as_dict = gdal.alg.vector.info(input="poly.gpkg").Output()
.. example::
:title: Converting a shapefile to a GeoPackage
.. code-block:: python
from osgeo import gdal
gdal.UseExceptions()
gdal.alg.vector.convert(input="in.shp", output="out.gpkg", overwrite=True)
Pipeline examples
-----------------
.. example::
:title: Perform raster reprojection and gets the result as a streamed dataset.
.. code-block:: python
from osgeo import gdal
gdal.UseExceptions()
with gdal.alg.pipeline(pipeline="read byte.tif ! reproject --output-crs EPSG:4326 --resampling cubic") as alg:
ds = alg.Output()
# do something with the dataset
---
### Doc Source Programs Gdal Cli Gdalg (`doc/source/programs/gdal_cli_gdalg.rst`)
.. _gdal_cli_gdalg:
================================================================================
.gdalg files to replay serialized ``gdal`` commands
================================================================================
A subset of subcommands of :program:`gdal` support generating
on-the-fly / streamed raster of vector datasets. They are typically saved to
a "real" output dataset, but it is also possible to save them in a JSON file
of extension ``.gdalg.json``, that can be read by the :ref:`raster.gdalg` driver or
:ref:`vector.gdalg` driver to apply the saved processing on-the-fly and use
the resulting dataset as a regular input dataset for :cpp:func:`GDALOpenEx`,
or anywhere in GDAL API or command line utilities where a raster input dataset
is expected. GDALG files are conceptually close to :ref:`VRT (Virtual) files <raster.vrt>`,
although the implementation is substantially different.
.. note:: GDALG is the contraction of GDAL and ALGorithm.
In-process stream execution
---------------------------
For algorithms that support GDALG output, it is also possible to use the
``stream`` output format to indicate that a raster or vector streamed dataset
must be returned.
For example the following snippet, runs that "gdal vector set-type"
algorithm on a source dataset and iterates over features from the returned
streamed dataset.
.. code-block:: python
from osgeo import gdal
gdal.UseExceptions()
alg = gdal.GetGlobalAlgorithmRegistry()["vector"]["geom"]["set-type"]
alg["input"] = src_ds
alg["output"] = ""
alg["output-format"] = "stream"
alg["geometry-type"] = "LINESTRING Z"
alg.Run()
out_ds = alg["output"].GetDataset()
out_lyr = out_ds.GetLayer(0)
for f in our_lyr:
f.DumpReadable()
Examples
--------
.. example::
:title: Serialize the command of a reprojection of a GeoPackage file in a GDALG file, and later read it
.. code-block:: bash
$ gdal vector pipeline ! read in.gpkg ! reproject --output-crs=EPSG:32632 ! write in_epsg_32632.gdalg.json --overwrite
$ gdal vector info in_epsg_32632.gdalg.json
The content of :file:`in_epsg_32632.gdalg.json` is:
.. code-block:: json
{
"type": "gdal_streamed_alg",
"command_line": "gdal vector pipeline ! read in.gpkg ! reproject --output-crs=EPSG:32632"
}
---
### Doc Source Programs Gdal Contour (`doc/source/programs/gdal_contour.rst`)
.. _gdal_contour:
================================================================================
gdal_contour
================================================================================
.. only:: html
Builds vector contour lines from a raster elevation model.
.. Index:: gdal_contour
Synopsis
--------
.. code-block::
gdal_contour [--help] [--help-general]
[-b ] [-a <attribute_name>] [-amin <attribute_name>] [-amax <attribute_name>]
[-3d] [-inodata] [-snodata <n>] [-f <formatname>] [-i ]
[-dsco <NAME>=<VALUE>]... [-lco <NAME>=<VALUE>]...
[-off <offset>] [-fl <level> <level>...] [-e <exp_base>]
[-nln <outlayername>] [-q] [-p] [-gt <n>|unlimited]
<src_filename> <dst_filename>
Description
-----------
The :program:`gdal_contour` generates a vector contour file from the input
raster elevation model (DEM).
The contour line-strings are oriented consistently and the high side will
be on the right, i.e. a line string goes clockwise around a top.
.. tip:: Equivalent in new "gdal" command line interface:
See :ref:`gdal_raster_contour`.
.. program:: gdal_contour
.. include:: options/help_and_help_general.rst
.. include:: options/quiet.rst
.. option:: -b
Picks a particular band to get the DEM from. Defaults to band 1.
.. option:: -a <name>
Provides a name for the attribute in which to put the elevation.
If not provided no elevation attribute is attached.
Ignored in polygonal contouring (:option:`-p`) mode.
.. option:: -amin <name>
Provides a name for the attribute in which to put the minimum elevation
of contour polygon. If not provided no minimum elevation attribute
is attached. Ignored in default line contouring mode.
.. option:: -amax <name>
Provides a name for the attribute in which to put the maximum elevation of
contour polygon. If not provided no maximum elevation attribute is attached.
Ignored in default line contouring mode.
.. option:: -3d
Force production of 3D vectors instead of 2D.
Includes elevation at every vertex.
.. option:: -inodata
Ignore any nodata value implied in the dataset - treat all values as valid.
Cannot be used together with :option:`-snodata`.
.. option:: -snodata <value>
Input pixel value to treat as "nodata".
Cannot be used together with :option:`-inodata`.
.. option:: -f <format>
Create output in a particular format.
If not specified, the format is guessed from the extension (previously was ESRI Shapefile).
.. option:: -dsco <NAME>=<VALUE>
Dataset creation option (format specific)
.. option:: -lco <NAME>=<VALUE>
Layer creation option (format specific)
.. option:: -i
Elevation interval between contours.
Must specify either :option:`-i` or :option:`-fl` or :option:`-e`.
The first contour will be generated at the first multiple of ``interval`` which is greater than the raster minimum value.
.. option:: -off <offset>
Offset from zero relative to which to interpret intervals.
For example, `-i 100` requests contours at ...-100, 0, 100...
Further adding `-off 25` makes that request instead ...-75, 25, 125...
.. option:: -fl <level>
Name one or more "fixed levels" to extract, in ascending order separated by spaces.
.. option:: -e
Generate levels on an exponential scale: `base ^ k`, for `k` an integer.
Must specify either -i or -fl or -e.
.. option:: -nln <name>
Provide a name for the output vector layer. Defaults to "contour".
.. option:: -p
Generate contour polygons rather than contour lines.
When this mode is selected the polygons are created for values between
each level specified by :option:`-i` or :option:`-fl` or :option:`-e`,
in case :option:`-fl` is used alone at least two fixed levels must be specified.
The minimum and maximum values from the raster are not automatically added to
the fixed levels list but the special values ``MIN`` and ``MAX`` (case insensitive)
can be used to include them.
.. option:: -gt <n>
Group n features per transaction (default 100 000). Increase the value for
better performance when writing into DBMS drivers that have transaction
support. ``n`` can be set to unlimited to load the data into a single
transaction. If set to 0, no explicit transaction is done.
.. versionadded:: 3.10
.. Return status code
.. ------------------
.. include:: return_code.rst
C API
-----
Functionality of this utility can be done from C with :cpp:func:`GDALContourGenerate`.
Examples
--------
.. example::
:title: Creating contours from a DEM
.. code-block::
gdal_contour -a elev dem.tif contour.shp -i 10.0
This would create 10-meter contours from the DEM data in :file:`dem.tif` and
produce a shapefile in :file:`contour.shp|shx|dbf` with the contour elevations
in the ``elev`` attribute.
.. example::
:title: Creating polygonal contours from a DEM
.. code-block:: bash
$ cat test.asc
ncols 2
nrows 2
xllcorner 0
yllcorner 0
cellsize 1
4 15
25 36
$ gdal_contour test.asc -f GeoJSON /vsistdout/ -i 10 -p -amin min -amax max
This would create 10-meter polygonal contours from the DEM data in :file:`test.asc`
and produce a GeoJSON output with the contour min and max elevations in the ``min``
and ``max`` attributes, including the minimum and maximum values from the raster.
.. code-block:: bash
{
"type": "FeatureCollection",
"name": "contour",
"features": [
{ "type": "Feature", "properties": { "ID": 0, "min": 4.0, "max": 10.0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 0.5, 1.214285714285714 ], [ 1.045454545454545, 1.5 ], [ 1.045454545454545, 2.0 ], [ 1.0, 2.0 ], [ 0.5, 2.0 ], [ 0.0, 2.0 ], [ 0.0, 1.5 ], [ 0.0, 1.214285714285714 ], [ 0.5, 1.214285714285714 ] ] ] ] } },
{ "type": "Feature", "properties": { "ID": 1, "min": 10.0, "max": 20.0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 1.5, 1.261904761904762 ], [ 2.0, 1.261904761904762 ], [ 2.0, 1.5 ], [ 2.0, 2.0 ], [ 1.5, 2.0 ], [ 1.045454545454545, 2.0 ], [ 1.045454545454545, 1.5 ], [ 0.5, 1.214285714285714 ], [ 0.0, 1.214285714285714 ], [ 0.0, 1.0 ], [ 0.0, 0.738095238095238 ], [ 0.5, 0.738095238095238 ], [ 1.5, 1.261904761904762 ] ] ] ] } },
{ "type": "Feature", "properties": { "ID": 2, "min": 20.0, "max": 30.0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 0.954545454545455, 0.0 ], [ 0.954545454545455, 0.5 ], [ 1.5, 0.785714285714286 ], [ 2.0, 0.785714285714286 ], [ 2.0, 1.0 ], [ 2.0, 1.261904761904762 ], [ 1.5, 1.261904761904762 ], [ 0.5, 0.738095238095238 ], [ 0.0, 0.738095238095238 ], [ 0.0, 0.5 ], [ 0.0, 0.0 ], [ 0.5, 0.0 ], [ 0.954545454545455, 0.0 ] ] ] ] } },
{ "type": "Feature", "properties": { "ID": 3, "min": 30.0, "max": 36.0 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 1.499999909090926, 0.0 ], [ 1.0, 0.0 ], [ 0.954545454545455, 0.0 ], [ 0.954545454545455, 0.5 ], [ 1.5, 0.785714285714286 ], [ 2.0, 0.785714285714286 ], [ 2.0, 0.500000047619043 ], [ 1.5, 0.500000047619043 ], [ 1.499999909090926, 0.5 ], [ 1.499999909090926, 0.0 ] ] ] ] } }
]
}
.. example::
:title: Creating contours from a DEM with fixed levels
.. code-block:: bash
$ cat test.asc
ncols 2
nrows 2
xllcorner 0
yllcorner 0
cellsize 1
4 15
25 36
$ gdal_contour test.asc -f GeoJSON /vsistdout/ -fl 10 20 -p -amin min -amax max
This would create a single polygonal contour between 10 and 20 meters from the DEM data in :file:`test.asc`
and produce a GeoJSON output with the contour min and max elevations in the ``min`` and ``max`` attributes.
If the minimum and maximum values from the raster are desired, the special values ``MIN`` and ``MAX``
(case insensitive) can be used:
.. code-block:: bash
$ cat test.asc
ncols 2
nrows 2
xllcorner 0
yllcorner 0
cellsize 1
4 15
25 36
$ gdal_contour test.asc -f GeoJSON /vsistdout/ -fl MIN 10 20 MAX -p -amin min -amax max
This would create three polygonal contours from the DEM data in :file:`test.asc` and produce a GeoJSON output
with the contour min and max elevations in the ``min`` and ``max`` attributes, the values of these fields will
be: (4.0, 10.0), (10, 20.0) and (20.0, 36.0).
.. example::
:title: Creating contours from a DEM specifying an interval and fixed levels at the same time
.. code-block:: bash
$ cat test.asc
ncols 2
nrows 2
xllcorner 0
yllcorner 0
cellsize 1
4 15
25 36
$ gdal_contour test.asc -f GeoJSON /vsistdout/ -i 10 -fl 15 -p -amin min -amax max
Creates contours at regular 10 meter intervals and adds extra contour for a fixed 15 m level.
Finally turns areas between the contours into polygons with the contour min and max elevations
in the ``min`` and ``max`` attributes, the values of these fields will be:
(4.0, 10.0), (10, 15.0), (15, 20.0), (20.0, 30.0) and (30.0, 36.0).
---
### Doc Source Programs Gdal Convert (`doc/source/programs/gdal_convert.rst`)
.. _gdal_convert:
.. program:: gdal_convert
================================================================================
``gdal convert``
================================================================================
.. versionadded:: 3.11
.. only:: html
Convert a dataset.
.. Index:: gdal convert
Acts as a shortcut for :ref:`gdal_raster_convert` or
:ref:`gdal_vector_convert` depending on the nature of the specified dataset.
Synopsis
--------
.. program-output:: gdal convert --help-doc
.. Return status code
.. ------------------
.. include:: return_code.rst
Examples
--------
.. example::
:title: Converting file :file:`utm.tif` to GeoPackage raster
.. code-block:: console
$ gdal convert utm.tif utm.gpkg
---
### Doc Source Programs Gdal Create (`doc/source/programs/gdal_create.rst`)
.. _gdal_create:
================================================================================
gdal_create
================================================================================
.. only:: html
.. versionadded:: 3.2.0
Create a raster file (without source dataset).
.. Index:: gdal_create
Synopsis
--------
.. program-output:: gdal_create --help-doc
Description
-----------
The :program:`gdal_create` utility can be used to initialize a new raster file,
from its dimensions, band count and set various parameters, such as CRS,
geotransform, nodata value, metadata. It can be used also in special cases,
like creating a PDF file from a XML composition file.
.. tip:: Equivalent in new "gdal" command line interface:
See :ref:`gdal_raster_create`.
.. program:: gdal_create
.. include:: options/help_and_help_general.rst
.. include:: options/quiet.rst
.. include:: options/ot.rst
.. include:: options/of.rst
.. option:: -outsize <xsize> <ysize>
Set the size of the output file in pixels. First value is width. Second one
is height.
.. option:: -bands <count>
Number of bands. Defaults to 1 if -outsize is specified, or 0 otherwise.
.. option:: -burn <value>
A fixed value to burn into a band. A list of :option:`-burn` options
can be supplied, one per band (the first value will apply to the first band,
the second one to the second band, etc.). If a single value is specified,
it will apply to all bands.
.. option:: -a_srs <srs_def>
Override the projection for the output file. The<srs_def> may be any of
the usual GDAL/OGR forms, complete WKT, PROJ.4, EPSG:n or a file containing
the WKT. No reprojection is done.
.. option:: -a_ullr <lrx> <lry>
Assign the georeferenced bounds of the output file.
.. option:: -a_nodata <value>
Assign a specified nodata value to output bands.
.. option:: -mo <META-TAG>=<VALUE>
Passes a metadata key and value to set on the output dataset if possible.
.. include:: options/co.rst
.. option:: -if
.. versionadded:: 3.3
Name of GDAL input dataset that serves as a template for default values of
options -outsize, -bands, -ot, -a_srs, -a_ullr and -a_nodata.
Note that the pixel values will *not* be copied.
.. option:: <out_dataset>
The destination file name.
.. Return status code
.. ------------------
.. include:: return_code.rst
Examples
--------
.. example::
:title: Initialize a new GeoTIFF file with a uniform value of 10
.. code-block:: bash
gdal_create -outsize 20 20 -a_srs EPSG:4326 -a_ullr 2 50 3 49 -burn 10 out.tif
.. example::
:title: Create a PDF file from a XML composition file
.. code-block:: bash
gdal_create -co COMPOSITION_FILE=composition.xml out.pdf
.. example::
:title: Initialize a blank GeoTIFF file from an input one
.. code-block:: bash
gdal_create -if prototype.tif output.tif
---
### Doc Source Programs Gdal Dataset (`doc/source/programs/gdal_dataset.rst`)
.. _gdal_dataset:
.. program:: gdal_dataset
================================================================================
``gdal dataset``
================================================================================
.. versionadded:: 3.12
.. only:: html
Commands to manage datasets (identify, copy, rename, delete)
.. Index:: gdal dataset
:program:`gdal dataset` can perform various operations on data
files, depending on the chosen operation. This includes identifying
data types and deleting, renaming or copying the files.
Synopsis
--------
.. program-output:: gdal dataset --help-doc
Available sub-commands
----------------------
- :ref:`gdal_dataset_identify`: Identify driver opening dataset(s)
- :ref:`gdal_dataset_check`: Check whether there are errors when reading the content of a dataset.
- :ref:`gdal_dataset_copy`: Copy files of a dataset.
- :ref:`gdal_dataset_rename`: Rename files of a dataset.
- :ref:`gdal_dataset_delete`: Delete dataset(s)
---
### Doc Source Programs Gdal Dataset Check (`doc/source/programs/gdal_dataset_check.rst`)
.. _gdal_dataset_check:
.. program:: gdal_dataset_check
================================================================================
``gdal dataset check``
================================================================================
.. versionadded:: 3.13
.. only:: html
Check whether there are errors when reading the content of a dataset.
.. Index:: gdal dataset check
:program:`gdal dataset check` check whether there are errors when reading the content
of a dataset and return 1 as the program exit code (or in the ``return-code`` output parameter
of the algorithm) if that happens, or 0 when no errors are detected.
.. warning::
Most drivers or data formats do not have a built-in integrity mechanism.
Thus a successful run of that program does not necessarily mean that the dataset
is identical to the state it had just after being generated. The checks performed
are generally sufficient to detect whether the dataset is truncated compared to
its expected size, but this is not even necessarily guaranteed for some formats
(for example the CSV driver may not be able to detect truncation).
Synopsis
--------
.. program-output:: gdal dataset check --help-doc
Options
-------
.. option:: --input <FILENAME>
Input vector, raster or multidimensional dataset. Required.
.. Return status code
.. ------------------
.. include:: return_code.rst
Examples
--------
.. example::
:title: Check whether there are errors when reading a dataset
.. code-block:: console
$ gdal dataset check NE1_50M_SR_W.tif
---
### Doc Source Programs Gdal Dataset Copy (`doc/source/programs/gdal_dataset_copy.rst`)
.. _gdal_dataset_copy:
.. program:: gdal_dataset_copy
================================================================================
``gdal dataset copy``
================================================================================
.. versionadded:: 3.12
.. only:: html
Copy files of a dataset
.. Index:: gdal dataset copy
:program:`gdal dataset copy` creates a copy of the dataset file(s),
including potential side-car/associated files.
Synopsis
--------
.. program-output:: gdal dataset copy --help-doc
Options
-------
.. option:: --source <FILENAME>
Source file name or directory name. Required.
.. option:: --destination <FILENAME>
Destination file name or directory name. Required.
.. option:: -f, ---format <FORMAT>
Dataset format. Helps if automatic detection does not work.
.. include:: gdal_options/overwrite.rst
.. Return status code
.. ------------------
.. include:: return_code.rst
Examples
--------
.. example::
:title: Copy a dataset
.. code-block:: console
$ gdal dataset copy source.tif destination.tif
---
### Doc Source Programs Gdal Dataset Delete (`doc/source/programs/gdal_dataset_delete.rst`)
.. _gdal_dataset_delete:
.. program:: gdal_dataset_delete
================================================================================
``gdal dataset delete``
================================================================================
.. versionadded:: 3.12
.. only:: html
Delete dataset(s).
.. Index:: gdal dataset delete
:program:`gdal dataset delete` delete dataset(s), including potential
side-car/associated files.
Synopsis
--------
.. program-output:: gdal dataset delete --help-doc
Options
-------
.. option:: --filename <FILENAME>
Any file name or directory name. Required. May be repeated
.. option:: -f, ---format <FORMAT>
Dataset format. Helps if automatic detection does not work.
.. Return status code
.. ------------------
.. include:: return_code.rst
Examples
--------
.. example::
:title: Delete a dataset
.. code-block:: console
$ gdal dataset delete NE1_50M_SR_W.tif
---
### Doc Source Programs Gdal Dataset Identify (`doc/source/programs/gdal_dataset_identify.rst`)
.. _gdal_dataset_identify:
.. program:: gdal_dataset_identify
================================================================================
``gdal dataset identify``
================================================================================
.. versionadded:: 3.12
.. only:: html
Identify driver opening dataset(s).
.. Index:: gdal dataset identify
:program:`gdal dataset identify` reports the name of drivers that can open one or
several dataset(s).
Synopsis
--------
.. program-output:: gdal dataset identify --help-doc
Options
-------
.. option:: --filename <FILENAME>
Any file name or directory name. Required. May be repeated
.. option:: -o, --output <OUTPUT>
.. versionadded:: 3.13
Output vector dataset that will have at a minimum fields ``filename`` and ``driver``,
and if :option:`--detailed` is specified, also ``layout`` (whose value can
be for example ``COG``), ``file_list`` (side-car files), ``has_crs``,
``has_geotransform`` and ``has_overview``.
When this argument is not specified, the result report is emitted to the
standard output stream, either as JSON or text (depending on :option:`--output-format`),
for command line execution, or in the ``output-string`` argument when used from
the API.
Note that this is not a positional argument, so the ``-o`` or ``--output``
switch must be explicitly used before specifying the name.
.. option:: -f, --of, --format, --output-format json|text|<OTHER-VECTOR-FORMAT>
Which output format to use. Default is JSON, or text when invoked from command line.
Since GDAL 3.13, other GDAL vector formats with creation capabilities can
be used, in which case :option:`--output` must be specified.
.. option:: -r, --recursive
Recursively scan files/folders for datasets.
.. option:: --force-recursive
Recursively scan folders for datasets, forcing recursion in folders
recognized as valid formats.
.. option:: --detailed
.. versionadded:: 3.13
Increases the level of details in the output.
Reports the presence of georeferencing, if a GeoTIFF file is cloud optimized, etc.
.. option:: --report-failures
Report failures if file type is unidentified.
.. Return status code
.. ------------------
.. include:: return_code.rst
Examples
--------
.. example::
:title: Identifying a single file
.. code-block:: console
$ gdal dataset identify NE1_50M_SR_W.tif
NE1_50M_SR_W.tif: GTiff
.. example::
:title: Identifying a single file with JSON output
.. code-block:: console
$ gdal dataset identify --of=JSON NE1_50M_SR_W.tif
.. code-block:: json
[
{
"name": "NE1_50M_SR_W.tif",
"driver": "GTiff"
}
]
.. example::
:title: Recursive mode will scan subfolders and report the data format
.. code-block::
$ gdal dataset identify -r 50m_raster/
NE1_50M_SR_W/ne1_50m.jpg: JPEG
NE1_50M_SR_W/ne1_50m.png: PNG
NE1_50M_SR_W/ne1_50m_20pct.tif: GTiff
NE1_50M_SR_W/ne1_50m_band1.tif: GTiff
NE1_50M_SR_W/ne1_50m_print.png: PNG
NE1_50M_SR_W/NE1_50M_SR_W.aux: HFA
NE1_50M_SR_W/NE1_50M_SR_W.tif: GTiff
NE1_50M_SR_W/ne1_50m_sub.tif: GTiff
NE1_50M_SR_W/ne1_50m_sub2.tif: GTiff
.. example::
:title: Recursively scans subfolders and reports detailed information into a CSV file
.. code-block::
$ gdal dataset identify --output out.csv --detailed -r 50m_raster/
.. example::
:title: Check if a GeoTIFF file is cloud optimized using ``--detailed``
:id: gdal-dataset-identify-cog
The following returns driver, and image layout details: ``GTiff, layout=COG, has CRS, has geotransform, has overview(s)``
.. code-block::
$ gdal dataset identify /vsicurl/https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/36/Q/WD/2020/7/S2A_36QWD_20200701_0_L2A/TCI.tif --detailed
---
### Doc Source Programs Gdal Dataset Rename (`doc/source/programs/gdal_dataset_rename.rst`)
.. _gdal_dataset_rename:
.. program:: gdal_dataset_rename
================================================================================
``gdal dataset rename``
================================================================================
.. versionadded:: 3.12
.. only:: html
Rename files of a dataset
.. Index:: gdal dataset rename
:program:`gdal dataset rename` rename the dataset file(s), including
potential side-car/associated files.
Synopsis
--------
.. program-output:: gdal dataset rename --help-doc
Options
-------
.. option:: --source <FILENAME>
Source file name or directory name. Required.
.. option:: --destination <FILENAME>
Destination file name or directory name. Required.
.. option:: -f, ---format <FORMAT>
Dataset format. Overrides the automatic format detection.
.. include:: gdal_options/overwrite.rst
.. Return status code
.. ------------------
.. include:: return_code.rst
Examples
--------
.. example::
:title: Rename a dataset
.. code-block:: console
$ gdal dataset rename old_name.tif new_name.tif
---
### Doc Source Programs Gdal Driver Cog Validate (`doc/source/programs/gdal_driver_cog_validate.rst`)
.. _gdal_driver_cog_validate:
================================================================================
``gdal driver cog validate``
================================================================================
.. versionadded:: 3.13
.. only:: html
Validate if a TIFF file is a Cloud Optimized GeoTIFF
.. Index:: gdal driver cog validate
Synopsis
--------
.. program-output:: gdal driver cog validate --help-doc
Description
-----------
Validate if a TIFF file is a :ref:`Cloud Optimized GeoTIFF <raster.cog>` and emits a report.
.. note:: This program requires the GDAL Python bindings to be available.
Program-Specific Options
------------------------
.. option:: --full-check auto|yes|no
Whether extensive checks, verifying leading and trailer bytes of strips or
tiles, must be performed. In ``auto`` mode (the default),
they are performed for local file, but not for remote files
Standard Options
----------------
.. collapse:: Details
.. include:: gdal_options/quiet.rst
.. Return status code
.. ------------------
.. include:: return_code.rst
Examples
--------
.. example::
:title: Check if a remote file is a valid COG file.
.. code-block:: bash
gdal driver cog validate /vsicurl/https://example.com/some.tif
---
### Doc Source Programs Gdal Driver Gpkg Repack (`doc/source/programs/gdal_driver_gpkg_repack.rst`)
.. _gdal_driver_gpkg_repack:
================================================================================
``gdal driver gpkg repack``
================================================================================
.. versionadded:: 3.11
.. only:: html
Repack/vacuum in-place a GeoPackage dataset
.. Index:: gdal driver gpkg repack
Synopsis
--------
.. program-output:: gdal driver gpkg repack --help-doc
Description
-----------
Runs the ``VACUUM`` SQLite3 operation on a GeoPackage dataset to recover
lost space due to updates or deletions.
.. Return status code
.. ------------------
.. include:: return_code.rst
Examples
--------
.. example::
.. code-block:: bash
gdal driver gpkg repack my.gpkg
---
### Doc Source Programs Gdal Driver Gpkg Validate (`doc/source/programs/gdal_driver_gpkg_validate.rst`)
.. _gdal_driver_gpkg_validate:
================================================================================
``gdal driver gpkg validate``
================================================================================
.. versionadded:: 3.13
.. only:: html
Validate conformance of a GeoPackage dataset against the GeoPackage specification
.. Index:: gdal driver gpkg validate
Synopsis
--------
.. program-output:: gdal driver gpkg validate --help-doc
Description
-----------
Validate if GeoPackage dataset conforms to the GeoPackage specification.
.. note:: This program requires the GDAL Python bindings to be available.
Program-Specific Options
------------------------
.. option:: --full-check
Enable extensive checks, that may go beyond what is mandated by the
GeoPackage specification
Standard Options
----------------
.. collapse:: Details
.. include:: gdal_options/verbose.rst
.. include:: gdal_options/quiet.rst
.. Return status code
.. ------------------
.. include:: return_code.rst
Examples
--------
.. example::
:title: Check if a GeoPackage file is conformant
.. code-block:: bash
gdal driver gpkg validate my.gpkg
---
### Doc Source Programs Gdal Driver Gti Create (`doc/source/programs/gdal_driver_gti_create.rst`)
.. _gdal_driver_gti_create:
================================================================================
``gdal driver gti create``
================================================================================
.. versionadded:: 3.11
.. only:: html
Create an index of raster datasets compatible with the GDAL Tile Index (GTI) driver.
.. Index:: gdal driver gti create
Synopsis
--------
.. program-output:: gdal driver gti create --help-doc
Description
-----------
:program:`gdal driver gti create` creates a vector dataset with a record for each
input raster file, an attribute containing the filename, and a polygon geometry
outlining the raster, to be used as input for the :ref:`GTI <raster.gti>` driver.
This is an extension of :ref:`gdal_raster_index`.
There are two possibilities:
- either use directly a vector tile index generated by :program:`gdal driver gti create` as the input
of the GTI driver
- or generate a small XML .gti wrapper file, for easier use with non-file-based
formats such as databases, or for vector formats that do not support setting
layer metadata items.
Formats that support layer metadata are for example GeoPackage (``--of GPKG``),
FlatGeoBuf (``--of FlatGeoBuf``) or PostGIS (``--of PG``)
Setting :option:`--resolution` and :option:`--ot` is recommended to avoid the GTI
driver to have to deduce them by opening the first tile in the index. If the tiles
have nodata or mask band, :option:`--nodata` and :option:`--mask` should also
be set.
In a GTI context, the extent of all tiles referenced in the tile index must
be expressed in a single CRS. Consequently, if input tiles may have different
CRS, :option:`--output-crs` must be specified.
The following options are available:
Standard options
++++++++++++++++
.. include:: gdal_options/of_vector.rst
.. include:: gdal_options/co.rst
.. include:: options/lco.rst
.. include:: gdal_options/overwrite.rst
.. option:: --update
Whether the output dataset must be opened in update mode. Implies that
it already exists.
.. option:: --overwrite-layer
Whether overwriting the existing output vector layer is allowed.
.. option:: --append
Whether appending features to the existing output vector layer is allowed
.. option:: -l, --nln, --layer <LAYER>
Provides a name for the output vector layer.
.. option:: --recursive
Whether input directories should be explored recursively.
.. option:: --filename-filter <FILENAME-FILTER>
Pattern that the filenames contained in input directories should follow.
'*' is a wildcard character that matches any number of any characters
including none. '?' is a wildcard character that matches a single character.
Comparisons are done in a case insensitive way.
Several filters may be specified.
For example: ``--filename-filter "*.tif,*.tiff"``
.. option:: --min-pixel-size <val>
Minimum pixel size in term of geospatial extent per pixel (resolution) that
a raster should have to be selected. The pixel size
is evaluated after reprojection of its extent to the target CRS defined
by :option:`--output-crs`.
.. option:: --max-pixel-size <val>
Maximum pixel size in term of geospatial extent per pixel (resolution) that
a raster should have to be selected. The pixel size
is evaluated after reprojection of its extent to the target CRS defined
by :option:`--output-crs`.
.. option:: -location-name <LOCATION-NAME>
The output field name to hold the file path/location to the indexed
rasters. The default field name is ``location``.
.. option:: --absolute-path
The absolute path to the raster files is stored in the index file.
By default the raster filenames will be put in the file exactly as they
are specified on the command line.
.. option:: --output-crs <OUTPUT-CRS>
Geometries of input files will be transformed to the desired target
coordinate reference system.
Default creates simple rectangular polygons in the same coordinate reference
system as the input rasters.
.. option:: --metadata <KEY>=<VALUE>
Write an arbitrary layer metadata item, for formats that support layer
metadata.
This option may be repeated.
.. option:: --xml-filename <name>
Filename of the XML Virtual Tile Index file to generate, that can be used
as an input for the GDAL GTI / Virtual Raster Tile Index driver.
This can be useful when writing the tile index in a vector format that
does not support writing layer metadata items.
.. option:: --resolution <xres,<yres>
Target resolution in CRS unit per pixel.
Written in the XML Virtual Tile Index if :option:`--xml-filename`
is specified, or as ``RESX`` and ``RESY`` layer metadata items for formats that
support layer metadata.
.. option:: --bbox <xmin>,<ymin>,<xmax>,<ymax>
Target extent in CRS unit.
'x' is longitude values for geographic CRS and easting for projected CRS.
'y' is latitude values for geographic CRS and northing for projected CRS.
Written in the XML Virtual Tile Index if :option:`--xml-filename`
is specified, or as ``MINX``, ``MINY``, ``MAXX`` and ``MAXY`` layer metadata
items for formats that support layer metadata.
.. option:: --ot, --datatype, --output-data-type <datatype>
Data type of the tiles of the tile index: ``Byte``, ``Int8``, ``UInt16``,
``Int16``, ``UInt32``, ``Int32``, ``UInt64``, ``Int64``, ``Float32``, ``Float64``, ``CInt16``,
``CInt32``, ``CFloat32`` or ``CFloat64``
Written in the XML Virtual Tile Index if :option:`--xml-filename`
is specified, or as ``DATA_TYPE`` layer metadata item for formats that
support layer metadata.
.. option:: --band-count <val>
Number of bands of the tiles of the tile index.
Written in the XML Virtual Tile Index if :option:`--xml-filename`
is specified, or as ``BAND_COUNT`` layer metadata item for formats that
support layer metadata.
A mix of tiles with N and N+1 bands is allowed, provided that the color
interpretation of the (N+1)th band is alpha. The N+1 value must be written
as the band count in that situation.
If :option:`--nodata` or :option:`--color-interpretation` are specified and have multiple
values, the band count is also inferred from that number.
.. option:: --nodata <val>[,<val>...]
Nodata value of the tiles of the tile index.
Written in the XML Virtual Tile Index if :option:`--xml-filename`
is specified, or as ``NODATA`` layer metadata item for formats that
support layer metadata.
.. option:: --color-interpretation <val>[,<val>...]
Color interpretation of of the tiles of the tile index:
``red``, ``green``, ``blue``, ``alpha``, ``gray``, ``undefined``.
Written in the XML Virtual Tile Index if :option:`--xml-filename`
is specified, or as ``COLOR_INTERPRETATION`` layer metadata item for formats that
support layer metadata.
.. option:: --mask
Whether tiles in the tile index have a mask band.
Written in the XML Virtual Tile Index if :option:`--xml-filename`
is specified, or as ``MASK_BAND`` layer metadata item for formats that
support layer metadata.
.. option:: --fetched-metadata <gdal_md_name>,<fld_name>,<fld_type>
Fetch a metadata item from the raster tile and write it as a field in the
tile index.
<gdal_md_name> should be the name of the raster metadata item.
``{PIXEL_SIZE}`` may be used as a special name to indicate the pixel size.
<fld_name> should be the name of the field to create in the tile index.
<fld_type> should be the name of the type to create.
One of ``String``, ``Integer``, ``Integer64``, ``Real``, ``Date``, ``DateTime``
This option may be repeated.
For example: ``--fetched-metadata TIFFTAG_DATETIME,creation_date,DateTime``
.. Return status code
.. ------------------
.. include:: return_code.rst
Examples
--------
.. example::
Make a tile index from GeoTIFF files, with metadata suitable
for use by the GDAL GTI / Virtual Raster Tile Index driver.
.. code-block:: bash
gdal driver gti create --ot Byte --resolution=60,60 --band-count=3 --color-interpretation=Red,Green,Blue *.tif tile_index.gti.gpkg
.. example::
:title: Create a tile index from rasters in different coordinate reference systems
:id: gdal-driver-gti-create-reproject
Create a tile index from JPEG2000 files in different CRSs, using EPSG:4326 as
the target CRS for on-the-fly reprojection. The resampling method used by the
:ref:`GTI <raster.gti>` driver is stored as the ``RESAMPLING`` layer metadata
item using :option:`--metadata`.
.. code-block:: bash
gdal driver gti create --output-crs=EPSG:4326 --resolution=0.0001,0.0001 --metadata=RESAMPLING=cubic *.jp2 tile_index.gti.gpkg
The GTI dataset can then be processed with :ref:`gdal_raster_clip` or
:ref:`gdal_raster_convert`. Avoid subsequently using
:ref:`gdal_raster_reproject`, as this would resample the data a second time
and may reduce quality.
.. tabs::
.. code-tab:: bash
gdal pipeline read tile_index.gti.gpkg \
! clip --bbox=2.36,49.00,2.37,49.01 --bbox-crs=EPSG:4326 \
! write clipped.tif --output-format COG --creation-option COMPRESS=DEFLATE
.. code-tab:: powershell
gdal pipeline read tile_index.gti.gpkg `
! clip --bbox=2.36,49.00,2.37,49.01 --bbox-crs=EPSG:4326 `
! write clipped.tif --output-format COG --creation-option COMPRESS=DEFLATE
---
### Doc Source Programs Gdal Driver Icechunk List Branches (`doc/source/programs/gdal_driver_icechunk_list_branches.rst`)
.. _gdal_driver_icechunk_list_branches:
.. program:: gdal_driver_icechunk_list_branches
================================================================================
``gdal driver icechunk list-branches``
================================================================================
.. versionadded:: 3.14
.. only:: html
List branches of an Icechunk repository
.. Index:: gdal driver icechunk list-branches
Synopsis
--------
.. We are not using 'program-output:: gdal driver icechunk list-branches --help-doc' on purpose,
because the Icechunk driver may not be built.
.. code-block::
Usage: gdal driver icechunk list-branches [OPTIONS]
List branches of an Icechunk repository
Positional arguments:
-i, --input Input multidimensional raster dataset [required]
Common Options:
-h, --help Display help message and exit
--json-usage Display usage as JSON document and exit
--config <KEY>=<VALUE> Configuration option [may be repeated]
Description
-----------
List the branches of an :ref:`Icechunk <raster.icechunk>` repository and their last commit message.
.. Return status code
.. ------------------
.. include:: return_code.rst
Examples
--------
.. example::
.. code-block:: bash
gdal driver icechunk list-branches /vsis3/dynamical-ecmwf-aifs-single/ecmwf-aifs-single-forecast/v0.1.0.icechunk --config AWS_NO_SIGN_REQUEST=YES
Output:
.. code-block:: json
[
{ "name": "main", "commit_message": "Update at 2026-06-05T12:22:32Z" }
]
---
### Doc Source Programs Gdal Driver Icechunk List Tags (`doc/source/programs/gdal_driver_icechunk_list_tags.rst`)
.. _gdal_driver_icechunk_list_tags:
.. program:: gdal_driver_icechunk_list_tags
================================================================================
``gdal driver icechunk list-tags``
================================================================================
.. versionadded:: 3.14
.. only:: html
List tags of an Icechunk repository
.. Index:: gdal driver icechunk list-tags
Synopsis
--------
.. We are not using 'program-output:: gdal driver icechunk list-tags --help-doc' on purpose,
because the Icechunk driver may not be built.
.. code-block::
Usage: gdal driver icechunk list-tags [OPTIONS]
List tags of an Icechunk repository
Positional arguments:
-i, --input Input multidimensional raster dataset [required]
Common Options:
-h, --help Display help message and exit
--json-usage Display usage as JSON document and exit
--config <KEY>=<VALUE> Configuration option [may be repeated]
Description
-----------
List the tags of an :ref:`Icechunk <raster.icechunk>` repository and their last commit message.
.. Return status code
.. ------------------
.. include:: return_code.rst
Examples
--------
.. example::
.. code-block:: bash
gdal driver icechunk list-tags /vsicurl/https://raw.githubusercontent.com/earth-mover/icechunk/refs/heads/main/icechunk-python/tests/data/test-repo-v2/repo
Output:
.. code-block:: json
[
{ "name": "it also works!", "commit_message": "some more structure" },
{ "name": "it works!", "commit_message": "delete a chunk" }
]
---
### Doc Source Programs Gdal Driver Openfilegdb Repack (`doc/source/programs/gdal_driver_openfilegdb_repack.rst`)
.. _gdal_driver_openfilegdb_repack:
================================================================================
``gdal driver openfilegdb repack``
================================================================================
.. versionadded:: 3.11
.. only:: html
Repack in-place a FileGeodatabase dataset
.. Index:: gdal driver openfilegdb repack
Synopsis
--------
.. program-output:: gdal driver openfilegdb repack --help-doc
Description
-----------
Runs the a repack operation on a FileGeodatabase dataset to recover
lost space due to updates or deletions.
.. Return status code
.. ------------------
.. include:: return_code.rst
Examples
--------
.. example::
.. code-block:: bash
gdal driver openfilegdb repack my.gdb
---
### Doc Source Programs Gdal Driver Parquet Create Metadata File (`doc/source/programs/gdal_driver_parquet_create_metadata_file.rst`)
.. _gdal_driver_parquet_create_metadata_file:
================================================================================
``gdal driver parquet create-metadata-file``
================================================================================
.. versionadded:: 3.13
.. only:: html
Create the _metadata file for a partitioned Parquet dataset
.. Index:: gdal driver parquet create-metadata-file
Synopsis
--------
::
Usage: gdal driver parquet create-metadata-file [OPTIONS] ... <OUTPUT>
Create the _metadata file for a partitioned dataset
Positional arguments:
--input Input Parquet datasets (created by algorithm) [1.. values] [required]
--output <OUTPUT> Output Parquet dataset [required]
Common Options:
-h, --help Display help message and exit
--json-usage Display usage as JSON document and exit
--config <KEY>=<VALUE> Configuration option [may be repeated]
Options:
--overwrite Whether overwriting existing output is allowed
Description
-----------
Creates a :file:`_metadata` Parquet metadata-only file that contains the schema
of the partitioned Parquet files and the path to them.
This program is automatically called by :ref:`gdal_vector_partition` for a Parquet
output.
.. Return status code
.. ------------------
.. include:: return_code.rst
Examples
--------
.. example::
.. code-block:: bash
gdal driver parquet create-metadata-file --input partitioned/0.parquet \
--input partitioned/1.parquet --output partitioned/_metadata
---
### Doc Source Programs Gdal Driver Pdf List Layers (`doc/source/programs/gdal_driver_pdf_list_layers.rst`)
.. _gdal_driver_pdf_list_layers:
================================================================================
``gdal driver pdf list-layer``
================================================================================
.. versionadded:: 3.11
.. only:: html
Return the list of layers of a PDF file.
.. Index:: gdal driver pdf list-layer
Synopsis
--------
.. We are not using 'program-output:: gdal driver pdf list-layer --help-doc' on purpose,
because the PDF driver needs to have read support for that operation.
.. code-block::
Usage: gdal driver pdf list-layers [OPTIONS]
List layers of a PDF dataset
Positional arguments:
-i, --input Input raster or vector dataset [required]
Common Options:
-h, --help Display help message and exit
--json-usage Display usage as JSON document and exit
--config <KEY>=<VALUE> Configuration option [may be repeated]
Options:
-f, --of, --format, --output-format <OUTPUT-FORMAT> Output format. OUTPUT-FORMAT=json|text (default: json)
Description
-----------
Return the list of layers of a PDF file, as a JSON array or a text list.
.. Return status code
.. ------------------
.. include:: return_code.rst
Examples
--------
.. example::
:title: Return the list of layers of a PDF file as a JSON array
.. code-block:: bash
gdal driver pdf list-layers autotest/gdrivers/data/pdf/adobe_style_geospatial.pdf
returns:
.. code-block:: json
[
"New_Data_Frame",
"New_Data_Frame.Graticule",
"Layers",
"Layers.Measured_Grid",
"Layers.Graticule"
]
.. example::
:title: Return the list of layers of a PDF file as as a text list
.. code-block:: bash
gdal driver pdf list-layers --of=text autotest/gdrivers/data/pdf/adobe_style_geospatial.pdf
returns:
.. code-block::
New_Data_Frame
New_Data_Frame.Graticule
Layers
Layers.Measured_Grid
Layers.Graticule
---
### Doc Source Programs Gdal Driver Zarr Add Georeferencing Convention (`doc/source/programs/gdal_driver_zarr_add_georeferencing_convention.rst`)
.. _gdal_driver_zarr_add_georeferencing_convention:
.. program:: gdal_driver_zarr_add_georeferencing_convention
================================================================================
``gdal driver zarr add-georeferencing-convention``
================================================================================
.. versionadded:: 3.14
.. only:: html
Add a georeferencing convention to an existing ZARR dataset
.. Index:: gdal driver zarr add-georeferencing-convention
Synopsis
--------
.. We are not using 'program-output:: gdal driver zarr add-georeferencing-convention --help-doc' on purpose,
because the Zar driver may not be built.
.. code-block::
Usage: gdal driver zarr add-georeferencing-convention [OPTIONS] <CONVENTION>
Add a georeferencing convention to an existing ZARR dataset
Positional arguments:
-i, --input Input multidimensional raster dataset [required]
--convention <CONVENTION> Georeferencing convention. CONVENTION=GDAL|spatial_proj [required]
Common Options:
-h, --help Display help message and exit
--json-usage Display usage as JSON document and exit
--config <KEY>=<VALUE> Configuration option [may be repeated]
Description
-----------
Add (but not replace) a georeferencing convention to an existing ZARR dataset.
This has only effect on arrays for which georeferencing is recognized.
This can been used for example to add the Zarr `spatial <https://github.com/zarr-conventions/spatial>`__
and `geo-proj <https://github.com/zarr-conventions/geo-proj>`__ conventions
by specifying :option:`--convention` to ``spatial_proj``.
Program-Specific Options
------------------------
.. option:: --convention GDAL|spatial_proj
Name of the georeferencing convention to add.
``GDAL`` uses a ``_CRS`` attribute (cf :ref:`raster_zarr.gdal.convention`).
``spatial_proj`` uses the Zarr `spatial <https://github.com/zarr-conventions/spatial>`__
and `geo-proj <https://github.com/zarr-conventions/geo-proj>`__ conventions.
.. Return status code
.. ------------------
.. include:: return_code.rst
Examples
--------
.. example::
:title: Add the ``spatial_proj`` convention.
.. code-block:: bash
gdal driver zarr add-georeferencing-conventions my.zarr spatial_proj
---
### Doc Source Programs Gdal Edit (`doc/source/programs/gdal_edit.rst`)
.. _gdal_edit:
================================================================================
gdal_edit
================================================================================
.. only:: html
Edit in place various information of an existing GDAL dataset.
.. Index:: gdal_edit
Synopsis
--------
.. code-block::
gdal_edit [--help] [--help-general] [-ro] [-a_srs <srs_def>]
[-a_ullr <lrx> <lry>] [-a_ulurll <llx> <lly>]
[-tr <xres> <yres>] [-unsetgt] [-unsetrpc] [-a_nodata <value>] [-unsetnodata]
[-a_coord_epoch <epoch>] [-unsetepoch]
[-unsetstats] [-stats] [-approx_stats]
[-setstats <min> <max> <mean> <stddev>]
[-scale <value>] [-offset <value>] [-units <value>]
[-colorinterp_<X> {red|green|blue|alpha|gray|undefined|pan|coastal|rededge|nir|swir|mwir|lwir|...}]...
[-gcp <line> <easting> <northing> [<elevation>]]...
[-unsetmd] [-oo <NAME>=<VALUE>]... [-mo <META-TAG>=<VALUE>]...
<datasetname>
Description
-----------
:program:`gdal_edit` can be used to edit in place various
information of an existing GDAL dataset (projection, geotransform,
nodata, metadata).
It works only with raster formats that support update access to existing datasets.
.. caution::
Depending on the format, older values of the updated information might
still be found in the file in a "ghost" state, even if no longer accessible
through the GDAL API. This is for example the case of the :ref:`raster.gtiff`
format (this is not a exhaustive list).
.. note::
gdal_edit is a Python utility, and is only available if GDAL Python bindings are available.
.. tip:: Equivalent in new "gdal" command line interface:
See :ref:`gdal_raster_edit`.
.. include:: options/help_and_help_general.rst
.. option:: -ro
Open the dataset in read-only. Might be useful for drivers refusing to use
the dataset in update-mode. In which case, updated information will go into
PAM :file:`.aux.xml` files.
.. option:: -a_srs <srs_def>
Defines the target coordinate system.
This coordinate system will be written to the dataset.
If the empty string or None is specified, then the existing
coordinate system will be removed (for TIFF/GeoTIFF, might not be well
supported besides that).
.. option:: -a_coord_epoch <epoch>
Assign/override the coordinate epoch of the dataset, as a decimal year (e.g., 2021.3).
.. versionadded:: 3.9
.. option:: -unsetepoch
Remove the coordinate epoch of the dataset.
.. versionadded:: 3.9
.. option:: -a_ullr <lrx> <lry>
Assign/override the georeferenced bounds of the dataset.
.. option:: -a_ulurll <llx> <lly>
Assign/override the georeferenced bounds of the dataset from three points:
upper-left, upper-right and lower-left. Unlike :option:`-a_ullr`, this also
supports rotated datasets (edges not parallel to coordinate system axes).
.. versionadded:: 3.1
.. option:: -tr <xres> <yres>
Set target resolution. The values must be expressed in georeferenced units.
Both must be positive values.
.. option:: -unsetgt
Remove the georeference information.
.. option:: -unsetrpc
Remove RPC information.
.. option:: -unsetstats
Remove band statistics information.
.. option:: -stats
Calculate and store band statistics.
.. option:: -setstats <min> <max> <mean> <stddev>
Store user-defined values for band statistics (minimum, maximum,
mean and standard deviation). If any of the values is set to None,
the real statistics are calculated from the file and the ones set
to None are used from the real statistics.
.. option:: -approx_stats
Calculate and store approximate band statistics.
.. option:: -a_nodata <value>
Assign a specified nodata value to output bands.
.. option:: -unsetnodata
Remove existing nodata values.
.. option:: -scale <value>
Assign a specified scale value to output bands.
If a single scale value is provided it will be set for all bands.
Alternatively one scale value per band can be provided, in which case
the number of scale values must match the number of bands.
If no scale is needed, it it recommended to set the value to 1.
Scale and Offset are generally used together. For example, scale and
offset might be used to store elevations in a unsigned 16bit integer
file with a precision of 0.1, and starting from -100. True values
would be calculated as: true_value = (pixel_value * scale) + offset
.. note:: These values can be applied using -unscale during a :program:`gdal_translate` run.
.. option:: -offset <value>
Assign a specified offset value to output bands.
If a single offset value is provided it will be set for all bands.
Alternatively one offset value per band can be provided, in which case
the number of offset values must match the number of bands.
If no offset is needed, it recommended to set the value to 0.
For more see scale.
.. option:: -units <value>
Assign a unit to output band(s).
.. versionadded:: 3.1
.. option:: -colorinterp_<X> {red|green|blue|alpha|gray|undefined|pan|coastal|rededge|nir|swir|mwir|lwir|...}
Change the color interpretation of band X (where X is a valid band
number, starting at 1).
.. option:: -gcp pixel <line> <easting> <northing> [<elevation>]
Add the indicated ground control point to the dataset.
This option may be provided multiple times to provide a set of GCPs.
.. option:: -unsetmd
Remove existing metadata (in the default metadata domain).
Can be combined with :option:`-mo`.
.. option:: -mo <META-TAG>=<VALUE>
Passes a metadata key and value to set on the output dataset if possible.
This metadata is added to the existing metadata items, unless :option:`-unsetmd`
is also specified.
.. option:: -oo <NAME>=<VALUE>
Open option (format specific).
The :option:`-a_ullr`, :option:`-a_ulurll`, :option:`-tr` and :option:`-unsetgt` options are exclusive.
The :option:`-unsetstats` and either :option:`-stats` or :option:`-approx_stats` options are exclusive.
.. Return status code
.. ------------------
.. include:: return_code.rst
Example
-------
.. example::
:title: Override the spatial bounds of a dataset and assign metadata values
.. code-block:: bash
gdal_edit -mo DATUM=WGS84 -mo PROJ=GEODETIC -a_ullr 7 47 8 46 test.ecw
.. example::
:title: Assign scale and offset values to dataset
.. code-block:: bash
gdal_edit -scale 1e3 1e4 -offset 0 10 twoBand.tif
The values in the GeoTIFF are not changed.
---
### Doc Source Programs Gdal External (`doc/source/programs/gdal_external.rst`)
.. _gdal_external:
.. program:: gdal_external
================================================================================
``gdal external``
================================================================================
.. versionadded:: 3.13
.. only:: html
Execute an external program as a step of a pipeline
.. Index:: gdal external
Description
-----------
``external`` can be used as a step (in any position) in a generic, raster
or vector pipeline to execute an arbitrary external process.
For security reasons (in particular when embedded in GDALG pipelines), its
execution requires the ``GDAL_ENABLE_EXTERNAL`` configuration option to be set
to YES.
The command line executed by this step can accept the following optional
placeholders:
* ```` that is replaced by the name of a temporary file, generated from
the input of the previous step. The format used by default to materialize that file
is GeoTIFF for raster and GeoPackage for vector, unless the :option:`--input-format`
is specified.
* ``<OUTPUT>`` that is replaced by the name of a temporary file, generated by
the external command. The format used by default to materialize that file
is GeoTIFF for raster and GeoPackage for vector, unless the :option:`--output-format`
is specified.
Upon the completion of the external command, the temporary file is opened,
and passed to the next step of the pipeline.
* ```` that is used for an external program that updates in place
a dataset. The format used by default to materialize that file
is GeoTIFF for raster and GeoPackage for vector, unless the :option:`--input-format`
is specified.
The directory where temporary files are created can be set with the :config:`CPL_TMPDIR`
configuration option.
If no ``<OUTPUT>`` or ```` placeholder is specified, the output of
the step before ``external`` is reused as the output of ``external``.
Synopsis
--------
.. program-output:: gdal pipeline --help-doc=external
Program-Specific Options
------------------------
.. option:: --command <COMMAND>
External command, optionally with and/or <OUTPUT> or placeholders [required]
Standard Options
----------------
.. collapse:: Details
.. include:: gdal_options/if.rst
.. option:: -f, --of, --format, --output-format <OUTPUT-FORMAT>
Which output raster format to use.
.. Return status code
.. ------------------
.. include:: return_code.rst
Examples
--------
.. example::
:title: Pipeline running a `QGIS processing algorithm <https://docs.qgis.org/latest/en/docs/user_manual/processing/standalone.html>`__ to smooth a DEM before computing the hillshade.
.. code-block:: bash
$ gdal pipeline --config GDAL_ENABLE_EXTERNAL=YES \
read dem.tif ! \
external "qgis_process run native:rasterfeaturepreservingsmoothing -- INPUT= OUTPUT=<OUTPUT>" ! \
hillshade ! \
write out.tif
---
--- METRICS ---
- Files Extracted: 101
- Estimated Token Budget: ~124936 tokens
- Canonical Reference: h