Gdal

Latest version: v3.10.2

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

Scan your dependencies

Page 3 of 7

3.9.3

Core

* Make OGRSFDriver::TestCapability(ODrCCreateDataSource) work with
defered-loaded drivers (10783)
* MEM layer: fix UpdateFeature() that didn't mark the layer as updated,
which caused GeoJSON files to not be updated (qgis/QGIS57736)

Vector drivers

FlatGeobuf driver:
* Fix reading of conformant single-part MultiLineString (10774)

GeoPackage driver:
* OGR_GPKG_FillArrowArray_Step(): more rigorous locking

GMLAS driver:
* make it robust to XML billion laugh attack

JSONFG driver:
* accept coordRefSys starting with https://www.opengis.net/def/crs/

NAS driver:
* make it robust to XML billion laugh attack

OpenFileGDB driver:
* add missing GetIndexCount() in FileGDBTable::CreateIndex
* fix writing a Int32 field with value -21121
* exclude straight line segments when parsing arcs (10763)

Parquet driver:
* fix crash when using SetIgnoredFields() + SetSpatialFilter() on
GEOMETRY_ENCODING=GEOARROW layers with a covering bounding box
(qgis/QGIS58086)

PostgreSQL/PGDump drivers:
* properly truncates identifiers exactly of 64 characters (10907)

PostgreSQL driver:
* ensure current user has superuser privilege beore attemption to create
event trigger for metadata table (10925)

Shapefile driver:
* Add new shapelib API functions to the symbol rename header

SQLite/GPKG drivers:
* fix potential double-free issue when concurrently closing datasets when
Spatialite is available

Python bindings

* Silence SWIG 'detected a memory leak' message (4907)
* fix passing a dict value to the transformerOptions argument of gdal.Warp()
(10919)

GDAL/OGR 3.9.2 Release Notes

GDAL 3.9.2 is a bugfix release.

Build

* Fix compilation against openssl-libs-3.2.2-3 of fedora:rawhide
* Fix compilation against libarchive-3.3.3-5 as shipped by RHEL 8 (10428)
* Fix -Wnull-dereference warnings of gcc 14.2

3.9.2

Not secure
Core

* WKT geometry importer: accept (non conformant) PointZ/PointZM without space as
generated by current QGIS versions
* OGR SQL: do not make backslash a special character inside single-quoted
strings, to improve compliance with SQL92 (10416)
* OGRSQL: return in error when 'Did not find end-of-string character' is emitted
(10515)

OGRSpatialReference

* EPSGTreatsAsNorthingEasting(): make it work correctly with compound CRS

Vector drivers

GeoJSON driver:
* writer: make sure geometry is reprojected even when it is invalid after
coordinate rounding (3.9.0 regression) (qgis/QGIS58169)

GML driver:
* writer: fix missing SRS in Featurecollection's boundedBy element (3.9.1
regression) (10332)

GMLAS driver:
* avoid crash on a OSSFuzz generated xsd (ossfuzz70511)

GTFS:
* fix error when applying an attribute filter on a field whose advertized data
type is not string (duckdb/duckdb_spatial343)

JSONFG driver:
* fix reading non-FeatureCollection documents larger than 6,000 bytes (10525)

LIBKML driver:
* fix writing a .kmz to cloud storage (10313)
* fix LIBKML_RESOLVE_STYLE=YES when reading a KML file with dataset-level
styles (3.9.1 regression) (qgis/qgis58208)
* fix reading/writing style URL in KMZ files (10478)

MiraMonVector driver:
* fix oss-fuzz70860

OAPIF driver:
* fix resolving of relative links (10410)

OpenFileGDB driver:
* fix attribute filter when an equality comparison is involved with a field
with an index created with a LOWER(field_name) expression (10345)

OSM driver:
* avoid creating /vsimem/osm_importer directory (10566)

PG driver:
* fix ogr2ogr scenarios to PostgreSQL when there are several input layer names
like schema_name.layer_name (3.9.0 regression)
* fix support for geometry/geography OID in range between 2^31 and 2^32 (10486)

PG/PGDump drivers:
* make sure spatial index name is unique, even if several tables have a long
enough prefix (10522, 7629)

Shapefile driver:
* fix recognizing an empty string as a NULL date (10405)
* fix off-by-one write heap buffer overflow when deleting exactly 128, 232,
etc. features and repacking (10451)

XLSX driver:
* support documents whose XML elements have a prefix (duckdb
/duckdb_spatial362)

Python bindings

* fix typos in gdal.Footprint() help message
* make MDArray.Write(array_of_strings) work with a 0-d string variable

GDAL/OGR 3.9.1 Release Notes

GDAL 3.9.1 is a bugfix release.

Build

* PDF: fix build with PoDoFo >= 0.10 with C++20 compilation (9875)
* PDF: fix build against PoDoFo with MSYS2 UCRT64 and CLANG64 (9976)
* Fix compiler errors in C++20 and C++23 modes
* Fix compiler warnings with gcc 14
* CMake: add infrastructure so we can build plugins that can be loaded against
a libgdal that has been without any support for them.
Note: this is an ABI break for in-tree drivers, with deferred loading capability, when built as plugin. That is such a driver built against
GDAL 3.9.0 won't be able to be loaded by GDAL 3.9.1.

3.9.1

Not secure
Core

* OGRSQL: validate column name in COUNT(field_name) and error out if it
doesn't exist (9972)
* OGR SQL: fix crash when the ON expression of a JOIN contains OGR special
fields (in particular feature id)
* OGR layer algebra: honour PROMOTE_TO_MULTI=YES for Points
* OGRFeature::SetField(int, double): avoid UndefinedBehavior when passing NaN
* OGRFeature::SetField(int, GIntBig): avoid UndefinedBehavior when passing value
close to INT64_MAX
* OGRLayer::WriteArrowBatch(): avoid UndefinedBehavior when trying to convert
NaN to Int64

OGRSpatialReference

* importFromESRI() Arc/Info 7 .prj: fix importing LAMBERT_AZIMUTHAL with a
'radius of the sphere of reference'
* workaround bug of PROJ < 9.5 regarding wrong conversion id for UTM south
* importFromUSGS(): use plain WGS84 datum with WGS84 ellipsoid, and identify
EPSG code

Vector utilities

* ogrinfo: fix error message when not specifying a filename
* ogrinfo text output: avoid weird truncation of coordinate epoch when
its value is {year}.0
* ogr2ogr: do not call CreateLayer() with a geom field defn of type wkbNone
(10071)
* ogr2ogr: error out if GCP transform creation fails (10073)

Vector drivers

AVCBin driver:
* avoid integer overflow (ossfuzz 68814)

DXF driver:
* avoid slight numeric imprecision with closed lwpolyline and arcs (10153)

ESRIJSON driver:
* do not set width on DateTime field
* fix paging when URL contains f=pjson instead of f=json (10094)

FileGDB driver:
* be robust to be called with a geometry field definition of type wkbNone
(10071)

FlatGeoBuf driver:
* more explicit error message in case of feature geometry type != layer
geometry type (9893)

GeoJSON driver:
* do not recognize GeoJSON files with a featureType feature property as JSONFG
(9946)
* make it possible with -if/papszAllowedDrivers to force opening a JSONFG file
with the GeoJSON driver
* implement IUpdateFeature() that was broken up to now
* declare missing capabilities DELETE_FIELD, REORDER_FIELDS,
ALTER_FIELD_DEFN_FLAGS

GML driver:
* fix memory leak due do xlink:href substitution in a non-nominal case
(ossfuzz 68850)
* GML_SKIP_RESOLVE_ELEMS=HUGE: keep gml:id in .resolved.gml file
* avoid assertion due to trying to load existing .gfs file after reading
.resolved.gml (10015)
* fix issue with nested elements with identical names in
GML_SKIP_RESOLVE_ELEMS=HUGE mode (10015)
* make sure SRS is detected when using GML_SKIP_RESOLVE_ELEMS=HUGE on a AIXM
file, otherwise GML_SWAP_COORDINATES might not work correctly

JSONFG driver:
* dataset identification: recognize more JSON-FG specification version

LIBKML driver:
* fix handling of styleUrl element referencing to an external document (9975)
* fix performance issue when writing large files (10138)

MiraMonVector driver:
* adding which polygon cycles the linestring in the linestring metadata information (9885)
* Adding more matches in the look-up table MM_m_idofic.csv
* Fixing error in linestring (from not polygon) metadata file
* Robustness fixes (ossfuzz 68809)
* fix a case of sensitive comparison
* fix MMResetFeatureRecord
* fix accepted metadata versions/subversions

MapInfo:
* .tab: AlterFieldDefn(): fix data corruption when altering (for example
renaming) a Integer/Float32 field of size 4 (or Integer64/Float64 field of
size 8
* avoid potential double-free (ossfuzz69332, ossfuzz69334)

netCDF driver:
* writer: use CF-1.8 with FORMAT=NC4 and GEOMETRY_ENCODING=WKT

ODS driver:
* implement IUpdateFeature() that was broken up to now
* declare missing capabilities DELETE_FIELD, REORDER_FIELDS,
ALTER_FIELD_DEFN_FLAGS
* fix CreateFeature() implementation when a FID is set

OpenFileGDB driver:
* writer: .gdbtable header must be rewritten when updating an existing feature
at the end of file (otherwise resulting file might not be readable by
Esri software)
* detect and try to repair corruption of .gdbtable header related to above item
* BuildSRS(): do not use CPLErrorReset()

Parquet driver:
* GeoParquet: always write version=1.1.0

PDF driver:
* fix wrong order of matrix multiplication for 'cm' operator... (9870)
* make ExploreContentsNonStructured() be able to parse OGCs as generated
by ArcGIS 12.9 (fixes 9870)
* just ignore unknown objects referenced by /Do (9870)

PMTiles driver:
* writer: fix crash in ogr2ogr (or Arrow based workflows) from GeoPackage/
GeoParquet to PMTiles (10199)

PG driver:
* avoid errors related to ogr_system_tables.metadata when user has not enough
permissions (9994)
* really honor OGR_PG_ENABLE_METADATA=NO in SerializeMetadata()

SQLite/GPKG drivers
* detect UNIQUE constraints expressed as a ', CONSTRAINT name UNIQUE (column_name)'
at the end of CREATE TABLE (qgis/QGIS57823)

XLSX driver:
* implement IUpdateFeature() that was broken up to now
* declare missing capabilities DELETE_FIELD, REORDER_FIELDS,
ALTER_FIELD_DEFN_FLAGS
* fix CreateFeature() implementation when a FID is set

Python bindings

* do not emit warnings about not having used [Dont]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
* Avoid crash when using orphaned subgeometry (9920)
* make them compatible of SWIG 4.3.0dev


GDAL/OGR 3.9.0 Releases Notes

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

In a nutshell...

* [RFC 96](https://gdal.org/development/rfc/rfc96_deferred_plugin_loading.html):
Deferred C++ plugin loading
* [RFC 97](https://gdal.org/development/rfc/rfc97_feature_and_fielddefn_sealing.html):
OGRFeatureDefn, OGRFieldDefn and OGRGeomFieldDefn "sealing"
* [RFC 98](https://gdal.org/development/rfc/rfc98_build_requirements_gdal_3_9.html):
Build requirements for GDAL 3.9
* [RFC 99](https://gdal.org/development/rfc/rfc99_geometry_coordinate_precision.html):
Geometry coordinate precision
* Add [S104](https://gdal.org/drivers/raster/s104.html) (Water Level Information
for Surface Navigation Product) and
[S111](https://gdal.org/drivers/raster/s111.html) (Surface Currents Product)
raster read-only drivers (required libhdf5)
* Add raster [GTI](https://gdal.org/drivers/raster/gti.html) (GDAL Raster Tile
Index) driver to support catalogs with huge number of sources.
* Add vector [MiraMonVector](https://gdal.org/drivers/vector/miramon.html)
read/creation driver (9688)
* Deprecated ARG driver has been removed (7920)
* Code linting

Build

* CMake: add ``[GDAL|OGR]_REGISTER_DRIVER_<driver_name>_FOR_LATER_PLUGIN``
variables (RFC 96)
* CMake: Bump max compatible version to 3.28
* CMake: add a way of defining an external deferred driver by setting one or
several ADD_EXTERNAL_DEFERRED_PLUGIN_XXX CMake variables (RFC 96)
* CMake: error out if a driver has been asked as a plugin, but conditions are not met
* CMake: rework PROJ detection
* CMAKE_UNITY_BUILD=YES builds are possible, but not recommended for production
* gdal.cmake: set -DDEBUG for CMAKE_BUILD_TYPE=Debug for Windows builds as well
* CMake: add GDAL_FIND_PACKAGE_OpenJPEG_MODE and GDAL_FIND_PACKAGE_PROJ_MODE
variables
* FindSQLite3.cmake: avoid repeating finding `SQLite3_INCLUDE_DIR`/
`SQLite3_LIBRARY` if existed.
* Add compatibility for Intel Compiler 2024.0.2.29

Backward compatibility issues

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

Changes in installed files

* data/MM_m_idofic.csv: new
* data/gdalvrtti.xsd: new
* data/pci_datum.txt and data/pci_ellips.txt: updated (8034)
* include/cpl_minizip_ioapi.h, cpl_minizip_unzip.h, cpl_minizip_zip.h:
removed. They use since 3.5 an header that is not installed, so were unusable

3.9.0

Not secure
Port

* /vsicurl: add ANYSAFE & BEARER to auth methods (8683)
* /vsicurl/: re-emit HTTP error code next times we try opening a resource that
failed the first time (8922)
* /vsicurl/: add a VSICURL_PC_URL_SIGNING path-specific option to enable
Planetary Computer URL signing only on some URLs
* /vsicurl/: Read(): emit error message when receiving HTTP 416 Range Not
Satisfiable error
* Add VSIVirtualHandle::GetAdviseReadTotalBytesLimit()
* cpl_http: retry "Connection reset by peer"
* Add a VSICURLMultiCleanup() that runs with SIGPIPE ignored (9677)
* /vsiaz/: fix RmdirRecursive() on an empty directory with just the
.gdal_marker_for_dir special marker file
* /vsis3/: include region to build s3.{region}.amazonaws.com host name (9449)
* /vsigs/: fix RmdirRecursive() on an empty directory
* /vsigs/ UnlinkBatch(): make sure that path config options are checked for the
deleted files and not '/vsigs/batch/
* /vsiaz/ UnlinkBatch(): make sure that path config options are checked for the deleted files
* Add VSIVirtualHandle::Printf()
* Add VSIRemovePluginHandler() to enable removal of virtual filesystems (8772)
* No longer alias CPLMutex, CPLCond and CPLJoinableThread to void in non-DEBUG
builds (ABI change)
* Win32 extended filenames (starting with "\\?\"): various fixes; add support
for network UNC paths
* Add VSIGetDirectorySeparator() to return the directory separator for the
specified path
* Add CPLXMLNodeGetRAMUsageEstimate()
* CPLCreateOrAcquireMutexEx(): fix warning about lock-order inversion (1108)
* Win32 Stat(VSI_STAT_EXISTS_FLAG): improve performance (3139)
* Add CPLDebugProgress() to display a debugging message indicating a progression
* CSLConstList/CPLStringList: add iterating facilities and better
``std::vector<std::string>`` operability
* Add CPLStringList::front(), back() and clear()
* Add CPLStrtodM()
* CPLStrtod(): set errno=0 when no value has been parsed to conform to POSIX
* Add CPLUTF8ForceToASCII()
* VSICACHE: avoid EOF read (9669)

Core

* GDALRATValuesIOAsString(): fix wrong type for papszStrList argument
* Add GDALDataset::DropCache() (8938)
* Add GDALDataset::UnMarkSuppressOnClose() and IsMarkSuppressOnClose() (8980)
* Add GDALGetOutputDriversForDatasetName()
* Modify the logic of selection of overviews for non-nearest resampling; add a
GDAL_OVERVIEW_OVERSAMPLING_THRESHOLD config option (9040)
* GDALMDArray::AsClassicDataset(): make it possible to use overviews
* GDALOpen(): change error message when a dataset isn't recognized (9009)
* GDALDeserializeGCPListFromXML(): validate value of GCP Pixel,Line,X,Y,Z
attributes
* PAM: only unset GPF_DIRTY flag
* GDALGetCacheMax64(): fix warning about lock-order inversion (1837)
* Add gdal::GCP class
* QuietDeleteForCreateCopy(): forward source dataset open options (9422)

Multidimensional API

* Add GDALCreateRasterAttributeTableFromMDArrays() to return a virtual Raster
Attribute Table from several GDALMDArray's
* fix wrong DataAxisToSRSAxisMapping
* GDALMDArray::AsClassicDataset(): make it possible to use overviews

Algorithms

* Implement basic Line-of-sight algorithm (9506, 9050)
* Warper: fix artifacts when reprojecting from long/lat to ortho (9056)
* GDALSuggestedWarpOutput2(): ortho->long/lat: limit extent to
[lon_0-90,lon_0+90] even when poles are included
* Warper: limit artifacts when doing ortho->long/lat (provided that srcNodata is
set)
* GDALSuggestWarpOutput(): make it return original potential non-square pixel
shape for a south-up oriented dataset (9336)
* Warper: add a EXCLUDED_VALUES warping option to specify pixel values to be
ignored as contributing source pixels during average resampling. And
similarly, add a NODATA_VALUES_PCT_THRESHOLD warping option for nodata/
transparent pixels.
* GDALFillNodata(): add a INTERPOLATION=NEAREST option
* GDALChecksumImage(): read by multiple of blocks for floating-point bands to
improve performance

Utilities

* Add GDALArgumentParser class to extend p-ranav/argparse framework
* Use GDALArgumentParser for: gdaladdo, gdalinfo, gdal_translate, gdalwarp,
gdal_grid, gdal_viewshed, gdalbuildvrt, nearblack, ogrinfo, ogr2ogr, sozip
* Add support for ``--config <key>=<value>`` syntax
* gdaladdo: reuse previous resampling method (from GTiff RESAMPLING metadata
item) if not specifying -r and overview levels if not specifying them
* gdaladdo: make --partial-refresh-from-source-timestamp work on GTI datasets
* gdal_contour: fix lowest min value in polygonize mode (9710)
* gdalbuildvrt: add a -nodata_max_mask_threshold option
* gdal_create: copy GCPs present in the input file
* gdal_edit: add -a_coord_epoch option
* gdal_footprint: fix -split_polys and -convex_hull to not consume the argument
specified just after them
* gdal_footprint: write source dataset path in a 'location' field (8795)
* gdal_grid: error out on in invalid layer name, SQL statement or failed where
condition (9406)
* gdallocationinfo: make it output extra content at end of input line, and
add -E echo mode, and -field_sep option (9411)
* gdalmdimtranslate: add -arrayoptions
* gdalinfo: do not call GDALGetFileList() if -nofl is specified (9243)
* gdal_translate: add -dmo option, for domain-metadata items (8935)
* gdal_translate -expand rgb[a]: automatically select Byte output data type if
not specified and color table compatible of it (9402)
* gdaltransform: make it output extra content at end of input line, and add
-E echo mode, and -field_sep option (9411)
* gdalmanage: make --utility_version work
* gdal_polygonize.py: handle error if creation of destination fails
* gdal_viewshed: add support for south-up source datasets (9432)
* gdalwarp: progress bar tunings
* gdalwarp: emit error message when transformation isn't inversible (9149)
* gdalwarp: fix performance issue when warping to COG (9416)
* gdalwarp: make target resolution independent from source extent when -te is
specified (9573)
* allow passing a WKT geometry as -cutline value, and add -cutline_srs (7658)
* sozip: support generic command line options
* --formats option: append list of extensions (8958)
* Make gdaltindex a C callable function: GDALTileIndex()
* gdaltindex: add -overwrite, -vrtti_filename, -tr, -te, -ot, -bandcount,
-nodata, -colorinterp, -mask, -mo, -recursive, -filename_filter,
-min_pixel_size, -max_pixel_size, -fetch_md, -lco options
* gdal2tiles: added support for JPEG output
* gdal2tiles: Fix case where --exclude still writes fully transparent tiles
(9532)
* gdal2tiles: add --excluded-values, --excluded-values-pct-threshold and
--nodata-values-pct-threshold options
* gdal2tiles: support an input dataset name not being a file (9808)
* gdal2xyz: Change -srcwin parameter type to integer.
* Python sample scripts: add gdalbuildvrtofvrt.py (9451)
* Python utilities: do not display full traceback on OpenDS failures (9534)
* gdalinfo: suggest trying ogrinfo if appropriate, and vice-versa
* gdalinfo and ogrinfo -json: add newline character at end of JSON output

Raster drivers

Updates affecting multiple drivers:
* All drivers depending on external libraries that can be built as plugins
have been updated to implement RFC 96 deferred plugin loading
* Drivers that can now be built as plugins if using external libraries and
not vendored/internal libraries: GIF, JPEG, MRF, NITF, RAW drivers (as a
single plugin), PDS related drivers (as a single plugin)
* do not export GMLJP2 if the SRS isn't compatible (9223): JP2KAK, JP2ECW,
JP2Lura, JP2OPENJPEG

AAIGRID driver:
* fix reading file whose first value is nan (9666)

BAG driver:
* make sure to report a subdataset for the bathymetry coverage when we expose
one(s) for the georeferenced metadata

GeoPackage driver:
* support maximum level up to 29 or 30; add a ZOOM_LEVEL creation option

GTiff driver:
* Internal libtiff: resync with upstream
* Use (future) libtiff 4.6.1 TIFFOpenOptionsSetMaxSingleMemAlloc()
* add JXL_LOSSLESS_OVERVIEW, JXL_EFFORT_OVERVIEW, JXL_DISTANCE_OVERVIEW and
JXL_ALPHA_DISTANCE_OVERVIEW configuration options (8973)
* overviews: generalize saving resampling method in a RESAMPLING metadata item
* friendlier error message when attempting to create JXL compressed file with
unsupported type/bits_per_sample
* deal with issues with multi-band PlanarConfig=Contig, LERC and NaN values
(9530)
* make BuildOverviews() in update mode work when there is an external .msk file
* no longer condition CreateInternalMaskOverviews() behavior to
GDAL_TIFF_INTERNAL_MASK being unset or set to YES
* change default value of GDAL_TIFF_INTERNAL_MASK config option to YES
* multi-threaded decoding: fix potential mutex deadlock
* MultiThreadedRead(): make it take into account AdviseRead() limit to reduce
the number of I/O requests (9682)

HDF5 driver:
* multidim: fix crash on reading compound data type with fixed-length strings
* multidim: implement GDALMDArray::GetBlockSize() and GetStructuralInfo()
* improve performance of band IRasterIO() on hyperspectral products
* support HDF5EOS metadata where the GROUP=GridStructure has an empty sub
GROUP=Dimension (like for AMSR-E/AMSR2 Unified L3 Daily 12.5 km)
* implement GetOffset() and GetScale() for netCDF metadata items add_offset
and scale_factor

JP2KAK driver:
* make result of RasterIO() consistent depending if it is called directly or
through VRT, with non-nearest upsampling (8911)
* refactor how overviews work

JP2OpenJPEG driver:
* CreateCopy(): limit number of resolutions taking into account minimum block
width/height

JPEG driver:
* ReadXMPMetadata(): only stop looking for XMP marker at Start Of Scan
* ReadFLIRMetadata(): stop on Start-Of-Scan marker (speeds up opening large
remote JPEG files)
* CreateCopy(): emit warning/error message before progress bar (9441)

MRF driver:
* BuildOverviews: bail out when no overviews are needed
* emit warning when attempting to clean internal overviews (9145)
* Use ZSTD streaming API for compression: faster and better compression (9230)

netCDF driver:
* use the SRS (its geographic part) if found in the file, instead of the
hardcoded WGS84 string, for the GEOLOCATION.SRS metadata item (9526)
* Add BAND_NAMES creation option
* fix writing of metadata items whose value has an equal sign ["9702)

NITF driver:
* in xml:DES metadata domain field, expand content of XML_DATA_CONTENT DES as
XML in a <xml_content> sub-node of >field name=DESDATA> instead as a Base64
value
* fix undefined behavior when using NITFGetField() several times in the same
statement

OGCAPI driver:
* OGCAPI Maps: support image formats beyond PNG/JPG as well as enables content
negotiation. (9231, 9420)

PDF driver:
* correctly initialize PAM when opening a subdataset (specific page e.g.)
* PDFium backend: update to support (and require) PDFium/6309
* deal with the situation where a multipage PDF has layers with same name but
specific to some page(s)
* Fix build with Poppler 24.05

S102 driver:
* add support for spatial metadata of the QualityOfSurvey group
* read nodata value from dataset metadata

Sentinel2 driver:
* include 10m AOT and WVP bands in 10m subdataset (9066)

TileDB driver:
* Remove use of deprecated API, and bump minimum version to 2.15
* Added tiledb metadata fields to easily tag array type
* be able to read datasets converted with 'tiledb-cf netcdf-convert'
* make its identify() method more restrictive by not identifying /vsi file
systems it doesn't handle
* multidim: prevent infinite recursion when opening an array in a group where
there are 2 or more 2D+ arrays
* multidim: OpenMDArray(): fix opening an array, member of a group, which has
no explicit name

VRT driver:
* add a VRTProcessedDataset new mode to apply chained processing steps that
apply to several bands at the same time. Currently available algorithms:
LocalScaleOffset (for dehazing), BandAffineCombination, Trimming, LUT
* vrt:// connection: add a_nodata, sd_name, sd options
* add a NoDataFromMaskSource source: replaces the value of the source with
the value of the NODATA child element when the value of the mask band of
the source is less or equal to the MaskValueThreshold child element.
* VRT serialization: emit a warning if RAM usage of XML serialization reaches
80% of RAM (9212)
* VRTWarpedDataset: add an optimized IRasterIO() implementation

WMS driver:
* change logic to set gdalwmscache directory to honor in particular
XDG_CACHE_HOME (8987)
* Use GDAL_HTTP_TIMEOUT

Zarr driver:
* Add capability to read CRS from CF1 conventions

ZMap driver:
* support reading variant of format where there is no newline character at
end of column

OGR 3.9.0 - Overview of Changes

Core

* OGRSQL: Support SELECT * EXCLUDE(...)
* OGRSQL: add UTF-8 support for LIKE/ILIKE (for layers declaring
OLCStringsAsUTF8) (8835)
* Add OGRLayer::GetExtent3D() (8806)
* OGRLayer: Have CreateField/CreateGeomField take const OGRFieldDefn
/OGRGeomFieldDefn* argument (8741)
* OGRFeatureDefn, OGRFieldDefn, OGRGeomFieldDefn: add Seal() and Unseal()
methods
* Fix swq_select::Unparse()
* ExecuteSQL(): add a warning if the dialect name isn't recognized (8843)
* ExecuteSQL() with OGRSQL and SQLITE dialects: get OLCStringsAsUTF8 from
underlying layer (9648)
* ExecuteSQL() OGRSQL and SQLITE dialects: error out if SetSpatialFilter() fails
(9623)
* OGRGeometryFactory::forceTo(): make it honour dimensionality of eTargetType
(in particular fix POLYGON -> LINESTRING or POLYGON -> LINESTRINGZ) (9080)
* OGRGeometryCollection::importFromWkb(): fix reading corrupted wkb with mixed
2D and 3D geoms (9236)
* RFC99: Add C++ OGRGeomCoordinatePrecision class and corresponding C / SWIG API
* Change prototype of GDALDataset::ICreateLayer() to take a
``const OGRGeomCoordinatePrecision*``
* Add OGRGeometry::SetPrecision() / OGR_G_SetPrecision(), as wrapper of
GEOSGeom_setPrecision_r()
* Add a OGRGeometry::roundCoordinates() method
* OGRFeature: add SerializeToBinary() / DeserializeFromBinary()
* OGRFeature::SetField(): add warnings when detecting some lossy conversions (9792)
* Add OGR_G_GeodesicArea() / OGRSurface::get_GeodesicArea()
* SQLite SQL dialect: implement ST_Area(geom, use_ellipsoid)
* Add OGR_L_GetDataset() and implement GetDataset() in all drivers with creation
support
* Arrow array: fix decoding of ``date32[days]`` values before Epoch
(Arrow->OGRFeature), and fix rounding when encoding such values
(OGRFeature->Arrow) (9636)
* OGRLayer::WriteArrowBatch(): add tolerance for field type mismatches if int32/int64/real;
Also add an option IF_FIELD_NOT_PRESERVED=ERROR to error out when lossy conversion occurs. (9792)
* OGRLayer::SetIgnoredFields(): make it take a CSLConstList argument instead of
const char*

OGRSpatialReference

* Add OGRSpatialReference::exportToCF1() and importFromCF1()
* Add OSRIsDerivedProjected() / OGRSpatialReference::IsDerivedProjected()
* OGRCoordinateTransformation::Transform(): change nCount parameter to size_t
(C++ API only for now) (9074)
* OGRProjCT::TransformWithErrorCodes(): Improve performance of axis swapping
(9073)
* OSR_CT: fix ``SetDataAxisToSRSAxisMapping([-2, 1]) on target SRS
* exportToXML(): error out on unsupported projection method (9223)
* Add OSRSetFromUserInputEx() and map it to SWIG (9358)
* Add std::string OGRSpatialReference::exportToWkt(
const char* const* papszOptions = nullptr) const
* OGR_CT: use PROJJSON internally rather than in WKT:2019 (9732)

Utilities

* ogrinfo: add a -extent3D switch
* ogrinfo: output coordinate resolution in -json mode
* ogrinfo: add -limit option (3413)
* ogr2ogr: do not copy private layers (would for example break SQLite ->
SQLite/GPKG)
* ogr2ogr: force -preserve_fid when doing GPX to GPKG (9225)
* ogr2ogr: propagate input coordinate precision
* ogr2ogr: add options -xyRes, -zRes, -mRes and -unsetCoordPrecision
* ogr2ogr: make -select tokenize only on comma (and not on space), and honour
double-quoting (9613)
* Remove ogr2ogr.py sample utilities (gdal.VectorTranslate() is a more powerful
replacement)

Vector drivers

Updates affecting multiple drivers:
* Drivers updated for RFC 97 feature definition sealing: GPKG, Shape,
OpenFileGDB, MITAB, MEM, GeoJSON, JSONFG, TopoJSON, ESRIJSON, ODS, XLSX, PG
* Drivers updated for RFC99 geometry coordinate precision: GML, GeoJSON,
GeoJSONSeq, JSONFG, GPKG, CSV, OpenFileGDB, FileGDB, OGR VRT
* All drivers depending on external libraries that can be built as plugins
have been updated to implement RFC 96 deferred plugin loading
* GetExtent3D() implemented in Shapefile, Arrow, Parquet, PostgreSQL, GeoJSON,
GeoPackage drivers

OGR SQLite/SQLite/GPKG: add UTF-8 support for case-insensitive LIKE (8835)

Arrow/Parquet drivers:
* GetArrowSchema(): potential fix when there are ignored fields and the FID
column is not the first one
* Read/write support for GeoArrow (struct-based) encoding
* silently ignore column of type null in GetArrowSchema/GetArrowArray
* fix crash when reading geometries from a geometry column with a
pyarrow-registered extension type
* handle fields with a pyarrow-registered extension type
* preliminary/in-advance read support for future JSON Canonical Extension
* OGRCloneArrowArray(): add missing support for 'tss:' Arrow type

CSV driver:
* parse header with line breaks (9172)

DGN (v7) driver:
* emit explicit error when attempting to open a DGNv8 file and the DGNv8
driver is not available (9004)

FileGDB/OpenFileGDB drivers:
* fix co-operation between the 2 drivers to make sure .cdf is opened with
FileGDB

FileGDB driver:
* remove warning 'Empty Spatial Reference'

FlatGeobuf driver:
* add support for reading and writing layer title, description and metadata
* CreateFeature(): error out if a string context is not valid UTF-8 (7458)

GeoJSON driver:
* OGRGeoJSONDriverIdentify: return -1 when unsure
* writer: add FOREIGN_MEMBERS_FEATURE and FOREIGN_MEMBERS_COLLECTION layer
creation options
* reader: accept a {"type": "Polygon","coordinates": []} as a representation
of POLYGON EMPTY

GeoPackage driver:
* fixes to make most operations compatible with PRAGMA foreign_keys=1 (9135)
* writer: set Z/M columns of gpkg_geometry_columns when there are Z/M
geometries in a 2D declared layer
* Read relationships defined using foreign key constraints
* CreateFeature(): allow creating a feature with FID=0 (9225)
* Add DISCARD_COORD_LSB layer creation option
* map Null CRS to a new srs_id=99999, and add a SRID layer creation option
* add a LAUNDER=YES/NO layer creation option (default: NO)
* fix random error in threaded RTree creation, particularly on Mac M1 ARM64

GeoRaster driver:
* Added GENSTATS options, security fixes, and prevent failing when password is
near expiration (9290)

GML driver:
* writer: honour geometry field name and isnullable passed to ICreateLayer()

GMLAS driver:
* faster retrieval of GML and ISO schemas by using zip archives
* use CPLHTTPFetch() instead of /vsicurl_streaming/ to allow alternate HTTP
downloader (for QGIS 3.36 enhanced WFS provider)

LIBKML driver:
* improve generation of internal ids for layer names starting with digits
(9538)

netCDF driver:
* writer: make it more robust to empty geometries

OpenFileGDB driver:
* add support for Integer64, Date, Time and DateTimeWithOffset data types
added in ArcGIS Pro 3.2 (8862)
* writer: set xml shape type to "esriGeometryPolyline" for LineString/
MultiLineString (9033)

OSM driver:
* properly escape special characters with TAGS_FORMAT=JSON open option (9673)

Parquet driver:
* support reading and writing layer metadata
* Read/write support for covering.bbox struct columns for spatial
filtering, add SORT_BY_BBOX=YES/NO layer creation option (GeoParquet 1.1)
* Read/write support for GeoArrow (struct-based) encoding (GeoParquet 1.1)
* add more configuration options for Parquet dataset case, and default to using
custom I/O layer (9497)
* ogr2ogr/Parquet: add hack to avoid super lengthy processing when using -limit
with a Parquet dataset source (9497)
* make it recognize bbox field from Overture Maps 2024-01-17-alpha.0 and

3.8.5

Not secure
Core

* OGRGeometry::getCurveGeometry(): avoid failures when building some compound
curves with inferred circular strings (9382)
* OGRLayer::GetArrowSchema(): remove potential unaligned int32_t writes
* CreateFieldFromArrowSchema(): don't propagate native subtype if we have to
use a fallback main type

Vector drivers

Arrow/Parquet driver:
* fix inverted logic regarding spatial filtering of multipolygon with GeoArrow
interleaved encoding

FlatGeoBuf driver:
* Make sure vendored flatbuffers copy has a unique namespace
* implement OGRLayer::GetDataset() (9568)

GMLAS driver:
* fix crash when reading CityGML files (r-spatial/sf2371)

GPKG driver:
* Ensure that mapping tables are inserted into gpkg_contents
* Ensure that tables present in gpkgext_relations can be read

ILI2 driver:
* emit an error and not just a warning when creating a dataset without a model
file

ODS driver:
* declare OLCStringsAsUTF8 on newly created layers

OpenFileGDB driver:
* Correctly use "features" as related table type (instead of "feature")
* writer: fix corrupted maximum blob size header field in some SetFeature()
scenarios (9388)
* avoid issue with -fno-sanitize-recover=unsigned-integer-overflow with recent
clang

Parquet driver:
* avoid potential assertion/out-of-bounds access when a subset of row groups
is selected

PMTiles driver:
* fix 'Non increasing tile_id' error when opening some files (9288)

Shapefile driver:
* Fix bug when reading some .sbn spatial indices

XLSX driver:
* declare OLCStringsAsUTF8 on newly created layers

Python bindings

* gdal.Translate()/gdal.Warp()/etc.: make sure not to modify provided options[]
array (9259)
* Fix gdal.Warp segfault with dst=None

GDAL/OGR 3.8.4 Release Notes

GDAL 3.8.4 is a bugfix release.

Build

* FindECW.cmake: make it work for Windows 32-bit builds (9106)
* Restore use of gmtime_r and localtime_r; extend to ctime_r; use Windows
variants too
* FindSQLite3.cmake: improve detection of static libsqlite3.a (9096)
* bash_completion installation: Allow the project_binary_dir to contain a
whitespace

Docker build recipes

* docker/ubuntu-full/Dockerfile: update to Arrow 15.0.0
* docker/ubuntu-full/Dockerfile: pin libarrow-acero-dev version (9183)
* docker/ubuntu-full/Dockerfile: disable AVX2 when building TileDB

3.8.4

Not secure
Core

* ExecuteSQL(dialect=SQLite): support 'SELECT\n' for example (9093)
* OGRGeometryFactory::createGeometry(): do not assert on wkbUnknown input

Utilities

* ogr2ogr: Arrow code path: take into account -limit parameter for
MAX_FEATURES_IN_BATCH

Vector drivers

GeoRSS, GPX, JML, KML, LVBAG, SVG, XLSX drivers:
* harmonize on a 8192 byte large parsing buffer on all platforms

Arrow/Parquet driver:
* add (minimum) support for libarrow 15.0
* MapArrowTypeToOGR(): make the code robust to potentially new entries in the
arrow::Type enumeration

CAD driver:
* Internal libopencad: use localtime_r() or localtime_s() when possible

CSV driver:
* do not quote numeric fields even if STRING_QUOTING=ALWAYS (3.8.1 regression)
(55808)

GMLAS driver:
* recognize GeometricPrimitivePropertyType

LIBKML driver:
* fix crash on a gx:Track without when subelements (qgis/qgis55963)

MSSQLSpatial driver:
* Fix BCP performance problem (9112)

MySQL driver:
* fix/workaround server-side spatial filtering when SRS is geographic with
MySQL >= 8 (qgis/QGIS55463)

ODS driver:
* fix parsing of large cells on Windows (at least with mingw64) with recent
expat 2.6.0 release

PDF driver:
* vector stream parser: correctly parse structures like "[3 3.5] 0 d"

PDS driver:
* fix compilation with Emscripten version 3.1.7

SQLite driver:
* OGR2SQLITE_Setup(): robustify against potential crashing scenario

Python bindings

* remove run of 'python -m lib2to3' that is a no-op, given that lib2to3 is
removed in python 3.13 (9173)

GDAL/OGR 3.8.3 Release Notes

GDAL 3.8.3 is a bugfix release.

Build

* infback9: fix various build issues with clang 17
* fix build with sqlite 3.36.x (9021)
* fix build of optional utility gdal2ogr

Page 3 of 7

© 2025 Safety CLI Cybersecurity Inc. All Rights Reserved.