Gdal

Latest version: v3.10.2

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

Scan your dependencies

Page 7 of 7

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

12) Prepare archives

3.1.0

Not secure
Algorithms

* Warper: add sum resampling method (1437)
* Average resampling (warp and overview/translate): use weighted average for border source pixels
* GDALReprojectImage(): properly take into account source/target alpha bands
* GDALCreateReprojectionTransformerEx(): do not emit error if reverse transformation fails, and fix crash when trying to use null reverse transformation
* Warper: fix GDAL 2.3 regression in a situation with source nodata value, multiple bands and nearest resampling where the logic to detect which source pixels are nodata was inverted (1656)
* GWKAverageOrModeThread(): reject invalid source pixels for average/q1/q3/mode/min/max resampling (2365)
* Multithreaded warper: make sure a transformer object is used by the thread which created it (1989). This workarounds a PROJ bug also fixed per https://github.com/OSGeo/PROJ/pull/1726
* Contour: fix SegmentMerger list iterator skipping and out of bounds error (1670)
* Contour: fix (over) precision issue when comparing pixel value to NoData on Float32 rasters (1987)
* Contour: add sanity checks for interval based contouring, in case the dataset contains extreme values regarding the settings, which would lead to a lot of memory allocations / too large computation time
* TPS warper: enhance precision without armadillo support (1809)
* RPC warper: fix issue when source image has a geotransform (2460)
* GDALRasterizeGeometries(): fix potential integer overflow / memory allocation failure, depending on GDAL_CACHEMAX and raster dimensions (2261)
* Rasterize: speed optimization for geometry collections (2369)
* GDALContourGenerate(): propagate raster acquisition error (2410)

Port

* /vsitar/: support >100 character file names (1559)
* /vsitar/: accept space as end of field terminator
* /vsigz/: fix seeking within .gz/.tgz files larger than 2 GB (2315)
* /vsicurl (and derived filesystems): fix concurrency issue with multithreaded reads (1244)
* /vsicurl/: avoid downloading one extra block when the end offset is just at a chunk boundary
* /vsicurl/: fix CPL_VSIL_CURL_ALLOWED_EXTENSIONS with query string (1614)
* /vsicurl/: allow 'Connection timed out' CURL errors as candidate for HTTP retry
* /vsicurl/: GetFileSize(): when HEAD request does not return Content-Length header, retry with GET
* /vsis3/: for a long living file handle, refresh credentials coming from EC2/AIM (1593)
* /vsis3/: invalidate cached non-existing file is AWS_ config options are changed in the meantime (2294)
* /vsis3/ /vsigs/ /vsiaz/: implement Rename() first doing a copy of the original file and then deleting it
* /vsis3/ and similar: add a NUM_THREADS option to Sync() for parallelized copy
* AWS: Fix error in loading ~/.aws/config file (2203)
* VSISync(): when copying from /vsis3/ to /vsis3/ (or /vsigs/->/vsigs/, /vsiaz/->/vsiaz/), use CopyObject() method to use server side copy
* VSISync(): make file copying from /vsis3/ actually use /vsis3_streaming/ to reduce number of GET requests
* VSISync(): add a CHUNK_SIZE option to Sync() to split large objects and get parallelization of their download and upload
* Add VSIUnlinkBatch() for batch deletion of files, and add optimized /vsis3/ implementation
* Add efficient VSIRmdirRecursive() implementation for /vsis3/
* Add VSIGetFileMetadata()/VSISetFileMetadata() and implement them to get/set HTTP headers, and AWS S3 object tagging
* /vsis3/ and other network filesystems: avoid useless network requests when we already got a directory listing (2429)
* /vsiswift/: V3 authentication method, handling auth token expiration
* /vsimem/: make Rename() error if destination file is not in /vsimem/
* /vsizip/ writing: in ZIP64 mode, also advertise 45 as the version in the central directory (avoids a warning from 'zip' utility)
* Add CPLCanRecode function and use it in MITAB, Shape and SXF drivers to decide when to advertise UTF-8 capability
* CPLConfigOptionSetter: only reset thread-locale value, not global one
* CPLJSONObject::GetType(): return Long when the value doesn't fit on a int32
* CPLJSON: distinguish Null type from Unknown/invalid type
* CPLEscapeString(): escape double-quote for CPLES_URL
* Add a CPLCondTimedWait()
* cpl_safemaths.hpp: safe + and * for GUInt64
* Add CPLJSonStreamingWriter class
* Add cpl_error_internal.h with logic with error accumulator
* Add VSIOverwriteFile()
* Add CPLLaunderForFilename()
* cpl_error.h: add a CPLDebugOnly() macro that expands to CPLDebug() only for DEBUG builds
* QuietDelete: support expliciting the drivers to use

Core

* Block cache: fix corruption on multithreaded write on datasets (2011)
* GDALInvGeoTransform(): make it work with scale and rotation/skew coefficients of small absolute value (1615)
* GDALCopyWholeRasterGetSwathSize(): fix potential int overflows for big values of GDAL_SWATH_SIZE or GDAL_CACHEMAX
* PAMRasterBand: add presence flag for Offset and SetScale so that GetOffset()/GetScale() properly reports if they are defined in PAM
* GDALDefaultOverviews::BuildOverviews(): fix typo in detection of 1x1 overview (1730)
* Fix precision loss at GDALResampleChunkC32R with complex data
* Fix precision loss at GDALComputeBandStats with complex data
* Proxy pool: Load band block sizes if not provided at creation. Fixes floating point exception on copy overviews from PRF dataset to destination dataset.
* GTiff and PAM: allow serializing WKT2 for SRS using non-WKT1 compatible projections such as Vertical Perspective (1856)
* RasterIO(): fix non-neareset resampling over nodata blocks (1941)
* Overview dataset (-oo OVERVIEW_LEVEL): expose mask if the source dataset has a mask with overviews
* GDALUnrolledCopy<GByte,2,1>: fix SSE2-only implementation (when SSSE3 is not available, on older AMD CPUs)
* PAM: support reading GCPs from ESRI GeodataXform in .aux.xml files
* Make it possible to call BuildOverviews() on a dataset returned by GDALBuildVRT()
* GDALDataset::SetProjection(): re-allow the use of PROJ4 strings (2034)

Utilities

* GDALInfo(): fix axis order issue in long,lat corner coordinates, in particular when reading from a .aux.xml with a ProjectedCRS (2195)
* gdal_translate: Make 'gdal_translate foo.tif foo.tif.ovr -outsize 50% 50% -of GTiff' work
* gdal_translate: clamp/round source nodata value when not compatible of the target data type. Was already done when using -a_nodata, but not with implicit copy (2105)
* gdalwarp: accept output drivers with only CreateCopy() capabilities
* gdalwarp: adjust nodata values, passed with -srcnodata/-dstnodata, and close to FLT_MAX to exactly it (1724)
* gdalwarp: fix wrong axis order when using source/target CRS being a geographic3D CRS such as EPSG:4979, and with vertical shift grid application (1561, GDAL 3.0 regression)
* gdal_contour: remove explicit width/precision=12/3 of the elev field (1487)
* gdal_contour: turn on quiet mode if output dataset is standard output (refs 2057)
* gdaldem: avoid potential integer overflow in color-relief mode (2354)
* gdal_calc.py: fixed NaN-streaking in output images when the --allBands option is given to tiled images
* gdal_polygonize.py: fix outputting to geojson without explicit -f switch (1533)
* gdalcompare.py: take into account mask bands
* gdal_retile.py: add resume option (1703)
* gdallocationinfo: emit verbose error when dataset cannot be opened (1684)
* gdallocationinfo and gdaltransform: print a hint when values are expected from the command line and stdin is an interactive terminal (refs 1684)
* Python utilities: fix GetOutputDriverFor() when multiple drivers found (1719)
* gdal2tiles.py: add remaining resample methods
* gdal2tiles.py: add option for setting the tile size (2097)
* gdal2tiles.py: add --xyz option to generate tiles in the OSM Slippy Map standard (2098)
* gdal2tiles.py: show warning when running against non-Byte input (1956)
* gdal2tiles.py: update cache calculation (2020)
* gdal2tiles.py: check that min zoom <= max zoom (2161)
* gdal2tiles.py: ignore nodata values that are not in the range of the band data type
* gdal2tiles.py: fix hang when --s_srs specified but image lacks georeferencing
* gdal_translate / gdalwarp / ogrct: allow dealing with non-WKT1 representable SRS (1856)
* gdal_edit.py: add a -units switch
* gdal_edit.py: add -a_ulurll switch
* gdal_fillnodata.py/GDALFillNodata: fix crash when smooth_iterations is used, and with some progress functions such as the one used by Python (1184)
* Python scripts and samples: use python3 for shebang (2168)

Sample scripts

* Add tile_extent_from_raster.py: sample script to generate the extent of each raster tile in a overview as a vector layer
* Add gdal_remove_towgs84.py script

GDAL drivers

Multiple drivers:
* GTiff, GPKG, MBTiles, PostgisRaster drivers: share lock of overview dataset with parent dataset (1488)
* HDF5 and netCDF: fix crash when reading attributes of type string of variable length with NULL values
* CTable2/LOSLAS/NTv1/NTv2: document in metadata that positive longitude shift values are towards west
* Revise raster drivers GDAL_DMD_HELPTOPIC
* JP2KAK and JP2OPENJPEG: fix to read images whose origin is not (0,0)
* Strip TOWGS84 when datum is known, in GTiff, Spatialite and GPKG drivers

BAG driver:
* modify way georeferencing is read (particularly pixel sizes and origin) (1728)
* Backward compatibility for metadata reading for BAG < 1.5 (2428)

BSB driver:
* Report PLY coordinates as a WKT POLYGON in a BSB_CUTLINE metadata item

BYN driver:
* fix nodata value for Int32 encoded products

DAAS driver:
* accept 4-band RGBA PNG response even when a single band is requested

DIMAP driver:
* don't look inside Dataset_Components if Raster_Data is present
* avoid reparsing xml if already a product dimap
* ignore missing strip xml file

DDS driver:
* add read support

DTED driver:
* Add DTED_APPLY_PIXEL_IS_POINT environment switch (2384)
* emit a CE_Failure instead of a CE_Warning in case of checksum verification failure (2410)
* support E96 as well as MSL for COMPD_CS (2422)

EEDA driver:
* fix startTime / endTime comparisons that were incomplete in 1506

FITS driver:
* fix memory leaks

ENVI driver:
* add read support for reading GCPs (1528), and fix off-by-one offset on line,pixel on reading GCP
* fix potential use of invalid pointer on some unusual std::string implementations (1527)
* preserve 'byte order' on update (1796)

GPKG driver:
* support opening subdataset of /vsicurl/ files (2153)

GTiff driver:
* improve performance of internal overview creation (1442)
* in COPY_SRC_OVERVIEWS=YES, interleave mask with imagery, and add leader/trailer to strile
* optimize read of cloud-optimized geotiffs
* do not generate a TIFFTAG_GDAL_METADATA with color interpretation information for JPEG YCbCr compression
* make -co NUM_THREADS produce reproducible output
* make overview blocksize defaults to same as full-resolution
* move deferred tile/strip offset/bytecount loading to libtiff
* make WEBP_LEVEL to be honored in Create() mode (fixes 1594)
* PushMetadataToPam(): early exit when PAM is disabled, to avoid error messages
* remove support for libtiff 3.X
* set a LAYOUT=COG metadata item in the IMAGE_STRUCTURE metadata domain of the dataset when the hidden feature declarations typical of a COG file are found
* fix memory leak with -co APPEND_SUBDATASET=YES
* fix error message for NBITS != 16 and Float32
* add explicit error message when trying to create a too big tiled TIFF file (refs 1786)
* ensure GDAL PROJ context is used for all libgeotiff functions (requires internal libgeotiff / libgeotiff 1.6)
* make sure that GetMetadataDomainList() doesn't return EXIF when there's no EXIF metadata
* GTIFGetOGISDefn: avoid querying UOM length info when it is KvUserDefined to avoid an error to be emitted
* on CRS reading, avoid unsetting of EPSG code when ProjLinearUnitsGeoKey = Linear_Foot_US_Survey and the CRS also uses that unit (2290)
* do not write in GeoTIFF keys non-standard projections
* do not write TOWGS84 that come from EPSG codes, unless GTIFF_WRITE_TOWGS84=YES is explicitly set
* GTiff writing: workaround PROJ 6.3.0 bug when writing a EPSG:4937 ETRS89 Geog3D CRS
* GTiff writing: do not write by default EPSG:3857/WebMercator as a ESRI PE string. Fixes 3.0 regression
* avoid crash on single-component file with Whitepoint and PrimaryChromaticities tags
* libtiff: BigTIFF creation: write TileByteCounts/StripByteCounts tag with SHORT or LONG when possible
* Internal libgeotiff: set UOMLength from GeogLinearUnits (for geocentric CRS) (1596)
* Internal libgeotiff: upgrade to libgeotiff 1.6.0dev to support OGC GeoTIFF 1.1
* Internal libtiff: resync with internal libtiff (post 4.1.0)

GRIB driver:
* do not do erroneous K->C unit conversion for derived forecasts whose content is not a temperature, but a derived quantity, such as spread
* avoid erroneous K->C conversion for Dew point depression
* update GRIB tables to degrib 2.24
* add missing entries in MeteoAtmoChem table
* add more values from Table 4.5 in Surface type table
* add support for template 4.48 Optical Properties of Aerosol
* add support for rotated lat-lon grids
* avoid quadratic performance on GRIB2 datasets using subgrids within a single GRIB message (2288)

GXF driver:
* avoid closing the file pointer before being sure this is a GXF driver, otherwise this can prevent the opening of some raw format files (1521)

HDF4 driver:
* fix retrieval of non-string swath and grid attributes
* fix GR support for non-Byte rasters
* remove broken attribute reading
* fixes related to color table

HDF5 driver:
* avoid error report of the HDF5 library when _FillValue attribute is missing
* Make GH5_FetchAttribute(CPLString) more robust and able to cope with variable-length string
* type detection: only detect complex data type if the component names start with r/R and i/I (refinement of 359)
* add a way to open datasets split over several files using the 'family' driver
* fix reading single dimension dataset (2180)

HFA driver:
* fix writing of compressed file when a RLE run count is in the [0x4000,0x8000[ range or [0x400000, 0x800000[ (2150)

IGNFHeightASCIIGrid driver:
* fix to read RASPM2018.mnt grid

IRIS driver:
* make identification more restrictive to avoid false-positive identification of raw binary formats such as ENVI (1961)

ISIS3 driver:
* extract band name from BandBin group, and wavelength/bandwidth (1853)
* preserve label in PAM .aux.xml when copying to other formats (1854)
* add support for PointPerspective projection (1856)
* add support for Oblique Cylindrical projection (1856)

JP2ECW driver:
* add support for ECWJP2 SDK 5.5

JP2OpenJPEG driver:
* Fix multi-threading race condition (1847)
* fix reading overviews, when tiled API is used, and the dimensions of the full resolution image are not a multiple of 2^numresolutions (1860)
* fix to return the proper number of bytes read when we read more than 2 GB at once (fixes https://github.com/uclouvain/openjpeg/issues/1151)

JP2KAK driver:
* fix issue with multi-threaded reads
* NMAKE: Allow users to tweak/append extras to KAKINC (1584)

JPEG driver:
* fix further calls to RasterIO after reading full image at full resolution (1947)
* tune sanity check for multiple-scan (QGIS 35957)
* in case of multiscan image and implicit overviews, limit memory consumption

KEA driver:
* return error when deleting metadata item rather than crashing (1681)
* Backport thread safety fixes and nullptr tests from standalone driver (2372)

LOSLAS driver:
* add support for .geo geoid models

MEM driver:
* Set access mode to the one required in Open()

MRF driver:
* fix relative file name detection
* relax TIFF tile format rules on read
* Accept any known projection encoding
* use PNG library for swapping
* fixes caching MRF issue

MrSID driver:
* add MRSID_PLATFORM to frmts/mrsid/nmake.opt

netCDF driver:
* improve performance when reading chunked netCDF 4 bottom-up files (read-only)
* correctly parse grid_mapping attribute in expanded form
* allow "radian" value for the X/Y axis units
* very partial workaround for an issue in libnetcdf 4.6.3 and 4.7.0 with unlimited dimensions (refs https://github.com/Unidata/netcdf-c/pull/1442)
* NCDFIsUserDefinedType(): make it work for types in subgroups
* Disregard valid range if min > max (1811)
* for byte (signed/unsigned) variables, do not report a nodata value if there's no explicit _FillValue/missing_value as recommended by the netCDF specs. And for other data types use nc_inq_var_fill() to get the default value
* do not report nodata if NOFILL is set
* fix bottom-up identification with negative scale_factor for y axis (1383)
* fix issue when opening /vsicurl/http[s]://example.com/foo.nc filenames (2412)
* Fix support of WKT1_GDAL with netCDF rotated pole formulation

NGW driver:
* Add support for additional raster types and QGIS styles.
* Add more server side attribute filters.

NITF driver:
* skip bad UDID data (1578)

NTv2 driver:
* add support for the Canadian NAD83(CRSR)v7 / NAD83v70VG.gvb velocity grid

OZI driver:
* fix axis order issue with georeferencing (3.0 regression)

PDF driver:
* update to use newer versions of pdfium

PDS3 driver:
* report the label in a json:PDS metadata domain
* fix support of Oblique Cylindrical (1856)
* ix opening of datasets with BSQ organization (or single band), where one band is larger than 2 GB (2.3 regression)
* nasakeywordhandler: fixes to be able to read some labels with metadata items whose value is a list on several lines
* add a GDAL_TRY_PDS3_WITH_VICAR configuration option that can be set to YES so that PDS3 datasets that contain a VICAR label are opened by the VICAR driver

PDS4 driver:
* update CART schema to 1D00_1933 and PDS to 1C00 (1851)
* fix reading side of Mercator and Orthographic
* add a CREATE_LABEL_ONLY=YES creation option, and create a <Header> element (1832)
* add write support for LAEA projection

PNG driver:
* Update internal libpng to 1.6.37

PNM driver:
* emit warning if creating file with non-standard extension

RasterLite2 driver:
* fix build against latest librasterlite2, and require it

RMF driver:
* Add support for PZ-90.11 and GSK-2011 coordinate systems
* Read vertical datum info
* Add translation vertical CS ID to dataset's spatial reference

RS2 driver:
* add half-pixel shift to reported GCP line and column numbers (1666)

Sentinel2 driver:
* Add support for exposing Level-2A AOT, WVP, SCL, CLD, SNW data in SAFE_COMPACT format (2404)

TileDB driver:
* add capability to define co-registered attributes per band
* set row-major reads and removed adviseread (1479)
* added support for raster band metadata
* TILEDB_LIBS added for windows build
* partial updates to existing arrays
* support reading tiles in update mode (2185)
* use array metadata to store xml (2103)
* redirect vsis3 calls to tiledb s3 direct calls
* Flush cache in block order for global writes (2391)

TSX driver:
* add PAZ support

USGSDEM driver:
* fix reading FEMA generated Lidar datasets whose header is 918 bytes large

VICAR driver:
* Support FORMAT=HALF, DOUB and COMP
* Support big-endian order for integer & floating point values
* Support VAX floating-point order
* Support BIP and BIL organizations
* Ignore binary label records (NBL), and properly skip binary prefixes (NBB)
* fix reading of EOL labels with non BSQ organizations, and possible confusion with LBLSIZE of EOL overwriting the main one
* improvements in label reading, and report label in a json:VICAR metadata domain
* read binary prefixes as OGR layer
* add read support for BASIC and BASIC2 compression methods
* add write support
* remove obsolete END-OF-DATASET_LABEL, CONVERSION_DETAILS and PIXEL-SHIFT-BUG metadata items that dates back to 1.X era

VRT driver:
* add 'vrt://{gdal_dataset}?bands=num1,...,numN' syntax as a convenient way of creating a on-the-fly VRT with a subset of bands
* VRT warp: do not fail if a block has no corresponding source pixels (1985)
* VRT Python: also probe libpython3.Xm.so.1.0 (1660)
* VRT Python: add Python 3.8 compatibility
* avoid erroneous pixel request do be done with KernelFilteredSource
* VRTRawRasterBand: add GetVirtualMemAuto interface to enable mmap io
* fix requesting a downsampling version of the mask band of a source that has masks and overviews
* VRT pansharpening: fix crash when NoData is set and input multispectral bands are separate files (2328)
* fix IGetDataCoverageStatus() that can cause issue for the use case of https://lists.osgeo.org/pipermail/gdal-dev/2020-April/051889.html
* gdalvrt.xsd: add 'dataAxisToSRSAxisMapping' attribute for GCPList element (2378)

WCS driver:
* pass user-supplied progress function to curl HTTP request when using DirectRasterIO

WMS driver:
* IReadBlock(): limit number of tiles downloaded at once
* Use curl_multi_wait instead of socket API (1789)
* AGS: Remove unused parameters from url

OGR 3.1.0 - Overview of Changes

Core

* Support API-level precision/round for geometry WKT (1797)
* OGR SQL: make LIKE behave in a case sensitive way from now
* OGR SQL: support constructs 'A OR B OR C ... OR N' with many successive OR
* SQL SQLite: do not propagate 'IS / IS NOT value' constructs to OGR SQL
* SQL SQLite: add support for ST_MakeValid() using OGRGeometry::MakeValid() if not exposed by Spatialite already
* Rename swq.h->ogr_swq.h and install it, mark SQL query parse API with
CPL_UNSTABLE_API macro (1925)
* SQLite dialect: fix issue when using JOIN on a layer without fast filter count capability
* OGRSimpleCurve::getPoints() with XYZM: fix wrong stride used for M array
* OGRSimpleCurve: fix reversePoints() and addSubLineString() to take into account M dimension
* Add OGR_G_CreateGeometryFromEsriJson() and map it to SWIG
* OGRLinearRing::isPointOnRingBoundary(): fix incomplete test that could falsely return true if the point was aligned with a segment, but not between the nodes. Impact correct reconstruction of holes in shapefile driver
* OGRGeometryFactory::ForceTo(): fix crash when forcing a MultiPolygon Z/M/ZM to a CompoundCurve (2120)
* OGRGeometryFactory::forceToMultiLineString(): fix for a GeometryCollection of LineStringZ/M/ZM (1873)
* OGRGeometryRebuildCurves(): only try to reconstruct curved geometry if one of the input geometries has really a non-linear portion
* curveFromLineString(): make sure to exactly close the compound curve if the input curve is itself closed
* GDALDataset::CopyLayer(): fix crash when using DST_SRSWKT option. And also set SetAxisMappingStrategy(OAMS_TRADITIONAL_GIS_ORDER)
* Add OGR_G_RemoveLowerDimensionSubGeoms()

OGRSpatialReference

* Revise how SRS methods deal with TOWGS84. Add OSR_ADD_TOWGS84_ON_IMPORT_FROM_EPSG, OSR_ADD_TOWGS84_ON_EXPORT_TO_PROJ4 and OSR_ADD_TOWGS84_ON_EXPORT_TO_WKT1 configuration options. See https://github.com/OSGeo/gdal/commit/cc02dc4397c7ec43ec4c4b842e5faabe16c54904 for details
* SetFromUserInput(): add capability to import PROJJSON
* add ExportToPROJJSON() (PROJ >= 6.2)
* GetAxis(): make it work with a compound CRS (1604)
* Coordinate transformation: fix invalid output with some input coordinates in EPSG:4326 to EPSG:3857 transformation (3.0 regression)
* Coordinate transformation: Coordinate transformation: add a OGR_CT_OP_SELECTION=PROJ/BEST_ACCURACY/FIRST_MATCHING config option. Defaults to PROJ for PROJ >= 6.3
* importFromWkt(): emit a CPLError() in case of import failure (1623)
* Add OSRGetAxesCount() to C API and SWIG bindings
* Add OSRPromoteTo3D() and map it to SWIG (PROJ >= 7) (1852)
* importFromESRI(): acept COMPD_CS (1881)
* add an internal cache for importFromEPSG() and importFromWkt(). Helps performance for MapServer PROJ6 migration
* Add support for Vertical Perspective projection (1856)
* Add a OSRGetPROJSearchPaths() function and a SWIG osr.GetPROJVersionMicro()
* Fix use-after-free issue when destroying a OGRSpatialReference object in a thread when another thread has created it but has been destroy in-between
* Coordinate transformation: make it work with hacky WKT1 rotated pole from netCDF driver
* Add OGR_GeomTransformer_XXXX API that wraps OGRGeometryFactory::transformWithOptions() and expose it to SWIG (fixes 1911)
* Fix PROJ usage across fork() calls (2221)
* OGRCoordinateTransformation: correctly deal when transforming CRS that includes +lon_wrap= or similar qualifiers
* Add OSRIsDerivedGeographic()
* EPSGTreatsAsNorthingEasting(): fix it to properly deal with Polar projected CRS with northing,easting order

Utilities

* ogrinfo: add a -nogeomtype switch
* ogrinfo: fix to output WKT2 SRS by default. Was done correctly for several geometry column, but not single one
* ogr2ogr: emit better error message when using -f VRT
* ogr2ogr: improve performance of -explodecollections on collections with big number of parts
* ogr2ogr: avoid non-relevant warning 'Input datasource uses random layer reading, but output datasource does not support random layer writing' when converting one single layer
* ogr2ogr: allow to combine -nlt CONVERT_TO_LINEAR and -nlt PROMOTE_TO_MULTI (2338)
* ogr2ogr: add a -makevalid switch (requires GEOS 3.8 or later) and expose it in Python as makeValid=True options of gdal.VectorTranslate()

OGR drivers

Multiple drivers:
* GML/WFS: add support for Date, Time and DateTime fields
* GeoJSONSeq & TopoJSON: avoid false positive detection and errors on unrelated http[s]:// filenames

AmigoCloud driver:
* Modify amigocloud URL endpoint.

AVCE00 driver:
* fix alternance from sequential to per-FID reading

CAD driver:
* Fix read ellipse and arc (1886)

DXF driver:
* Re-add some header and trailer elements that caused compatibility issues with recent Autocad versions (1213)
* Generate correct HATCH boundary elliptical arc segments for certain start/end angles
* Skip "Embedded Object" sections in 2018 version DXFs
* Specify maximum gap between interpolated curve points, configurable with OGR_ARC_MAX_GAP
* do not error out if trying to create a OGR_STYLE field
* fix handling of SPLINE whose first knot is at a very very close to zero negative (1969)
* do not discard Z value when reading a HATCH (2349)
* write (100, AcDbEntity) before (8, layer_name) (2348)
* Correct handling of "off" and "frozen" layers in blocks (1028)

DWG driver:
* add support for ODA 2021.2 (Windows builds)

ElasticSearch driver:
* rename driver to Elasticsearch (s lowercase for search)
* update geometry type name for Points
* Enable support for Elasticsearch 7 (1246)
* Set 'application/json' in RunRequest() with POST (1628)
* GeoJSON type field should be mapped as text in ES>=5
* add FORWARD_HTTP_HEADERS_FROM_ENV open option to pass HTTP headers down to the ES server
* translate constructs like CAST(field_name AS CHARACTER[(size)]) = 'foo' to ES query language

ESRIJson driver:
* attempt identification of SRS from database entries (2007)
* do not require a 'geometry' member to be present in a feature

GeoJSON driver:
* on writing, format OFTDate and OFTDateTime as ISO 8601 strings rather than OGR traditional formatting
* add a DATE_AS_STRING open option that can be set to YES to disable autodetection of date/time/datetime
* Advertise UTF-8 encoding of strings (2151).
* report 3D layer geometry types (1495)
* fix recognizing some documents with members sorted alphabetically (1537)
* avoid SetFeature() to repeat first feature when looping over features (1687)
* use VSIOverwriteFile() to fix update of file on Windows (fixes https://github.com/qgis/QGIS/issues/28580)
* Transform MAX_OBJECT_SIZE to runtime environment option - OGR_GEOJSON_MAX_OBJ_SIZE
* on reading of a file that use crs.name = urn:ogc:def:crs:OGC:1.3:CRS84, report EPSG:4326 as we used to do in GDAL 2 (2035)
* in writing mode, implement GetExtent() (2269)
* Add ID_GENERATE option for generating missing feature ids (2406)

GeoJSONSeq driver:
* make Open() return successfully only if at least one feature is detected

GML driver:
* support reading standalone geometry (2386)
* fix axis order issue when decoding AIXM ElevationPoint (2356)
* fix axis order issue with gml:CircleByCenterPoint and gml:ArcByCenterPoint ( 2356)
* fix handling of angles with ArcByCenterPoint and urn:ogc:def:crs:EPSG::4326, and compound curves made of a sequence of straight lines and ArcByCenterPoint in a <segments> (2356)

GPKG driver:
* change default value of OGR_GPKG_FOREIGN_KEY_CHECK to NO, so as to avoid issues in downstream software
* insert more accurate spatial extent in gpkg_contents
* on layer creation, check if the SRS is consistent with its advertise AUTHORITY/ID, and if not do not use official EPSG entries (1857)
* allow parsing datetime serialized as OGR strings, and emit warnings when unrecognized content is found (2183)
* when writing a layer of geometry wkbUnknown, make sure to set gpkg_geometry_columns.z/m to 2 when there are geometries with Z/M values (2360)

KML driver:
* set OAMS_TRADITIONAL_GIS_ORDER for SRS returned on returned layers

LIBKML driver:
* make it accept /vsigzip/foo.kml.gz files (1743)

MITAB driver:
* Add friendly layer name (description) support.
* Fix creation of long field names in local encoding (1617)
* don't left truncate numeric values in the .dat when the field formatting is incompatible, but error out (1636)
* Add custom datum/spheroid parameters export
* Update WindowsLatin2 definition (1571)
* identify correctly GDA2020 datum
* do not set (by default) TOWGS84 when reading a known Datum
* cleanup management of update flag (2170)

MSSQLSpatial driver:
* Fix handling empty geometries (1674)
* Fix handling mixed geometries (1678)
* avoid GetExtent() to mess with GetNextFeature() statement, so that ogrinfo -al works properly

MVT driver:
* make CONF option accept a filename as well
* reduce memory usage when processing big geometries (1673)

MySQL driver:
* Add SRID to geometry when creating layer table (1015)
* use INFORMATION_SCHEMA.ST_GEOMETRY_COLUMNS to get SRSId

NAS driver:
* disable generation of .gfs file in read-only file systems (or intended to be), similarly to GML driver

netCDF driver:
* add read/write support for CF-1.8 Encoded Geometries
* add support for vector products Sentinel3 SRAL MWR Level 2

NGW driver:
* Fix dataset access mode
* Add support for layers geometry types with Z

OAPIF driver (previously WFS3):
* updated to OGC API - Features 1.0 core spec (1878)
* correctly handle user query string parameters in connection URL (1710)
* add persistent curl session for better performance
* add capability to use a XML Schema to build the layer field definition and geometry type
* add capability to use JSON schema
* add support for rel=queryables and cql-text
* add a IGNORE_SCHEMA=YES/NO open option
* implement filter-lang=json-filter-expr
* avoid issues with double slash when building a /collections URL

OSM driver:
* make error message hopefully clearer and more complete (2100)

PDF driver:
* fix reading polygon with holes and Bezier curves (1932)
* add a GDAL_PDF_LAUNDER_LAYER_NAMES configuration option
* fix reading strings with escape sequences

PostgreSQL driver:
* add support for PostgreSQL 12 (1692)
* add support for PG:service=xxx syntax and SERVICE open option (2373)
* support PostGIS schema installed in non-public schema (2400)
* do not attempt to create VARCHAR(n) columns with n >= 10485760 (1508)
* be more restrictive when deducing non-nullability of columns in SQL result layers (1734)

Shape driver:
* add read/creation/update support for .shz and .shp.zip
* identify a EPSG code if the confidence is >= 90 (https://github.com/OSGeo/PROJ/issues/1799)
* better deal with empty .shp+.shx and SHAPE_RESTORE_SHX (1525)
* launder layer name to get Windows compatible filename
* try to better deal with polygons with parts touching on an edge (which is illegal simple features) (1787)
* fix crash when creating a layer with a wkbNone geometry type but a SRS (3.0 regression)
* include fseek() optimization of https://github.com/OSGeo/shapelib/pull/3
* expose .dbf and .cpg source encodings in the SHAPEFILE metadata domain
* correctly update layer extent when first feature is a point at (0,0) (2269)

S57 driver:
* s57objectclasses.csv: add missing TXTDSC attribute for DRYDOC class (1723)
* s57objectclasses.csv: add wtwdis and unlocd for distance marks from IENC (2123)
* s57objectclasses.csv: add PICREP attribute to LNDMRK object class
* Added handling of ISDT when using updates (895)
* Added creation of additional field "ATTF" when missing while updating (2249)

SOSI driver:
* Append values from duplicate fields when setting new appendFieldsMap open option (1794)

SQLITE driver:
* fix crash in loading sqlite extensions on iOS (1820)
* fix conversion of geometry collections (and derived types) in geometry collections as Spatialite geometries, by flattening the structure
* cleanup management of update flag (2162)
* GetSpatialiteGeometryHeader(): fix bug regarding detection of empty geometries

SXF driver:
* Add open options with RSC file name
* Use SXF_LAYER_FULLNAME from dataset open options
* Use SXF_SET_VERTCS from dataset open options
* Add OGRSXFLayer::CanRecode and check it for OLCStringsAsUTF8 capability
* Add driver identify function (1607)

VFK driver:
* use a faster implementation of VFKDataBlockSQLite::LoadGeometryPolygon()

VRT driver:
* set OAMS_TRADITIONAL_GIS_ORDER for LayerSRS (1975)

WaSP driver:
* on creation, make sure the layer geometry type set on the feature definition is wkbLineString25D

WFS driver:
* Support FlatGeobuf as WFS outputformat (2135)
* skip silently GeoServer EPSG:404000 dummy CRS

XLSX driver:
* add support for .xlsm extension

SWIG Language Bindings

All:
* add osr.SetPROJSearchPath(path) that can be used since setting PROJ_LIB from C does no work (1647)

Python bindings:
* add 'add' option to gdal.Rasterize
* add hint&workaround for ImportError on Windows Python >= 3.8
* add compatibility with SWIG 4.0 (1702)
* build modules in parallel
* honour gdal.UseExceptions() in numpy related methods (gdalnumeric module) (1515)
* update to SWIG 3.0.12 to have better error message (1677)
* make the feature iterator on the layer call ResetReading()
* Removed calls to deprecated imp module (2264)
* Add numpy as extras_require dependency (2158)
* emit exception is osr.SpatialReference(wkt) fails, even if in non-UseExceptions() mode, to avoid later cryptic exception (2303)
* NUMPYDataset::Open() / gdal_array.OpenArray(): honour writable flag of the numpy array to decide update status of GDAL dataset
* fix invalid check for Dataset.ReadAsArray(buf_obj=some_array, interleave='pixel') scenario

GDAL/OGR 3.0.0 Release Notes

In a nutshell...

* Implement RFC 73: Integration of PROJ6 for WKT2, late binding capabilities, time-support and unified CRS database. PROJ >= 6 is now a build requirement
https://trac.osgeo.org/gdal/wiki/rfc73_proj6_wkt2_srsbarn
* New GDAL drivers:
- DAAS: read driver for Airbus DS Intelligence Data As A Service
- TileDB: read/write driver for https://www.tiledb.io (#1402)
* New OGR drivers:
- MongoDBv3: read/write driver using libmongocxx v3.4.0 client (for MongoDB >= 4.0)
* Improved drivers:
- FITS: read/write support for scale, offset and CRS
- netCDF: read support for groups
- PDF: add a COMPOSITION_FILE creation option to generate a complex document
- PDS4: subdataset creation support, read/write table/vector support
* Support for minimal builds on Unix (1250)
* Add a docker/ directory with Dockerfile for different configurations
* Continued code linting

New installed files

* Resource file: pdfcomposition.xsd

Removed installed files

* Removal of resource files related to EPSG and ESRI CRS databases: compdcs.csv, coordinate_axis.csv, datum_shift.csv, ellipsoid.csv, esri_epsg.wkt, esri_extra.wkt, esri_Wisconsin_extra.wkt, gcs.csv, gcs.override.csv, gdal_datum.csv, geoccs.csv, pcs.csv, pcs.override.csv, prime_meridian.csv, projop_wparm.csv, unit_of_measure.csv, vertcs.csv, vertcs.override.csv

Backward compatibility issues

See MIGRATION_GUIDE.txt

GDAL/OGR 3.0.0 - General Changes

Build(Unix):
* Allow internal drivers to be disabled (1250)
* Fix build with OpenBSD which doesn't support RLIMIT_AS (1163)
* Fix MacOS build failures due to json-c
* Poppler: require pkg-config
* PostgreSQL: Switch from pg_config to pkg-config (1418)
* fix build --without-lerc (1224)
* fix netcdf_mem.h detection in netcdf 4.6.2 (1328)
* Fix build --with-curl --without-threads (1386)

Build(Windows):
* nmake.opt: remove unicode character at line starting with ' 4275' that apparently cause build issues with some MSVC versions (1169)

All:
* PROJ >= 6.0 is a required external dependency
* libgeotiff >= 1.5 should be used for builds with external libgeotiff
* Poppler: drop support for Poppler older than 0.23.0
* Poppler: add support for 0.72.0, 0.73.0, 0.75.0, 0.76.0

3.0.0

Not secure
Port:
* Add capability to define external VSI virtual file systems from C API (1289)
* MiniXML: Fix wrong node order when calling CPLAddXMLAttributeAndValue() after CPLCreateXMLElementAndValue()
* /vsicurl/: ReadMultiRange(): use default implementation if there is a single range (1206)
* /vsicurl/: ignore proxy CONNECT response headers (1211)
* /vsicurl/: automatically detect signed URLs where host ends with a port number; also detect signed URLs as created with the AWS4-HMAC-SHA256 method (1456)
* /vsizip/: Add config option to create zip64 extra fields by default (1267)
* /vsis3/, /vsigs/, /vsiaz/: add HTTP retry logic in writing code paths
* Fix data race in VSIFileManager::Get
* cpl_zipOpenNewFileInZip3: fix memory leak in error code path. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=13103.
* VSIGZipWriteHandleMT: avoid potential deadlock in case of error
* Fix assertion in CPLGetValueType when testing non-ASCII chars
* /vsihdfs/: fix Read() when more than one hdfsRead call is needed (1349)
* Fix potential buffer overflow in CPLODBCSession::Failed (1390)
* /vsitar/: handle .tar file header with space padding instead of 0 for file size (1396)

Core:
* Support blocks larger than 2 billion pixels/bytes
* Make CPLHaveRuntimeSSSE3() and CPLHaveRuntimeAVX() use GCC constructor functions
* Move RawDataset base class to gcore/ (1268)
* RasterBand/Dataset::RasterIO(): enforce access mode on write
* PAM: preserve existing metadata when setting new one (1430)
* RawDataset: use generic RasterIO() implementation when non-nearest resampling is asked (1301)
* DumpJPK2CodeStream(): dump PLT and POC markers

Algorithms:
* RPC transformer: test success code of GDALRPCTransform() in GDALCreateRPCTransformer()
* RPC transformer: add a RPC_FOOTPRINT transformer option to provide a polygon in long/lat space where the RPC is valid, and also make gdalwarp use GDALSuggestedWarpOutput2() to restrict the bounding box of the output dataset
* GDALFillNodata(): fix wrong comparison in QUAD_CHECK() macro: nNoDataVal is only assigned to target_y values (1228)
* GDALFillNodata(): reinitialize panLastY array to nNoDataVal before bottom to top pass (1228)
* GDALFillNodata(): do an extra iteration to reach the maximum search distance in all quadrants (1228)
* GDALRasterizeLayersBuf():support any GDAL data type for buffer,and pixel and line spaceing arguments
* GDALResampleChunk32R_Mode: performance improvement
* Rasterize with MERGE_ALG=ADD: avoid burning several times intermediate points of linestrings (1307)
* rasterize: fix crash when working buffer is larger than 2GB (1338)

Utilities:
* gdal_translate: add "-nogcp" option (1469)
* gdal_contour: remove explicit width/precision=12/3 of the elev field (1487)
* gdaldem hillshade: add -igor option (1330)
* gdalwarp -crop_to_cutline: do not round computed target extent to be aligned on the grid of the source raster if -tr is set (restore partially pre 2.4 behavior) (1173)
* gdalwarp: assume -tap when using -crop_to_cutline, -tr and -wo CUTLINE_ALL_TOUCHED=TRUE, so as to avoid issues with polygons smaller than 1x1 pixels (1360)
* gdal2tiles: give local tile layer and basemap layers same min/max zoom levels as generated tile cache
* gdal2tiles: fix breakage of openlayers.html getURL() javascript function, introduced in GDAL 2.3.3 / 2.4.0 (1127)
* gdal2tiles: prevent accidental copy of full GeoTIFF into temporary .vrt file
gdal2tiles: Refactor and fix multiprocessing completion handling
* gdal_fillnodata.py: preserve color interpretation and table
* gdal_fillnodata.py: do not set geotransform if source doesn't have one
* gdalsrsinfo: do not silence errors when calling SetFromUserInput()
* gdal_retile: Use nodata value from origin dataset
* gdal_edit.py: allow setting band-specific scale and offset values (1444)
* validate_cloud_optimized_geotiff.py: check if file is only greater than 512px (1403)
* validate_cloud_optimized_geotiff.py: report headers size

Multidriver fixes:
* GTiff, GPKG, MBTiles, PostgisRaster drivers: ensure that main dataset and overviews share the same lock, so as to avoid crashing concurrent access (1488)

ADRG driver:
* modified to ensure that there is no confliction between ADRG and SRP when opening a .gen file (953)

AIGRID / AVCBin:
* fix filename case adjustment that failed on /vsi filesystems (1385)

BAG driver:
* fix potential nullptr deref on corrupted file

COSAR driver:
* avoid out-of-bound write on corrupted dataset. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=12360.

EEDA driver:
* report 'path' metadata in 'path' field

GPKG driver:
* allow negative srs_id values in gpkg_spatial_ref_sys
* reduce memory requirements for cached tiles

GTiff diver:
* supports tiles/strips larger than 2GB
* add APPEND_SUBDATASET=YES capability to create subdataset / new TIFF page to an existing file
* only report scale/offset deduced from ModelTiepointTag and ModelPixelScaleTag if the SRS has a vertical component (and thus currently if GTIFF_REPORT_COMPD_CS is set) (https://issues.qgis.org/issues/20493)
* TIFF Lerc: properly initialize state after Create() so that BuildOverviews() succeed (1257)
* emit merged consecutive multi-range reads (1297)
* add warnings when using unsupported combination of internal mask+external overview, and fix COPY_SRC_OVERVIEWS=YES so that it does not copy ALL_VALID masks (1455)
* do not generate a TIFFTAG_GDAL_METADATA with color interpretation information for JPEG YCbCr compression
* Internal libtiff and libgeotiff: resync with upstream

FITS driver:
* new functions for Scale Offset and FITS World Coordinate System read and write (1298)

GeoRaster driver:
* Fix memory leaks

HDF5 driver:
* support reading blocks larger than 2GB
* fix handling of attributes of type SCHAR, UCHAR, USHORT and UINT (https://github.com/mapbox/rasterio/issues/1663)
* detect nodata from netCDF _FillValue (1451)
* add more strict checks for accepting datasets for GCP, and handle nodata in GCP too (1451)

IGNFHeightAsciiGrid driver:
* add support for RAF18.mnt

JPEG driver:
* fix GDAL 2.3.0 performance regression when decoding JPEG (or GPKG using JPEG) images (1324)

KEA driver:
* add support for /vsi file systems

KMLSuperOverlay driver:
* report color table of single overlay datasets, and also handle some variation in the KML structure (https://issues.qgis.org/issues/20173)

MRF driver:
* sparse index and internal resampling fixes
* fix integer overflow. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=13974

MrSID driver:
* fix potential crash when a zoom level cannot be opened

netCDF driver:
* implement support for NetCDF-4 groups on reading (1180)
* support complex data types (1218)
* fix crash when opening a dataset with an attribute of length 0 (1303)
* fix IWriteBlock() to support non-scanline blocks, and use the chunk size
* better deal with datasets indexed with unusual order for x/y dimensions
* avoid inappropriate shift by -360 when attribute axis=X is set (1440)

NGW driver:
* Add CreateCopy function

NITF driver:
* avoid harmless floating point division by zero. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=12844.

PCIDSK driver:
* avoid uint overflow and too big memory allocation attempt. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=12893

PDF driver:
* Add a COMPOSITION_FILE creation option to generate a complex document
* And a gdal_create_pdf.py sample script
* Fix selection of Poppler PDF layers with duplicate names (1477)
* avoid division by zero when generating from vector content whose bounding box is almost a horizontal or vertical line. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=13408

PDS3:
* fix decoding of band interleaved images (such as for CRISM HSP) (1239)
* add support for ENCODING_TYPE=DCT_DECOMPRESSED (1457)

PDS4 driver:
* add subdataset creation support, and getting/setting the band unit
* update template and code to PDS v1B00 schema versions

VRT driver:
* Python pixel functions: add shared object name for python 3.7
* VRT: in case of no SourceProperties, do not use global shared datasets, but only shared to the owning VRTDataset, to avoid potential reference cycles and annoying related issues. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=13476.

WCS driver:
* avoid potential out-of-bound access

WMS driver:
* use proper JSon parsing for ESRI MapServer document (1416)
* Add url parameters escaping to ArcGIS Server minidriver
* avoid warning when a wms cache doesn't exist

XPM driver:
* fix read heap buffer overflow on corrupted image. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=13455.

XYZ driver:
* add creation options DECIMAL_PRECISION and SIGNIFICANT_DIGITS like with AAIGrid
* fix regression regarding header lines that are not X,Y,Z (1472)

OGR 3.0.0 - Overview of Changes

Core:
* Add OGR_G_MakeValid() (requires GEOS 3.8)
* change prototye of OGRFeature::SetField( int iField, int nBytes, GByte *pabyData ) to ( ... , const void* pabyData), and same for OGR_F_SetFieldBinary().
* Polyhedral surface: fix importFromWKT to properly fix Z/M flag
* OGRBuildPolygonFromLines: avoid generating effectively duplicate points
* OGRBuildPolygonFromEdges(): improve performance. https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=13798
* OGRGeometryFactory::transformWithOptions(): if WRAPDATELINE=YES, test that the geometry SRS is geographic
* OGRGeometryFactory::GetCurveParameters(): fix assertion when coordinates are very near 0
* Expat XML parsing: add OGR_EXPAT_UNLIMITED_MEM_ALLOC=YES config option to workaround failure for very specific cases
* OGRLineString::segmentize(): fix issues when segment length is divisible by maxlength (1341)
* OGR SQL: limit recursion in swq_expr_node::Check(). Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=13540
* OGRGeometry / SFCGAL: fix dead code, memory leaks and potential nullptr deref.

OGRSpatialReference:
* Deep rework due to RFC 73 integration
* SRS_WKT_WGS84 macro replaced by SRS_WKT_WGS84_LAT_LONG
* Add OSRSetPROJSearchPaths(), OSRExportToWktEx(), OSRGetName(), OSRIsSameEx(), OSRGetCRSInfoListFromDatabase(), OSRGetAreaOfUse(),OSRGetAxisMappingStrategy(), OSRSetAxisMappingStrategy(), OSRGetDataAxisToSRSAxisMapping()
* Add OCTNewCoordinateTransformationOptions(), OCTCoordinateTransformationOptionsSetOperation(), OCTCoordinateTransformationOptionsSetAreaOfInterest(), OCTDestroyCoordinateTransformationOptions(), OCTNewCoordinateTransformationEx(), OCTTransform4D()
* Remove OSRFixupOrdering(), OSRFixup(), OSRStripCTParms(), OCTProj4Normalize(), OCTCleanupProjMutex(), OPTGetProjectionMethods(), OPTGetParameterList(), OPTGetParameterInfo()

Utilities:
* ogrinfo: report TITLE metadata in summary layer listing
* ogr2ogr: for drivers supporting ODsCCreateGeomFieldAfterCreateLayer, do not create geometry column if -nlt none
* ogrmerge.py: add shared='1' to speed-up -single mode with many layers

CARTO driver:
* Overwrite tables in single transactions
* Improve documentation and warnings around CARTODBFY (1445)

CSW driver:
* fix crash when geometry parsing fails (1248)

DODS driver:
* fixes related to memory leaks and null pointer dereferences

DXF driver:
* support RGB true color values
* fix the coloring of ByBlock entities inserted via a ByLayer INSERT
* fix double-free issue in case of writing error. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=13516.

FileGDB/OpenFileGDB drivers:
* be robust when winding order of outer ring is incorrect (1369)

Elasticsearch driver:
* Fixed index comparison bug when a index have at least one mapping
* Fix _mapping url for Elasticsearch 7 compatibility

GeoJSON driver:
* speed-up random reading with GetFeature() by storing a map FID->(start,size) to retrieve performance similar to GDAL 2.2 or before (https://issues.qgis.org/issues/21085)
* report 3D layer geometry types (1495)

GeoJSONSeq driver:
* be more robust to invalid objects, and fixes performance issue on corrupted files. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=13770.

GML driver:
* write SRSName element in .gfs when parsing a GML file with srsName only on top-level boundedBy element (1210)
* Add "FeatureType" to list of suffixes recognized by XSD parser (1313)
* GML/WFS: add minimum support for 'hexBinary' type (as string) (1375)

GMLAS driver:
* avoid null pointer dereference on some schemas
* do not use space as separator for schema filename in XSD open option (1452)

GMT driver:
* use file extension based detection to accept files without header (1461)

MongoDB driver:
* fix related to filters in GetFeature()

MITAB driver:
* Add encode/decode feature labels to/from UTF-8 encoding while MIF file read/write (1151)
* .tab: fix deleting a feature without geometry (1232)
* adapt dynamically default projection bounds to false_easting/false_northing values (1316)
* avoid potential assertion or stack buffer overflow on corrupted .ind files. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=11999
* prevent potential infinite recursion on broken indexes. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=12739.
* TAB_CSLLoad(): fix performance issue. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=13588
* avoid long processing on corrupted .mif files. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=13152

MSSQLSpatial driver:
* Add support for curve geometries (1299)
* Add option to expose the FID column as a feature attribute (1227)
* Adding improved extent queries
* Fix extent calculation for geography type, take care of invalid geometries

NGW driver:
* Fix get children API. Add authorization support to create dataset options
* Add support for feature extensions in OGRFeature native data
* Add feature query via chunks, attribute and spatial filter support
* Add resource type and parent identifier to metadata
* Fix batch update features
* Add JSON_DEPTH open option
* Add check forbidden field names, check duplicate field names.

OCI driver:
* Add MULTI_LOAD to open options (1233)
* Fix memory leaks

ODS driver:
* allow opening tables with empty cells with huge values of columns-repeated attribute at end of line (1243)
* avoid potential null pointer dereference when writing to corrupted filename. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=12976.

OGDI driver:
* switch incorrect order for east/west bounds of spatial filter

PDS4 driver:
* add read/write support for tables (vector support)

PGDump driver:
* in WRITE_EWKT_GEOM=YES non-default mode, export geometries to ISO WKT so as to be able to export XYZM (1327)
* Fix emitted SQL when UNLOGGED=ON

PLScenes driver:
* update plscenesconf.json with SkySatCollect and add missing fields for PSOrthoTile

SDTS driver:
* error out if too many errors are raised to avoid timeout in oss-fuzz. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=13819.

Selafin driver:
* avoid null pointer dereference on corrupted files. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=12356.

Shapefile driver:
* DeleteLayer(): make it delete .cpg, .sbn, .sbx, .qpj and other sidecar files (1405)
* speed-up creation of lots of fields with name collisions. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=13065

SQLite driver:
* set sqlite3_busy_timeout, handle SQLITE_BUSY during tile read (1370)
* close database before freeing the spatialite context. Fix crashes on dataset closing, with VirtualShape and recent spatialite versions
* Spatialite: fix update of geometry_columns_statistics when extent goes to infinity (1438)

S57 driver:
* avoid long procession on corrupted datasets. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=13238

SXF driver:
* Fix wrong EPSG codes range (1278)
* Fix memory leaks in SetVertCS()

VFK driver:
* fix curved geometries being ignored (1351)

WFS3 driver:
* handle paging with missing type for rel:next, and better deal with user:pwd in URL
* use 'id' attribute of collection items, if 'name' not available

SWIG Language Bindings

All bindings:
* add Geometry::MakeValid()

Python bindings:
* fix Dataset.ReadAsRaster() on CInt16 data type (82)
* adding overviewLevel option to WarpOptions
* add noGCP options to gdal.Translate()

GDAL 2.x and older

Consult [NEWS-2.x.md](NEW-2.x.md)


Notes on Preparing a GDAL Source Release
========================================


Prerequisites:

1) Check that the release is ready to go as far as ABI (binary compatibility)
is concerned. This can be checked by comparing the installed headers of the
candidate release with the installed headers of the previous release
(diff -ur $(OLD_INSTALL_DIR)/include $(NEW_INSTALL_DIR)/include). The API
is defined as all functions and classes exported by the CPL_DLL keyword.

- For major and minor releases, there must be no function signature change
for the C API. Only new functions are allowed.

- For major releases, the allowed changes in C++ API should (or must?) be
such that user calling C++ code can still compile against new headers
without modification (existing methods can become virtual, default
arguments can be added, new methods or members can be added)

- For minor releases (1.6.1 versus 1.6.0), the C++ ABI stability must be
preserved : no method signature change, no addition of virtual methods, no
new members. Only non-virtual methods can be added.

It may also be helpful to check:
https://abi-laboratory.pro/tracker/timeline/gdal/

2) Delete existing fix_typos directory and run scripts/fix_typos.sh

Process :

1) "make completion" to regenerate scripts/gdal-bash-completion.sh
if new command line switches have been added. scripts/completionFinder.py
must also be edited before if new utilities/scripts are added/removed.

2) Update the release date, and number information in gcore/gdal_version.h.in
(*NOT* gdal_version.h which is a generated file)
Note: the format of GDAL_RELEASE_DATE should be YYYYMMDD.

3) Update two instances of year in CITATION file to the current year.

4) Update "version" and "date-released" in CITATION.cff (Note: the DOI does
*not* need to be updated as it is a generic one)

5) Update the VERSION file (if not already done)

6) Update the version information in the following files:
- ./swig/python/gdal-utils/osgeo_utils/__init__.py (gdal-utils python package)
- ./swig/python/README.rst (libgdal)

7) Update the GDAL_SOVERSION number at top of gdal.cmake according to the
directions given in the comment preceding it.

8) Prepare release overview in the NEWS.md file. For example, to get all changes
from v3.4.0 to current HEAD
git log --reverse -v v3.4.0..HEAD . ":(exclude)autotest" ":(exclude)doc" ":(exclude).github"

For a feature release, e.g 3.6.0, you can use scripts/generate_log_feature_release.py to generate a log without commit that went in the previous 3.5.x bugfix releases with:
python3 scripts/generate_log_feature_release.py

- commit new version to NEWS.md file.

- for bugfixes releases, forward port additions of NEWS.md to master

9) Update doc/source/about_no_title.rst, doc/source/download.rst and doc/source/download_past.rst
to advertise the new release and link to the release notes. Do that in a dedicated commit.

(It is necessary to do that at that stage, so that the ReadTheDocs "stable" branch, based on the latest tag, proposes to download it)

10) If this is a feature release (e.g 3.1), prepare a branch.

git checkout master
git pull origin master

Page 7 of 7

© 2025 Safety CLI Cybersecurity Inc. All Rights Reserved.