Gdal

Latest version: v3.10.2

Safety actively analyzes 714815 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 2 of 7

15.0

Go to https://github.com/OSGeo/GDAL/settings/variables/actions/STABLE_BRANCH
and update the value to be release/x.y

12.3

in /osgeo/download/gdal/X.Y.Z (where X.Y.Z is the version number)

with ~/.ssh/config containing:

Host osgeo7-*
ProxyCommand ssh rouaultdownload.osgeo.org -W $(sed -e "s/^osgeo7-//;s/$/.lxd/" <<< "%h"):%p


13) Announce the release candidate availability to gdal-dev
Example: https://lists.osgeo.org/pipermail/gdal-dev/2019-June/050509.html

14) If new RC is needed, update gcore/gdal_version.h.in with the new date
and update NEWS,and go to 7)

If no new RC is needed, after a few days, raise a motion to gdal-dev for approval

15) Once the vote has positively completed,

12.2

1. Refresh
https://download.osgeo.org/gdal/for_doc/javadoc.zip
by building the Java bindings, with -DGDAL_JAVA_GENERATE_JAVADOC=ON.
javadoc.zip is in the swig/java subdirectory of the build directory.
2. cd doc
3. ./build_doc_snapshot 310
This generates gdal310doc.zip

12.0

If make is not GNU make, e.g., export MAKE=gmake

doxygen

python available as "python", or e.g. export PYTHON=python3.9

python3 available as "python3" in path (export PYTHON=python3.9
partially works, but some scripts under doc have hardcoded python3)

sphinx-build in path, or e.g. export SPHINXBUILD=sphinx-build-3.9

breathe extension for sphinx

swig 4 in path as "swig"

md5sum (GNU version) in path (not a POSIX requirement)

12.1) Create the source distributions using the mkgdaldist.sh script.
The argument should be the version number (i.e. 1.4.2). As our process involves
doing betas or RCs, use the -rc option so that the filenames include this
information (after promotion to official release, filename renaming will have
to be done)

% ./mkgdaldist.sh 3.1.0 -tag v3.1.0RC1 -rc rc1

For a beta version:

% ./mkgdaldist.sh 3.1.0beta1 -tag v3.1.0beta1

For a version intended for testing packaging (and not for
distribution):

% ./mkgdaldist.sh 3.4.80 -tag master

It might be useful to compare the content of the generated tarball, with
a previous release (diff -Nur gdal-3.0.1 gdal-3.0.2).
This is more easily doable for a bugfix release.

3.10.1

Core

* OGRWarpedLayer: do not use source layer GetArrowStream() as this would skip
reprojection

OGRSpatialReference

* importFromEPSG(): tries with ESRI when it looks like an ESRI code, but with
a warning when that succeeds (11387)

Vector utilities

* ogrinfo: command line help text fixes (11463)
* ogr2ogr: fix 'ogr2ogr out.parquet in.gpkg/fgb/parquet -t_srs {srs_def}'
optimized code path (3.10.0 regression)
* ogr2ogr: fix crash with -ct and using Arrow code path (e.g source is
GeoPackage) (3.10.0 regression) (11348)
* GDALVectorTranslate(): fix null-ptr dereference when no source driver
* ogrlineref: fix double-free on 'ogrlineref --version'

Vector drivers

DXF driver:
* use Z value for SPLINE entities (11284)
* writer: do not set 0 as the value for DXF code 5 (HANDLE) (11299)

FlatGeobuf driver:
* writing: in SPATIAL_INDEX=NO mode, deal with empty geometries as if there
were null (11419)
* writing: in SPATIAL_INDEX=NO mode, accept creating a file without features

GeoJSON(-like) drivers:
* combine value of GDAL_HTTP_HEADERS with Accept header that the driver set
(11385)

GeoJSON driver:
* do not generate an empty layer name when reading from /vsistdin/ (11484)

GML driver:
* add support for AIXM ElevatedCurve (4600, 11425)
* honour SWAP_COORDINATES=YES even when the geometry has no SRS (11491)
* gml:CircleByCenterPoint: correctly take into account radius.uom for projected CRS

GPKG driver:
* make CreateCopy() work on vector datasets (11282)
* make sure gpkg_ogr_contents.feature_count = 0 on a newly created empty table
(11274)
* fix FID vs field of same name consistency check when field is not set (11527)

LVBAG driver:
* only run IsValid() if bFixInvalidData

MapInfo driver
* .tab: support .dbf files with deleted columns (11173)

MVT driver:
* emit warning when the maximum tile size or feature count is reached and the
user didn't explicitly set MAX_SIZE or MAX_FEATURES layer creation options
(11408)

OpenFileGDB driver:
* be robust to unusual .gdbindexes files with weird/corrupted/not-understood
entries (11295)

Parquet driver:
* writer: write page indexes

PG driver:
* avoid error when the original search_path contains something like '"",
something_else' (11386)

OGR VRT:
* fix SrcRegion.clip at OGRVRTLayer level (11519)
* accept SrcRegion value to be any geometry type as well as SetSpatialFilter()
(11518)

Python bindings

* add a colorInterpretation argument to gdal.Translate() and fixes a copy&paste
issue in the similar argument of gdal.TileIndex()
* swig/python/setup.py.in: fix exception when building a RC git tag

Java bindings

* add byte[] org.gdal.gdal.GetMemFileBuffer(String filename) (11192)
* avoid double free when calling Dataset.Close() (11566)

GDAL/OGR 3.10.0 Release Notes

GDAL/OGR 3.10.0 is a feature release.
Those notes include changes since GDAL 3.9.0, but not already included in a
GDAL 3.9.x bugfix release.

In a nutshell...

* [RFC 101](https://gdal.org/en/latest/development/rfc/rfc101_raster_dataset_threadsafety.html):
Raster dataset read-only thread-safety
* New read/write [AVIF](https://gdal.org/en/latest/drivers/raster/avif.html)
raster driver
* New read-only [SNAP_TIFF](https://gdal.org/en/latest/drivers/raster/snap_tiff.html)
raster driver for Sentinel Application Processing GeoTIFF files
* New OGR read-only [XODR](https://gdal.org/en/latest/drivers/vector/xodr.html)
driver for OpenDRIVE (9504)
* Code linting and security fixes
* Bump of shared lib major version

New optional dependencies

* [libavif](https://github.com/AOMediaCodec/libavif) for AVIF driver
* [libopendrive](https://github.com/DLR-TS/libOpenDRIVE) for XODR driver

Backward compatibility issues

See [MIGRATION_GUIDE.TXT](https://github.com/OSGeo/gdal/blob/release/3.10/MIGRATION_GUIDE.TXT)

Build

* add html, man, latexpdf, doxygen, doxygen_check_warnings, clean_doc targets
(require doc/ subdirectory to be re-added) (5484)
* Java and CSharp bindings: do not build sample/tests programs if
BUILD_TESTING=OFF (9857)
* Allow following drivers to be built in new -DSTANDALONE=ON mode: MrSID,
JP2KAK, OCI, Arrow, Parquet, JP2OPENJPEG, TileDB, ECW, GeoRaster
* Internal zlib: update to 1.3.1
* Internal libpng: update to 1.6.43
* Add scripts/check_binaries.py to detect unknown binaries and run it in CI

General changes

* Reduce excessive precision %.18g to %.17g
* Replace MIT license long text with 'SPDX-License-Identifier: MIT' (10903)

3.10.0

Core

* OGRSQL and SQLite dialect: add STDDEV_POP() and STDDEV_SAMP() aggregate functions
* SQL SQLite dialect: fix translation of "x IN (NULL)" with "recent"
(at least > 3.31.1) versions of SQLite3
* OGRSQL: fix compliance of NOT and IN operators regarding NULL values
* OGRSQL: SQL expression tree to string: add missing parenthesis that could make
further evaluation of operator priority wrong
* OGRSQL: add SELECT expression [AS] OGR_STYLE HIDDEN to be able to specify
feature style string without generating a visible column (10259)
* OGRSQL: use Kahan-Babuska-Neumaier algorithm for accurate SUM()
* OGRSQL: avoid going through string serialization for MIN(), MAX(), SUM(),
AVG() on numeric fields
* OGRSQL: do not query geometry column(s) when not needed
* SQLite SQL dialect: add MEDIAN, PERCENTILE, PERCENTILE_CONT and MODE
ordered-set aggregate functions
* SQLite/GPKG: extend gdal_get_pixel_value()/gdal_get_layer_pixel_value()
to support an interpolation method
* SQLite/GPKG: Add ST_Length(geom, use_ellipsoid)
* GetNextArrowArray() generic implementation: avoid calling
VSI_MALLOC_ALIGNED_AUTO_VERBOSE() with a zero size
* Arrow reading: generic code path (as used by GeoJSON): fix mis-handling of
timezones
* OGRFeature: optimizations while accessing field count
* OGRFeature: SetXXX() methods: more informative warning messages reporting
field name and value for out-of-range values
* Add OGRGeometry::BufferEx() method
* Add OGRGeometry::hasEmptyParts()/removeEmptyParts()
* Add OGRCurve::reversePoints(), and deprecated OGRLinearRing::reverseWindingOrder()
* Add OGRGeometryCollection::stealGeometry()
* Add OGR_G_GeodesicLength() and OGRCurve/OGRSurface/OGRGeometryCollection::get_GeodesicLength()
* make OGR_G_GetLength() work on surfaces, suming the length of their
exterior and interior rings.
* OGR geometry classes: add a bool return type for methods that can fail
* OGR geometry classes: mark default constructors directly in .h and removed
useless overridden destructor for better code generation
* MakeValid(METHOD=STRUCTURE): make sure to return a MULTIPOLYGON if input is
MULTIPOLYGON (10819)
* GML geometry reader: add support for gml:OrientableCurve (10301)
* GenSQL layer: implement OLCFastGetArrowStream when underlying layer does and
for very simple SQL statements
* WKT geometry importer: accept (non conformant) PointZ/PointZM without space as
generated by current QGIS versions
* OGRLineString::SetPoint(): avoid int overflow if passing iPoint = INT_MAX
* OGRCurveCollection::addCurveDirectly(): avoid int overflow if adding to a
already huge collection
* OGRGeometryCollection::addGeometryDirectly(): avoid int overflow if adding to
a already huge collection
* OGRGeometryFactory::transformWithOptions(): in WRAPDATELINE=YES mode, return a
multi polygon if a input multi polygon has been provided (10686)
* OGRGeometryFactory::transformWithOptions(): deal with polar or anti-meridian
discontinuities when going from projected to (any) geographic CRS
* OGRProjCT::TransformWithErrorCodes(): speed-up by avoiding OSRGetProjTLSContext()
when possible
* Add OGRWKBTransform() for in-place coordinate transformation of WKB geometries
* OGR_GreatCircle_ API: do not hardcode Earth radius
* ogr_core.h: suppress warning when building with -Wpedantic for C < 23 (2322)

OGRSpatialReference

* OGRSpatialReference::FindMatches(): improve when input SRS doesn't have
expected axis order
* OGRSpatialReference::EPSGTreatsAsLatLong()/EPSGTreatsAsNorthingEasting():
remove the check on the EPSG authority
* Add OSRGetAuthorityListFromDatabase() to get the list of CRS authorities used
in the PROJ database.

Utilities

* ogr2ogr: add -skipinvalid to skip features whose geometry is not valid w.r.t
Simple Features
* ogr2ogr: error out if WKT argument of -clipsrc/-clipdst is an invalid geometry
(10289)
* ogr2ogr: speed-up -clipsrc/-clipdst by avoiding GEOS when possible
* ogr2ogr: speed-up -t_srs in Arrow code path using multi-threaded coordinate
transformation
* ogr2ogr: optim: call GetArrowStream() only once on source layer when using
Arrow interface
* ogr2ogr: fix -explodecollections on empty geometries (11067)
* validate_gpkg.py: make it robust to CURRENT_TIMESTAMP instead of 'now'

Vector drivers

Multi-driver changes:
* Arrow, CSV, ESRIJSON, JSONFG, GeoJSON, GeoJSONSeq, GML, GTFS, LVBAG, NAS,
OAPIF, TopoJSON:
relax identificationchecks when papszAllowedDrivers[] contains only the
driver name
* GeoJSON like driver: avoid fetching unrecognized HTTP dataset more than once

Arrow ecosystem:
* Arrow/Parquet/generic arrow: add write support for arrow.json extension
* Add a Arrow VSI file system (for libarrow >= 16.0) allowing to use GDAL
VSI file systems as libarrow compatible file systems.
* Add (minimum) support for libarrow 18.0.0

Arrow driver
* add read support for StringView and BinaryView (but not in OGR generic Arrow
code)
* use recommended item names for GeoArrow [multi]line, [multi]polygon, multipoint

CSV driver:
* error out if invalid/inconsistent value for GEOMETRY layer creation option
(10055)
* allow inf, -inf and nan as numeric values
* emit warning when reading invalid WKT (10496)

CSW driver:
* make it buildable as plugin

DGN driver:
* add ENCODING open option and creation option (10630)

DXF driver:
* add a DXF_CLOSED_LINE_AS_POLYGON=YES/NO configuration option (10153)

ESRIJSON driver:
* make it able to parse response of some CadastralSpecialServices APIs (9996)
* use 'alias' field member to set OGR alternative field name

FileGDB/OpenFileGDB drivers:
* update (and unify) list of reserved keywords that can't be used for column
and table names (11094)

JSONFG driver:
* avoid Polyhedron/Prism geometry instantiation during initial scan

GeoJSON driver:
* make it (and companion TopoJSON, ESRIJSON, GeoJSONSeq) optional (but must be
explicitly disabled) and buildable as plugin
* avoid false-positive identification as TopoJSON

GeoJSONSeq driver:
* add a WRITE_BBOX layer creation option

GML driver:
* XSD parser: fix to resolve schema imports using open option USE_SCHEMA_IMPORT
(10500)
* make it buildable as plugin if NAS driver is explicitly disabled
* add a GML_DOWNLOAD_SCHEMA config option matching the DOWNLOAD_SCHEMA open
option (and deprecate undocumented GML_DOWNLOAD_WFS_SCHEMA)

GPKG driver:
* prevent from creating field with same name, or with the name of the geometry
field
* CreateField(): check we are not reaching the max number of fields
* SQLite/GPKG: turn on SQLite 'PRAGMA secure_delete=1' by default

HANA driver:
* Add support for REAL_VECTOR type (10499)
* Add support for fast extent estimation (10543)

KML driver:
* make it optional and buildable as plugin
* writer: generate a Placemark id

LIBKML driver:
* writer: validate longitude, latitude to be in range (10483)
* writer: set name of NetworkLink from NAME layer creation option (10507)
* writer: dump feature when its geometry cannot be written (10829)
* on reading of directory KML datasets, don't consider the root doc.kml as a layer

MapInfo driver:
* make it optional and buildable as plugin
* implement read/write support for MapInfo logical type to OGR OFSTBoolean
* Add UTF-8 encoding
* Disable table fields "laundering" for non-neutral charset
* Add 'STRICT_FIELDS_NAME_LAUNDERING' creation option
* better deal with EPSG:3301 'Estonian Coordinate System of 1997'

Miramon driver:
* various memory leak fixes on corrupted datasets
* fix a case of mutirecord (lists) in some fields (11148)

OAPIF driver:
* combine CURL error message and data payload (when it exists) to form error
message (10653)
* make it buildable as plugin (independently of WFS driver)
* add a DATETIME open option (10909)

OCI driver:
* OCI: use TIMESTAMP(3) and tweak NLS_TIME[STAMP][_TZ]_FORMAT to accept
milliseconds (11057)

ODBC driver:
* add GDAL_DMD_LONGNAME

OpenFileGDB driver:
* add partial read-only support for tables with 64-bit ObjectIDs
* more informative warning message when opening a dataset with a .cdf file and
FileGDB driver isn't there
* error out explicitly when attempting to create an index on multiple columns

OSM driver:
* add a \[general\] section at top of osmconf.ini to make it INI compliant (and
Python's configparser friendly)
* actually reserve memory for /vsimem/ temp files

Parquet driver:
* dataset (multi-file typically) mode: enable use of bounding box columns
for spatial filter; optimize spatial filtering
* dataset mode: implement SetIgnoredFields() and SetAttributeFilter()
* dataset mode: detect bbox geometry column when opening current Overture Maps
* dataset mode: make sure all files are closed before closing the GDALDataset

PDF driver:
* reader: fixes to handle recursive resources, /OC property attached to a
XObjet and an empty UTF-16 layer name (11034)

PostgreSQL driver:
* OGR_PG_SKIP_CONFLICTS: optionally insert with ON CONFLICT DO NOTHING (10156)
* avoid error when the original search_path is empty

Shapefile driver:
* make it optional (but must be explicitly disabled) and buildable as plugin
* Shapelib: resync'ed with upstream

SQLite driver:
* run deferred table creation before StartTransaction
* avoid some potential O(n^2) issues with n=field_count

TileDB driver:
* use GEOM_WKB type when creating geometry columns with TileDB >= 2.21

VRT driver:
* OGRWarpedVRT: use faster SetFrom() implementation (10765)
* UnionLayer: avoid some potential O(n^2) issues with n=field_count

WFS driver:
* make it buildable as plugin

SWIG bindings

* Python/Java: replace sprintf() with snprintf() to avoid warnings on OSX
* fix memleak in gdal.GetConfigOptions()

Python bindings

* generate launcher shell/bat scripts for Python scripts in /swig/python/bin
* make GetStatistics() and ComputeStatistics() return None in case of error (10462)
* Make ogr.DataSource a synonym of gdal.Dataset
* Remove ogr.Driver
* do not emit warnings about not having used UseExceptions() if run under
gdal.ExceptionMgr()
* avoid gdal.ExceptionMgr() to re-throw a GDAL exception already caught under it
* avoid exception emitted and caught under gdal.ExceptionMgr() to cause later issues
* Python scripts: use local exception manager, instead of global UseExceptions()
* check validity of GDALAccess flag passed to gdal.Open()
* make MDArray.Write(array_of_strings) work with a 0-d string variable
* Avoid linear scan in gdal_array.NumericTypeCodeToGDALTypeCode (10694)
* Dataset.Close(): invalidate children before closing dataset
* __init__.py: remove calls to warnings.simplefilter() (11140)
* fix compatibility issue with SWIG 4.3.0 and PYTHONWARNINGS=error

Java bindings

* Make sure a valid UTF-8 string is passed to NewStringUTF()
* OGR module: add various xxxxAsByteArray() method that return a byte[] when
content is not UTF-8 (10521, 10630)

GDAL/OGR 3.9.3 Release Notes

GDAL 3.9.3 is a bugfix release.

Build

* Java bindings: remove unneeded dependency on Java AWT
* Use the right header for std::endian cpl_conv.cpp (C++20 compilation)
* Fix build failure with upstream netcdf caused by _FillValue macro renaming

Page 2 of 7

© 2025 Safety CLI Cybersecurity Inc. All Rights Reserved.