Recent from talks
Contribute something
Nothing was collected or created yet.
| GDAL | |
|---|---|
| Original author | Frank Warmerdam |
| Developer | Open Source Geospatial Foundation |
| Initial release | 8 June 2000 |
| Stable release | |
| Repository | |
| Written in | C, C++, Python |
| Platform | Cross-platform |
| Available in | English |
| Type | Library |
| License | X/MIT |
| Website | gdal |
The Geospatial Data Abstraction Library (GDAL) is a computer software library for reading and writing raster and vector geospatial data formats (e.g. shapefile), and is released under the permissive X/MIT style free software license by the Open Source Geospatial Foundation. As a library, it presents a single abstract data model to the calling application for all supported formats. It may also be built with a variety of useful command line interface utilities for data translation and processing. Projections and transformations are supported by the PROJ library.
The related OGR library (OGR Simple Features Library[1]), which is part of the GDAL source tree, provides a similar ability for simple features vector graphics data.
GDAL was developed mainly by Frank Warmerdam until the release of version 1.3.2, when maintenance was officially transferred to the GDAL/OGR Project Management Committee under the Open Source Geospatial Foundation.
GDAL/OGR is considered a major free software project for its "extensive capabilities of data exchange" and also in the commercial GIS community due to its widespread use and comprehensive set of functionalities.[2][3]
Software using GDAL/OGR
[edit]Several software programs use the GDAL/OGR libraries to allow them to read and write multiple GIS formats. Such programs include:
- ArcGIS – Uses GDAL for custom raster formats[4]
- Avenza MAPublisher - GIS and mapping tools for Adobe Illustrator. Uses GDAL for coordinate system transformation, format reading & writing, geometry operations, & unit conversion.
- Avenza Geographic Imager - Spatial imaging tools for Adobe Photoshop. Uses GDAL for coordinate system transformation, format reading & writing, & unit conversion.
- Avenza Maps - iOS & Android mobile mapping application. Uses GDAL to read metadata information for geospatial maps / data to transform them to WGS84 for offline navigation.
- Biosphere3D – Open source landscape scenery globe
- Biotop Invent
- Cadwork
- ENVI – Remote Sensing software
- ERDAS APOLLO - Image Server and remote sensing geo-services
- ERDAS GeoCompressor - Image compression to ECW and JP2 formats
- Geoconcept integrated GDAL in its 7.1 release
- FWTools – A cross-platform open source GIS software bundle compiled by Frank Warmerdam
- gdaltokmz – A Python module translating from GDAL-supported raster graphics formats to the Google Earth KMZ format
- GeoDjango – Django's support for GIS-enabled databases
- GeoDMS - A framework for building spatial calculation models.
- GeoView Pro – iOS mobile mapping application
- Google Earth – A virtual globe and world imaging program
- GRASS GIS
- gvSIG
- JMap
- MangoMap
- MapServer
- MS4W - MapServer for Windows, a widely popular installer for the MapServer community, using GDAL for data access.
- MapWindow GIS - Open Source C++ based geographic information system, ActiveX Control, and application programmer interface
- Merkaartor
- NASA Ames Stereo Pipeline, an open-source software package for photogrammetry
- World Wind Java – NASA's open source virtual globe and world imaging technology
- OpenDroneMap – Open-source photogrammetry software to process aerial imagery
- Open Source Geospatial Foundation (OSSIM) – Libraries and applications used to process imagery, maps, terrain, and vector data
- OpenEV – Geospatial toolkit and a frontend to that toolkit; to display georeferenced images and elevation data
- Orfeo toolbox – A satellite image processing library
- QGIS
- R – An open source statistical software with extensions for spatial data analysis.
- SAGA GIS – A cross-platform open source GIS software
- TopoQuest – Internet topographic map viewer
- Rolta Geomatica software
Supported raster data formats
[edit]As of version 2.2.3, GDAL/OGR provides at least partial support for 154 raster and 93 vector geospatial data formats.[5] A subset of data formats is supported to ensure the ability to directly create files and georeferencing them with the default GDAL compiling options.
Here follows the list of data formats whose support is, by default, compiled to allow creation and georeferencing.
| Raster data format name | Code |
|---|---|
| Arc/Info ASCII Grid[6] | AAIGrid |
| ADRG/ARC Digitalized Raster Graphics (.gen/.thf)[7] | ADRG |
| Bathymetric Attributed Grid (.bag)[8] | BAG |
| Magellan BLX Topo (.blx, .xlb)[9] | BLX |
| Microsoft Windows Device Independent Bitmap (.bmp)[10] | BMP |
| VTP Binary Terrain Format (.bt)[11] | BT |
| Military Elevation Data (.dt0, .dt1, .dt2)[12] | DTED |
| ESRI .hdr Labelled[13] | EHdr |
| NASA ELAS[14] | ELAS |
| ENVI .hdr Labelled Raster[15] | ENVI |
| ERMapper (.ers)[15] | ERS |
| NOAA .gtx vertical datum shift | GTX |
| HF2/HFZ heightfield raster[16] | HF2 |
| Erdas Imagine (.img)[17] | HFA |
| Image Display and Analysis (WinDisp)[18] | IDA |
| ILWIS Raster Map (.mpr,.mpl)[19] | ILWIS |
| Intergraph Raster[20] | INGR |
| USGS Astrogeology Isis cube (Version 2)[21] | ISIS2 |
| KMLSUPEROVERLAY | KMLSUPEROVERLAY |
| In Memory Raster[22] | MEM |
| Vexcel MFF[23] | MFF |
| Vexcel MFF2[24] | MFF2 (HKV) |
| NITF[25] | NITF |
| NTv2 Datum Grid Shift | NTv2 |
| PCI Geomatica Database File[26] | PCIDSK |
| Raster Matrix Format (*.rsw, .mtw)[27] | RMF |
| Idrisi Raster[28] | RST |
| SAGA GIS Binary format[29] | SAGA |
| SGI Image Format[30] | SGI |
| SRTM HGT Format[31] | SRTMHGT |
| USGS ASCII DEM / CDED (.dem)[32] | USGSDEM |
| GDAL Virtual (.vrt)[33] | VRT |
| ASCII Gridded XYZ[34] | XYZ |
Supported vector data formats
[edit]GDAL supports a variety of vector data formats as seen here. It is extensible as well.
References
[edit]- ^ "FAQGeneral – GDAL". Trac.osgeo.org. Retrieved 2014-01-20.
- ^ Neteler M., Raghavan V. (2006). "Advances in Free Software Geographic Information Systems". Journal of Informatics. Archived from the original on 2011-08-23.
Extensive capabilities of data exchange are essential for the daily GIS work. GRASS profits from an external project, the GDAL/OGR library <http://www.gdal.org>. This FOSS library is also used even by global data vendors as well as in some proprietary GIS applications. Many of the raster and vector formats supported for reading can be also be generated.
- ^ Mark Wilcox (2009). Porting to the Symbian Platform: Open Mobile Development in C/C++. Wiley.
In the words of Howard Butler, a director of the Open Source Geospatial Foundation, "I see GDAL as the glibc/glibc++ of the geospatial software world. It's open, it provides core functionality, I can't understand how anybody gets anything done without it."
- ^ "ArcGIS 9.2 Desktop Help: Supported raster dataset file formats". ESRI. 2007-08-15.
- ^ "GDAL Raster Formats". GDAL - Geospatial Data Abstraction Library. 2011-06-05.
- ^ "Various Supported GDAL Raster Formats". Gdal.org. 2013-11-18. Retrieved 2014-01-20.
- ^ "Various Supported GDAL Raster Formats". Gdal.org. 2013-11-18. Retrieved 2014-01-20.
- ^ "BAG - Bathymetry Attributed Grid". Gdal.org. Retrieved 2018-06-16.
- ^ "BLX - Magellan BLX Topo File Format (available from GDAL 1.6.0)". Gdal.org. Retrieved 2014-01-20.
- ^ "BMP - Microsoft Windows Device Independent Bitmap". Gdal.org. Retrieved 2014-01-20.
- ^ "Various Supported GDAL Raster Formats". Gdal.org. 2013-11-18. Retrieved 2014-01-20.
- ^ "DTED - Military Elevation Data". Gdal.org. Retrieved 2014-01-20.
- ^ "Various Supported GDAL Raster Formats". Gdal.org. 2013-11-18. Retrieved 2014-01-20.
- ^ "ELAS - Earth Resources Laboratory Applications Software". Gdal.org. Retrieved 2014-01-20.
- ^ a b "Various Supported GDAL Raster Formats". Gdal.org. 2013-11-18. Retrieved 2014-01-20.
- ^ "HF2 - HF2/HFZ heightfield raster". Gdal.org. Retrieved 2014-01-20.
- ^ "HFA - Erdas Imagine .img". Gdal.org. Retrieved 2014-01-20.
- ^ "Various Supported GDAL Raster Formats". Gdal.org. 2013-11-18. Retrieved 2014-01-20.
- ^ "Various Supported GDAL Raster Formats". Gdal.org. 2013-11-18. Retrieved 2014-01-20.
- ^ "INGR - Intergraph Raster Format". Gdal.org. 2013-03-23. Archived from the original on 2013-09-20. Retrieved 2014-01-20.
- ^ "ISIS2 - USGS Astrogeology ISIS Cube (Version 2)". Gdal.org. Retrieved 2014-01-20.
- ^ "MEM - In Memory Raster". Gdal.org. Retrieved 2014-01-20.
- ^ "Various Supported GDAL Raster Formats". Gdal.org. 2013-11-18. Retrieved 2014-01-20.
- ^ "MFF2 - Vexcel MFF2 Image". Gdal.org. Retrieved 2014-01-20.
- ^ "NITF - National Imagery Transmission Format". Gdal.org. Retrieved 2014-01-20.
- ^ "PCIDSK - PCI Geomatics Database File". Gdal.org. Retrieved 2014-01-20.
- ^ "RMF - Raster Matrix Format". Gdal.org. Retrieved 2014-01-20.
- ^ "RST - Idrisi Raster Format". Gdal.org. Retrieved 2014-01-20.
- ^ "Various Supported GDAL Raster Formats". Gdal.org. 2013-11-18. Retrieved 2014-01-20.
- ^ "Various Supported GDAL Raster Formats". Gdal.org. 2013-11-18. Retrieved 2014-01-20.
- ^ "Various Supported GDAL Raster Formats". Gdal.org. 2013-11-18. Retrieved 2014-01-20.
- ^ "Usgsdem - Usgs Ascii Dem (And Cded)". Gdal.org. Retrieved 2014-01-20.
- ^ "Virtual Format Tutorial". GDAL. 2003-07-21. Retrieved 2014-01-20.
- ^ "XYZ - ASCII Gridded XYZ". Gdal.org. Retrieved 2014-01-20.
- Notes
- Schuyler Erle, Rich Gibson and Jo Walsh (2005). Mapping Hacks. O'Reilly. ISBN 0-596-00703-5.
- Tyler Mitchell (2005). Web Mapping Illustrated. O'Reilly. ISBN 0-596-00865-1.
External links
[edit]gdal_translate for format conversion and gdalinfo for dataset inspection, along with its extensive format support (e.g., GeoTIFF, GeoJSON, Shapefile, and KML), make it a foundational tool in the geospatial ecosystem, underpinning software like QGIS, GRASS GIS, and MapServer for data processing and analysis workflows.[6][7][8] As of November 2025, the latest stable release is version 3.12.0, continuing to expand capabilities for emerging geospatial standards and high-performance computing needs.[9]
Overview
Definition and Purpose
The Geospatial Data Abstraction Library (GDAL) is an open-source translator library written in C/C++ for reading and writing raster and vector geospatial data formats.[1] It provides a unified abstract data model that allows developers and applications to interact with diverse geospatial datasets without needing to implement format-specific handling code.[1] The primary purpose of GDAL is to facilitate the translation, processing, and manipulation of geospatial data across over 220 supported formats, including more than 140 raster and 80 vector drivers.[10][11] By abstracting the complexities of individual formats, GDAL enables seamless operations such as data conversion, coordinate system transformations, and quality-preserving resampling, which are essential for geospatial analysis and integration into broader systems. At its core, GDAL employs a driver-based architecture where input datasets are accessed through a virtual file system (VFS) abstraction, allowing flexible handling of local files, remote URLs, or in-memory data. Outputs are managed via specialized drivers that encapsulate format-specific encoding and metadata preservation, ensuring interoperability in workflows like image mosaicking and reprojection within geographic information system (GIS) software. Since the release of GDAL 2.0 in 2015, the library has unified its raster-focused components with the OpenGIS Simple Features Library (OGR), which specifically handles vector data, under a single project umbrella to streamline development and enhance cross-format capabilities.[12] This integration has solidified GDAL's role as a foundational tool in open-source geospatial ecosystems.[1]Key Components
GDAL's modular architecture is built around core libraries that provide abstract data models for handling geospatial data. The GDAL core library focuses on raster data manipulation, offering a unified interface for reading, writing, and processing raster datasets across various formats. Complementing this, the OGR (OpenGIS Simple Features Library) component handles vector data, implementing a single abstract data model based on the OGC Simple Features specification for geometries, features, and layers. These libraries share common utilities, including spatial reference system management through integration with the PROJ library, which enables robust handling of coordinate systems and transformations.[1][12][13] A key aspect of GDAL's extensibility is its driver model, which adopts a plugin-like approach to support diverse data formats without requiring recompilation of the core library. Each format is implemented via a dedicated driver that adheres to GDAL's abstract raster or vector data models, managed centrally by the GDALDriverManager. This structure allows drivers to be registered dynamically, with capabilities such as creation options and open parameters defined through metadata, facilitating seamless addition of new formats by developers or third parties. Since GDAL 2.0, vector drivers (OGR) have been unified under the GDALDriver framework, enhancing consistency and allowing a single mechanism for probing and loading both raster and vector drivers.[12][1] GDAL includes a suite of command-line utility programs that leverage its libraries for common geospatial operations. For raster data, tools such asgdal_translate enable format conversion and subsetting, gdalwarp performs reprojection and warping to align datasets to new coordinate systems, and gdalinfo inspects metadata like dimensions, projections, and statistics. On the vector side, OGR utilities include ogrinfo for querying data source details and ogr2ogr for converting between formats while supporting operations like layer creation, attribute mapping, and spatial filtering. These tools provide accessible entry points for scripting and batch processing, often serving as practical interfaces to the underlying C++ APIs.[14][6][15]
Coordinate transformation capabilities are deeply integrated via the PROJ library, which GDAL has required since version 3.0 (PROJ >= 6.0). The OGRSpatialReference class wraps PROJ's functionality to define and validate coordinate reference systems using formats like WKT 2 and PROJ strings, supporting axis order conventions and authority codes (e.g., EPSG). Transformations between systems are handled by OGRCoordinateTransformation, which utilizes PROJ's pipeline for accurate 2D/3D mappings, including dynamic operations based on area of interest or custom grids, ensuring precise georeferencing across datasets.[13][16]
To accommodate diverse data access scenarios, GDAL implements a Virtual File System (VFS) layer that abstracts file I/O for remote, compressed, or in-memory sources. The VFS supports prefixes like /vsicurl/ for HTTP/FTP streams, /vsizip/ for ZIP archives, and /vsis3/ for cloud storage (e.g., AWS S3), allowing drivers to read or write data on-the-fly without extracting files. This chaining capability (e.g., /vsizip//vsicurl/) extends to combinations, and it relies on the large file API for most drivers, enabling efficient handling of large-scale or distributed geospatial datasets.[17]
History and Development
Origins and Early Development
GDAL originated in late 1998 when Frank Warmerdam, a geospatial software developer who had been employed at PCI Geomatics from 1991 to 1998, initiated the project as an independent effort to address needs for raster geospatial data format translation and access within PCI's software ecosystem.[18][4] The library was conceived to provide a unified abstraction for handling diverse raster formats, enabling efficient read/write operations across proprietary and open formats prevalent in remote sensing and GIS applications at the time.[4] The first public version, GDAL 1.0, was released in 2000, establishing core functionality with support for essential raster drivers including GeoTIFF for georeferenced TIFF images and ERDAS Imagine formats commonly used in satellite imagery analysis.[19] This initial release emphasized portability through the accompanying Common Portability Library (CPL), which facilitated cross-platform development and became a foundational component for subsequent geospatial tools.[4] By 2001, GDAL saw early adoption in prominent open-source GIS initiatives, such as its integration into MapServer for enhanced raster data serving capabilities in web mapping applications.[20] Concurrently, the OGR library for vector data support was developed separately starting in 1999, drawing inspiration from the OpenGIS Simple Features specification to handle formats like shapefiles and enable geometric operations. A key milestone occurred in 2000 with GDAL's full transition to an open-source model under the permissive MIT/X license, which hosted the project on SourceForge to foster community contributions and widespread accessibility.[3] This licensing shift, combined with conceptual alignment between GDAL and OGR by 2004, laid the groundwork for their collaborative evolution as complementary geospatial data handling tools.[4]Major Milestones and Releases
The release of GDAL 2.0 in June 2015 marked a significant milestone, featuring major API cleanups, enhanced Python bindings for better integration with numerical array facilities, and the technical unification of GDAL and OGR through RFC 46, which aligned vector driver structures with raster ones for improved metadata handling and a unified C++ API.[12][21] This version implemented 10 key RFCs, enabling support for datasets of arbitrary size with limited resources and introducing multi-OS compatibility enhancements. GDAL 3.0, released in May 2019, introduced integration with PROJ 6 for advanced coordinate reference system support including WKT2 and time-dependent transformations, alongside new drivers for DAAS (Airbus Data as a Service), TileDB for multidimensional arrays, and MongoDBv3, as well as improvements to NetCDF for group reading and PDF for complex document creation.[22] These updates enhanced cloud-optimized data handling and asynchronous I/O capabilities via existing progressive data support mechanisms.[23] In November 2023, GDAL 3.8 added support for emerging formats like JSON-FG for OGC Features and Geometries, PMTiles for tiled vector data, and S-102 for bathymetric surfaces, while introducing the gdal_footprint utility for computing raster extents excluding nodata areas and improving Arrow interfaces for spatial filtering. Native ARM support on platforms like Apple Silicon was further optimized in subsequent releases. By 2025, GDAL 3.12 continued this trajectory with expanded command-line interfaces and driver capabilities.[9] Adoption grew substantially, with QGIS establishing GDAL as a core dependency by version 1.5 in 2010 for raster and vector processing. Google Earth Engine upgraded to GDAL version 3.1.4 in 2023 for improved GeoTIFF import/export and Cloud Optimized GeoTIFF support.[24] Leadership transitioned from founder Frank Warmerdam, who maintained the project through version 1.3.2 in 2006 and beyond, to Even Rouault as Project Steering Committee chair around 2019, ensuring continued innovation.[25] Ongoing development toward GDAL 4.0 focuses on performance optimizations, including potential machine learning workflow integrations via enhanced array and driver APIs.[26]Core Functionality
Raster Data Processing
GDAL represents raster data as a collection of two-dimensional or three-dimensional grids, where each grid cell, or pixel, holds a value associated with a specific location on the Earth's surface. These grids consist of one or more bands, which can represent channels such as red, green, and blue in RGB imagery or multiple spectral bands in hyperspectral data.[27] Each dataset is encapsulated in a GDALDataset object, which manages a set of raster bands sharing the same spatial extent and resolution, with constraints like a maximum of 2,147,483,647 pixels per dimension and up to 65,536 bands by default.[27] Georeferencing is achieved through an affine transformation matrix, defined by six coefficients (GeoTransform) that map pixel/line coordinates to geographic coordinates using the formulas: where GT(0) and GT(3) denote the upper-left corner coordinates, GT(1) and GT(5) represent pixel width and height (negative for rotated images), and GT(2) and GT(4) account for rotation or skew.[27] The coordinate reference system is specified in OpenGIS Well-Known Text (WKT) format via the dataset's projection reference.[27] Key operations for raster data processing in GDAL include translation and warping. The gdal_translate utility facilitates format conversion between supported raster formats, while also enabling subsetting via source window (-srcwin for pixel coordinates) or projected window (-projwin for georeferenced bounding boxes), and scaling with options like -outsize or -tr for target resolution.[6] For reprojection and geometric correction, gdalwarp performs image warping and mosaicking, supporting algorithms such as polynomial fitting (orders 1 to 3, default for ground control points) and thin-plate spline transformation when using the -tps option.[15] These operations allow transformation to any supported projection, with input datasets potentially combined into a mosaic.[15] Resampling is integral to these operations to handle changes in resolution or projection, with GDAL offering methods including nearest neighbor (fastest, preserves original values), bilinear (linear interpolation for smoother results), and cubic convolution (higher-order for reduced aliasing).[15] For bilinear resampling, the interpolated value at fractional offsets (a, b) between pixels is computed as: where f(0,0), f(1,0), f(0,1), and f(1,1) are the surrounding pixel values.[6] This method applies a 2x2 kernel for efficient approximation of continuous surfaces in geospatial rasters.[15] Mosaicking assembles multiple raster sources into a unified dataset, often virtually to avoid physical merging and save storage. The VRT (Virtual Raster) format enables this through XML-defined compositions, where gdalbuildvrt constructs a mosaic from input datasets by aligning them via geotransforms and handling overlaps with options like -vrtnodata for nodata values.[28] Clipping extracts subsets using bounding boxes, as implemented in gdal_translate's -projwin option, which defines the upper-left (ulx, uly) and lower-right (lrx, lry) coordinates in the source projection to crop the raster precisely.[6] Performance enhancements in GDAL include on-the-fly computation during read operations, where transformations and resampling occur without intermediate files, controlled by memory limits via -wm in utilities like gdalwarp (default 64 MB per chunk).[15] Multi-threading support, introduced in GDAL 2.2 (released in 2016), accelerates processing through options like -multi in gdalwarp, leveraging multiple CPU cores for independent chunk operations.[15] This feature significantly improves throughput for large-scale raster workflows.Vector Data Processing
In GDAL, vector data processing is handled primarily by the OGR component, which implements the Open Geospatial Consortium (OGC) Simple Features model for representing geospatial vector data.[29] Features serve as the fundamental units, each consisting of a geometry—such as points, linestrings, polygons, or multipolygons—paired with a set of attributes stored as key-value pairs in a feature definition schema.[29] These features are grouped into layers, which define the structure and spatial reference system, while multiple layers form a dataset that encapsulates the overall vector file or database connection.[29] This hierarchical organization enables efficient management of discrete, topology-aware entities, in contrast to the continuous grid-based representation used in raster processing.[29] Core operations for vector data manipulation in OGR include format conversion and transformation via the command-line utility ogr2ogr, which supports reprojection, spatial filtering by bounding boxes or geometry predicates, and attribute-based selection.[30] Ogr2ogr integrates SQL-like querying through OGR's SQL dialect or the SQLite dialect for more complex operations, allowing users to filter, join, or aggregate features based on attribute conditions or spatial relationships during translation.[31][30] For instance, queries can leverage SQLite's spatial extensions in compatible drivers to perform operations like distance calculations or containment tests directly on the data source.[32] OGR provides advanced geometry operations powered by the GEOS library, enabling spatial analysis such as buffering, union, and intersection on individual features or collections.[33] Buffering, for example, generates a polygon offset from the input geometry at a specified Euclidean distance d, creating an envelope around points, lines, or polygons while handling curve approximations and topology preservation.[33] Union combines multiple geometries into a single output, dissolving internal boundaries, while intersection computes the overlapping region between two geometries, both returning results validated against OGC standards.[33] These operations are invoked through the OGRGeometry API methods, ensuring robustness for tasks like overlay analysis. To optimize query performance on large datasets, OGR supports spatial indexing, particularly R-trees, through drivers like Spatialite, where indexes are built on geometry columns to accelerate bounding-box and spatial joins.[32] Native drivers for formats such as FlatGeobuf also incorporate R-tree structures for efficient filtering without full dataset scans. Users can create or leverage these indexes during data import or via ogrinfo commands, reducing query times for operations involving millions of features.[32] A distinctive aspect of OGR's vector processing is its support for styling and symbology export, which translates visual properties into format-specific representations during output.[34] For KML, the LIBKML driver maps OGR style strings—defining parameters like color, width, and symbols—to KML style elements, enabling rendered visualizations in tools like Google Earth.[35] Concurrently, attribute fields are preserved through schema mapping to KML'sSupported Data Formats
Raster Formats
GDAL supports over 130 raster data formats through its driver architecture, enabling the reading and writing of diverse geospatial raster datasets. These formats are categorized by type, such as image-based (e.g., for photographic or mapped imagery), elevation models (e.g., for terrain data), scientific gridded data (e.g., for multidimensional arrays in research), and database-integrated rasters (e.g., for server-side storage and querying). Formats also vary by origin, including open standards like GeoTIFF and proprietary ones like ENVI, with support levels differing across drivers—many offer full read/write capabilities, while others, such as certain legacy military formats, may be read-only. Core raster formats in GDAL include GeoTIFF, the most widely used georeferenced TIFF variant for general geospatial imagery and mapping, providing robust support for projections, metadata, and compression. JPEG2000 serves as a compressed format particularly suited for multispectral and high-resolution imagery, with GDAL offering read/write access via multiple libraries like OpenJPEG. NetCDF is essential for scientific gridded data, supporting multidimensional arrays commonly used in climate modeling and oceanography, with full read/write capabilities when the NetCDF library is available. These open formats form the backbone of GDAL's raster handling due to their interoperability and prevalence in open-source workflows.[36][37] In remote sensing applications, GDAL accommodates formats like HDF5, a NASA-standard for hierarchical scientific data storage, primarily in read-only mode for satellite and instrument datasets. The ENVI format, proprietary to Harris Geospatial, targets hyperspectral and multispectral analysis, with read/write support for header files containing spectral band information. GDAL's ecosystem includes over 100 such drivers, with notable additions like cloud-optimized GeoTIFF (COG) introduced in GDAL 3.1 for efficient cloud-based access via HTTP range requests, and enhanced Sentinel-2 Level-2A support since GDAL 2.4 for atmospheric-corrected satellite imagery. These extensions highlight GDAL's evolution toward modern, distributed geospatial data handling.[38][39] Database raster formats enable integration with spatial databases, such as PostGIS Raster for PostgreSQL-based storage of raster tiles with spatial indexing, supporting read/write operations for large-scale geoprocessing. Oracle GeoRaster provides similar server-side capabilities within Oracle databases, allowing raster management alongside vector data. Read/write support varies; for instance, GeoTIFF and NetCDF offer comprehensive creation and editing, whereas legacy formats like NITF (National Imagery Transmission Format) provide full access but are often used read-only in practice due to their military origins. This diversity ensures GDAL's versatility across proprietary and open environments.Vector Formats
The OGR library within GDAL supports over 80 vector data formats through specialized drivers, allowing for the reading and writing of geospatial features while maintaining interoperability across diverse systems. These formats primarily conform to the OGC Simple Features specification, which standardizes geometry types such as points, linestrings, polygons, multipoints, multilinestrings, multipolygons, and geometry collections, often extended to include 3D and measured dimensions for enhanced representation. This compliance enables consistent handling of vector data, with OGR converting complex geometries to linear approximations when necessary for format compatibility.[29][40][41] Vector formats in OGR are categorized by storage type—file-based, database, and web/services—and by adherence to standards like OGC Simple Features, facilitating data exchange without loss of essential geometric integrity. File-based formats form the backbone of standalone vector storage, with the ESRI Shapefile being the most common binary format, supporting points, lines, and polygons up to a 2 GB size limit per dataset and full read/write operations. GeoJSON, a lightweight JSON-based format designed for web interchange, accommodates all OGR geometry types including curves and is OGC-compliant with robust read/write support. Additional file-based options encompass KML and KMZ for Google Earth interoperability, GML as an XML standard for OGC feature encoding, and DXF for CAD data exchange, all featuring read/write drivers among the 80+ available. The ESRI File Geodatabase (FileGDB) offers advanced file storage with curve geometry support, though complete read/write functionality requires integration with the closed-source ESRI File Geodatabase API. A notable recent inclusion is FlatGeobuf, a binary format added in GDAL 3.1 for efficient, indexed storage and querying of geometries.[42][43][40] Database formats enable scalable vector management with query capabilities, exemplified by PostGIS, a PostgreSQL extension that supports advanced spatial SQL queries, non-linear geometries like circularstrings and curve polygons, and topology preservation via its ISO SQL/MM-compliant extension. Spatialite, an SQLite-based spatial database, provides read/write access to OGC Simple Features-compliant geometries with built-in spatial indexing for efficient operations. These drivers allow OGR to interface with relational structures while preserving geometric and attribute data.[44] Web and services formats prioritize networked access, with the OGC Web Feature Service (WFS) enabling read operations on remote vector layers in full compliance with Simple Features standards for seamless interoperability. Formats like KML also support web-oriented exchange, contributing to the ecosystem of over 80 drivers that emphasize standards-based geometry handling across storage paradigms.[40]Integration and Applications
Software and Tools Using GDAL
GDAL serves as a foundational backend library for numerous geographic information system (GIS) desktop applications, enabling seamless handling of diverse geospatial data formats. QGIS, a widely used open-source GIS software, has integrated GDAL as its core engine for raster and vector data access since version 0.9 in 2008, allowing users to perform analysis, visualization, and data conversion without format-specific limitations.[45] Similarly, GRASS GIS relies on GDAL and OGR for its raster and vector modules, facilitating import/export operations and advanced geospatial processing in environmental and terrain analysis workflows.[46][47] In web mapping and server environments, GDAL powers key rendering and service capabilities. MapServer, an open-source platform for publishing spatial data and interactive mapping applications to the web, uses GDAL as its primary backend for raster data access and rendering since version 6.2, supporting efficient generation of maps from various formats.[48] GeoServer, another prominent open-source server for sharing geospatial data via OGC standards like WMS and WFS, leverages GDAL extensions through ImageI/O-Ext to read and process raster coverages, enhancing support for complex environmental datasets in web-based services.[49] For command-line and scripting applications, GDAL's Python bindings via the osgeo.gdal module enable automation of geospatial pipelines, allowing developers to script data transformations, projections, and analysis in formats-agnostic workflows. This integration is particularly valuable in batch processing environments, where tools like gdalwarp and ogr2ogr are invoked programmatically for large-scale data preparation. Unique examples highlight GDAL's role in high-impact scientific and commercial tools. NASA's Earthdata platform incorporates GDAL in its tools and data recipes for processing satellite imagery, such as geocoding Sentinel-1 products and subsetting Earth observation data for GIS applications.[50][51] Google Earth Engine utilizes GDAL drivers like EEDAI and EEDA for accessing and processing petabyte-scale imagery in cloud-based environmental monitoring and change detection tasks.[52] In the commercial sector, ArcGIS Pro from Esri employs GDAL for handling custom raster formats and certain data interoperability tasks, providing partial compatibility with open-source workflows.[8][53] The official GDAL documentation lists over 50 major projects that depend on it, underscoring its ubiquity in enabling format-agnostic workflows for environmental monitoring, urban planning, and climate analysis across open-source and proprietary systems.[8]Programming Interfaces and Usage
GDAL provides a robust set of programming interfaces primarily through its C and C++ APIs, which serve as the foundation for accessing and manipulating geospatial data. The core C API, defined ingdal.h, enables developers to interact with raster datasets via functions such as GDALOpenEx() for opening files and GDALAllRegister() for initializing all available drivers. In the C++ API, the GDALDataset class represents an entire raster dataset, encapsulating metadata, geotransformation information, and projections, while allowing access to individual raster bands through methods like GetRasterBand(). Complementing this, the GDALRasterBand class handles operations on specific bands, including querying dimensions with GetXSize() and GetYSize(), and performing efficient data I/O. These classes facilitate low-level control over data formats without direct format-specific knowledge, promoting abstraction across supported drivers.[23][54][55]
To extend accessibility beyond C/C++, GDAL employs SWIG (Simplified Wrapper and Interface Generator) to produce bindings for multiple languages, including Python, Java, and Perl. The Python bindings, available under the osgeo.gdal module, closely mirror the C++ API while adding seamless integration with NumPy for numerical array operations; for instance, dataset.ReadAsArray() directly returns a NumPy array for efficient in-memory processing of raster data. Java bindings, found in packages like org.gdal.gdal, provide equivalent class structures for JVM-based applications, supporting JNI (Java Native Interface) calls to the underlying C libraries. Perl bindings similarly wrap the core functionality, enabling script-based geospatial tasks in that ecosystem. These SWIG-generated interfaces ensure consistency across languages, with automatic memory management handled by the host runtime where possible.[56][57][58]
Common usage patterns in GDAL programming revolve around dataset lifecycle management and data access. Developers typically begin by registering drivers with GDALAllRegister() to enable format detection, followed by opening a dataset using GDALOpen() or its extended variant GDALOpenEx() with access flags like GDAL_OF_READONLY. Data reading occurs via RasterIO() on a GDALRasterBand or GDALDataset, which supports block-based I/O to minimize memory overhead—specifying window extents, buffer types, and resampling methods such as nearest neighbor or bilinear interpolation. Error handling is standardized through the CPLErr enumeration, where functions return codes like CE_None for success or CE_Failure for issues, often accompanied by detailed messages via CPLGetLastErrorMsg(). Closing datasets with GDALClose() is essential to release resources.[23][55]
Best practices emphasize efficient resource utilization, particularly for large datasets. Driver registration should occur once at application startup to avoid redundant initialization, while memory management involves leveraging GDAL's block cache—configurable via the GDAL_CACHEMAX option (e.g., setting it to 512MB)—to buffer frequently accessed data blocks without loading entire files into RAM. For oversized rasters, process data in blocks using ReadBlock() and WriteBlock() to prevent out-of-memory errors, and employ virtual I/O mechanisms like VRT (Virtual Raster) datasets for on-the-fly transformations. In C/C++, explicit deletion of dataset handles prevents leaks, whereas language bindings like Python handle this automatically through garbage collection.[59][60]
A distinctive application of GDAL's interfaces is in Python automation scripts for batch geospatial workflows, where the bindings enable concise, high-level operations. For example, the gdal.Warp() function allows custom reprojections and mosaicking of multiple rasters into a target file, specifying options like source SRS, target resolution, and output format in a dictionary—ideal for processing satellite imagery pipelines without manual loop constructs. Such scripts often combine gdal.Open() for input handling and NumPy for post-processing, streamlining tasks like terrain analysis or remote sensing data preparation.[56]
Community and Licensing
Open Source Governance
GDAL has been governed as an official project of the Open Source Geospatial Foundation (OSGeo) since its establishment as one of the foundation's founding projects in February 2006.[61] The project's oversight is managed by a Project Steering Committee (PSC), formed in April 2006 following the release of GDAL 1.3.2, which operates under the guidelines outlined in RFC 1 to facilitate community-driven decision-making on development priorities, releases, and technical policies.[61] Even Rouault, a long-time contributor and founder of Spatialys, currently serves as the PSC chair and GDAL/OGR Vice President for OSGeo, ensuring continuity in maintenance and strategic direction.[62][63] The library is released under a permissive open-source license, primarily the MIT/X11 license for most source code files, with some components under BSD 2-clause or 3-clause variants.[3] This dual-licensing approach imposes minimal restrictions, allowing free use, modification, distribution, and integration into proprietary software without copyleft requirements, provided copyright and permission notices are retained in copies.[3] Such terms promote broad adoption across commercial and non-commercial applications while maintaining open accessibility.[3] Funding for GDAL's development and maintenance is derived from a combination of corporate sponsorships, grants, and donations managed through OSGeo and its fiscal sponsor, NumFOCUS, a 501(c)(3) nonprofit organization that GDAL joined in 2021 to handle tax-deductible contributions.[64][65] Key supporters include Google, NASA, and various geospatial organizations, which provide unrestricted annual funding to cover infrastructure, testing, and core maintainer efforts, enabling sustainable long-term enhancements.[66][67] As a founding OSGeo project, GDAL achieved full maturity status early in the foundation's history, solidifying its role in the open geospatial ecosystem by 2010.[68] Version control transitioned to GitHub in 2018 via RFC 71, migrating from OSGeo's Subversion repository while preserving commit history and linking to legacy Trac tickets.[69] The repository at github.com/OSGeo/gdal now integrates continuous integration pipelines, initially leveraging Travis CI for Linux/macOS builds and AppVeyor for Windows, to automate testing across multiple configurations and ensure code quality.[69][70] Development is further propelled by annual code sprints and hackathons, such as those held at FOSS4G conferences, where contributors collaborate on features and bug fixes.[61] In 2025, OSGeo's ongoing support emphasizes sustainability through enhanced fiscal mechanisms and community funding initiatives, addressing long-term project viability amid growing adoption.[71][64]Contributions and Support
Contributions to GDAL are facilitated through its GitHub repository, where developers submit pull requests for code changes, bug fixes, and new features. The issue tracker on GitHub serves as the primary venue for reporting bugs, proposing enhancements, and discussing development tasks.[5][61] For adding new drivers, GDAL provides detailed implementation tutorials and guidelines, including requirements for testing with utilities like test_ogrsf and creating corresponding documentation pages. Raster and vector drivers must subclass core GDAL classes such as GDALDataset and OGRLayer, with specific instructions for handling data access and format support.[72][73][5] Documentation for GDAL is hosted on the official website at gdal.org, featuring comprehensive API references for C++, Python, and other bindings, along with program descriptions for utilities. Community-maintained cookbooks, such as the Python GDAL/OGR Cookbook, offer practical code snippets for common tasks. Man pages for GDAL utilities, like gdal_translate and gdalwarp, provide command-line options and usage examples, available through system documentation or the official programs index.[58][74][75][14] Support for GDAL users and developers occurs via multiple channels, including the gdal-dev mailing list for general questions and discussions, the [gdal] tag on Stack Overflow for technical queries, and the #gdal IRC channel on Libera.Chat for real-time collaboration and debugging.[61][76][77] The GDAL community engages in events such as code sprints at FOSS4G conferences, where participants collaborate on development priorities, and mentorship programs through Google Summer of Code, with OSGeo (including GDAL projects) participating annually since 2007.[78][79] GDAL's driver ecosystem incorporates third-party contributions, notably the MrSID driver, which relies on the Extensis Decoding SDK (formerly from LizardTech) under a proprietary license to enable reading of wavelet-compressed images.[80][81]References
- https://wiki.osgeo.org/wiki/Even_Rouault
- https://wiki.osgeo.org/wiki/GDAL_Incubation_Progress
- https://wiki.osgeo.org/wiki/FOSS4G_2021/Community_sprint
- https://wiki.osgeo.org/wiki/Google_Summer_of_Code_2007