Gdal

Latest version: v3.9.0

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

Scan your dependencies

Page 3 of 9

3.6.0

Not secure
Port

New features:
* Add CPLIsASCII()
* /vsis3/: Provide credentials mechanism for web identity token on AWS EKS (4058)
* /vsis3/: support source_profile in .aws/config pointing to a profile with a web_identity_token_file (6320)
* /vsistdin/: make size of buffered area configurable (751)
* add VSIIsLocal(), VSISupportsSequentialWrite() and VSISupportsRandomWrite()
* Configuration file: add a ignore-env-vars=yes setting (6326) in a \[general\] leading section
* Add a cpl::ThreadSafeQueue<> class

Enhancements:
* VSIFileFromMemBuffer(): allow anonymous files
* CPLCheckForFile(): do not request file size
* /vsicurl/: when CPL_CURL_VERBOSE is enabled, log as CPLDebug() message the error message from the server
* /vsicurl / CPLHTTPFetch(): add GDAL_HTTP_HEADERS configuration option (6230)
* VSIVirtualHandle: add a PRead() method for thread-safe parallel read and implement it in /vsimem/ and Unix virtual file system
* /vsis3/: make CPL_VSIS3_USE_BASE_RMDIR_RECURSIVE a path-specific configuration option
* Make GDAL_DISABLE_READDIR_ON_OPEN a path-specific configuration option
* Add VSISetPathSpecificOption() / VSIGetPathSpecificOption() / VSIClearPathSpecificOptions().
Deprecate VSISetCredential() / VSIGetCredential() / VSIClearCredentials()
* /vsicurl/ and other network file systems: add a DISABLE_READDIR_ON_OPEN=YES/NO VSIFOpenEx2L() option
* Add a VSIFilesystemHandler::SupportsRead() method
* Add GDAL_HTTP_TCP_KEEPALIVE/GDAL_HTTP_TCP_KEEPIDLE/GDAL_HTTP_TCP_KEEPINTVL configuration options to control TCP keep-alive functionality
* Make CPLODBCSession and CPLODBCStatement member variables 'protected' (6314)

Bugfixes:
* cpl_config.h: Don't use __stdcall on MinGW
* CPL recode: fix issues with iconv library integrated in musl C library
* CPLWorkerThreadPool::SubmitJob(): avoid potential deadlock when called from worker thread
* /vsicurl/: fix caching of first bytes of the files

Core

New features:
* Add a GDALRasterBand::GetSuggestedBlockAccessPattern() method, implement it in GTiff, JPEG, PNG, PDF drivers and use it in GDALCopyWholeRasterGetSwathSize().
* GDALJP2Box/GDALJP2Metadata: add support for reading/writing JUMBF box
* Add a GDALDeinterleave() function, to copy values from a pixel-interleave buffer to multiple per-component,
and add SSE2/SSSE3 optimizations for a few common scenarios like Byte/UInt16 3/4 components.
Use it in GTiff and MEM drivers.
* C API change: make GDALComputeRasterMinMax() return CPLErr instead of void (6300)
* Add a GDAL_DMD_MULTIDIM_ARRAY_OPENOPTIONLIST constant

Enhancements:
* GDALRasterBand::ComputeRasterMinMax(): add optimized implementation for Byte and UInt16 data types (~10 times faster)
* Multidim API: significantly enhance performance of reading transposed arrays for netCDF/HDF5
* GDALVersionInfo(): report if it is a debug build in --version output, and report compiler version in BUILD_INFO output
* /vsicurl/: cache the result of several collections/URL signing requests to Planetary Computer
* GDALCopyWholeRasterGetSwathSize(): aim for a chunk that is at least tall as the maximum of the source and target block heights
* GDALGetJPEG2000Structure(): add JP2_BOXES, CODESTREAM_MARKERS, STOP_AT_SOD, ALLOW_GET_FILE_SIZE options
* GDALDataset::BuildOverviews/IBuildOverviews(): add a CSLConstList papszOptions parameter
* GDALDataset::CreateLayer(): honor GDAL_VALIDATE_CREATION_OPTIONS (6487)

Breaking changes:
* Remove use of compatibility wrappers _GetProjectionRef / _GetGCPProjection / _SetProjection / _SetGCPs (6186)

Bugfixes:
* EXIFCreate(): fix writing of EXIF_UserComment
* GDALPamDataset::TrySaveXML(): do not set error if a subdataset name is set but the .aux.xml doesn't exist (5790)
* GDALOpen(): make recursive opening of dataset more reliable when papszAllowedDrivers is passed
* GetHistogram(): Support 64 bit images (6059)
* GetHistogram(): deal with undefined behavior when raster values are at infinity, or with pathological min/max bounds
* GDALPamRasterBand::SetOffset()/SetScale(): set the bOffsetSet/bScaleSet even if the value provided is the default offset/scale
* GDALDataset/GDALRasterBand::BuildOverviews/IBuildOverviews(): fix const correctness of panOverviewList and panBandList arguments
* Overview: tighten GAUSS and MODE to be exactly those names, and not starting with them
* Overview building: fix MODE resampling on large datasets (6587)

Algorithms

Enhancements:
* Transformer: add SRC_GEOLOC_ARRAY and DST_GEOLOC_ARRAY transformer options
* GDALChecksumImage(): make it return -1 in case of error

Utilities

New features:
* gdalinfo: add a STAC section to `gdalinfo -json` output (6265)
* gdal_translate: add a -ovr <level|AUTO|AUTO-n|NONE> flag (1923)
* gdal2tiles.py: add WEBP support with --tiledriver option
* gdalmdiminfo & gdalmdimtranslate: add -if (input format) flag (6295)
* gdal_grid: add 'radius' parameter to invdist, nearest, averge and metrics algorithm, to set radius1 and radius2 at the same time
* gdal_grid: add per-quadrant search capabilities for invdistnn, average, and metrics algorithms
* ogr_layer_algebra.py: promoted to official script (1581)

Enhancements:
* gdal2tiles.py: short circuit overview tile creation for --resume ahead of processing base tiles
* gdal2tiles.py: refactor transparent file check in overview creation
* gdalsrsinfo: use wkt2_2019 name instead of wkt2_2018
* gdal_viewshed: use -cc 1.0 as default for non-Earth CRS (6278)
* nearblack: skip erosion when pixel at edge is valid
* gdal_grid: produce north-up images
* gdal_grid: add validation of algorithm parameters and warn when a unknown parameter is specified
* gdal_grid: add a nSizeOfStructure leading structure member in GDALGridXXXXOptions structure, as a way to detect ABI issues when adding new parameters

Bugfixes:
* gdalwarp: modify 'sum' resampling to preserve total sum
* gdalwarp: fix issue with wrong resolution when reprojecting between geographic CRS with source extent slightly off [-180,180]
* gdalwarp: fix artifacts around antimeridian for average/mode/min/max/med/q1/q3/sum/rms resampling (6478)
* gdal2tiles.py: remove PIL deprecation warning by replacing ANTIALIAS with LANCZOS
* gdal2tiles: allow oversampling in -p raster mode (fixes 6207)
* gdal2xyz.py: fix parsing of -b option (5984)
* gdal_rasterize: fix ALL_TOUCHED on polygons whose boundaries coordinates are aligned on pixels (6414)

gdal_utils package

* standardized return codes (5561). Return 2 when utilities called without argumen

Raster drivers

ADRG driver:
* add SRP pixel spacing value (SRP_PSP) to the dataset metadata

COG driver:
* add a OVERVIEW_COUNT creation option to control the number of overview levels (6566)
* add DMD_EXTENSIONS metadata item (6073)
* properly set lossy WEBP compression when QUALITY_OVERVIEW < 100 but QUALITY = 100 (6550)

COSAR driver:
* handle version 2 files that contain half-foat samples (6289)

ECRGTOC driver:
* fix error on RasterIO() when GDAL_FORCE_CACHING=YES is set

ECW driver:
* strip off boring Kakadu and OpenJPEG COM marker comments

ENVI driver:
* implement 'default bands' to read/write R,G,B and gray color interpretation (6339)
* implement Get/Set Scale/Offset from ENVI 'data gain values'/'data offset values' (6444)
* use OGRSpatialReference::FindBestMatch() on reading to find a matching known CRS (6453)

GPKG driver:
* in CreateCopy() mode for Byte data, save the band count in a IMAGE_STRUCTURE metadata domain to be able to re-open the file with the appropriate number of bands
* default to PNG storage for single band dataset (qgis/QGIS40425)
* writer: write fully set tiles as soon as possible to decrease pressure on block cache

GTiff driver:
* add multi-threaded read capabilities (reqiures NUM_THREADS open option or GDAL_NUM_THREADS configuration option to be set)
* JXL codec: support more than 4 bands in INTERLEAVE=PIXEL mode (5704)
* JXL codec: preserve Alpha color interpretation when the Alpha band does not immediately follow color bands (e.g. R,G,B,undefined,Alpha), and fix decoding of such files
* add a WEBP_LOSSLESS_OVERVIEW=YES/NO configuration option (6439)
* report a COMPRESSION_REVERSIBILITY=LOSSLESS (possibly)/LOSSY metadata item in IMAGE_STRUCTURE for WEBP and JXL compression
* read/write JPEGXL and WEBP compression parameters (for main dataset only) in IMAGE_STRUCTURE metadata domain of GDAL_METADATA tag
* avoid potential crash on creation in a disk full situation
* fix reading a CompoundCRS of a LocalCS/EngineeringCS, and avoid warnings on writing (5890)
* report codec name (or code) when opening a file with a unhandled code
* WEBP: avoid unnecessary temporary buffer creation and copy (most of changes are in libtiff itself)
* force INTERLEAVE=PIXEL for internal overviews when using WEBP compression
* avoid SetMetadata() to cancel effect of SetGeoTransform() (6015)
* refuse to open files with SampleFormat=IEEEFP and BitsPerSample != 16, 24, 32 or 64
* SRS import: better deal when angular unit of the GEOGCS[] of the PROJCS[] doesn't match the one from the database
* SRS export: avoid error when exporting a Projected 3D CRS (6362)
* honour COMPRESS_OVERVIEW and INTERLEAVE_OVERVIEW for internal overviews (6344)
* CreateCopy(): fix marking alpha channels that are not the last one (6395)

HDF5 driver:
* multidim: fix crash on 'gdalmdiminfo HDF5:autotest/gdrivers/data/netcdf/alldatatypes.nc'

JP2KAK driver:
* use kdu_multi_analysis class for tile encoding, instead of very low level kdu_analysis
* use kdu_stripe_compressor whenever the required buffer size is < CACHE_MAX / 4, otherwise fallback to kdu_multi_analysis
* add (at least build) support for versions down to 7.3

All JPEG2000 drivers:
* report a COMPRESSION_REVERSIBILITY=LOSSLESS/LOSSLESS (possibly)/LOSSY metadata item in IMAGE_STRUCTURE domain

JP2OpenJPEG driver:
* for reversible compression, write a hint in the COM marker if the compression is lossy or not, and use it on reading

JPEG-XL driver:
* NEW!
* The JPEG-XL format is supported for reading, and batch writing (CreateCopy()), but not update in place.
The driver supports reading and writing:
- georeferencing: encoded as a GeoJP2 UUID box within a JUMBF box.
- XMP in the xml:XMP metadata domain
- EXIF in the EXIF metadata domain
- color profile in the COLOR_PROFILE metadata domain.

KEA driver:
* add support for 64 bit nodata functions

MRF driver:
* Add QB3 compression (5824)

netCDF driver:
* handle variables of type NC_SHORT with _Unsigned=true as GDT_UInt16 (6352)
* do not report metadata of indexing variables of dimensions not used by the variable of interest (6367)
* fix 2 issues with netCDF 4.9.0 of msys2-mingw64 (5970)
* multidim: workaround crash with using same file in 2 different threads (each thread with its own dataset object) (6253)
* ignore 'missing_value' when it is a non-numeric string
* multidim: use 'fill_value' attribute as an alternative for nodata, and add a USE_DEFAULT_FILL_AS_NODATA=YES array open option
* allow NETCDF:"/vsicurl_streaming/http[s]://example.com/foo.nc":variable_name (6610)

NITF driver:
* do not put PAM metadata in a Subdataset node of .aux.xml file if there's a single dataset (3.4.0 regression) (5790)
* avoid excessive memory allocation on broken files (ossfuzz52642)
ù fix crash when reading all metadata from a file without image segment, and allow creating such file
* add support for writing a TRE_OVERFLOW DES
* nitf_spec.xml: lower minlength for CSEPHA

PDF driver:
* avoid PROJ error when reading a CRS with a EPSG code that is actually a ESRI one (6522)

PNG driver:
* report cause when unable to create file

RMF driver:
* backup error state before min-max computation at FlushCache
* Ext header size checks improved

VRT driver:
* optimize speed of statistics and minmax computation when the VRT is a mosaics of non-overlapping simple sources
* ComputeStatistics(): for mosaicing case, enable it to be multi-threaded if GDAL_NUM_THREADS is set
* take into account open options when sharing sources (5989)

WEBP driver:
* report a COMPRESSION_REVERSIBILITY=LOSSLESS/LOSSY metadata item in IMAGE_STRUCTURE

OGR 3.6.0 - Overview of Changes

Core

New features:
* OGRLayer: add Arrow C stream based batch retrieval (RFC 86)
* Add OGRLayer::Upsert() operation support (6199). Implement it in MongoDBv3, ElasticSearch MEM, GPKG drivers
* Add OGR_G_ConcaveHull(), using GEOS >= 3.11 GEOSConcaveHull_r(), and map it to SWIG
* Add a OGRLayer::AlterGeomFieldDefn() / OGR_L_AlterGeomFieldDefn() to change geometry field definitions. Implement in MEM, Shapefile, GPKG, PG, OpenFileGDB drivers
* Add GDALRelationship class for describing a relationship between two tables,
and related API for retrieving the relationship
names and relationships in a dataset.
Implement discovery in FileGDB, OpenFileGDB, PGeo and GPKG drivers, SQLite
* Add API for relationship creation/deletion/update.
Implement in OpenFileGDB driver
* Add OGRLayer::GetGeometryTypes(). This method iterates over features to retrieve their geometry types.
This is mostly useful for layers that report a wkbUnknown geometry type.
Specialized implementation in GPKG and PG drivers.
* Add a GDAL_DMD_ALTER_GEOM_FIELD_DEFN_FLAGS driver metadata item
* Add DCAP_CREATE_LAYER for drivers which have support for layer creation
* Add DCAP_DELETE_LAYER for drivers which have support for layer deletion
* Add DCAP_DELETE_FIELD for drivers which have support for field deletion
* Add DCAP_REORDER_FIELDS for drivers which have support for field reordering
* Add GDAL_DMD_ALTER_FIELD_DEFN_FLAGS for drivers which describe the flags supported for a driver by the AlterFieldDefn API
* Add DCAP_CURVE_GEOMETRIES for drivers which support curved geometries
* Add DCAP_MEASURED_GEOMETRIES for drivers which support measured geometries
* Add driver capability for DCAP_Z_GEOMETRIES
* Add OLCZGeometries (equivalent to OLCMeasuredGeometries for Z support)
* Add ODsCZGeometries datasource capability flag
* Add driver metadata for DMD_GEOMETRY_FLAGS. Contains a list of (space separated) flags which reflect the geometry handling behavior of a driver.
Supported values are currently "EquatesMultiAndSingleLineStringDuringWrite", "EquatesMultiAndSinglePolygonDuringWrite".
* Add OGRParseDateTimeYYYYMMDDTHHMMSSZ() and OGRParseDateTimeYYYYMMDDTHHMMSSsssZ()
* Add GDAL_DMD_SUPPORTED_SQL_DIALECTS driver metadata.

Enhancements:
* Make isClockwise() available at the OGRCurve level
* Export OSRStripVertical() function in C API
* OGRSimpleCurve point iterator: make its modification instant on the parent curve (6215)

Bugfixes:
* OGRFeature::FillUnsetWithDefault(): do not set driver-specific default values on unset numeric fields
* OGR_SM_InitStyleString(): make it work with a style_name argument (5555)
* Fix loss of split/merge policy when cloning field domains
* OGRSQL: fix GetFeature() to return a feature such that GetFeature(fid).GetFID() == fid (5967)
* OGRGeometry::UnionCascaded(): avoid crash with GEOS < 3.11 on empty multipolygon input

OGRSpatialReference

New features:
* Add a OGRSpatialReference::FindBestMatch() method

Enhancements:
* Warping/coordinate transformation performance improvements
* OSRGetProjTLSContext(): make it faster on Linux by saving getpid() system call
* OGRSpatialReference::SetFromUserInput(): allow using strings like EPSG:3157+4617 where the 'vertical CRS' is actually the geographic CRS, to mean ellipsoidal height, which is supported in recent PROJ versions
* Improve OGRCoordinateTransformation::TransformBounds error handling (6081)
* OGRSpatialReference: evaluate OSR_DEFAULT_AXIS_MAPPING_STRATEGY config option at each object construction (6084)

Bugfixes:
* Avoid issues with PROJJSON with id in members of datum ensemble
* OGRSpatialReference::GetTargetLinearUnits(): fix getting linear units from a CompoundCRS of a LocalCS/EngineeringCS (5890)

Utilities

New features:
* ogr2ogr: add -upsert option

Bugfixes:
* ogr2ogr: make sure geometry column name is going through laundering when outputting to PG/PGDump (6261)
* ogr2ogr: take into account -limit when -progress is used

Vector drivers

All drivers:
* Add some missing DCAP_VECTOR capabilities to drivers

Arrow/Parquet drivers:
* implement faster SetAttributeFilter() for simpler filters.
Things like "col =/!=/>/>=/</<= constant", "col IS NULL", "col IS NOT NULL", possibly combined with AND.

CSV driver:
* make AUTODETECT_SIZE_LIMIT=0 open option to scan the whole file, including beyond 2 GB (for non-streaming input) (5885)
* fix width autodetection

DXF driver:
* Support files between 2 GB and 4 GB in size
* Prevent buffer from sometimes splitting CRLF newlines in MLEADER entities

FlatGeoBuf driver:
* make CreateLayer() to fail if output file cannot be
created

FileGDB driver:
* handle Shape_Area/Shape_Length fields on reading/writing
* avoid crash when reading layer with AliasName with XML special characters (issue with embedded libxml2 in SDK), and fallback to OpenFileGDB driver to reliably retrieve it (5841)
* Report relationships

GeoJSONSeq driver:
* add support for appending features to an existing file (2080)

GML driver:
* make FORCE_SRS_DETECTION=YES open option work with multiple geometry columns (6392)
* read <gml:description>, <gml:identifier>, <gml:name> fields in a feature (qgis/QGIS42660)
* OGRMergeGeometryTypesEx(): do not consider different type of MultiGeometries (ie MultiPoint, MultiLineString, MultiPolygon) as being mergeable as GeometryCollections (6616)

GMLAS driver:
* be robust to GML schemas being pointed to a location different from http://schemas.ogc.net/

GPKG driver:
* Do not list layers referenced in gpkg_contents but that have no corresponding table (qgis/qgis30670)
* Performance improvement in reading features
* Performance improvement in reading DateTime fields
* Performance improvement: do not request ignored fields
* Micro optimizations to improve CreateFeature() speed
* Performance improvement: implement background RTree creation in bulk insertion into a new table
* Implement a fast ST_Area() method
* optimization to remove bbox filtering when the spatial filter is larger than the layer extent
* remove code path specific to SQLite < 3.7.8 (PROJ requires SQLite >= 3.11)
* avoid integer overflow when trying to insert strings larger > 2 GB
* preliminary non-user-visible support for Related Tables Extension
* fix issue with ST_MakeValid() when the SQLite driver runs before GPKG on Alpine Linux
* Report relationships, through FOREIGN KEY constraints, and Related Tables extension.
* properly update gpkg_ogr_contents on INSERT OR REPLACE statements
* do not warn about http://ngageoint.github.io/GeoPackage/docs/extensions extensions in read-only mode
* Rename layer: take into account QGIS layer_styles extension
* add compatibility with GPKG 1.0 gpkg_data_column_constraints table

GRIB driver:
* fix crash and invalid metadata when processing index .idx file with sub-messages (6613)

HANA driver:
* pending batches are not flushed when layer is destroyed
* reset prepared statements when creating new field
* fix transaction support
* execute pending batches from other operations
* properly handle special characters in connection string

LIBKML driver:
* writer: add automatic reprojection to EPSG:4326 (6495)

MITAB driver:
* implements writing Text objects for Point geometries with LABEL style string (6149)

ODS driver:
* make it possible to open file without .ods extension if prefixed with ODS: (6375)

OpenFileGDB driver:
* Add write support
* handle Shape_Area/Shape_Length fields on reading
* fix use of indexes on strings when the searched value is longer than the max indexed string, or ending with space
* Report relationships

Parquet driver:
* add basic support for reading partitionned datasets
* add CREATOR option
* do not write statistics for WKB geometry columns
* make sure 'geo' metadata is embedded in ARROW:schema so that partitioned reading works fine
* implement SetNextByIndex()
* make it honour GDAL_NUM_THREADS, and assume min(4, ALL_CPUS) as default value

PG driver:
* make GEOM_TYPE layer creation option be taken into account by CreateGeomField() (instead of always assuming geometry)

PGDump driver:
* avoid extraneous harmless spaces in CREATE TABLE statements

S57 driver:
* resource files: fix missing punctuation (6000)

Selafin driver:
* remove likely broken logic in handing /vsigzip/foo.gz filenames

SQLite driver:
* Report relationships, through FOREIGN KEY constraints
* SQLiteVFS: fix semantics of xOpen(SQLITE_OPEN_CREATE) that could cause to wrongly truncate an attached database

VFK driver:
* add support for UTF-8 (VFK 6.0 switched from ISO-8859-2 to UTF-8)

XLSX driver:
* make it possible to open file without .xlsx extension if prefixed with XLSX: (6375)
* improve detection to recognize even if no XLSX: prefix or .xlsx extension

SWIG Language Bindings

All bindings:
* Add SWIG bindings for OGR_L_AlterGeomFieldDefn()
* fix SpatialReference.GetLinearUnitsName() to use OSRGetLinearUnits() to retrieve the name
* add SpatialReference.StripVertical()
* Create alias versions with/without GDAL_ prefix for c/java constants
* add inverseCT optional parameter to CoordinateOperation.SetOperation(), and add CoordinateOperation.GetInverse()
* make Band.ComputeStatistics() kwargs
* add options argument to Dataset.BuildOverviews()
* fix GDT_TypeCount value (affects C and Java bindings)

Python bindings:
* bindings for Arrow Batch functionality
* add numpy to extras_require option of setup.py
* add an optional can_return_none=True parameter to Band.ComputeRasteMinMax() to make it return None in case of error. Otherwise, return (nan, nan) (6300)

GDAL/OGR 3.5.0 Release Notes

In a nutshell...

* [RFC 84](https://gdal.org/development/rfc/rfc84_cmake.html):
Addition of a CMake build system, which deprecates the existing
autoconf/automake and nmake build systems, that will be removed
in GDAL 3.6.0. Users are encouraged to adopt the new CMake build system.
Documentation of the CMake build system is at
https://gdal.org/build_hints.html.
* Add GDT_Int64 and GDT_UInt64 data types and handle them in MEM, GTiff, netCDF and Zarr drivers
* Add read/write OGR Parquet (Apache Parquet) and 'Arrow' (Apache Arrow IPC File/Feather or stream) drivers. Only in CMake builds
* Add OGR HANA database driver. Only in autoconf & cmake builds
* Removed drivers: RDA, JPEG2000 (Jasper-based), CharLS, MG4 LIDAR, FujiBAS, IDA, INGR, ARCGEN, ArcObjects, CouchDB, Cloudant, DB2, FME, Geomedia, MDB (Java Jackess based), GTM, Ingres, MongoDB (old one. MongoDBv3 is the one to use now), REC, Walk, GMT raster, DODS raster and vector
* GDAL and OGR GRASS drivers moved to https://github.com/OSGeo/gdal-grass repository
* Tiger: remove deprecated write side of the driver (4216)
* Remove deprecated SWIG Perl bindings
* Code linting and security fixes
* Bump of shared lib major version

New optional dependencies

* odbc-cpp-wrapper (https://github.com/SAP/odbc-cpp-wrapper): for SAP Hana driver
* Apache arrow-cpp (https://github.com/apache/arrow/tree/master/cpp) libraries: for Parquet and Arrow drivers

New installed files

* lib/gdalplugins/drivers.ini: list of (known) drivers in the order they must be registered, for deterministic behavior with plugins
* shared/gdal/grib2_*.csv: resource files for GRIB driver

Removed files

* Remove deprecated testepsg utility (3993)

Backward compatibility issues

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

Build changes

Build(all):
* Drop support for non-reentrant external libqhull
* support libhdf5 1.13.0 (5061)
* Support latest Poppler versions (requires C++17)
* Support tiledb >= 2.7 (requires C++17)
* Updates for IJG libjpeg-9e
* Require using https://github.com/rouault/pdfium_build_gdal_3_5 for PDF PDFium support
* cpl_config.h: remove lots of unused defines, and severely restrict what we export in non-GDAL compilation mode

Build(autoconf/automake):
* fix detection of OpenEXR >= 3 (4766)
* Add support for PCRE2 (to replace deprecated PCRE) (4822)
* Add support for external libqhull_r (4040)
* add a --with-qhull-pkgname=qhull_r/qhullstatic_r option to select with qhull package to use
* generate test_ogrsf by default (but not installed)
* change default of RENAME_INTERNAL_LIBTIFF/LIBGEOTIFF/SHAPELIB_SYMBOLS to yes
* when building against internal libjpeg, prefix by default libjpeg symbols with gdal_ (4948)
* when building against internal libpng, prefix internal libpng symbols with gdal_ (5303)
* m4/acinclude.m4: fix detection of fseeko/ftello on netBSD
* detect xlocale.h to use LC_NUMERIC_MASK on Mac (5022)
* move generated headers to a generated_headers subdirectory to allow in a same git checkout, to continue to do autoconf in-source-tree builds as well as cmake out-of-source-tree build

Build(nmake):
* nmake.opt: fix wrong variable name in example MSODBCSQL_LIB
* nmake.opt: add a HAVE_ATLBASE_H variable that can be set to NO

Internal libraries

* Internal zlib: update to 1.2.12 (5587)
* Internal libtiff: resync with upstream
* Internal libgeotiff: resync with upstream
* Internal libpng: fix memleak on corrupted file (ossfuzz 44486)
* Internal libjson: update to 0.15.0
* Internal libLerc: Prevent LERC out of bounds access (5598)
* Internal libqhull: update to qhull_r 2020.2 (8.0.2)

3.5.0

Not secure
Port

* CPLRecode(): fix recoding between UTF-8 and CP_ACP/CP_OEMCP on Windows build that have iconv support
* CPLRecodeIconv(): avoid potential unsigned integer overflow (ossfuzz41201)
* Fix out of bounds read in CPLRecodeFromWCharIconV() (5542)
* Add VSISetCredential() to set /vsis3, /vsigs, /vsiaz ... credentials for a given file prefix
* VSICurl: Print response code for failed range requests
* /vsis3/: allow setting AWS_PROFILE to a profile that uses IAM role assumption
* IVSIS3LikeFSHandler::CopyFile(): always take into account ret code of CopyObject()
* VSISync() onto /vsis3/: allow x-amz- headers to be specified for object creation
* /vsis3/: ignore object class DEEP_ARCHIVE in addition to GLACIER, and add CPL_VSIL_CURL_IGNORE_STORAGE_CLASSES to configure which object classes should be ignored
* /vsis3/: make sure file properties of /vsis3_streaming/foo are invalidated when /vsis3/foo ones are
* /vsis3/ with GDAL_DISABLE_READDIR_ON_OPEN: do not hide when accessing non existing file (1900)
* VSISync(): fix sync'ing from /vsis3/, /vsigs/, /vsiaz/ to local disk, when the source contains implicit directories
* /vsiaz/: read credentials from ~/.azure/config as an additional fallback method. Add AZURE_STORAGE_SAS_TOKEN configuration option and deprecate AZURE_SAS
* /vsiaz/: allow authorization through an access token specified with the AZURE_STORAGE_ACCESS_TOKEN config option (to be used with AZURE_STORAGE_ACCOUNT)
* /vsiaz/: fix handling of BlobEndpoint in connection string, and fix signing of requests to handle a directory part in the endpoint
* /vsiaz/: implement container creation/destruction with VSIMkdir()/VSIRmdir()
* /vsiaz/: add compatibility with Azurite emulator
* /vsiadls/: add missing call to InvalidateParentDirectory()
* /vsigs/: Support type=user JSON file for authentication
* /vsigs/: fix upload of files > 4 MB in HTTP 1.1 (5267)
* /vsigs/, /vsiaz/, /vsiadls/: allow x-goog- / x-ms-/ headers to be specified for object creation
* ZIP support: avoid warnings on MacOS
* CPLZLibInflate(): workaround issue with /opt/intel/oneapi/intelpython/latest/lib/libz.so.1 from intel/oneapi-basekit Docker image
* /vsizip/: fix Eof() detection on stored (ie not compressed) files inside the zip (5468)
* /vsitar/: fix reading .tar.gz files when the size of the uncompressed .tar file is a multiple of 65536 bytes (5225)
* CPLGetCurrentDir(): use _wgetcwd() on Windows to get a UTF-8 filename
* CSLTokenizeString2(): make it work with strings > 2 GB
* CPLLoadConfigOptionsFromFile(): add a \[credentials\] section to load VSI credentials
* /vsimem/: VSIFTruncateL(): make sure to zeroize beyond the truncated area

Core

* Embedded Python: fixes to load Conda and mingw64 python on Windows
* Embedded python: list Python 3.10
* GDALDriver::QuietDelete(): take into account papszAllowedDrivers argument
* GDALDataset::MarkSuppressOnClose(): delete auxiliary files (4791)
* GDALPamRasterBand::CloneInfo(): deal correctly with NaN nodata to avoid generating useless .aux.xml file (4847)
* External overviews: automatically turn PLANARCONFIG_CONTIG for WebP overviews
* GDALDatasetCopyWholeRaster(): clarify INTERLEAVE option meaning and raises warning if invalid value is specified (4909)
* CreateCopy(): propagate INTERLEAVE from source data (4911)
* Add GDALPamDataset::DeleteGeoTransform() (4877)
* Metadata readers: remove thread-unsafe use of localtime()
* Pleiades metadata reader: fix to handle RPC for Pleiades Neo (5090)
* GeoEye metadata reader: avoid potential write stack-buffer overflow on long basename files (5506)
* Overview generation: fix Cubic resampling on boundaries between valid and transparent areas (5016)
* make GDALProxyRasterBand::RefUnderlyingRasterBand() / UnrefUnderlyingRasterBand() const. May affect out-of-tree drivers
* Add GDALRasterBand::IsMaskBand() and GetMaskValueRange() virtual methods
* Avoid CPLError() on number of drivers when PAM is disabled
* RawRasterBand::AccessBlock(): do not early return in case of truncated block

Algorithms

* Geoloc transformer: fix inverse transform to be exact (5520)
* Geoloc transformer: make it usable with arbitrary large geolocation arrays, using temporary GTiff storage (5520)
* gdal_grid: add facility to search points included in search ellipse for GDALDataMetrics (minimum, maximum, range, count, average_distance, average_distance_pts) in the already implemented quadtree data structure (5530)
* Rasterization of polygons: avoid underflow/overflow of output data type
* Rasterize: use rounding to integers of floating-point value, and handle +/- inf for floating point rasters
* Rasterize: make it possible to burn a Int64 attribute into a Int64 raster in a lossless way
* Warp kernel: avoid writing outside allocated buffer if more threads than needed are allocated
* warper: better guess output bounds when warping from a rotated pole projection that include poles
* transformer: implement DST_METHOD=GEOLOC_ARRAY
* avoid using any resampling kernel when doing just a subsetting of the source image (alignment on pixel boundaries) (5345)
* GDALBuildVRT(): in -separate mode, add support for sources such as MEM dataset or non-materialized VRT files

Utilities

* gdalinfo --build: report PROJ version of build and runtime
* gdaladdo -clean: remove overviews of mask (1047)
* gdalwarp -crop_to_cutline: relax epsilon to avoid extremely long loop (4826)
* gdalwarp: do not emit "Point outside of projection domain" / "tolerance condition error" (4934)
* gdalwarp: avoid useless use of CHECK_WITH_INVERT_PROJ when computed bounds are at the 'edges' of the geographic domain
* gdal_translate/gdalwarp: do not delete DIM_/RPC_ auxiliary XML files on converting a jp2 file to a tif file (5633)
* gdalbuildvrt: change logic to check homogeneous number of bands (5136)
* gdalsrsinfo: emit message when replacement of deprecated CRS occurs, with hint to set OSR_USE_NON_DEPRECATED=NO configuration option to avoid that (5106)
* gdalsrsinfo: return a non-zero exit code when specified SRS fails to load (5201)
* gdalbuildvrt: add a -strict/-non_strict flag, and in strict mode consider non-existing datasets as a failure (4755)
* gdal_pansharpen.py: display usage if not enough filenames provided
* gdal_polygonize.py: remove use of Unicode double quote characters
* gdal_polygonize.py: make -8 switch work again (5000)
* gdal_sieve.py: fix exception when source dataset has no nodata value (3.4.0 regression) (4899)
* gdal_calc.py: support wildcard for filenames, and use 3D arrays instead of list for multiple filenames per alpha
* gdal_calc.py: raise error when overwriting behavior is apparently wished but not specified (5270)
* gdal2tiles: make --no-kml option takes effect (4940)
* gdal2tiles: XML escape input filename (5032)
* gdal2tiles: remove/fix broken links in generated files
* gdal2tiles: implement parallel generation of overview tiles (5052)
* gdal2tiles: lower chunksize value to allow parallel processing when generating ~ 100 tiles
* gdal2tiles: fix issue with multiprocessing and the gdal2tiles launcher script on Windows and Python >= 3.8 (4951)
* gdal2tiles: support mpi4py multi-node parallelism (5309)
* gdal2tiles: detect write error when creating tiles, and allow outputting to /vsi filesystems (3382, 5370)
* gdal2tiles: do not generate .aux.xml files on overview tiles
* bash-completion: fixes and update gdal-bash-completion.sh

gdal_utils package

* Make scripts executable
* Add entry points for gdal-utils package (5281)

Raster drivers

AAIGRID driver:
* add support for 'null' as can be generated by D12 software (5095)

BAG driver:
* fix 'too many refinement grids' error (3759)

BMP driver:
* harden identify checks to avoid misidentification of other datasets (4713)

BYN driver:
* remove validation of nTideSys and nPtType fields

COG driver:
* only create RGB JPEG with mask if 4-band is alpha (4853)
* fix potential generation failure when main imagery has overview and mask none
* output exactly square pixels when using -co TILING_SCHEME (5343)
* add a ZOOM_LEVEL creation option (5532)

DIMAP driver:
* avoid warning when extracting metadata from unsupported band_id
* register metadata on all 6 PNEO bands
* validate raster dimensions to avoid further issues (ossfuzz 46762)

ECW driver:
* fix test failures with ECW 5.5
* do not try to open UInt32 JPEG2000 if the SDK is buggy (3860)
* fix non-nearest upsampling on multi-band datasets (5288)
* Added source read by swath to improve encoder performance

ERS driver:
* Add support for comments in ERS files (4835)

ESRIC driver:
* Fix bundle file name

FITS driver:
* fix non-conformant use of &v[0] that crashes with clang 14 -O2

GeoRaster driver:
* fix build without JPEG

GRIB driver:
* GRIB2: mode degrib hard-coded tables to .csv files in resource files
* GRIB2: merge content from WMO tables at https://github.com/wmo-im/GRIB2 with DEGRIB ones
* fix writing negative longitude of natural origin for Transverse Mercator, and fix reading it for TMerc, LCC, ACEA and LAEA
* fix thread-safetey of errSprintf() (4830)
* avoid read heap buffer overflow due to inappropriate split-and-swap on dataset with weird georeferencing (5290, ossfuzz 41260, ossfuzz 41637)
* consider longitudes that slightly exceed 360° as 360° for Split&Swap mode (5496)
* degrib: partial resynchroinzation with degrib 2.25 (degrib-20200921)
* fix use of uninitialized memory on some datasets (5290)
* multidim: fix crash when a .idx file is present (5569)

GTiff driver:
* explicitly enable strip choping to avoid issues with cmake libtiff builds
* JXL codec: use non-deprecated methods and update for compatibility with latest state of libjxl
* only emit warnings on libgeotiff PROJ errors (4801)
* SRS reading: add warning when CRS definition from geokeys is inconsistent with EPSG, and a GTIFF_SRS_SOURCE=EPSG/GEOKEYS configuration option to alter the SRS (5399)
* avoid warning with >= 5 bands and JPEG compression
* LERC overview related improvements (4848): MAX_Z_ERROR_OVERVIEW, ZLEVEL_OVERVIEW, ZSTD_LEVEL_OVERVIEW configuration options added
* propagate SPARSE_OK to overviews (4932), and add SPARSE_OK_OVERVIEW configuration option.
* fix performance issue when reading transfer functions (4923)
* avoid huge memory allocation when generating overviews on large single-band 1-bit tiled files (4932)
* make SetGCPs(), SetGeoTransform(), SetSpatialRef(), SetNoDataValue(), SetMetadata(Item)() write to PAM .aux.xml on read only files (4877)
* add support for reading/writing color table from/into PAM .aux.xml (4897)
* do not warn about buggy Sentinel1 geotiff files use a wrong 4326 code for the ellipsoid
* fix DISCARD_LSB with nodata value (5097)
* GTIFWktFromMemBufEx / GTIFMemBufFromSRS: use OSRSetPROJSearchPaths() (5184). Affects GeoJP2 encoding/decoding
* fix exposing WEBP_LOSSLESS option
* early checks for PREDICTOR settings, and update internal libtiff to support PREDICTOR=2 for 64-bit samples (rasterio/rasterio2384)
* remove limitation to 32,000 bytes when writing the GDAL metadata tag (4116)
* Create(): better detection of threshold when to switch to BigTIFF for tiled images (5479)
* unset geotransform from non-PAM source if PAM defines GCPs, and PAM is the prioritary source
* fix crash when building overviews and computing approx stats (5580)

HDF5 driver:
* fix issue when netCDF and/or HDF5 drivers built as plugins with multidim datasets
* detect Matlab .mat HDF5-based, or other files with HDF5 superblock at offset 512

HFA driver:
* Fix "Pulkovo 1942" datum write to IMG files

JP2KAK driver:
* add support for reading/writing Int32/UInt32 data types
* Add support for Creversible & RATE creation option (5131)

JP2OpenJPEG driver:
* add a STRICT=YES/NO open option to allow decoding some broken files (requires OpenJPEG 2.5)

JPEG driver:
* make sure that max memory usage check is done in all code paths that require it

KEA driver:
* print error message when opening of kea file fails

MRF driver:
* Fix padding space logic (5096)
* Add LERC2 padding when encoding
* Adjust PNG limits (5347)
* Allow using external libLerc (5386)

MSG driver:
* fix/workaround MSVC warnings

netCDF driver:
* handle 'crs_wkt' attribute
* always use WKT when found, without comparing with CF params (4725)
* limit SetFromUserInput() use to non file input
* disable filename recoding to ANSI on Windows for netCDF >= 4.8
* add WRITE_GDAL_VERSION and WRITE_GDAL_HISTORY creation option
* add a VARIABLES_AS_BANDS=YES/NO open option
* allow update mode of raster datasets
* implement SetMetadataItem()/SetMetadata()
* avoid warnings when CreateCopy() a non-georeferenced dataset, and opening a 1x1 non-georeferenced dataset
* add a IGNORE_XY_AXIS_NAME_CHECKS=YES open option (qgis/QGIS47158)
* recognize x/y axis from GMT generated files as geospatial axis (5291, qgis/QGIS47158, qgis/QGIS45704)
* read CF attributes giving CRS component names (5493)

NITF driver:
* Add ISO-8859-1 decoding for file and image header metadata
* avoid PROJ error to be emitted in Create() when ICORDS=N/S (5563)
* CADRG polar zone! CRS definition aligned with ADRG and SRP (5656)
* RPF.toc: skip plausibility check for Overviews and Legends; disable some checks for polar zones (5654)

PCIDSK driver:
* fix write heap-buffer-overflow (ossfuzz 41993)

PDS4 driver:
* write conformant Equirectangular when input raster is a geographic CRS

PDF driver:
* Named NEATLINE extraction from ISO32000 style Geospatial PDF (5504)

RRASTER driver:
* add support for CRS WKT2 (5473)

SAGA driver:
* implement SetNoDataValue() (5147)

SENTINEL2 driver:
* identify zipped S2 datasets from file content (5505)

TGA driver:
* fix reading images with runs crossing scanlines (5168)

TileDB driver:
* fix crash when creating array from subdatasets fails
* fix handling of relative paths on Windows
* avoid warnings about deprecated functions

USGSDEM driver:
* fix reading datasets with 1025 byte records ending with linefeed (5007)

VICAR driver:
* avoid undefined behavior on empty container (ossfuzz 46650)

VRT driver:
* Add div, polar, exp pixel functions. Improvements in sum, mul, inv (5298)
* pixel function: implements metadata, and replace_nodata and scale builtin functions (5371)
* Warped VRT: detect inconsistent block size between dataset and bands (4714)
* Warped VRT: do not serialize block size at band level, since already serialized at dataset level (4714)
* Warped VRT: advertise INTERLEAVE=PIXEL for faster processing of multiband
* Warped VRT: fix issue with blocks without sources and alpha band (4997)
* VRTWarpedDataset::ProcessBlock(): fix issue in the unlikely situation where a block would be > 4 GB
* Warped VRT opening: do not open the source dataset with GDAL_OF_SHARED
* fix serialization of relativeToVRT=1 when mix of relative and absolute paths for source and VRT (4983)
* GDALAutoCreateWarpedVRTEx(): avoid potential crash in case of error
* allow setting VRT description after CreateCopy('', src_ds)
* fix serialization of relativeToVRT=1 when mix of relative and absolute paths for source and VRT
* ComputeSourceWindow(): round source coordinates when very close (5343)

WMTS driver:
* disable clipping with TileMatrixSetLimits by default when using layer extent and add open options to control that behavior (4461)

XYZ driver:
* Fix incorrect failure to open ASCII-file due to floating point comparison

Zarr driver:
* be robust to duplicated array and group names in NCZarr metadata (ossfuzz 40949)
* fix nullptr dereference on array with zero-dim and Fortran order (ossfuzz 46717)

OGR 3.5.0 - Overview of Changes

Core

New features:
* Add layer renaming capacity, and implement it in GPKG, PG, FileGDB and Shapefile drivers
* Add GDALDataset::GetFieldDomainNames method to retrieve all field domain names which are available for a dataset. Implemented in OpenFileGDB, FileGDB, GPKG drivers
* Add GDALDataset::DeleteFieldDomain for deleting an existing field domain. Implemented in MEM driver
* Add GDALDataset::UpdateFieldDomain for replaciong the definition of an existing field domain. Implemented in MEM driver
* Add driver metadata for GDAL_DCAP_FIELD_DOMAINS and GDAL_DMD_CREATION_FIELD_DOMAIN_TYPES
* Add OGR_F_StealGeometryEx to steal more than the 1st geometry of a feature (5115)
* OGRFeature: add fast/unsafe field getters/setters
* OGREnvelope: add == and != comparison operators
* OGRFeature: add Reset() method

Bug fixes:
* OGRSimpleCurve::segmentize(): avoid too many memory reallocation (4826)
* OGR SQLite dialect: avoid being confused by an attribute and geometry field of same name
* OGRFormatFloat(): handle nan and inf
* OGRFeature::Equal(): fix when a Real or RealList field contains NaN
* OGRCurvePolygon::checkRing(): make it accept non-closed rings by default (5488)
* OGRCreateFromShapeBin(): do not report M if all NaN coordinates
* OGRGeometryFactory::forceTo(): fix dimensionality with empty geometries
* Multipoint WKT import: accept MULTIPOINT Z in non-backeted mode, like what PostGIS outputs
* OGR_F_SetFieldRaw() / OGRFeature::SetField( const char*, const OGRField *): fix const correctness of OGRField argument

OGRSpatialReference

* OGRSpatialReference::GetName(): workaround a PROJ 8.2.0 bug for BoundCRS
* add a OGR_CT_PREFER_OFFICIAL_SRS_DEF config option (fixes https://github.com/OSGeo/PROJ/issues/2955)
* OGRSpatialReference::importFromEPSG(): document OSR_USE_NON_DEPRECATED=NO configuration option (5106)
* OGRSpatialReference::SetFromUserInput(): make it work with 'IAU:XXXX' and 'IAU:2015:XXXX' (when using PROJ >= 8.2)
* OGRSpatialReference::SetFromUserInput(): do not emit error message on unrecognized string when ALLOW_FILE_ACCESS=NO (Toblerity/Fiona1063)
* Add a OSR_DEFAULT_AXIS_MAPPING_STRATEGY configuration option
* OGRProjCT: add missing copying of epoch related fields in copy constructor
* Add OGRSpatialReference::GetOGCURN()

Utilities

* ogr2ogr: propagate error in final CommitTransaction() to status code of the utility (5054)
* ogr2ogr: make detection of FID layer creation option more robust
* ogr2ogr: fix cutting of geometries in projected coordinates intersecting antimeridian, in some configurations
* ogr2ogr: avoid (in-memory) copying of source feature to target feature when possible
* ogr2ogr: make 'ogr2ogr [-f PostgreSQL] PG:dbname=.... source [srclayer] -lco OVERWRITE=YES' work as if -overwrite was specified (5640)

Vector drivers

CAD driver:
* libopencad: fix crash on corrupted datasets (ossfuzz 45943, ossfuzz 46887, osffuzz 45962)

CSV driver:
* when the .csvt indicates WKT and in default KEEP_GEOM_COLUMNS=YES mode, prefix the geometry field name with 'geom_'

DXF driver:
* Do not copy final DXF when MarkSuppressOnClose was called.
* Fix long line handling in edge case

DWG driver:
* Add block attributes to entities layer (5013)
* support AcDbFace reading (5034)
* read block attributes as feature fields (5055)
* add DWG_ALL_ATTRIBUTES to get all attributes (5103)

DWG/DGNv8 driver:
* avoid potential crash with ODA 2022 on Linux

ElasticSearch driver:
* do not try to open reserved .geoip_databases to avoid error message with recent Elastic versions
* add a AGGREGATION open option (4962)
* support GetLayerByName() with multiple layers and/or wildcard (4903)

ESRIJSON driver:
* fix dimensionality of PolygonZ

FileGDB driver:
* add support for writing field domains
* implement database compaction on 'REPACK' SQL command
* workaround a crash involving binary field and CDF datasets
* fix crash related to feature of FID 2147483647

FlatGeoBuf driver:
* If CRS WKT detected to be non UTF-8, force it to ASCII (5062)
* catch exception on GetFeature() on corrupted index
* fix GetFeature() when featuresCount != 0 and indexNodeSize == 0
* in SPATIAL_INDEX=NO mode, write a meaningful featureCount and extent in the header

GeoJSON driver:
* reader: expose EPSG:4979 as CRS when none is specified and 3D geoms are found
* use OGRSpatialReference::GetOGCURN() to handle compound CRS when writing 'crs' member
* writer: in RFC7946=YES mode, reproject to EPSG:4979 if source CRS is 3D
* report OFSTJSON subfield type for properties we can't map to a native OGR type, and better handling of mixed content in properties (3882)

GMLAS driver:
* be robust to leading spaces in <gml:coordinates> element (5494)

GMT driver:
* allow writing to /vsistdout/ (4993)

GPKG driver:
* fix nullptr dereference on corrupted databases with sqlite >= 3.35
* deal explicitly with CPL_VSIL_USE_TEMP_FILE_FOR_RANDOM_WRITE=YES for /vsi network file systems (5031)
* when adding a 'epoch' column to gpkg_spatial_ref_sys, one must use the 'gpkg_crs_wkt_1_1' extension instead of 'gpkg_crs_wkt'
* DeleteField(): use ALTER TABLE ... DROP COLUMN if sqlite >= 3.35.5, and run foreign_key_check only if foreign_keys is ON (fixes qgis/qgis47012)
* AlterFieldDefn(): use ALTER TABLE ... RENAME COLUMN when only renaming is to be done and sqlite >= 3.26.0, and do not run integrity_check in that situation (fixes qgis/qgis47012)
* intercept 'ALTER TABLE table RENAME COLUMN src_name TO dst_name' and 'ALTER TABLE table DROP COLUMN col_name'
* add a NOLOCK=YES option to open a file without any lock (for read-only access) (helps fixing qgis/qgis2399)
* add ST_MakeValid() SQL function if not linking against Spatialite or if Spatialite lacks ST_MakeValid()

GPSBabel driver:
* Allow identifying tcx (gtrnctr) files directly

ILI driver:
* IMDReader: fix various potential crashes on invalid input

MapInfo driver:
* allow reading MID/MIF files with lines up to 1 million bytes (3943)
* fix parsing .mid files with newline character in string field (4789)
* .tab writing: correctly detect datum when creating a layer from a WKT2 CRS string (5217)
* Add GSK2011 and PZ90.11 to list of ellipsoids (5541)
* add WindowsBalticRim / CP1257 charset mapping (5608)

MSSQL driver:
* fix build warnings on Linux
* GetLayerDefn(): fix potential memory leak
* DeleteLayer(): fix read after free
* fix issue when inserting strings in bulk copy mode on Linux
* make GetNextFeature() end bulk copy mode
* CreateFeature in bulk copy mode: make it use feature geometry SRID when set
* disable bulk mode when a UUID field is found, as this doesn't work currently
* do not set field width when reading smallint/int/bigint/float/real columns, and correctly roundtrip smallint/Int16 (3345)

MVT driver:
* writing: using MakeValid() when possible on polygon output

ODS driver:
* avoid huge memory allocations on files abusing repeated cells (ossfuzz 40568)
* avoid crashing 'floating-point exception' when evaluating -2147483648 % -1 (ossfuzz 41541)

OpenFileGDB driver:
* correctly parse raster fields of type == 2 which are inlined binary content (4881)
* do not report extent with NaN values
* fix crash related to feature of FID 2147483647
* fix dimensionality of MULTILINESTRING M geometries
* add support for reading (non-default) UTF16 encoding for strings

OSM driver:
* add a railway attributes to lines (5141)

PGeo driver:
* Always request numeric column values as numeric types (4697)

PostgreSQL driver:
* skip all leading whitespace in SQL statements. (4787)
* error out if non UTF-8 content is transmitted in COPY mode, when client_encoding=UTF8 (4751)
* propagate errors in deferred EndCopy() call in CommitTransaction() (5054)
* make ogr2ogr -lco GEOM_TYPE=geography work when the source layer has a named geometry column, and also reject creating geography columns with a SRS != EPSG:4326 (5069)
* support other geographic SRS than EPSG:4326 for geographic type (5075)

S57 driver:
* enable recoding to UTF-8 by default (RECODE_BY_DSSI=YES open option) (4751)
* handle more than 255 updates to a feature (5461)
* only apply an update if update.UPDT == 1 + previous.UPDT, or update.EDTN == 0 (5461)

Selafin driver:
* fix time step count when none dataset in the file

Shapefile driver:
* better deal with ETRS89 based CRS with TOWGS84\[0,0,0,0,0,0,0\]
* writer: avoid considering rings slightly overlapping as inner-outer rings of others (5315)
* fix perf issue when writing multilinestring with lots of parts (5321)
* consider rings at non-constant Z as outer rings (5315)
* fix unlikely nullptr dereference (5635)

SOSI driver:
* avoid segfault on invalid geometries (5502)

SQLite driver:
* add a STRICT=YES layer creation option to create tables as SQLite >= 3.37 STRICT tables
* workaround MacOS system SQLite non-default settings that cause issues with WAL and AlterFieldDefn() when patching CREATE TABLE DDL
* deal explicitly with CPL_VSIL_USE_TEMP_FILE_FOR_RANDOM_WRITE=YES for /vsi network file systems (5031)
* DeleteField(): use ALTER TABLE ... DROP COLUMN if sqlite >= 3.35.5, and run foreign_key_check only if foreign_keys is ON (refs qgis/qgis47012)
* AlterFieldDefn(): use ALTER TABLE ... RENAME COLUMN when only renaming is to be done and sqlite >= 3.26.0
* fix crash when doing select load_extension('libgdal.so') from a statically linked sqlite3 console application
* add a OGR_SQLITE_LOAD_EXTENSIONS configuration option
* fix VirtualShape support with spatialite 5.0.1 or older and sqlite 3.38.0

TopoJSON driver:
* fix duplicate 'id' field, and other potential issues when reading fields (3.4.0 regression)

VFK driver:
* avoid crash when a SQLite3 statement fails

WFS driver:
* if COUNT is present in WFS >= 2, use it as the page size

SWIG Language Bindings

All bindings:
* add missing CPLES_SQLI constant (4878)
* add gdal.DataTypeUnion()
* Geometry.ExportToWkb()/ExportToIsoWkb(): use Intel order by default to avoid useless byte swapping
* use OGR_G_CreateFromWkbEx() in ogr.CreateGeometryFromWkb() to be able to handle > 2 GB WKB

C Bindings:
* Re-target C bindings apps to netcoreapp2.2 (4792)
* Switch default platform target to AnyCPU 1368

Python bindings:
* for Windows and Python >= 3.8, automatically add the first path with (lib)gdal*.dll with os.add_dll_directory()
* Change GetFieldAsBinary to use VSIMalloc. (4774)
* add xmp=True/False argument to gdal.Translate()
* fix/workaround setuptools 60.0 and Debian --install-layout
* replace unsafe use of tempfile.mktemp() by mkstemp()
* utilities-as-lib: propagate warnings to custom error handler when UseExceptions is on (5136)
* remove all traces of distutils
* make sure GetUseExceptions() doesn't clear the error state (5374)
* make feature.GetField() returns a bool for a (type=OFTInteger, subtype=OFSTBool) field

GDAL/OGR 3.4.0 Release Notes

In a nutshell...

* [RFC 81](https://gdal.org/development/rfc/rfc81_coordinate_epoch.html):
Support for coordinate epochs in geospatial formats.
Implemented in FlatGeoBuf, GeoPackage, MEM, VRT
* New GDAL drivers:
- [Zarr](https://gdal.org/drivers/raster/zarr.html):
read/write support for ZarrV2 (and experimental V3), using 2D classic raster
API or multidimensional API:
- [STACIT](https://gdal.org/drivers/raster/stacit.html):
Spatio-Temporal Asset Catalog Items as virtual mosaics
* Other improvements:
- number of enhancements in file system operations of /vsigs/
- NITF: additions to comply with NITF Version 2.1 Commercial Dataset
Requirements Document (NCDRD)
- ODBC and PGeo: multiple fixes and improvements
- SAFE (Sentinel1): multiple improvements related to SLC/calibration (change
subdataset naming)
- multidimensional API: caching, and other improvements
* Code linting and security fixes
* Bump of shared lib major version
* MDB driver (Java based) mark as deprecated. Planned for removal for GDAL 3.5.
ODBC driver is the preferred solution (with up-to-date MDBTools library on
non-Windows platforms)
* Writing side of Tiger driver deprecated and will be removed in GDAL 3.5
* Remainder: DODS, JPEG2000(Jasper), JPEGLS, MG4LIDAR, FUJIBAS, IDA, INGR and
vector driver ARCGEN, ArcObjects, CLOUDANT, COUCHDB, DB2, DODS, FME, GEOMEDIA,
GTM, INGRES, MONGODB, REC, WALK are planned for removal in GDAL 3.5. As well
as Perl bindings

New optional dependencies

* libjxl (master) when using internal libtiff for JPEG-XL support in TIFF
* liblz4, libblosc: recommended for Zarr driver (as well as existing libzstd, liblzma)
* libbrunsli for JPEG-XL support in MRF driver (as well as existing libzstd)

New installed files

* include/cpl_compressor.h

Removed installed files

* no longer build testepsg utility by default, which has been superseded by
gdalsrsinfo for many years. It will be finally removed in GDAL 3.5

Backward compatibility issues

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

Build changes

Build(General):
* Changes to build against Xerces-c 4.0dev

Build(Unix):
* configure file no longer in git. autogen.sh must be run
* configure: fix explicit disabling of geos/sfcgal (3782)
* configure.ac: also check netcdf presence by using static linking
* fix lack of compilation of nasakeywordhandler.o with some old/non-gnu versions of grep (3836)
* configure.ac: Add compatibility with autoconf 2.71. Set 2.69 as minimum version
* include local files with quotes, and for Unix build, use -iquote instead of -I (4091)
* Use pkg-config for libdap when dap-config is not available.

3.4.0

Not secure
Port
* Add cpl_compressor.h API
* Add VSIAbortPendingUploads() to abort pending multipart uploads on /vsis3/ and /vsigs/
* /vsiaz/: avoid appending same chunk several times
* /vsigs/: switch to using S3-style multipart upload API, which is now supported
* /vsigs/: enable parallel multipart upload
* /vsigs/: add support for reading/writing ACLs through GetFileMetadata/SetFileMetadata with the ACL domain
* /vsigs/: implement UnlinkBatch() (efficient implementation only works with OAuth2 authentication)
* /vsigs/: implement RmdirRecursive() (efficient implementation only works with OAuth2 authentication)
* /vsigs/: add support for GS_USER_PROJECT config option to specify the project ID to bill for requester pays access
* /vsigs/: add support for GS_NO_SIGN_REQUEST=YES
* /vsigs/: implement SetFileMetadata(filename, metadata, 'HEADERS')
* /vsiswift/: Fix openstack swift endpoint detection, add application_credential authentication support (3960)
* /vsiswift/: properly cache stat() results
* VSISwiftFSHandler::Stat(): fix potential nullptr dereference (ossfuzz 37906)
* /vsis3/ , /vsiaz/: properly set mode field into file property cache
* /vsicurl/: fix to be able to read /vsis3/zarr-demo/store/spam
* /vsicurl/: make it work without explicit CPL_VSIL_CURL_USE_HEAD=FALSE with .earthdata.nasa.gov/ URLs (4641)
* /vsicurl/: fix crash with curl 7.79.0 to get file size when retrieving headers only
* /vsizip/: fix memory leak in error code path (ossfuzz 29715)
* /vsitar/: support prefixed filename of ustar .tar archives (4625)
* /vsitar/ etc: avoid potential long processing time on invalid filenames in archive (ossfuzz 30312, ossfuzz 39129)
* IVSIS3LikeFSHandler::Sync(): add missing lock
* VSIS3FSHandler::GetOptions(): fix non-XML conformity
* cpl_odbc.cpp: fix segfault in debug message due to nullptr dereference
* CPLODBCSession::ConnectToMsAccess(): try various DSN template combinations because the combo odbcinst 2.3.7 from Ubuntu 20.04 + self compiled mdbtools-0.9.3 doesn't like double quoting of DBQ
* MDBTools driver installation: do not error out if /etc/odbcinst.ini contains an entry for Access, and also add /usr/lib64/odbc as a path to please Fedora
* Add CPLJSONObject::DeleteNoSplitName()
* CPLJSONDocument::Load(): increase max document size to 100 MB
* CPLJSONDocument::LoadMemory(): fix parsing 'true' and 'false'
* Add CPLQuadTreeRemove()
* VSIGetMemFileBuffer(): delay destroying VSIMemFile on bUnlinkAndSeize (4158)
* Fix VSIMemHandle::Read(buffer,nSize=0,nCount=1) to return 0
* minixml parser: fix performance issue on very large processing instructions. (ossfuzz 37113)
* VSIOpenDir(): add a PREFIX option to select only filenames starting with the specified prefix
* Unix file system: implement OpenDir() with a NAME_AND_TYPE_ONLY option
* VSIReadDirRecursive(): use VSIOpenDir() / VSIGetNextDirEntry()
* VSIStatExL(): add a VSI_STAT_CACHE_ONLY flag to avoid attempting any network access
* CPLCreateUserFaultMapping(): better error message when userfaultfd system call fails due to permission issue
* userfaultfd: make it work with kernel >= 5.11 without special OS settings
* CPL logging mechanism: fix writing non-ASCII UTF-8 filenames on Windows (4492)
* VSI cache: fix crash when a Read() to the underlying file fails (4559)

Core
* Add a GDAL_DCAP_COORDINATE_EPOCH driver capability set by drivers which support storing/retrieving coordinate epoch
* fixed issue with GDALLoadRPBFile failing when RPB file does not contain errBias or errRand fields
* CPLKeywordParser / IMD parser: accept .IMD files with non-properly quoted values (4037)
* NASAKeywordHandler: fix performance issues (ossfuzz 39092)
* IMD writer: properly quote values that have spaces (4037)
* ComputeStatistics(): tiny speed improvements for SSE2 Byte/UInt16 cases
* Overview generation: use per band mask with nodatavalue and average (3913)
* GMLJP2v2 writing: fix axis order issue for gml:Envelope (3866)
* Overview/rasterio: fix RMS on large Float32 values
* Overview/rasterio: RMS resampling: add AVX2 implementation for Float and UInt16
* Overview building: fix crash possibility if user interrupting multi-threaded computation
* GDALDriver::DefaultCreateCopy(): preserve coordinate epoch
* PAM: support coordinate epoch as a SRS.coordinateEpoch attribute (RFC 81)
* GDALDataset::BlockBasedRasterIO(): fixed progress calculation
* GDALDataset::BlockBasedRasterIO(): fix when an overview is selected and non-integer window coordinates are involved (fix issue with GeoRaster driver. 4665)
* GetIndexColorTranslationTo(): fix non-exact color matching when palettes don't have the same number of entries (4156)
* Block cache: fix potential infinite loop in case of high concurrency and multi-threaded writing (3848)
* GDALDataset::GetFileList(): avoid cyclic calls on odd/corrupted datasets (ossfuzz 37460)
* GDALOpenInfo(): fix issue when passing a directory on netBSD and potentially other BSDs
* DumpJPK2CodeStream(): dump COC, QCD and QCC segments, and add HTJ2K specificities
* GDALGetJPEG2000Structure(): limit default number of lines in output to avoid excessive memory and processing time (ossfuzz 14547)
* GDALMDReaderPleiades::LoadRPCXmlFile(): fix nullptr dereference on non-conformant file (ossfuzz 38998)
* GDALDataset::FlushCache() and GDALRasterBand::FlushCache(): add a bool bAtClosing argument (fixes 4652)
* Make GDALRasterBand::TryGetLockedBlockRef() public

Multidimensional API
* Add GDALMDArray::IsRegularlySpaced() and GDALMDArray::GuessGeoTransform()
* Add GDALMDArray::GetResampled() to get a resampled / reprojected view
* Add a GDALMDArray::GetCoordinateVariables() method
* Add a GDALMDArray::Cache() method to cache an array/view into a .gmac side car file
* Add GDALMDArray::IsCacheable() so that drivers can disable attempts at opening cache file on main dataset
* API: add JSON as a possible subtype of (string) extended data type
* GDALRasterBand::AsMDArray(): fix data axis to SRS Axis mapping in the return of GetSpatialRef()
* GDALMDArray::AsClassicDataset(): fix RasterIO() when buffer data type is not native data type
* Add GDALPamMDArray and GDALPamMultiDim classes to be able to serialize/deserialize metadata (SRS for now) from GDALMDArray
* Add GDALExtendedDataTypeCreateStringEx() and map it to SWIG

Algorithms
* Warper: Eliminate thread lock timeouts on Windows (3631)
* Warper: prevent potential int overflows for > 2 GB work buffers
* Warper: force SAMPLE_GRID=YES when target output includes one pole (4064)
* Warper: OpenCL: remove extra double quote character in resampling kernel (4404)
* Warper: avoid selecting Float64 working data type with a Float32 raster and a nodata value compatible of it (4469)
* geolocation transformer: use GDALFillNodata() to fill holes in the backmap
* GDALSuggestedWarpOutput2(): better guess of bounds when transforming with a geolocation array
* gdalgeoloc: fix if the backmap would be larger than 2 Giga pixels
* gdalgeoloc: backmap generation: prevent averaging that would lead to unexpected results
* gdalgeoloc: improve backmap hole filling
* Polygonize: fix self intersection polygon when raster image contains complex holes (1158, 3319)
* Deprecate GDALOpenVerticalShiftGrid() and GDALApplyVerticalShiftGrid() that are no longer needed. Will be removed in GDAL 4.0

Utilities
* gdalinfo: report coordinate epoch (RFC 81)
* gdalinfo: avoid displaying thousands of filename in /vsizip/ if open fails
* gdal_translate: add -a_coord_epoch switch (RFC 81)
* gdalwarp: allow vertical shift when using EPSG codes (4566)
* gdalwarp: preserve coordinate epoch in output SRS (RFC 81)
* gdalwarp: add a -s_coord_epoch/_t_coord_epoch switches (RFC 81)
* Fix gdalwarp / exporting to WKT when a projection that isn't supported in WKT1 is involved (4133)
* gdalwarp: allow reprojecting a rater with geotransform = (0,1,0,0,0,-1) (4147)
* gdalwarp: slightly change default behavior of unified src band masking when a pixel is evaluate to the nodata value on all bands (4253)
* gdal_contour: fix bad coordinate order when outputting from raster with geographic CRS to KML driver (3757)
* gdal_viewshed: fix incorrect calculation if target height is specified (4381)
* gdal_viewshed: Fix incorrect progress reporting (4390)
* gdal_viewshed: change default value of -cc (curvature coefficient) to 0.85714, standard value for atmospheric refraction (4415)
* gdal_polygonize.py: fix output driver guessing
* gdal_fillnodata.py: copy pixel data after metadata
* gdal_fillnodata.py: fix -si option (4192)
* gdal_fillnodata.py: remove broken -nomask option. It has likely never worked, and was equivalent to the default mode
* gdal_sieve.py: preserve NoData value when output to a new file
* gdal2tiles: fix tile grid origin of openlayers with -p geodetic --tmscompatible --xyx as arguments
* gdal2tiles: avoid potential race when creating directories (4691)
* gdal_pansharpen.py: display usage if not enough filenames provided
* gdalmdiminfo: add dimension_size and block_size in output
* gdalmdimtranslate: add -oo switch to specify open option of source dataset

gdal_utils package
* Various linting and improvements in gdal_utils package
* Create ogrmerge(), gdalproximity(), gdal_sieve(), rgb2pct(), pct2rgb(), gdal_fillnodata(), gdal_polygonize() functions
* fix GetOutputDriversFor for ext == 'nc' (4498)

Raster drivers

AIGRID driver:
* avoid integer overflow (ossfuzz 31766)
* fix crash when accessing twice to a broken tile (4316)

BAG driver:
* ignore pixel at nodata value when updating min/max attributes (4057)

BMP driver:
* harden identify checks to avoid misidentification of other datasets (4713)

CEOS2 driver:
* Add ASF Compatibility (4026)

COG driver:
* Default to LZW compression (4574)
* Add LZMA to compressions list
* don't crash if GDALCreateGenImgProjTransformer2() fails
* Fix error messages when creating JPEG compressed COGs from RGBA

DIMAP driver:
* expose virtual overviews (4400)
* fix integer overflows (ossfuzz 39027, 39795)
* fix potential performance issue in SetMetadataFromXML() (ossfuzz 39183)
* avoid excessive memory allocation / almost infinite loop on corrupted dataset (ossfuzz 39324)

ECW driver:
* Enable reading ECW files from virtual file systems for ECW SDK 3.3

EEDAI driver:
* Point at highvolume EE API endpoint by default

EIR driver:
* avoid excessive memory allocation on small files (ossfuzz 9408)

ENVI driver:
* Open(): use .hdr as an additional extension in priority over a replacement one (4317)
* use newer Get/SetSpatialRef API to avoid performance issue (ossfuzz 38295)

ENVISAT driver:
* avoid potential buffer overflow (CID 1074533)

ERS driver:
* avoid long open delay on bogus datasets that reference themselves (ossfuzz 36701)
* Fix off-by-one error when reading ERS header

EXR driver:
* fix build against OpenEXR 3.0.1 (3770)

GeoRaster driver:
* Fix the Oracle DB connection when user and pwd are empty, while Oracle wallet is used. (3768)
* Set the SRID value for the extent when flushing the metadata to the database. (4106)
* fix issue when user name is not provided in connection string (4460)
* Add owner checking in the query (4565)

GRIB driver:
* use sidecar .idx file and lazy initialization (3799)
* implement transparent [0,360] to [-180,180] translation, in reading and writing (4524, 3799)
* add/fill a few GRIB1 ECMWF table to read a ERA5 product (3874)
* turn debug messages about unknown GRIB1 table as warnings
* fix stack read buffer overflow (ossfuzz 38610)
* fix wrong check related to memory allocation limit (ossfuzz 38894)
* fix potential crashes on big GRIB1 files on low-memory condition (ossfuzz 38971)
* multidim: catch potential exception in case of out-of-memory situation

GTiff driver:
* add support for coordinate epoch with a new CoordinateEpochGeoKey=5120 GeoKey (RFC 81)
* Enable JPEG-in-TIFF for 12 bit samples (for internal libtiff), whatever libjpeg is used for 8 bit sample support
* Add support for JPEG-XL codec when using internal libtiff, through libjxl master (4573)
* fix overviews with NaN nodata value
* when reading NoData value of Float32 dataset, cast it to float to avoid overprecision (3791)
* Fix SetDefaultRAT() (3783)
* signedbyte: do not write 0 values for tiles/strips entirely at a negative nodata value (3984)
* Set color interpretation on overview bands (3939)
* SRS reading: ignore vertical information when one of the tag has a value in the private user range (4197)
* write georeferencing info to PAM .aux.xml when using PROFILE=BASELINE
* do not try to export a DerivedGeographic CRS to GeoTIFF, but fallback to PAM
* fix corruption in TIFF directory chaining when altering nodata value after IFD crystallization (3746)
* Update internal libtiff to latest upstream
* limit error message count, mainly with Fax3 decoder, to avoid performance issues (ossfuzz 38317)

HDF5 driver:
* multidim: fix crash when extracting a field from a compound HDF5 data type
* fix issue when netCDF and/or HDF5 drivers built as plugins with multidim datasets

HFA driver:
* enable to read GCPs from PAM .aux.xml (4591)

Idrisi driver:
* Add support of Cylindrical Equal Area (3750)

JP2KAK driver:
* fix Unix build with Kakadu 8.2 (4306)
* accept files with .jhc extension (HTJ2K codestreams)
* report Corder metadata item in IMAGE_STRUCTURE domain instead of default domain

JP2OpenJPEG driver:
* add a TLM=YES creation option to write Tile-part Length Marker (requires openjpeg >= 2.5)

JPEG driver:
* fix wrong detection of bit ordering (msb instead of lsb) of mask band (4351)

KMLSuperOverlay driver:
* Allow reading kml documents with a GroundOverlay element directly inside a Document element (4124)

MEM driver:
* Open(): add support for the 'GEOTRANSFORM' options
* multidim: faster copying when data type conversion is involved
* multidim: add MEMAbstractMDArray::SetWritable, IsModified and SetModified methods

MRF driver:
* add JPEG-XL (brunsli) support (3945)
* add ZStd compression (4177)

MSG driver:
* fix race condition in satellite number lookup (4153)

NetCDF driver:
* expose Sentinel5 verbose metadata in json:ISO_METADATA/ESA_METADATA/EOP_METADATA/QA_STATISTICS/GRANULE_DESCRIPTION/ALGORITHM_SETTINGS metadata domains
* use new PROJ method 'rotated pole netCDF CF convention'
* add write support for rotated pole method
* be more restrictive on axis to decide if to advertise a geotransform.
* fix wrong offsetting by -360 of longitude values when huge nodata value found at beginning or end of line
* fix reading MODIS_ARRAY.nc file that has non CF-compliant way of expressing axis and CRS (4075)
* support more possibilities for content of 'crs' attribute in some opendatacube datasets
* accept degree_north/degree_east (degree singular) as acceptable unit for latitude/longitude axis (4439)
* accept "degrees_E"/"degrees_N" as valid axis names (4581)
* Accept HDF5 files if HDF5 driver is not available and libnetcdf has support for them
* properly deal with Polar Stereographic in reading and writing (4144)
* parse correctly valid_range/valid_min/valid_max attributes when they are of non-integer type (4443)
* no longer do filename recoding with netCDF >= 4.8 on Windows
* multidim: make opening /vsimem/ file work when netCDF MEM API is available (avoids using userfaultfd)
* multidim: make /vsi access work with netcdf >= 4.7
* multidim: avoid crash when getting data type of a char variable with 2 dimensions.
* multim: GetBlockSize(): fix heap buffer write overflow on 2D char variables (ossfuzz 39258)
* multidim: fix use of coordinates attribute to find the indexing variable of a dimension

NITF driver:
* add PROFILE=NPJE_VISUALLY_LOSSLESS/NPJE_NUMERICALLY_LOSSLESS with JP2OpenJPEG driver, to comply with STDI-0006 NITF Version 2.1 Commercial Dataset Requirements Document (NCDRD)
* fix writing of COMRAT field in JPEG/JPEG2000 mode, when there are FILE TREs
* expose ISUBCAT for each band (if non-empty) (4028)
* add capability to add several images in a file
* extend nitf_spec.xml to contain DES subheader user-data fields definitions for CSATTA DES, CSSHPA DES, CSSHPB DES and XML_DATA_CONTENT
* Slightly modify xml:DES output, such that field names no longer have the NITF_ prefix

PCIDSK driver:
* fix retrieval of RPC metadata (3.3 regression) (4118)
* avoid big memory allocation and processing time (ossfuzz 37912)
* avoid long processing time by limiting the number of bands (ossfuzz 38885)

PDF driver:
* update PDFium dependency to pdfium/4627. Requires use of https://github.com/rouault/pdfium_build_gdal_3_4 PDFium fork
* avoid potential nullptr dereference on corrupted datasets (ossfuzz 28635)
* Poppler backend: limit CPU time when reading extremely corrupted file. (ossfuzz 37384)

PDS4 driver:
* update template to CART_1G00_1950 version
* add support for reading PositiveWest longitudes, MapRotation and Oblique Cylindrical
* add write support for Oblique Cylindrical
* fix opening of some .xml files with large number of <?xml-model> tags
* accept optional <Reference_List> element in template.
* fixes for compatibility with sp:Spectral_Characteristics in template.
* projection writing: honor LONGITUDE_DIRECTION=Positive West by negating longitudes in projection parameters

PNG driver:
* disable Neon optimizations for internal libpng as we don't include the needed source file (fix build issue)

PostgisRaster driver:
* support for libpq services (3820)
* do not append generated application_name in subdataset names

RMF driver:
* Fix delta compression with non-initialized elevation min-max (4399)

SAFE driver:
* multiple improvements related to SLC/calibration (change subdataset naming)

SRTMHGT driver:
* support .hgts files from NASADEM SHHP. Also support auxiliary files with .err, .img, .num, .img.num and .swb extensions from other NASADEM products (4239)

TileDB driver:
* fix crash when creating array from subdatasets fails
* fix handling of relative paths on Windows

TGA driver:
* fix heap buffer overflow (ossfuzz 35520)

VICAR driver:
* add read/write support for GeoTIFF encoding of CRS and geotransform

VRT driver:
* Support named arguments to C++ derived band pixel functions (4049)
* Add interpolate_linear pixel function
* use source floating point coordinates when valid (4098)
* make SourceProperties element no longer needed on reading for deferred opening of sources
* avoid potential very deep call stack if SourceFilename contains empty string (ossfuzz 37530)
* Add a per-thread mechanism to count call depth and use it in VRT driver to avoid infinite recursive calls on corrupted datasets (ossfuzz 37717)
* GDALDatasetPool: avoid potential crash during destruction (4318)
* VRT pixelfunc: make it work with buffers larger than 2 giga pixels
* fix issue with sources with nodata and OverviewList resampling='average' that triggers a 'recursion error' message
* GDALAutoCreateWarpedVRTEx(): do not set padfSrcNoDataReal/padfDstNoDataReal if already set in passed-in options (rasterio/rasterio2233)
* avoid recursion issue on ComputeStatistics()/.ComputeRasterMinMax()/GetHistogram() with implicit overviews and approximation enabled (4661)

WCS driver:
* fix issue with negative coordinates (4550)

WebP driver:
* Support 'exact' option to preserve the RGB values under transparent areas.

WMS driver:
* Add an option to disable the cache (4097)
* use correct default bbox according to the SRS (4094)

WMTS driver:
* Add an option to disable the cache (4097)
* do not take into account a TileMatrixSetLink that points to a non-existing TileMatrixSet

ZMap driver:
* undeprecate it since we got feedback it is still useful (4086)

OGR 3.4.0 - Overview of Changes

Core
* Add support for reporting hiearchical organization of vector layers, and implement it in FileGDB/OpenFileGDB drivers. (Trac 5752)
* Add GDALGroup::GetVectorLayerNames() and OpenVectorLayer(), and corresponding C and SWIG API
* Geometry::MakeValid(): add option to select the GEOS 3.10 'structure' method
* Support multiline geometry WKT input
* OGRGeometryFactory::createFromGeoJson(): Support importing GeoJSON fragments in non-null terminated strings (3870)
* OGR SQL: fix wrong evaluation of attribute filter when a OR with >= 3 clauses is nested inside in another OR (3919)
* OGR SQL: Support ISO-8601 literal dates with IN operator (3978)
* OGRFeature::GetFieldAsSerializedJSon(): fix nullptr dereference on empty string list (3831)
* Add OGRGetGEOSVersion() and map it to SWIG (4079)
* Add GDAL_DCAP_MULTIPLE_VECTOR_LAYERS capability (4135)
* Add virtual method GDALDataset::IsLayerPrivate

OGRSpatialReference
* Improve OGRProjCT::Clone() and export OGRCoordinateTransformation::Clone() to C API (3809)
* Export OCTGetSourceCS(), OCTGetTargetCS() and OCTGetInverse() to C API (3857)
* Add OGRSpatialReference::IsDynamic() to check if a CRS is a dynamic one
* Add OGRSpatialReference::SetCoordinateEpoch()/GetCoordinateEpoch()
* Coordinate transformation: take into account SRS coordinate epoch if the coordinate tuple has no time value
* Fix crash in AutoIdentifyEPSG/GetEPSGGeogCS() on some WKTs (3915)
* Fix wrong quoting for WKT spatial CS type
* Add DERIVEDPROJCRS to WKT keywords for OGRSpatialReference::SetFromUserInput
* Support GetLinearUnits for ellipsoidal and spherical coordinate systems that have a height axis (4030)
* AutoIdentifyEPSG(): do not add AUTHORITY node if the axis order of the geographic CRS contradicts the one from EPSG (4038)
* OGR_CT: fix transformation between CRS that only differ by axis order (related to 4038)
* OGR_CT: when a WKT def contradicts its AUTHORITY node, use the WKT def (relates to 4038)
* OGR_CT: deal with bogus NaN coordinates as output of PROJ (4224)
* OGR_CT with OGR_CT_OP_SELECTION=BEST_ACCURACY: fix for non-Greenwich prime meridian
* OGR_CT: take into account PROJ_NETWORK=ON in OGR_CT_OP_SELECTION=BEST_ACCURACY/FIRST_MATCHING modes
* OGRSpatialRef::SetFromUserInput(): add options to disallow file and network access, and use it various drivers (ossfuzz 35453)
* importFromCRSURL() / importFromWMSAUTO() / importFromURN(): avoid excessive memory allocation and processing time on invalid input (ossfuzz 37922 and 38134)
* OGRSpatialReference::GetAxesCount(): fix on CompoundCRS of BoundCRS
* fix retrieving projection parameters from WKT1 name on a Projected 3D CRS (OSGeo/PROJ2846)
* Fix EPSGTreatsAsLatLong with compoundCRS (4505)
* OSRProjTLSCache: avoid use of exceptions (4531)
* exportToWkt(): use WKT2 for DerivedProjectedCRS (3927)
* Add OSRSetPROJEnableNetwork() / OSRGetPROJEnableNetwork(), and expose them to SWIG
* Adds OCTTransformBounds to the C and SWIG API to transform a bounding box (4630)

Utilities
* ogrinfo: report hiearchical organization of layers
* ogrinfo: report SRS coordinate epoch (RFC 81)
* ogrinfo: Report private layers with a "[private]" suffix
* ogr2ogr: add a -a_coord_epoch/-s_coord_epoch/_t_coord_epoch switches (RFC 81)
* ogr2ogr: fix quadratic performance if many source field names are identical (ossfuzz 37768)

Vector drivers

Multiple drivers:
* geomedia, walk: Check sql tables for required tables before trying to query them when trying to open a .mdb dataset

CSV driver:
* improve concatenation performance of multi-line records (ossfuzz 37528)
* OGREditableLayer (affects CSV driver): fix quadratic performance when creating field (ossfuzz 37768)
* limit to 2000 fields in opening by default. (ossfuzz 39095)

DGN driver:
* avoid potential buffer overflow (CID 1074498)
* replace undefined behavior 1 << 31 by 1U << 31. Not sure of the consequences

DXF driver:
* Improved handling of very long lines of text in DXF file (3909)
* Correctly handle hidden (invisible) INSERTs

DWG driver:
* Make Closed AcDb2dPolyline and AcDb3dPolyline to Closed OGRLineString (4264)

ESRIJSON driver:
* make 'ESRIJSON:http://' connection string scroll results

FlatGeoBuf driver:
* add support for coordinate epoch (RFC 81)
* fix memory leaks when reading invalid geometries (ossfuzz 37752, 37834, 38166)
* set minimum alignment to 8 bytes

FileGDB driver:
* report hiearchical organization of layers
* Fix reading of field domains when data source is wrapped in OGRDataSourceWithTransaction
* Ensure tables which are present in the catalog but not listed in GDB_Items can be read by the driver (4463)
* faster CreateLayer() w.r.t SRS identification
* Implement Identify method

GeoJSON driver:
* writer: emit error msg when geometry type is not supported in GeoJSON (4006)
* recognize URL of likely OAPIF items response page (4601)

GML driver:
* reading: fix reading compound curves with gml:ArcByCenterPoint and in a projected CRS in northing/easting axis order (4155)
* writer: use GML 3.2 as the new default version (instead of GML 2)
* read/write srsName as a XML comment in .xsd
* store geometry element name as geometry column name when reading without .gfs/.xsd (4386)
* avoid read heap-buffer-overflow (ossfuzz 35363)
* avoid performance issue on too nested structure (ossfuzz 21737)
* fix warning when reading .gfs file with a polyhedral surface
* expose field names in a more consistent orders when some feature lacks some fields (qgis/QGIS45139)

GMLAS driver:
* avoid uncaught exception when opening corrupted .xsd
* use our own network accessor to honour GDAL_HTTP_TIMEOUT (ossfuzz 37356)
* fix potential crash on XMLString::transcode() failure (ossfuzz 37459)
* fix potential crash in ProcessSWEDataArray() (ossfuzz 37474)
* improve performance of field name truncation (ossfuzz 37836)
* fix likely quadratic performance in LaunderFieldNames() (ossfuzz 39797)
* error out on huge mem allocation / processing time in Xerces (ossfuzz 38073)
* fix performance issue (ossfuzz 38707)

GPKG driver:
* add support for coordinate epoch (RFC 81)
* accept CreateField with a column with the fid column name and type=real, width=20, precision=0 (qgis/qgis25795)
* fix wrong gpkg_metadata_reference_column_name_update trigger (qgis/qgis42768)
* fix for compatibility with SQLite 3.36.0 and views (4015)
* add error message when prepare fails
* capitalize cartesian as Cartesian for SRS of id -1 'Undefined Cartesian coordinate reference system' (4468)

GPX driver:
* avoid potential integer overflow on writing (ossfuzz 30937)

ILI driver:
* Fix non contiguous curves for COORD/ARC sequences (3755)

KML driver:
* add read support for non-conformant MultiPolygon/MultiLineString/MultiPoint elements (4031)

LIBKML driver:
* add read support for non-conformant MultiPolygon/MultiLineString/MultiPoint elements (4031)

LVBAG driver:
* add field definition for "gerelateerdewoonplaats" (4161)
* add Field verkorteNaam to OpenbareRuimte FT (4286)

Memory driver:
* add support for coordinate epoch (RFC 81)

MITAB driver:
* Fix mapping of mapinfo symbol numbers to corresponding OGR symbol IDs (3826)

MongoDB3 driver:
* fix deprecation warnings with mongocxx >= 3.6

MVT driver:
* use 'number' instead of wrong 'numeric' when generating metadata tilestats (4160)
* reader: be tolerant to broken points generated by Mapserver

OCI driver:
* Don't try to create new layer with TRUNCATE option (4027)

ODBC driver:
* Fix incorrect ODBC type mapping for a number of SQL types
* Optimise testing if mdb is a PGeo/Walk/Geomedia database
* Add support for LIST_ALL_TABLES open option
* Update driver metadata
* Move MDB Tools access driver installation to CPLODBCDriverInstaller, and ensure driver installation is attempted when trying to open an MDB file using the ODBC driver
* Add identify support
* Add GetLayerByName override which can retrieve private layers by name
* Implement IsLayerPrivate support

ODS driver:
* limit maximum number of fields to 2000 by default (ossfuzz 7969)

OGR_GMT driver:
* fix performance issue. (ossfuzz 38158)

OpenFileGDB driver:
* report hiearchical organization of layers
* fix reading of raster fields
* Add a "LIST_ALL_TABLES" open option
* Support detection of private layers
* Correctly list non-spatial, non-private tables which are not present in the GDB_Items table (4463)

PDS4 vector:
* add a LINE_ENDING=CRLF/LF layer creation option for DELIMITED and CHARACTER tables
* fix quadratic performance when creating fields (ossfuzz 37768)
* avoid warning about wrong field subtype when parsing ASCII_Boolean
* fix issue with layer names with non alphanum characters or leading digit

PG driver:
* support postgresql:// connection strings (4570)

PGeo driver:
* add search path for libmdbodbc on Ubuntu 20.04
* use SELECT COUNT(*) for GetFeatureCount() with mdbtools only if it appears to be working (4103)
* Make identification of system tables case insensitive
* Add more internal tables to block list
* Always promote polygon or line layers to multi-type geometries (4255)
* Correctly reflect whether layers have m values in the layer types
* Correctly return failure when getting extent for non-spatial pgeo select layer
* Correctly set no geometry type for pgeo select queries with no shape column
* Add support for field domains (4291)
* Add support for retrieving layer definition and metadata with special "GetLayerDefinition table_name" and "GetLayerMetadata table_name" SQL queries
* Add LIST_ALL_TABLES open option
* Implement IsLayerPrivate()
* Add GetLayerByName override which can retrieve private layers by name (4361)
* Add identify method (4357)

PGDump driver:
* fix performance issue on huge number of columns (ossfuzz 38262)
* set limit to number of created fields to 1600, consistently with PostgreSQL

PLScenes driver:
* add PSScene and SkySatVideo item types to conf, and update other item types
* raster side: make it work with Sentinel2L1C and Landsat8L1G

Shapefile driver:
* fix wrong SRS when reading a WGS 84 SRS with a TOWGS84[0,0,0,0,0,0,0] (3958)
* Communicate why the file size cannot be reached when appending features (4140)

SQLite/Spatialite driver:
* fix crash when calling GetMetadataItem() with domain==nullptr (qgis/qgis43224)
* fix for compatibility with SQLite 3.36.0 and views (4015)
* Implement IsLayerPrivate()
* support reading tables WITHOUT ROWID (3884)
* Add missing SQL datatypes

Tiger driver:
* tag writing side as deprecated and for removal in 3.5 (4215)

VRT driver:
* add support for coordinate epoch (RFC 81)
* Fix spatial filter for geometry column names with space
* fix performance issue (ossfuzz 38629)

WasP driver:
* fix likely wrong condition in line merging (spotted by cppcheck)

WFS driver:

XLS driver:
* Set OLCStringsAsUTF8 capability to TRUE

SWIG Language Bindings

All bindings:
* add VSI_STAT_SET_ERROR_FLAG constant
* Map CPLSetThreadLocalConfigOption() and CPLGetThreadLocalConfigOption()

Python bindings:
* add MDArray.GetNoDataValueAsString() / SetNoDataValueString()
* change gdal.EscapeString() to return a bytearray() when input is bytes(), to make it compatible with backslash escaping of non-ASCII content
* fix GDALPythonObjectFromCStr() to return a bytes() object rather than a corrupted unicode string when invalid UTF-8 sequences are found
* make GDALAttribute.Write() accept a dictionary for JSON attributes, and make GDALAttribute.Read() return a dictionary for a JSON attribute
* fix resampleAlg=gdal.GRA_Sum/Med/Min/Max/Q1/Q3 in gdal.Warp()
* Fix inversion between GRA_ and GRIORA_ enums in gdal.Warp()/Translate()/BuildVRT()
* fix bilinear, cubic, cubicspline resampling for gdal.BuildVRT()
* make GetMetadata(None) work
* fix MDArray.ReadAsArray() with CInt16/CInt32 data type
* fix memleak in gdal|ogr|osr.DontUseExceptions()
* fix crash when reading null strings with MDArray.Read()
* catch potential exception thrown by SWIG_AsCharPtrAndSize()
* Build windows python wrappers with -threads argument
* Python >= 3.8 on Windows: automatically add path with [lib]gdal*.dll with os.add_dll_directory()
* Python >= 3.8 import: fix exception when PATH has nonexistent paths on Windows (3898)
* fix behavior of SetMetadata() when a value is of type bytes (4292)
* no longer use distutils (deprecated since python 3.10) when setuptools is available (4334)
* remove call to __del__() in Geometry.Destroy(), which no longer exists in SWIG 4

GDAL/OGR 3.3.0 Release Notes

In a nutshell...

* RFC 77 (https://gdal.org/development/rfc/rfc77_drop_python2_support.html): Drop Python 2 support in favor of Python 3.6 (#3142)
* RFC 78 (https://gdal.org/development/rfc/rfc78_gdal_utils_package.html): Add a gdal-utils Python package
* New driver:
- STACTA: raster driver to read Spatio-Temporal Asset Catalog Tiled Assets
* Add /vsiadls/ virtual file system for Azure Data Lake Storage Gen2
* Improved drivers: DIMAP, NITF
* Number of improvements in Python bindings
* Add automatic loading of configuration options from a file
* Add support for enumerated, constraint and glob field domains in MEM, FileGDB/OpenFileGDB and GeoPackage drivers
* Deprecation:
- Disable by default raster drivers DODS, JPEG2000(Jasper), JPEGLS, MG4LIDAR, FUJIBAS, IDA, INGR, ZMAP and vector driver ARCGEN, ArcObjects, CLOUDANT, COUCHDB, DB2, DODS, FME, GEOMEDIA, GTM, INGRES, MONGODB, REC, WALK at runtime, unless the GDAL_ENABLE_DEPRECATED_DRIVER_{drivername} configuration option is set to YES. Those drivers are planned for removal in GDAL 3.5
- Perl bindings are deprecated. Removal planned for GDAL 3.5. Use Geo::GDAL::FFI instead
* Removal of BNA, AeronavFAA, HTF, OpenAir, SEGUKOOA, SEGY, SUA, XPlane, BPG, E00GRID, EPSILON, IGNFHeightASCIIGrid, NTV1 drivers. Moved to (unsupported) https://github.com/OSGeo/gdal-extra-drivers repository.
* Continued code linting (cppcheck, CoverityScan, etc.)
* Bump of shared lib major version

Backward compatibility issues

See MIGRATION_GUIDE.txt

GDAL/OGR 3.3.0 - General Changes

General:
* fix build with recent gcc/clang

Build(Unix):
* Support CharLS 2.1 on Debian as well. (3083)
* disable LERC on big-endian hosts, as it is not big-endian ready
* gdal-config (non installed): add -I/gnm in CFLAGS
* fix compilation failure with gcc < 5 in Elasticsearch driver
* configure: Also save LDFLAGS when checking compatibility.
* configure: Ensure --with-geos/sfcgal fail if unavailable.
* configure: check presence of linux/fs.h for Linux builds
* configure: Fix gdal compilation when using proj-8.0.0 and libtiff with static jpeg support
* GDALmake.opt.in: in non-libtool LD_SHARED builds, do not link applications against libgdal dependencies, but only against libgdal itself

Build(Windows):
* add missing makefile.vc for heif

3.3.0

Not secure
Port:
* GOA2GetRefreshToken(): avoid nullptr dereference in some cases
* /vsicurl/: for debug messages, use the debug key of derived filesystem, such as 'S3' instead of 'VSICURL'
* /vsicurl/: fix issue when trying to read past end of file.
* /vsicurl/: use less restrictive check for S3-like signed URLs to be usable by OpenIO (3703)
* /vsicurl/: fix handling of X-Amz-Expires type of signed URLs (3703)
* VSICurlStreamingClearCache(): fix cache clearing for /vsiaz_streaming/
* /vsimem/, /vsisubfile/: fix memleak if destroying the C++ handle with delete instead of using VSIFCloseL() (ossfuzz 28422 28446)
* /vsiaz/: fetch credentials from Azure Active Directory when run from a Azure VM when AZURE_STORAGE_ACCOUNT is set.
* /vsiaz/: add SAS query string in HTTP Get Range requests.
* /vsiaz/: implement GetFileMetadata() / SetFileMetadata()
* /vsiaz/: fix Stat('/vsiaz/container') when shared access signature is enabled
* /vsis3/, /vsiaz/, /vsigs/: set Content-Type from filename extension for a few select file types
* /vsis3/ sync: improve upload performance by setting the default number of threads and increase the chunk size
* VSICachedFile::Read(): avoid division by zero if nSize 0 (3331)
* Make creation of global hCOAMutex thread-safer on Windows (3399)
* Add VSIFOpenEx2L() to be able to specify headers such as Content-Type or Content-Encoding at file creation time
* CPLHTTP: Allow to set GSSAPI credential delegation type with GSSAPI_DELEGATION option / GDAL_GSSAPI_DELEGATION config. option
* CPLHTTPGetNewRetryDelay(): match 'Operation timed out' curl error
* CPLDebug: in CPL_TIMESTAMP mode, display also elapsed time since first trace
* Use _stricmp / _strnicmp for Windows EQUAL / EQUALN() macros

Core:
* Add automatic loading of configuration options from a file (located in {sysconfdir}/gdal/gdalrc or $(USERPROFILE)/.gdal/gdalrc)
* RasterIO: massive speed-up of nearest-neighbour downsampling when the downsampling factor is a integer value
* RasterIO: speed-up average downsampling when the downsampling factor is 2 and with Byte/UInt16/Float32 data type
* GDALDataset::BlockBasedRasterIO(): make it take into account floating-point window coordinates, as GDALRasterBand::IRasterIO() generic case does (3101)
* GDALOpenEx(): supports OVERVIEW_LEVEL=NONE to indicate overviews shouldn't be exposed
* GDALCopyWholeRasterGetSwathSize(): take into account COMPRESSION IMAGE_STRUCTURE metadata item at dataset level (helps for DIMAP)
* cpl_userfaultfd.cpp: enable to disable it at runtime with CPL_ENABLE_USERFAULTFD=NO
* Python embedding: fix symbol conflicts with python library (3215)
* Python embedding: fix loading in QGIS/Windows (or any process with more than 100 modules)
* Python embedding: make it work on Ubuntu 20.04 when python-is-python3 package that symlinks python to python3 is installed
* GDALUnrolledCopy_GByte: improve base SSE2 implementation so that specialized SSSE3 is no longer needer
* RPC: add parameters ERR_BIAS and ERR_RAND (3484)

Multidim API:
* CreateCopy() multidim: allow to provide array-level creation options by prefixing them with "ARRAY:"
* [Set/Get][Offset/Scale](): extend to get/set storage data type. Add 'Ex' suffixed C API functions for that
* GDALMDArrayUnscaled: implement Write() to be able to get from unscaled values to raw values
* GDALMDArrayUnscaled::IWrite(): speed optimization when writing to netCDF 4
* GDALGroup::CopyFrom(): add ARRAY:AUTOSCALE=YES and ARRAY:AUTOSCALE_DATA_TYPE=Byte/UInt16/Int16/UInt32/Int32 creation options
* CreateCopy(): allow IF(NAME={name}) to be a full qualified name
* GDALExtendedDataType::Create(): do not allow creating compound data type with no component

Algorithms:
* Add RMS (Quadratic Mean) subsampling to RasterIO, overviews and warp kernel (3210)
* Warping: improve performance related to PROJ usage for warping of small rasters
* Warper ComputeSourceWindow(): avoid potential integer overflow with a ill-behaved transformer/inverse projection
* Warper: fix assertion/crash in debug mode in GWKCheckAndComputeSrcOffsets() in some circumstances
* Pansharpening: fix wrong band assignment when input multispectral bands not in order 1,2,... and NoData set as PansharpeningOptions and not present in input bands
* internal_libqhull/poly.c: avoid int overflow on 32bit
* Fix failure in overview generation for certain raster sizes and overview factor, on raster with color table in particular (3336)
* GDALSuggestedWarpOutput2(): avoid potential crash if an approximate transformer is provided

Utilities:
* gdalinfo: add -approx_stats in synopsis (3296)
* gdal_translate -tr: make non-nearest resampling honour the specified resolution to avoid potential sub-pixel misalignment when the spatial extent, resolution and dimensions in pixels don't perfectly match
* gdal_translate: preserve source block size when not subsetting, and preserve as well COMPRESSION IMAGE_STRUCTURE metadata item
* gdal_translate / gdalwarp: do not copy CACHE_PATH metadata item from WMS driver
* gdalwarp: make -of COG work with multiple input sources when BigTIFF temporary output is needed (3212)
* gdalwarp: preserve scale/offset settings of source bands to output (3232)
* gdalwarp: address (one situation of) geometry invalidity when reprojecting the cutline to the source image
* gdal_create: add a -if option to specify a prototype input file
* gdal_rasterize: make -i work again (3124)
* gdaldem TRI: add a -alg Riley option to use the Riley 1999 formula, for terrestrial use cases (3320), and make it the new default
* gdal2tiles: Allow automatic max zoom when min zoom is specified
* gdal2tiles: change from cdn.leafletjs.com to unpkg.com for leaflet .css and .js (3084)
* gdal2tiles: take into account --xyz in leafleft output (3359)
* gdal_calc: multiple improvements (nodata, multiple inputs in the same alpha, checks, extent with union/intersection logic, color table, ...)
* gdal_edit: Correctly handle the error of parameter '-scale' with no number given
* gdal_ls.py: display file mode when available
* gdal2xyz.py: various improvements (nodata, band selection, etc.)
* pct2rgb.py and rgb2pct.py: added support for an input pct_filename
* gdalattachpct.py: new utility from attachpct.py sample
* validate_gpkg.py: various improvements
* add gdallocationinfo.py sample script

Resource files:
* tms_MapML_CBMTILE.json: fix it to use correct resolution / scaleDenominator. Unfortunately this makes it non-usable by gdal2tiles, but still by the COG driver

Multi driver changes:
* gdal2tiles/COG/MBTiles/GeoPackage: adjustments for EPSG:3857 output (due to PROJ 8 changes)

BAG driver:
* fix inversion of width and height in XML metadata (3605)

BLX driver:
* fix potential free of uninitialized variable in case memory allocation would fail

BYN driver:
* relax checks in header bytes to allow products with some unset/invalid fields we don't use

COG driver:
* allow customising overview compression type (3453)

DAAS driver:
* fix pixel retrieval of dataset with UInt16 data type and one mask band (3061), and also use pixelType from bands[] instead of deprecated top-level one

DIMAP driver:
* add support for VHR 2020 Multispectral Full Spectrum products
* add support for multiple components / subdatasets
* set source block size to DIMAP VRT band (helps for performance with JP2KAK)

ECW driver:
* fix build with original ECW SDK 5.4 (2776)

ENVI, Ehdr, and other "raw" drivers:
* lower memory requirements for BIP interleave, and improve efficiency (3213)

FIT driver:
* reject negative value PAGESIZE creation option (ossfuzz 26596)

FITS driver:
* apply vertical mirroring on reading/writing
* add support for creation and update of binary tables
* display more informative error message when opening raster dataset in vector mode, or vice-verca
* avoid stack smash overflow with 32 bit Linux builds in GetRawBinaryLayout()
* set physical filename when opening subdataset

GRIB driver:
* fix reading subfields reusing the bitmap of a previous one (3099)
* degrib: avoid erroneous unit conversion when section 4 has vertical values coordinates (3158)
* degrib: add surface type 150 = Generalized Vertical Height Coordinate (3158)
* Update MRMS Local Table to v12 (3328)
* fix writing of ComplexPacking with nodata values and a single valid value (3352)

GTiff driver:
* Internal libtiff resync with libtiff 4.3.0. Includes:
- tif_lerc.c: fix encoding of datasets with NaN values (3055)
- TIFFStartStrip(): avoid potential crash in WebP codec when using scanline access on corrupted files (ossfuzz 26650)
* Export JPEG compression tags to metadata
* Report PREDICTOR in IMAGE_STRUCTURE dataset metadata domain (when it is set)
* avoid setting compoundCRS name to 'unknown' when the GTCitationGeoKey is absent
* better parse VerticalCitationGeoKey that is in the form 'VCS Name = foo|...'
* rely on libtiff for LERC codec instead of internal libtiff-only codec previously
* avoid GetSpatialRef() to return non-NULL on dataset with GCPs (3642)

HDF5 driver:
* fix reading files whose HDF5 signature is not at offset 0 (3188)

HFA driver:
* fix reading SRS with NAD83 favors, like 'NAD83(CORS96)'

JP2KAK driver:
* JP2KAKCreateCopy(): add validation of BLOCKXSIZE/BLOCKYSIZE to avoid Coverity warning about division by zero (CID 1086659, 1086660)

JPEG driver:
* add support for reading FLIR (infrared) metadata and thermal image
* read XMP tag from EXIF and expose its content in xml:XMP metadata domain
* CreateCopy(): add a warning when writing a non-CMYK 4-band dataset, and improve doc
* switch internal libjpeg internal memory allocator to default (malloc/free) (3601)

LercLib (third_party):
* fix portability issue on non-Intel platforms

MRF driver:
* Restore raw Lerc1 detection (3109)
* Support LERC1 compression improvements with non-finite values (3335)

netCDF driver:
* fix reading netCDF4/HDF5 files whose HDF5 signature is not at offset 0 (3188)
* accept relative variations in X/longitude and Y/latitude spacing of up to 0.2% for float variables or 0.05% for double. Add a GDAL_NETCDF_IGNORE_EQUALLY_SPACED_XY_CHECK config option to ignore those checks if needed (3244, 3663)
* open /vsimem/ files without requiring Linux userfaultfd mechanism
* Set scope for raster/vector-only options in driver metadata
* multidim: add a GROUP_BY=SAME_DIMENSION option to GetGroupNames()
* change the 'No UNIDATA NC_GLOBAL:Conventions attribute' from a warning to a debug message

NITF driver:
* Add support for SNIP TREs: CSRLSB, CSWRPB, RSMAPB, RSMDCB, RSMECB, SECURA and SNSPSB
* Add xml:DES metadata domain and DES creation option (3153)
* Add support for ISO8859-1 fields in NITF TREs

NWT_GRD driver:
* fix portability issue on non-Intel platforms

OGCAPI driver:
* add missing Windows build support
* fixes to handle links without type, in the coverage code path (Rasdaman use case)
* fix when coverage uses a compoundCRS with a time component (3665)

PCIDSK driver:
* resynchronization of PCIDSK SDK with the internal repository maintained by PCI
* make GetMetadataItem() returns the same const char* for a given key (while SetMetadata/SetMetadataItem is not called)

PDS4 driver:
* update value of <parsing_standard_id> for TIFF/BigTIFF to what is expected by PDS4 IM (3362)

RMF driver:
* Better support for sparse files. Fill null tiles with NoData value.
* Fix portability issues on non-Intel platforms

TileDB driver:
* Add support for array versioning (3293)
* do not try to identify /vsis3/ files ending with .tif
* add /vsigs/ support

VRT driver:
* add a <UseMaskBand>true</UseMaskBand> element of <ComplexSource> to allow compositing of overlapping sources (1148)
* AddBand() support BLOCKXSIZE and BLOCKYSIZE options; serialize/deserialize block size as attributes of VRTRasterBand element
* VRTPansharpenedDataset: fix crash when the spectral bands have no nodata value, but we have one declared in PansharpeningOptions, and when the VRTPansharpenedDataset exposes overviews (3189)
* close sources at dataset closing (3253)

WCS driver:
* fix memory leak in error code path (ossfuzz 28345)

WMS driver:
* tWMS: improves usability with NASA GIBS services (3463)
* properly deal with northing,easting ordered CRS in WMS 1.3.0 when using connection string being a GetMap URL request (3191)
* add option to specify HTTP Accept header
* Use noDataValue on empty blocks (3375)
* Let pass expected NoDataValue to MRF for reading data (3388)
* Update default values for VirtualEarth minidriver

WMTS driver:
* Map CURLE_FILE_COULDNT_READ_FILE to 404 (2941)

XYZ driver:
* support reading datasets organized by columns, such as the ones of https://www.opengeodata.nrw.de/produkte/geobasis/hm/dgm1_xyz/dgm1_xyz

OGR 3.3.0 - Overview of Changes

Core:
* Add UUID string field subtype
* OGRFeature::GetFieldAsString() and GeoJSON output: do not output Float32 with excessive precision
* IsPolarToWGS84(): make detection of polar projections more specific
* OGR SQL: fix potential crash or incorrect result on multi column ORDER BY (3249)
* Expose prepared geometry API to C and in SWIG bindings
* OGRGeometry::ExportToJson(): takes into account CRS and axis order to swap
* OGRShapeCreateCompoundCurve(): fix memory leak in error code path. (ossfuzz 28923)
* Add OGR_G_Normalize() and bind it to SWIG (3506)
* OGRPoint: make it empty when x or y is NaN (refs 3542)
* Avoid SWIG generating exception on OGRGeometry::IsValid (3578)
* OGRGeometry::exportToWkt(): rebustify implementation against out-of-memory, and make it slightly more efficient for some huge geometries
* OGRSimpleCurve: fix copy constructor / assignment operator of empty Z/M geometries in some cases
* OGRGeometry: make sure that the return type of clone() for all classes is their own type
* OGRGeometry: make getGeometryRef() in subclasses return a better type
* OGRGeometry: Handle WKB > 2 GB. Add OGR_G_WkbSizeEx() and OGR_G_CreateFromWkbEx()
* Add OGRSimpleCurve::removePoint()

OGRSpatialReference:
* Fix exportToWkt() after morphToESRI() on Geographic/Projected 3D CRS.
* GetEPSGGeogCS(): make it use database lookups if needed (and avoid misidentification of 'NAD83(CORS96)' for example
* exportToWKT(): add a ALLOW_ELLIPSOIDAL_HEIGHT_AS_VERTICAL_CRS=YES option to allow export of Geographic/Projected 3D CRS in WKT1_GDAL as CompoundCRS with a VerticalCRS being an ellipsoidal height (for LAS 1.4)
* Add OGRCoordinateTransformation::TransformWithErrorCodes() and OCTTransform4DWithErrorCodes() to get PROJ (>= 8) error codes
* Add OCTCoordinateTransformationOptionsSetDesiredAccuracy() and OCTCoordinateTransformationOptionsSetBallparkAllowed(), and map them to SWIG
* GetEPSGGeogCS(): fix when projected CRS can't be exported to WKT2
* SetFromUserInput() allow https:// when loading CRS from opengis.net (#3548)
* Add Get/Set for PROJ auxiliary database filenames (3590)
* Delegate to PROJ (>= 8.1) import from OGC URN and URL (OSGeo/PROJ2656)

Utilities:
* ogrinfo: report field domain type and add '-fielddomain name' switch
* ogr2ogr: add -emptyStrAsNull option
* ogr2ogr: add propagation of field domains
* ogr2ogr: add a -resolveDomains switch

AmigoCloud driver:
* Fix date/datetime field type handling.
* Fix json encoder to handle nested strings. (3483)
* Fix SQL delete (3512)

CAD driver:
* fixes for big endian hosts

DGN driver:
* avoid assert() in case of very low memory condition (ossfuzz 27006)

DGN and DGNv8 driver:
* Support for reading User Data Linkage data (3089)

DXF driver:
* Skip hatch polyline segments with one vertex

Elasticsearch driver:
* support WKT geo_shape encoding, and make GetExtent() use server-side query for geo_shape if ES >= 7.8 and XPack is installed
* fix GetFeatureCount() when SetAttributeFilter() is a ElasticSearch JSON filter
* add open options for timeouts and maximum number of features

FlatGeobuf driver:
* add editable capabilities
* fix crash when writing a geometry collection with an empty polygon (ossfuzz 29291)
* fix crash in GetFileList() on a dataset opened in update mode
* fix crash when writing features larger than 32 KB

GeoPackage driver:
* Add support for GeoPackage 1.3 (creation still defaults to 1.2)
* Fix handling of invalid SRS ID (3286)
* always write milliseconds in a DATETIME field for strict compliance with the spec (3423)
* no longer create triggers on gpkg_metadata and gpkg_metadata_reference
* Take into account OGR_CURRENT_DATE config option in gpkg_metadata_reference table (fixes 3537)
* Remove creation support for data_type='aspatial' legacy tables
* fix update of gpkg_metadata_reference when renaming or dropping a column, and this table references it

GeoJSON driver:
* writer: avoid invalid .0 suffix to be added to numeric values like 1eXX (3172)
* writer: avoid CPLDebug() messages when writing BBOX in RFC7946 mode
* reader: accept files starting with {"bbox":...,"features":[... (1537)
* reader: fix opening of file containing a Feature object and starting with a large properties (fixes 3280)

GML driver:
* fix layer extent with wrong axis order in some cases (3091)
* recognize AIXM ElevatedSurface to be able to proper axis swapping (3091)
* GML geometry parsing: handle km unit for radius of arcs (3118)
* fix nullptr dereference on invalid GML (ossfuzz 28040)

LVBAG driver:
* Update to the new XSD schema (3324)
* Minor fixes (3467, 3462)
* Convert MultiPolygon to Polygon (3581)

MapInfo driver:
* Support for font and custom symbols (3081)
* Explicitly set pen cap and join params for pen tools

NAS driver:
* don't skip prescan, if NAS_GFS_TEMPLATE is given, but still don't write .gfs

NGW driver:
* Add extensions support.
* Add alternative field name support.

OAPIF driver:
* report url of STAC asset items

ODBC driver:
* Remove text trimming behavior

PGeo driver:
* don't silently ignore rows with NULLs for Memo fields

PostGIS driver:
* on reading, instantiate SRS from EPSG when possible instead of srtext to avoid axis order issues, and strip TOWGS84 on known datum (3174)
* when detecting srid from table contents, ignore null geometries.

Shapefile driver:
* writer: do not write coordinates with non-finite values (3542)

SQLite driver:
* recognize col decltype 'INTEGER_OR_TEXT' as a string
* better detection of view column types

SXF driver:
* fix reading on big-endian architectures

WFS driver:
* fix CreateFeature() for WFS 2 (3323). And for WFS 2, make CreateFeature() and SetFeature() use GML 3

XLSX driver:
* fix read cells with inline formatting (3729)

SWIG Language Bindings

All bindings:
* avoid nullptr deref if providing some NULL arguments to gdal.Debug() and gdal.GOA2xxxxx() methods
* fix return type of Dataset.SetSpatialRef()
* fix expansion of ODsCRandomLayerWrite constant
* add missing GRA_Sum constant (3724)

CSharp bindings:
* Replace ToInt32 calls with ToInt64 to prevent an ArithmeticException when executing against large images in a 64-bit context.
* Sign csharp assemblies as part of the netcore build process, verify signature during tests (1368) (3332)
* fix 'make' target on Linux/Mac

Java bindings:
* Add CoordinateTransformation.TransformPointWithErrorCode()

Python bindings:
* Add Dataset.WriteArray()
* Make Dataset.ReadRaster() and ReadAsArray() accept floating-point coordinates (3101)
* Make methods such as WriteRaster() accept a bytearray object
* Return bytearray object as return of ReadRaster(), ReadBlock(), VSIFReadL(), MDArray.Read(), ...
* Add a band_list optional argument to Dataset.ReadAsArray()
* Make methods such as WriteRaster() accept any memoryview compatible of PyBUF_SIMPLE
* Make ogr.GetFieldAsBinary(), geom.ExportTo[Iso]Wkb() return a bytearray instead of a bytes object
* Make ReadRaster() and ReadBlock() accept an existing buf_obj buffer
* Make ReadAsArray(buf_obj = ar) fail if ar.flags.writable is False
* Make WriteRaster() accept a numpy array (when used without the buf_ overriders)
* Allow list or array types as input of MDArray.Write() for 1D arrays
* Prepare all samples scripts for reuse
* Add osgeo_utils.auxiliary submodules for auxiliary functions.
* [epsg_tr|esri2wkt|gcps2vec|gcps2wld|gdal_auth|gdalchksum|gdalident|gdalimport|mkgraticule].py - move undocumented untested utils to the `samples` subfolder where they belong
* Implement correct behavior for copy.copy() and copy.deepcopy() on a Geometry object (3278)
* Add CoordinateTransformation.TransformPointWithErrorCode()
* Remove deprecated NumPy aliases for standard types.
* Better validation of Band.ReadAsArray() input shape (3466)
* Dictionary typemap: accept key/value not being strings
* Add batch_creator.py, a Windows batch file creator
* Fix 'make generate' target on Unix builds (3696)

GDAL/OGR 3.2.0 Release Notes

In a nutshell...

* New GDAL drivers:
- ESRIC: ESRI bundle cache read-only driver (2663)
- HEIF: read-only driver for HEIF/HEIC file. Requires libheif
- OGCAPI: tiles/maps/coverage raster/vector experimental driver
- TGA: read/only driver to read TGA image file format
* New OGR drivers:
- LVBAG: read-only support for Dutch LVBAG/Kadaster 2.0 vector format
* New utilities:
- gdal_create: to create/initialize a new raster file
* Other improvements:
- Multi-threaded overview computation (if GDAL_NUM_THREADS set)
- COG driver: TILING_SCHEME creation option
- OpenFileGDB driver: add support for using spatial indexes
- BAG driver: multiple improvements
- FITS driver: multiple improvements (MEF and binary table support)
- NITF driver: support for SNIP TREs
- OGRFieldDefn: support UNIQUE constraint
- OGRFieldDefn: support a AlternativeName (alias) property (2729)
- Python bindings: move implementation of scripts (except gdal2tiles) in osgeo.utils package to be reusable
- Faster GTIFF Deflate compression/decompression through libdeflate (if using internal libtiff or libtiff > 4.1.0)
* Removed functionality:
- Python bindings: old-style "import gdal" is no longer available. Use "from osgeo import gdal" instead
- API_PROXY mechanism: likely never used for real usage.
- Removal of GDAL and OGR ArcSDE drivers

Backward compatibility issues

See MIGRATION_GUIDE.txt

New installed files

* data/tms_NZTM2000.json
* data/tms_LINZAntarticaMapTileGrid.json
* data/tms_MapML_APSTILE.json
* data/tms_MapML_CBMTILE.json
* data/template_tiles.mapml

GDAL/OGR 3.2.0 - General Changes

General:
* fix building against Jasper 2.0.19 and 2.0.21
* Add optional libdeflate dependency for faster Deflate compression/decompression

Build(Unix):
* GNUmakefile: split long line to avoid 32K character limitation on MSYS2
* configure: Configure proj dependencies before proj (2512)
* configure. add $with_proj_extra_lib_for_test n LIBS when detecting PROJ when no path is specified (2672)
* configure: fix CharLS 2.1 detection on case insensitive filesystems (2710)
* configure: fix --with-hdf4 and --disable-all-optional-drivers (2740)
* GNUmakefile: make 'all' target an alias of the default one to avoid potential double build of OGR objects (fixes 2777)
* configure: add ODA lib requirements to compile GDAL with ODA 2021 (2812)
* configure: fix detection of minor version number of Poppler with the new YY.MM.X numbering scheme (2823)
* configure: fix detection of Spatialite 5 build against PROJ >= 6 (2826)
* configure: fix detection of libtiff and libjpeg on mingw (fixes 2881)
* configure: fix linking order for Informix libraries
* configure: support CharLS 2.1 on Debian as well. (3083)
* configure: disable LERC on big-endian hosts, as it is not big-endian ready
* fix compilation issue of gdallinearsystem.cpp on Slackware 14.2 (2883)
* Update scripts/gdal-bash-completion.sh

Build(Windows):
* nmake.opt: mention shell32.lib in PROJ_LIBRARY
* nmake.opt: Add a PYEXEC var to specify the python executable when building GDAL/bindings on Windows.
* nmake.opt: add hint about adding ole32.lib to PROJ_LIBRARY for PROJ 7.1 when static linking (2743)
* only expand CPL_DLL to__declspec(dllexport) when building GDAL (shared configuration) (2664)
* add missing Windows build support for EXR driver
* generate_vcxproj.bat: add vs2019 compatibility (2676)
* fix build in AVC driver in VSIL_STRICT_ENFORCE mode

3.2.0

Not secure
Port:
* cpl_json.h: change the Type and PrettyFormat 'enum' to 'enum class', so that Double doesn't conflict with a C enum from OGDI include files
* cpl_json.h: add an iterator on array items, and fix const correctness of LoadUrl() method
* Add logging capabilities for /vsicurl, /vsis3 and the like. Add VSINetworkStatsGetAsSerializedJSON() and VSINetworkStatsReset(), CPL_VSIL_NETWORK_STATS_ENABLED and CPL_VSIL_SHOW_NETWORK_STATS config options
* /vsis3/ and other cloud file system: allow random-write access (for GTiff creation in particular) through temporary local file when CPL_VSIL_USE_TEMP_FILE_FOR_RANDOM_WRITE config option is set to YES
* /vsis3/: recognize AWS_PROFILE in addition to obsolete AWS_DEFAULT_PROFILE (2470)
* /vsis3/: use IMDSv2 protocol to retrieve IAM role and credentials
* /vsis3/: add CPL_VSIS3_USE_BASE_RMDIR_RECURSIVE=YES for some S3-like APIs do not support DeleteObjects
* /vsis3/: additional retry on failures on write operations
* VSIS3FSHandler::SetFileMetadata(): fix memleak
* Improved AWS EC2 detection on Windows
* /vsicurl/: defer reading of CPL_VSIL_CURL_CHUNK_SIZE and CPL_VSIL_CURL_CACHE_SIZE config options until a /vsicurl/ access (or other network filesystem) is done
* /vsiaz/: do not consider directory absence as an error situation for Rmdir()
* /vsiaz/: fix OpenDir()/NextDirEntry() that returned S_IFDIR for regular files
* /vsiaz/: update to latest version of API (2019-12-12)
* /vsiaz/: add a AZURE_NO_SIGN_REQUEST=YES config option for unsigned public buckets and AZURE_SAS to provided Shared Access Signature. Both to be used with AZURE_STORAGE_ACCOUNT (2766)
* /vsiaz/: ReadDir(): fix caching of file properties with space in the name
* VSISync(): implement chunking of large files for /vsiaz/ upload when CHUNK_SIZE and NUM_THREADS are set
* VSISync(): split large files on download/upload for /vsis3/ and /vsiaz/ (2786)
* VSISync(): add a SYNC_STRATEGY=OVERWRITE to always overwrite target file
* RmdirRecursive(): use OpenDir() in recursive mode to have more efficient directory deletion on /vsiaz/ for example
* /vsimem/: fix normalization of slashes in filenames to avoid potential infinite loop in VSIDirGeneric::NextDirEntry()
* VSI plugin: add caching option (2901)
* VSI plugin: add callback to explicitly list sibling files (2980)
* CPLWorkerThreadPool: add capability to create several job queues
* CPLStrtodDelim(): recognize '1.SNAN' as a NaN value
* CPLAtoGIntBigEx(): use strtoll() when available since POSIX doesn't guarantee atoll() will return ERANGE (and libmusl for example does not return it)
* CPLIsFilenameRelative(): treat "scheme://.." filenames as absolute
* Add GDAL_CURL_CA_BUNDLE environment variable (3025)
* CPLHTTPFetch: fix reading FORM_FILE_PATH on Windows (2971)
* Add CPLHTTP[Push|Pop]FetchCallback() and CPLHTTPSetFetchCallback() callback mechanisms to replace curl implementation (to be used by QGIS)
* VSI_CACHE: do not trust unreliable file size from underlying layer as in fixes 3006
* CPLMultiPerformWait(): use curl_multi_poll() for curl >= 7.66

Core:
* Overview building: add multi-threading of resampling computations when GDAL_NUM_THREADS config option is set
* add a TileMatrixSet class to parse OGC Two Dimensional Tile Matrix Set 17-083r2 JSON encoded definitions, and add NZTM2000 and LINZAntarticaMapTileGrid definitions
* Add GDALAutoCreateWarpedVRTEx function to GDAL API to accept extra options for transformer (2565)
* add a global thread pool mechanism
* GDALDataset::IRasterIO(): Fixes wrong IO of subpixel shifted window (2057)
* GDALDriver::QuietDelete(): partially revert 3.1 commit f60392c8
* gdal_priv.h: export EXIFExtractMetadata() for plugin uses
* DumpJPK2CodeStream(): fix reported offset of EOC marker when PSOT = 0 (2724)
* Overview generation: fix progress percentage when using USE_RRD=YES (2722)
* reader_geo_eye.cpp and reader_pleiades.cpp: avoid potential issue with overuse of per-thread CPLPath static buffers
* GDALDataset::IRasterIO(): make it try overviews when non-nearest resampling is done before doing RasterIOResampled() on full resolution dataset
* Workaround issue with UTF-8 precomposed vs decomposed encodings on MacOS filesystems that affect sidecar file discovery (2903)
* GDALBuildVRT(): add support for sources such as MEM dataset or non-materialized VRT files
* GDALDataset::BlockBasedRasterIO(): make it take into account floating-point window coordinates, as GDALRasterBand::IRasterIO() generic case does (3101)

Multidim API:
* GetMask(): use underlying parent data type as much as possible, instead of double, to avoid potential performance issues
* GetMask(): optimize when we know the mask is always at 1, and when output buffer is contiguous Byte
* Add GDALGroupOpenMDArrayFromFullname() and GDALGroupOpenGroupFromFullname(), and exose them to SWIG (2790)
* Add GDALGroup::ResolveMDArray() and map it to C and SWIG
* Add GDALMDArrayGetStatistics(), GDALMDArrayComputeStatistics() and GDALDatasetClearStatistics()
* Make sliced and transpose arrays access the attributes of their source array
* add GDALMDArrayAdviseRead() and implement it in netCDF driver for DAP datasets

Algorithms:
* Warper/transformer: avoid error about invalid latitude when warping a dataset in Geographic CRS whose north/south lat is > 90deg (2535)
* Warper: use gcore global thread pool when doing multithreaded operations
* Warper: fix average resampling that lead to very wrong results in some circumstances (2665) (3.1.0 regression)
* Warper: ComputeSourceWindow(): modify extra source pixel computation in anti-meridian warping situations
* Warper: fix computation of kernel resampling width when wrapping across the antimeridian
* Warper: emit error message instead of assertion if cutline is not a (multi)polygon (3037)
* RPC transformer: Add RPC_DEM_SRS option to override SRS of RPC_DEM. (2680)
* TPS transformer: fix handling of duplicated GCPs (fixes 2917)
* Polygonize: make sure not to use dummy geotransform

Utilities:
* gdalinfo, gdal_translate, gdalwarp: add a -if switch to be able to specify input driver(s) (2641)
* gdalinfo: json output: report nan/inf values as a string instead of invalid JSON
* gdalinfo: json output: do not escape forward slash
* gdal_translate (and GTiff driver): copy XMP metadata unless -noxmp is specified (3050)
* gdal_viewshed: adjust computation of observer position (2599)
* gdaldem: ignore 'nv' entry in color file if there is no nodata value in input file
* gdalwarp: fix crash if warping a dataset without source or target CRS when -ct is specified (2675)
* gdalwarp: improve logic for selecting input overview when target bounds and resolution are specified
* gdalwarp: better guess of target resolution when target extent is specified (2754)
* gdalbuildvrt: for easier understanding, and replicate gdal_translate -of VRT behavior, clamp xSize/ySize of SrcRect/DstRect if outside raster dimensions. Not a fix per se
* gdalbuildvrt: add support for automatically declaring virtual overviews in very restricted situations
* gdalbuildvrt: fix -srcnodata / -vrtnodata handling in -separate mode (2978)
* gdal_grid: Addition of -tr option (2839)
* gdal_contour: major speed up in polygon mode (2908)
* gdal2tiles: make general cmd line switches like --formats work without exception (2522)
* gdal2tiles: fix issue in nativezoom computation with --profile=raster on a raster whose size is below the tile size
* gdal2tiles: fix --xyz with -p raster, fix KML generation with --xyz (2463) and update OpenLayers export to OpenLayers 6.3.1
* gdal2tiles: add -w mapml output, and possibilities to use custom tiling scheme / profile
* gdal2tiles.py: fix generation of tiles at high zoom levels when input is small (2896)
* gdal2tiles.py: make sure configuration options specified with --config are passed to worker processes (2950)
* gdal2tiles.py: fix --profile=raster on a non-georeferenced image (2998)
* gdal2tiles: change from cdn.leafletjs.com to unpkg.com for leaflet .css and .js (3084)
* gdal_merge.py: fix rounding of source coordinates, when they are very close to an integer, which would otherwise result in a one-pixel shift
* gdal_calc: support multiple calc arguments to produce a multiband file (3003)
* gdal_calc.py: raise exception in case of I/O error. Fixes QGIS 36867
* gdal_sieve.py: do not write geotransform to the target if the source doesn't have one (2830)
* gdalcompare.py - export def find_diff(golden_file, new_file, check_sds=False) into a function for reuse
* gdalcompare.py: fix floor division in Python 3
* validate_cloud_optimized_geotiff.py: update to support SPARSE_OK=YES files

Multi driver changes:
* Driver metadata: fix XML errors in option declarations and add testing (2656)
* JPEG2000 drivers: extent signature for JPEG2000 codestream to avoid false positive detections.

LERC:
* Fixed a bug in Lerc2 decoder (https://github.com/Esri/lerc/pull/129)
* Fixed a bug in Lerc1 decoder (https://github.com/Esri/lerc/pull/121)

AAIGrid:
* mention dataset name in errors (3051)

BAG driver:
* add support for reading georeferenced metadata
* remove support for interpolated resampled raster
* add support for COUNT VALUE_POPULATION strategy
* support reading other single resolution layers on the root node
* add support for Create()/warp operation
* add support for reading the tracking list (with OGR API)
* fix reporting of vertical CRS
* fix missing nodes at right and top edges of supergrids in resampling mode (2737)
* allow it to be used in multidimensional mode through the generic HDF5 driver
* fix for big endian arch
* avoid crash on non-standard dataset

COG driver:
* add support for using custom TILING_SCHEME using OGC 17-083r2 JSON encoded definitions
* add ZOOM_LEVEL_STRATEGY creation option
* add WARP_RESAMPLING and OVERVIEW_RESAMPLING to override general RESAMPLING option (2671)
* write information about tiling scheme in a TILING_SCHEME metadata domain
* add a SPARSE_OK=YES option to create sparse files
* TIFF/COG: report content of the header ghost area in metadata
* skip reprojection when source dataset matches reprojection specifications
* fix rounding issue when computing overview dimensions
* fix crash if passing an invalid (warp) resampling
* fix crash when source dataset is non-Byte/non-UInt16 with a color table (fixes 2946)

DIMAP driver:
* fix loading when R1C1 tile is not present (2999)

DTED driver:
* add support for EGM08 for dted metadata "E08" (3047)

E00grid driver:
* avoid recursive call in _GetNextSourceChar(). Fixes ossfuzz25161

ECW driver:
* fix related to network files with SDK >= 5.5 (2652)

ENVI driver:
* write nodata value in 'data ignore value' header field
* add support for writing south-up / rotation=180 datasets

FIT driver:
* reject negative value PAGESIZE creation option (ossfuzz26596)

FITS driver:
* add support for reading multiple-extension FITS files through subdatasets
* add support for reading binary tables
* initialize default geotransform
* do not emit error if no georeferencing is found

GPKG driver:
* perf improvement: when inserting more than 100 features in a transaction in an existing layer, switch to a deferred insertion strategy for spatial index entries
* on reading of gridded coverage data with PNG tiles, select -FLT_MAX as the nodata value (2857)
* add support for using custom TILING_SCHEME using OGC 17-083r2 JSON encoded definitions
* increase limitation of number of tables to 10000, and make it configurable through OGR_TABLE_LIMIT config option as for vector tables
* more robust and simple logic to build overviews and compute overview factor (2858)
* make ST_Transform() fallback to EPSG code when no SRS with the given srs_id can be found in gpkg_spatial_ref_sys
* CreateSpatialIndex(): slight optimization by bumping batches to 500K features
* make SELECT DisableSpatialIndex(...) run faster
* fix when writing a tile with uniform negative values or values > 65535 (when nodata is set) in PNG tiles (3044)
* fix GDAL 3.0 regression regarding some update scenarios (2325)

GRASS driver:
* simplified to GRASS GIS 7+ only (2945)
* fix reading GRASS groups (2876)

GRIB driver:
* correctly report PDS template number for messages with subgrids (3004)
* avoid rejecting valid product due to security check
* fix retrieval of nodata value for GRIB1 products (GDAL 3.1 regression, 2962)
* fix reading subfields reusing the bitmap of a previous one (GDAL 3.1 regression, 3099)
* Degrib g2clib: rename symbols of our internal modified copy (2775)

GTiff driver:
* add read support for overviews/masks referenced through TIFFTAG_SUBIFD (1690)
* add WEBP_LEVEL_OVERVIEW config option to set WebP compression level on overviews
* fix wrong direction for half-pixel shift with GCPs and PixelIsPoint convention
* for Geodetic TIFF grids (GTG), report the 'grid_name' metadata item in the subdataset description
* fix reading/writing GEO_METADATA TIFF tag on big-endian
* fix importing WGS_1984_Web_Mercator / ESRI:102113 (2560)
* use gcore global thread pool when doing multithreaded operations
* allow multi-threaded JPEG compression. This can help a bit
* fix potential crash when generating degenerate 1x1 overviews
* in CreateCopy() mode, avoid closing and re-opening the file handle
* add earlier check to bail out when attempting JPEG compression with paletted image
* LERC codec: do not write TIFFTAG_LERC_PARAMETERS several times as it cause spurious directory rewrites, and breaks for example COG creation
* LERC codec: fix encoding of datasets with NaN values (3055)
* SRS reader: interpret infinite value in GeogInvFlatteningGeoKey as 0 (fixes PROJ 2317)
* support hidden SHIFT_ORIGIN_IN_MINUS_180_PLUS_180=YES open option used by GDALOpenVerticalShiftGrid()
* Internal libtiff: updated to latest upstream master version
* Internal libgeotiff: updated to latest upstream master version

HDF4 driver:
* do not report SDS when there are EOS_SWATH or EOS_GRID in it. Add LIST_SDS open option
* multidim: fix issue when reading transposed array, and duplicate attribute names (2848)

HDF5 driver:
* add support for new 'CSK 2nd generation' (CSG) (2930)
* multidim: fixes for big endian host
* multidim: fix performance issue when reading from sliced array

HFA driver:
* do not report TOWGS84 when reading SRS with WGS84, NAD27 or NAD83 datums (unless OSR_STRIP_TOWGS84 config option is set to NO) (fixes QGIS 36837)

ISCE driver:
* avoid crashing division by zero on corrupted datasets. Fixes ossfuzz24252

ISIS3 driver:
* make sure that in-line label size is at least 65536 bytes (2741)

JP2KAK driver:
* add ORGtparts creation option

JP2OpenJPEG driver:
* add support for generating files with PLT marker segments (OpenJPEG > 2.3.1)
* add support to enable multi-threaded encoded (OpenJPEG > 2.3.1)
* writer: acquire input data in background thread
* fix reading overviews on Sentinel2 PVI files (343x343 size, with 8x8 tiles) (2984)

LCP driver:
* add extension checking in Identify() (2641)

MRF driver:
* add support for interleaved LERC (2846)
* LERC V1 support for NaN and other bug fixes (2891)
* missing data return on initial caching of nodata tiles (2913)
* Fixes for Create() (2923)

NetCDF driver:
* GrowDim(): fix issue with non-ASCII filename on Windows
* fix setting offset and scale in CreateCopy()
* allow a NETCDF:http://example.com/my.nc DAP dataset to be opened
* multidim: fix performance issue when reading from sliced array
* multidim: optimize reading into a data type 'larger' than the native one
* multidim: identify the indexing variable of a dimension through the 'coordinates' attribute of other variables (2805)
* multidim: add CHECKSUM and FILTER creation options. Make SetRawNoDataValue() use nc_def_var_fill()
* multidim: fix retrieval of missing_attribute, etc... when reading mask

NITF driver:
* add support for various TREs for Spectral NITF Implementation Profile (SNIP): MATESA, GRDPSB, BANDSB, ACCHZB, ACCVTB, MSTGTA, PIATGB, PIXQLA, PIXMTA, CSEXRB, ILLUMB, CSRLSB, CSWRPB
* Add nested variable support in xml:TRE

PAux driver:
* avoid ingesting large binary unrelated files (found when investigating 2722)

PCRaster driver:
* fix Create() mode by propagating eAccess = GA_Update (2948)

PDF driver:
* update to pdfium/4272 with https://github.com/rouault/pdfium_build_gdal_3_2

PDS driver:
* take into account FIRST_STANDARD_PARALLEL for Mercator projection (2490)

RMF driver:
* Better support for sparse files. Fill null tiles with NoData value.

RS2 driver:
* remove support for CharLS compression since it is removed from upstream librasterlite2

SAFE driver:
* deal correctly with WV swaths (2843)

TileDB driver:
* support for pixel interleave and single formats (2703)

TSX driver:
* fix issue with reading dataset in .zip file on Windows (2814)

VICAR driver:
* fix for Basic compression and non-Byte type on big endian host
* avoid potential null-dereference on corrupted dataset. Fixes ossfuzz24254

VRT driver:
* Add support for explicit virtual overviews. Can be built with gdaladdo --config VRT_VIRTUAL_OVERVIEW YES (2955)
* VRTDataset::IRasterIO(): allow source overviews to be used when non-nearest resampling is used, and the VRT bands don't expose overviews (2911)
* fix VRTRasterBand nodata handling when creating implicit overviews (2920)
* round src/dst coordinates to integer within 1e-3 margin
* prevent potential infinite recursion in VRTDataset::IRasterIO()

WMS driver:
* Add a GDAL_MAX_CONNECTIONS config option
* WMS cache: add a <CleanTimeout> in <Cache> XML configuration (2966)

WMTS driver:
* Add support for DataType tag in service description XML (2794)

OGR 3.2.0 - Overview of Changes

Core:
* Add unique constraints to OGRFieldDefn in core, GML, PG, PGDump, GPKG, SQLite and VRT drivers (2622)
* Add support for field AlternativeName to OGRFieldDefn, read alias in openfilegdb driver (2729)
* Add GDALDataset::AbortSQL (2953)
* OGRFeature::GetFieldAsString(): remove 80 character limitation when formatting string/integer/real lists (2661)
* Add OGRLayerUniquePtr and OGRExpatUniquePtr aliases (2635)
* OGRSQL: take into account second part of arithmetic expression to correctly infer
result type.
* OGRSQL: support constructs 'A AND B AND C ... AND N' with many successive AND ((2989)
* OGRSQL: Fixed buffer overflow in BuildParseInfo for SQL query when joining multiple tables that each have implicit FID columns.
* ogr_geometry.h: export OGRWktOptions class (2576)
* ogr_swq.h: type nOperation as swq_op

OGRSpatialReference:
* Make GetAuthorityCode('PROJCS') work on a WKT1 COMPD_CS with a VERT_DATUM type = 2002 (Ellipsoid height)
* Make OSRGetPROJSearchPaths() return the value set by OSRSetPROJSearchPaths()
* exportToProj4(): make it add +geoidgrids= when possible (needs PROJ 7.2)
* Add OSRDemoteTo2D() and expose it to SWIG
* fix GetUTMZone() to work on 3D projected CRS
* exportToWkt(): accept FORMAT=WKT2_2019 (alias of WKT2_2018)
* fixes to avoid crashes with datum ensemble objects (needs PROJ 7.2)
* Avoid warnings in GetProjTLSContextHolder() when PROJ resource path is not already set (PROJ 2242)
* ogr_proj_p.cpp: make sure init() is called in OSRPJContextHolder() constructor to avoid potential use of default NULL PROJ context (2691)
* fix issue with PROJ context and OSRCleanup() (2744)
* Fix exportToWkt() after morphToESRI() on Geographic/Projected 3D CRS. But only works with PROJ 7.2

Utilities:
* ogrinfo: report field unique constraint
* ogrinfo: report field alternative name
* ogrinfo: report SUBDATASETS domain
* ogrinfo/ogr2ogr: fix issues with -sql filename where SQL comments are not at start of line (2811)
* ogr2ogr: bump default value of -gt to 100 000

Multi driver changes:
* Avoid copy&paste implementations of GetNextFeature() relying on GetNextRawFeature() through OGRGetNextFeatureThroughRaw class
* make sure GetNextFeature() always return nullptr after the first time it did (ie no implicit ResetReading()) in GPKG, SQLite, PCIDSK, MSSQLSpatial and MySQL driver
* better support for layers with field names differing by case in OGR SQL, SQL SQLite and VRT

CSV driver:
* do not try to read .csvt if CSV filename has no extension (3006)

DXF driver:
* Propagate PaperSpace field from INSERTs to subfeatures
* Fix wrong transformer composition for ASM entities
* do not rely on tail recursion and avoid potential big stack calls when eliminated 999 comment lines. Fixes ossfuzz22668

Elasticsearch driver:
* make OVERWRITE_INDEX=YES work properly by re-creating the index afterwards

ESRIJSON driver:
* fix GetFeatureCount() and GetExtent()

FileGDB/OpenFileGDB drivers:
* qualify DateTime values with UTC timezone when <IsTimeInUTC>true</IsTimeInUTC> is present in layer metadata (2719)

FileGDB driver:
* generate layer definition XML with HasSpatialIndex=true to better reflect reality.
* add support for reading and writing field alternative names
* simplify spatial filtering, and apply full intersection in GetFeatureCount() instead of BBOX one, so as to be similar to OpenFileGDB

FlatGeoBuf driver:
* Metadata extensions (2929)
* fix illegal use of std::vector (2773)
* make GetExtent() work on feature write (2874)

GeoJSON driver:
* fix opening of file starting with {"coordinates" (2720)
* fix opening of file starting with {"geometry":{"coordinates" (2787)
* RFC7946 writer: fix processing of geometry that covers the whole world (2833)
* writer: use JSON_C_TO_STRING_NOSLASHESCAPE when available to avoid escaping forward slash, and very partial resync of internal libjson-c to get it

GML driver:
* add a WRITE_GFS=AUTO/YES/NO open option (2982)
* writer: correctly format OFTDate and OFTDateTime fields (2897)
* hugefileresolver: add missing xmlns:xlink to make Xerces parser happy
* fix typo in VFR GFS files BonitovaneDilRizeniId -> BonitovanyDilRizeniId (2685)
* when encountering XML issue, defer emission of error message until we return a NULL feature, so as to avoid to confuse ogr2ogr (2730)
* XSD parser: recognized unsignedLong data type
* avoid 'Destination buffer too small' error to be emitted on /vsicurl_streaming/ URLs with filters coming from the WFS driver
* fix layer extent with wrong axis order in some cases (3091)
* recognize AIXM ElevatedSurface to be able to proper axis swapping (3091)

GMLAS driver:
* avoid running out of file descriptors in case of big number of layers
* fix so as to get same unique ids on big-endian arch

GPKG driver:
* add a PRELUDE_STATEMENTS open option that can be used for example to attach other databases
* add a DATETIME_FORMAT=WITH_TZ/UTC dataset creation option (defaults to WITH_TZ) to specify how to deal with non-UTC datetime values (2898)
* hide view "geometry_columns"
* fix wrong RTree _update3 trigger on existing files (QGIS 36935)

GRASS driver:
* simplified to GRASS GIS 7+ only (2945)

GTM driver:
* on write, do not consider TZFlag=1 (localtime) as a timezone value (refs 2696)
* on write, take into correctly timezone value to convert to UTC (refs 2696)

LIBKML driver:
* do not advertise RandomWrite capability (unless on a update layer, when datasource is created with UPDATE_TARGETHREF creation option) (fixes QGIS 39087)

MDB driver:
* fix warning when parsing 'false' boolean value

MITAB driver:
* fix reading and writing of Transverse Mercator projections based on KKJ
* .tab: fix writing empty/null Time fields (2612)
* fix reading and writing of non-metre linear units
* Support for font and custom symbols in mitab (3081)

MVT driver:
* fix 'random' failures in test_ogr_mvt_point_polygon_clip() by sorting sub-directory names, and also revise logic to attribute FID when reading directories (2566)
* writing: fix crashes in multi-threading mode (2764)

NAS driver:
* add support for new GID7 updates
* also filter for wfs:member (as in GID7)
* do not try to write a .gfs file when NAS_GFS_TEMPLATE is specified

netCDF driver:
* simple geometries: fix for big-endian

OAPIF driver:
* avoid re-adding user query parameters if they are found in URLs returned by the API (2873)
* do not list raster or coverage collections
* support opening of a collection when its URL is non-standard such as in MOAW workflows
* fix memory leak when reading schema from .xsd

ODBC driver:
* Allow mdb files to be opened with the generic ODBC driver on non-windows platforms
* Fix w.r.t fallback to alternative Access ODBC driver name
* Fix DSN string construction for Windows Access ODBC driver, template candidate preference order (2878)
* Correctly handle datetime fields provided by the mdbtools ODBC driver
* Read MS Access databases with ACCDB and STYLE extensions (2880)

OCI driver:
* fix server 12.2 version detection

ODS driver:
* do not create files with Zip64 extension, to avoid compatibility issue with LibreOffice Calc
* avoid potential deep call stack in formula evaluation. Fixes ossfuzz22237

OpenFileGDB driver:
* add support for reading .spx spatial index file
* more reliable .gdbtable header reading

OSM driver:
* remove limitation to 10000 nodes per way (849)
* Replace hard-coded tag filter with variable
* Optionally disable early tag filtering
* Don't filter out explicit attributes (2603)

PDF driver:
* write correctly attribute object dictionary when there is no field to write, and read back correctly broken files we generated before (2624)

PDS4 driver:
* fix potential double free if RenameFileTo() fails

PGeo driver:
* Quote DBQ value in PGEO driver template to avoid issues opening MDB paths with spaces
* Fixes to automatic ODBC driver installation (2838)
* Read non-spatial tables (2889)

PG driver:
* Make ogr2ogr -f PostgreSQL work when using PG:service= syntax (actually a workaround in GDALDriver::Create())
* take into potential generated columns (PostgreSQL >= 12) to avoid issuing INSERT, UPDATE or COPY statements with them
* PG (and PostgisRaster driver): set the application name in PostgreSQL connections (2658)
* apply standard libpq parsing rules for connection parameters for our custom connection parameters (schemas, active_schemas, tables) (2824)

PGDump driver:
* change default value of POSTGIS_VERSION layer creation option to 2.2

SEGY driver:
* avoid opening FITS files

Shapefile driver:
* do not claim to support DateTime data type
* when several candidate SRS are found with confidence >= 90%, take the one from EPSG (contributes to fixes QGIS 32255)
* SHPRestoreSHX: fix for (64 bit) big endian

S57 driver:
* apply update to DSID_EDTN field (2498)
* report attributes tagged as list in S57 dictionaries as StringList fields. Add a LIST_AS_STRINGLIST open option that can be set to OFF to restore GDAL < 3.2 behavior (2660)

SXF driver:
* fixes for big-endian

SQLite/Spatialite driver:
* add a PRELUDE_STATEMENTS open option that can be used for example to attach other databases

WFS driver:
* avoid /vsicurl_streaming/ URL to be truncated in case of big filter (but the server might reject it)

XLSX driver:
* do not create files with Zip64 extension, to avoid compatibility issue with LibreOffice Calc
* fix numeric precision issue when reading datetime that could lead to an error of 1 second (2683)

SWIG Language Bindings

All bindings:
* OGRDriver.CopyDataSource(): check that source dataset is not NULL
* validate range of resample_alg algorithm (2591)
* expose CPLSetCurrentErrorHandlerCatchDebug() as gdal.SetCurrentErrorHandlerCatchDebug()

CSharp bindings:
* Add build support for .NET core (1368)
* SWIG 4.0 compatibility (2802)
* Adding typemaps C for wrapper_GDALWarpDestDS and wrapper_GDALWarpDestName (2621)
* Expose Dataset.GetSpatialRef() (2620)
* Expose OSR.GetCRSInfoListFromDatabase (1665)
* Fixed implementation of Utf8BytesToString (2649)

Java bindings:
* update minimum source/target Java version to 7 to please JDK 11 (2594)
* make 'install' target copy maven artifacts (gdal-X.Y.Z.jar) to /usr/share/java

Perl bindings:

Python bindings:
* Move implementation of scripts in osgeo.utils package to be reusable
* Fix Python2 install to be synchronous and report all errors (2515)
* add a colorSelection='nearest_color_entry'/'exact_color_entry' argument to gdal.DEMProcessing()
* accept string as value for gdal.Translate() metadataOptions and creationOptions argument when providing single option (2709)
* gdal.Info(): make options=['-json'] work properly
* remove use of deprecated PyObject_AsReadBuffer() function
* makefile.vc: remove '-modern -new_repr' on python target for SWIG 4 compatibility
* add GDALMDArray.shape attribute and GDALMDArray.ReadAsMaskedArray() method
* make Dataset.ReadRaster() and Dataset.ReadAsArray() accept floating-point coordinates (3101)

GDAL/OGR 3.1.0 Release Notes

In a nutshell...

* Implement RFC 75: support for multidimensional arrays in MEM, VRT, netCDF, HDF4, HDF5 and GRIB drivers. Read/write for MEM and netCDF. Read/only for others. Add gdalmdiminfo and gdalmdimtranslate utilities.
* Implement RFC76: add capability of writing vector drivers in Python
* New GDAL drivers:
- COG: write-only, for Cloud Optimized GeoTIFF
- EXR: read/write driver, relying on OpenEXR library
- ISG: read-only, for geoid models of the International Service for the Geoid
- RDB: read-only, for RIEGL Database .mpx RDB 2 files (1538) (needs proprietary SDK)
* New OGR drivers:
- FlatGeoBuf: read-support and creation (1742)
- MapML: read/write driver for experimental web spec
* Improved drivers:
- OAPIF driver (renamed from WFS3): updated to OGC API - Features 1.0 core spec
- GTiff: improve performance of internal overview creation
- GTiff: GeoTIFF 1.1 support
- Shapefile driver: add read/creation/update support for .shz and .shp.zip
- netCDF vector: read/write support for CF-1.8 Encoded Geometries (1287)
- VICAR: multiple improvements and write support (1855)
- DDS: add read support
* Other improvements:
- gdalwarp: accept output drivers with only CreateCopy() capabilities
- gdal_viewshed: new utility for viewshed algorithm
* Remove GFT driver now that the online service no longer exists (2050)
* New Sphinx-based documentation
* Multiple security related fixes (ossfuzz)
* Continued code linting (cppcheck, CoverityScan, etc.)
* Compatibility with GDAL 3.0:
- C and C++ API: backward compatible changes
- C ABI: backward compatible changes
- C++ ABI: modified
- Functional changes: see MIGRATION_GUIDE.TXT

GDAL/OGR 3.1.0 - General Changes

Build(Unix):
* use pkg-config for libxml2 detection (2173)
* fix detection of libpq in a non-standard place (1542)
* do not use absolute path in linking command. Helps Mac OS and cygwin builds (2075)
* Enable Bash completions and control installation
* GDALmake.opt.in: silence datarootdir warning
* Doc: allow user full control over installation directory
* fix JVM detection for HDFS support on MacOS (2313)
* Remove define HOST_FILLORDER from cpl_config.h (2345)
* Added search for proj library in lib64 directory.
* configure: strip -L/usr/lib and similar from netCDF, MySQL, GEOS and SFCGAL lib path (2395)
* configure: remove useless -lproj from --with-spatialite detection

Build(Windows):
* parametrize number of CPUs for parallel builds with CPU_COUNT variable (1922)
* add HDF5_H5_IS_DLL variable to switch the scenario when HDF5 is built as a DLL (1931)
* add POSTFIX that defaults to _d for GDAL .dll, .lib and .pdb for DEBUG builds (1901)
* Fix issues with thread_local and C++ objects that don't work well with DLL on Windows

All:
* Support Poppler 0.82, 0.83, 0.85

3.1

git tag -a -m "Create tag v3.1.0RC1" v3.1.0RC1
git push origin v3.1.0RC1

8) Prepare archives

Page 3 of 9

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.