Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Vector layer points are not being imported/shown from MySQL datasource #55463

Closed
2 tasks done
Sakoes opened this issue Nov 29, 2023 · 6 comments · Fixed by OSGeo/gdal#9152
Closed
2 tasks done

Vector layer points are not being imported/shown from MySQL datasource #55463

Sakoes opened this issue Nov 29, 2023 · 6 comments · Fixed by OSGeo/gdal#9152
Labels
Bug Either a bug report, or a bug fix. Let's hope for the latter! Data Provider Related to specific vector, raster or mesh data providers Regression Something which used to work, but doesn't anymore

Comments

@Sakoes
Copy link

Sakoes commented Nov 29, 2023

What is the bug or the crash?

Issue

QGis 3.28.13 does not visualise/import points from a vector layer with a MySQL datasource anymore.

In QGis 3.28.13, I import a table from a MySQL datasource as a vector layer. However, the points are not being visualized. I suspect QGis is not importing the data correctly.

I classified this as a bug because this worked fine in QGis 3.4. I had to upgrade because my SQL provider does not accept the TLS version used by QGis 3.4 anymore.

Context

In the images below following can be observed: The coord (coordinate) column from the MySQL database, containing the points that need to be plotted, is missing from the QGis table structure.
I suspect that is the reason why QGis is not plotting/visualizing any points.
It looks like QGis is incorrectly converting the coord column into a geometry column.
Compare images below:

MySQL table structure

The coord column is a "point" datatype:
MySQL table structure

QGis 3.28.13 table structure

The coord column is missing, a geometry is added
QGis table structure

MySQL record example

The coord column contains coordinates:
MySQL record example

QGis 3.28.13 example record:

The geometry column only contains the word "POINT"
QGis record example

Questions

  • Is this a bug in QGis? This worked fine in QGis 3.4
  • Should I reconfigure my MySQL table to use another datatype than "point" in order for QGis to correctly import the coordinates.

Steps to reproduce the issue

Steps

  1. layer > add layer > vector layer
  2. In the vector layer panel:
source type: database
encoding automatic

Database Type: mysql
Connections: myconnection
Test Connection > Succesful
add 
  1. select items to add: tableWithCoordinates (shown in image above) > add layers
  2. Check attributes of imported layer -> coord column is missing, geometry column is added as described above
  3. I get following warning but I think it is unrelated:
this layer appears to have no projection specification. by default, this..
Choose: BD72 / Belgian Lambert 72

Versions

3.4 -> worked fine, but uses a deprecated TLS version
3.28.13 -> issue described above

QGIS version
3.28.13-Firenze
QGIS code revision
3b4db4f
Qt version
5.15.3
Python version
3.9.5
GDAL/OGR version
3.8.0
PROJ version
9.3.0
EPSG Registry database version
v10.094 (2023-08-08)
GEOS version
3.12.1-CAPI-1.18.1
SQLite version
3.41.1
PDAL version
2.6.0
PostgreSQL client version
unknown
SpatiaLite version
5.1.0
QWT version
6.1.6
QScintilla2 version
2.13.4
OS version
Windows 10 Version 2009

Active Python plugins
advison_module
0.1
geopunt4Qgis
2.3.0.5
db_manager
0.1.20
sagaprovider
2.12.99

Supported QGIS version

  • I'm running a supported QGIS version according to the roadmap.

New profile

Additional context

No response

@Sakoes Sakoes added the Bug Either a bug report, or a bug fix. Let's hope for the latter! label Nov 29, 2023
@agiudiceandrea
Copy link
Contributor

@Sakoes, thanks for reporting. In the issue report you mentioned QGIS 3.04 (maybe QGIS 3.4?), QGIS 3.24 which is no longer supported and QGIS 3.28. Could you please clarify with which version exactly the issue didn't occur and with which currently supported version the issue occurs? Please also provide the full version info of the currently supported versions with which the issue occurs ("In the QGIS Help menu -> About, click in the table, Ctrl+A and then Ctrl+C. Finally paste here. Do not make a screenshot.") as requested in the issue report form.

@agiudiceandrea agiudiceandrea added Feedback Waiting on the submitter for answers Data Provider Related to specific vector, raster or mesh data providers labels Dec 3, 2023
@Sakoes
Copy link
Author

Sakoes commented Dec 6, 2023

@agiudiceandrea yes my apologies. I switched up some versions in my head.
The correct versions are:

  • 3.4 & 3.10: Point are correctly visualized, but the TLS version is to low to connect to my MySQL db
  • 3.28.12 & 3.28.13: Correct TLS version, but points are not being plotted/visualized as described in the original post

I'll update it in the original post

@agiudiceandrea
Copy link
Contributor

Please also provide the full version info of the currently supported versions with which the issue occurs ("In the QGIS Help menu -> About, click in the table, Ctrl+A and then Ctrl+C. Finally paste here. Do not make a screenshot.")

@agiudiceandrea agiudiceandrea added the Regression Something which used to work, but doesn't anymore label Dec 6, 2023
@Sakoes
Copy link
Author

Sakoes commented Dec 6, 2023

QGIS version
3.28.13-Firenze
QGIS code revision
3b4db4f
Qt version
5.15.3
Python version
3.9.5
GDAL/OGR version
3.8.0
PROJ version
9.3.0
EPSG Registry database version
v10.094 (2023-08-08)
GEOS version
3.12.1-CAPI-1.18.1
SQLite version
3.41.1
PDAL version
2.6.0
PostgreSQL client version
unknown
SpatiaLite version
5.1.0
QWT version
6.1.6
QScintilla2 version
2.13.4
OS version
Windows 10 Version 2009

Active Python plugins
advison_module
0.1
geopunt4Qgis
2.3.0.5
db_manager
0.1.20
sagaprovider
2.12.99

@agiudiceandrea agiudiceandrea removed the Feedback Waiting on the submitter for answers label Dec 6, 2023
@rduivenvoorde
Copy link
Contributor

See also this thread: https://lists.osgeo.org/pipermail/qgis-developer/2024-January/066352.html

In short: if mysql does not have a crs defined on the geom column in the table, QGIS will never be able to show the geoms (though it IS retrieving the data and able to show attributes).
If you (even afterwards) fix the column/crs registration all is fine.

Longer anwer:

It looks like mysql has 2 places to store crs information: on the column (geom column registration during creation of the the table) and in the geometry.

With the help of Even R it is easy to reproduce in a docker container:

docker run --name gdal-mysql1 -e MYSQL_ROOT_PASSWORD=passwd -e "MYSQL_ROOT_HOST=%" -p 33060:3306 -d mysql:8.0.34 mysqld --default-authentication-plugin=mysql_native_password
docker exec gdal-mysql1 sh -c "echo 'CREATE DATABASE test; SELECT Version()' | mysql -uroot -ppasswd"
printf 'id,WKT\n1,"POINT(168937.186906043 175180.302889316)"\n' > test.csv

# use ONE of the following lines:

# after THIS one the columns has a crs (and QGIS will show the point):
ogr2ogr -update "mysql:test,user=root,password=passwd,port=33060,host=127.0.0.1" test.csv -select id -nlt point -a_srs EPSG:31370
# after THIS one the column has no crs (and QGIS will NOT show the point):
ogr2ogr -update "mysql:test,user=root,password=passwd,port=33060,host=127.0.0.1" test.csv -select id -nlt point

Some queries to show the differences (with help of https://ant.burnett.com.au/adding-spatial-column-to-existing-mysql-table/ )"

SELECT SRS_ID FROM INFORMATION_SCHEMA.ST_GEOMETRY_COLUMNS WHERE TABLE_NAME = 'test' ;

SRS_ID|
------+
      |      

select SHAPE, ST_AsWKT(SHAPE), ST_SRID(SHAPE) from test;

SHAPE                                    |ST_AsWKT(SHAPE)                         |ST_SRID(SHAPE)|
-----------------------------------------+----------------------------------------+--------------+
POINT (168937.186906043 175180.302889316)|POINT(168937.186906043 175180.302889316)|             0|

Fixing the srid of the geom:

UPDATE test SET SHAPE = ST_GeomFromText(ST_AsText(SHAPE), 31370);
-- UPdated Rows | 1

select SHAPE, ST_AsWKT(SHAPE), ST_SRID(SHAPE) from test;

SHAPE                                    |ST_AsWKT(SHAPE)                         |ST_SRID(SHAPE)|
-----------------------------------------+----------------------------------------+--------------+
POINT (168937.186906043 175180.302889316)|POINT(168937.186906043 175180.302889316)|         31370|

SELECT SRS_ID FROM INFORMATION_SCHEMA.ST_GEOMETRY_COLUMNS WHERE TABLE_NAME = 'test' 
SRS_ID|
------+
      |

Still makes QGIS not show the geom as the QgsCoordinateReferenceSystem is invalid:

iface.activeLayer().dataProvider().crs()
<QgsCoordinateReferenceSystem: invalid>

BUT fixing the columns crs (in the INFORMATION_SCHEMA, see the link above):

-- first drop spatial index (called 'SHAPE')
ALTER TABLE test DROP INDEX SHAPE;
-- change the column defintion of SHAPE (see the link for the funny syntax needed) via:
ALTER TABLE test CHANGE COLUMN SHAPE SHAPE GEOMETRY /*!80003 SRID 31370 */ NOT NULL DEFAULT (ST_SRID(POINT(0,0),31370));
--  create a new spatial index:
ALTER TABLE test ADD SPATIAL INDEX(SHAPE);

NOW also the INFORMATION_SCHEMA holds the crs:

SELECT SRS_ID FROM INFORMATION_SCHEMA.ST_GEOMETRY_COLUMNS WHERE TABLE_NAME = 'test' ;

SRS_ID|
------+
 31370|

And QGIS is showing the point and reporting a valid crs:

iface.activeLayer().dataProvider().crs()
<QgsCoordinateReferenceSystem: EPSG:31370>

Only question I have is why QGIS, even when telling that the layer the right crs, is still not able to show the features.

rouault added a commit to rouault/gdal that referenced this issue Jan 28, 2024
…L >= 8 (fixes qgis/QGIS#55463)

It seems spatial predicates are totally broken when using geographic SRS. For some reason

select MBRIntersects(ST_GeomFromText('POLYGON((-90 -90, 90 -90, 90 90, -90 90, -90 -90))', 4326), ST_GeomFromText('POINT(0 0)', 4326));

returns true as expected

But

select MBRIntersects(ST_GeomFromText('POLYGON((-179 -89, 179 -89, 179 89, -179 89, -179 -89))', 4326, 'axis-order=long-lat'), ST_GeomFromText('POINT(0 0)', 4326));

returns false !!!!

And

select MBRIntersects(ST_GeomFromText('POLYGON((-179 -89, 179 -89, 179 89, -179 89, -179 -89))', 32631), ST_GeomFromText('POINT(0 0)', 32631));

returns true as expected

Consequence, it seems safer to disable spatial filtering on layers with geographic coordinates with MySQL...
@rouault
Copy link
Contributor

rouault commented Jan 28, 2024

Likely resolution in the OGR MySQL driver queued in OSGeo/gdal#9152

rouault added a commit to rouault/gdal that referenced this issue Jan 28, 2024
…ith MySQL >= 8 (fixes qgis/QGIS#55463)

It seems spatial predicates are totally broken when using geographic SRS. For some reason

select MBRIntersects(ST_GeomFromText('POLYGON((-90 -90, 90 -90, 90 90, -90 90, -90 -90))', 4326), ST_GeomFromText('POINT(0 0)', 4326));

returns true as expected

But

select MBRIntersects(ST_GeomFromText('POLYGON((-179 -89, 179 -89, 179 89, -179 89, -179 -89))', 4326, 'axis-order=long-lat'), ST_GeomFromText('POINT(0 0)', 4326));

returns false !!!!

And

select MBRIntersects(ST_GeomFromText('POLYGON((-179 -89, 179 -89, 179 89, -179 89, -179 -89))', 32631), ST_GeomFromText('POINT(0 0)', 32631));

returns true as expected

Consequence, it seems safer to disable spatial filtering on layers with geographic coordinates with MySQL...
rouault added a commit to rouault/gdal that referenced this issue Jan 28, 2024
…aphic with MySQL >= 8 (fixes qgis/QGIS#55463)

It seems spatial predicates are not directly usable when using geographic SRS. For some reason

select MBRIntersects(ST_GeomFromText('POLYGON((-90 -90, 90 -90, 90 90, -90 90, -90 -90))', 4326), ST_GeomFromText('POINT(0 0)', 4326));

returns true as expected

But

select MBRIntersects(ST_GeomFromText('POLYGON((-179 -89, 179 -89, 179 89, -179 89, -179 -89))', 4326, 'axis-order=long-lat'), ST_GeomFromText('POINT(0 0)', 4326));

returns false !!!!

And

select MBRIntersects(ST_GeomFromText('POLYGON((-179 -89, 179 -89, 179 89, -179 89, -179 -89))', 32631), ST_GeomFromText('POINT(0 0)', 32631));

returns true as expected

Consequence, we need to force a projected SRS for the arguments of MBRIntersects()
rouault added a commit to rouault/gdal that referenced this issue Jan 28, 2024
…aphic with MySQL >= 8 (fixes qgis/QGIS#55463)

It seems spatial predicates are not directly usable when using geographic SRS. For some reason

select MBRIntersects(ST_GeomFromText('POLYGON((-90 -90, 90 -90, 90 90, -90 90, -90 -90))', 4326), ST_GeomFromText('POINT(0 0)', 4326));

returns true as expected

But

select MBRIntersects(ST_GeomFromText('POLYGON((-179 -89, 179 -89, 179 89, -179 89, -179 -89))', 4326, 'axis-order=long-lat'), ST_GeomFromText('POINT(0 0)', 4326));

returns false !!!!

And

select MBRIntersects(ST_GeomFromText('POLYGON((-179 -89, 179 -89, 179 89, -179 89, -179 -89))', 32631), ST_GeomFromText('POINT(0 0)', 32631));

returns true as expected

Consequence, we need to force a projected SRS for the arguments of MBRIntersects()
rouault added a commit to OSGeo/gdal that referenced this issue Feb 1, 2024
MySQL: fix/workaround server-side spatial filtering when SRS is geographic with MySQL >= 8 (fixes qgis/QGIS#55463)
rouault added a commit to OSGeo/gdal that referenced this issue Feb 1, 2024
…aphic with MySQL >= 8 (fixes qgis/QGIS#55463)

It seems spatial predicates are not directly usable when using geographic SRS. For some reason

select MBRIntersects(ST_GeomFromText('POLYGON((-90 -90, 90 -90, 90 90, -90 90, -90 -90))', 4326), ST_GeomFromText('POINT(0 0)', 4326));

returns true as expected

But

select MBRIntersects(ST_GeomFromText('POLYGON((-179 -89, 179 -89, 179 89, -179 89, -179 -89))', 4326, 'axis-order=long-lat'), ST_GeomFromText('POINT(0 0)', 4326));

returns false !!!!

And

select MBRIntersects(ST_GeomFromText('POLYGON((-179 -89, 179 -89, 179 89, -179 89, -179 -89))', 32631), ST_GeomFromText('POINT(0 0)', 32631));

returns true as expected

Consequence, we need to force a projected SRS for the arguments of MBRIntersects()
rouault added a commit to OSGeo/gdal that referenced this issue Feb 1, 2024
[Backport release/3.8] MySQL: fix/workaround server-side spatial filtering when SRS is geographic with MySQL >= 8 (fixes qgis/QGIS#55463)
clrpackages pushed a commit to clearlinux-pkgs/gdal that referenced this issue Feb 20, 2024
Daniel Baston (1):
      CI: Remove redundant clang-format check

Even Rouault (47):
      EEDA/EEDAI: use 'crsWkt' element
      gdalinfo: do not emit errors if corner coordinate reprojection fails
      HOWTO-RELEASE: update [ci skip]
      CSV: do not quote numeric fields even if STRING_QUOTING=ALWAYS (3.8.1 regression) (fixes qgis/QGIS#55808)
      OGR2SQLITE_Setup(): robustify against potential crashing scenario
      WMS: fix nullptr dereference on invalid document (fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=65772)
      gdalwarp: do not enable blank line detection when -tap and -te are specified (fixes #9059)
      CI fedora_rawhide: explicitly install python3-setuptools
      FindECW.cmake: make it work for Windows 32-bit builds (fixes #9106)
      Arrow/Parquet: add (minimum) support for libarrow 15.0
      OGRArrowLayer::MapArrowTypeToOGR(): make the code robust to potentially new entries in the arrow::Type enumeration
      GMLAS: recognize GeometricPrimitivePropertyType
      wms.py: set timeout on one test resource
      Restore use of gmtime_r and localtime_r; extend to ctime_r; use Windows variants too
      netCDF: use VSILocalTime()
      Internal libopencad: use localtime_r() or localtime_s() when possible
      PCIDSK SDK: use ctime_r() or ctime_s() when possible
      degrib: use gmtime_r() or gmtime_s() when possible
      ExecuteSQL(dialect=SQLite): support 'SELECT\n' for example (fixes #9093)
      ogr2ogr: Arrow code path: take into account -limit parameter for MAX_FEATURES_IN_BATCH
      FindSQLite3.cmake: improve detection of static libsqlite3.a (fixes #9096)
      PDS: fix compilation with Emscripten version 3.1.7
      Python bindings: remove run of 'python -m lib2to3' that is a no-op, given that lib2to3 is removed in python 3.13 (fixes #9173)
      BMP: fix reading images larger than 4GB
      MySQL: fix/workaround server-side spatial filtering when SRS is geographic with MySQL >= 8 (fixes qgis/QGIS#55463)
      OGRGeometryFactory::createGeometry(): do not assert on wkbUnkown input
      docker/ubuntu-full/Dockerfile: update to Arrow 15.0.0 (fixes #9183) [ci skip]
      OGRGeometryFactory::forceTo(): fix assertion with empty geometry and target type = unknown
      bmp_read.py: fix wrong driver name
      /vsisparse/: fix Stat() on files larger than 4 GB on 32-bit builds
      docker/ubuntu-full/Dockerfile: disable AVX2 when building TileDB [ci skip]
      PDF: correctly initialize PAM when opening a subdataset (specific page for example)
      GDALOverviewDataset: avoid setting SetEnableOverviews(false) during lifetime of object. Just do it transiently
      VRTPansharpenedRasterBand::GetOverviewCount(): robustify against potential failure of GDALCreateOverviewDataset()
      LIBKML: fix crash on a gx:Track without when subelements (fixes qgis/QGIS#55963)
      CPLAtof()/CPLStrtod(): recognize again INF and -INF
      /vsicurl/: fix potential multithreaded crash when downloading the same region in parallel and that the download fails
      ODS: fix parsing of large cells on Windows (at least with mingw64) with new expat 2.6.0 release
      GeoRSS: harmonize on a 8192 byte large parsing buffer on all platforms
      GPX: harmonize on a 8192 byte large parsing buffer on all platforms
      JML: harmonize on a 8192 byte large parsing buffer on all platforms
      KML: harmonize on a 8192 byte large parsing buffer on all platforms
      LVBAG: harmonize on a 8192 byte large parsing buffer on all platforms
      SVG: harmonize on a 8192 byte large parsing buffer on all platforms
      XLSX: harmonize on a 8192 byte large parsing buffer on all platforms
      PDF vector stream parser: correcly parse structures like '[3 3.5] 0 d '
      Prepare for GDAL 3.8.4

Georg Semmler (1):
      Allow the project_binary_dir to contain a whitespace

Patrik Sylve (1):
      PAM only unset GPF_DIRTY flag

Per Mildner (1):
      docker/ubuntu-full/Dockerfile: pin libarrow-acero-dev version (fixes #9183)

Tamas Szekeres (1):
      MSSQLSpatial Fix BCP performance problem (#9112)

Key imported:
--list-packet:
# off=0 ctb=99 tag=6 hlen=3 plen=269
:public key packet:
	version 4, algo 1, created 1434650461, expires 0
	pkey[0]: [2048 bits]
	pkey[1]: [17 bits]
	keyid: 33EBBFC47B3DD87D
# off=272 ctb=b4 tag=13 hlen=2 plen=41
:user ID packet: "Even Rouault <[email protected]>"
# off=315 ctb=89 tag=2 hlen=3 plen=312
:signature packet: algo 1, keyid 33EBBFC47B3DD87D

--fingerprint:
pub   rsa2048 2015-06-18 [SC]
      B1FA 7D81 EEB8 E663 9917  8B97 33EB BFC4 7B3D D87D
uid           [ unknown] Even Rouault <[email protected]>
sub   rsa2048 2015-06-18 [E]
ralphraul pushed a commit to 1SpatialGroupLtd/gdal that referenced this issue Mar 11, 2024
…aphic with MySQL >= 8 (fixes qgis/QGIS#55463)

It seems spatial predicates are not directly usable when using geographic SRS. For some reason

select MBRIntersects(ST_GeomFromText('POLYGON((-90 -90, 90 -90, 90 90, -90 90, -90 -90))', 4326), ST_GeomFromText('POINT(0 0)', 4326));

returns true as expected

But

select MBRIntersects(ST_GeomFromText('POLYGON((-179 -89, 179 -89, 179 89, -179 89, -179 -89))', 4326, 'axis-order=long-lat'), ST_GeomFromText('POINT(0 0)', 4326));

returns false !!!!

And

select MBRIntersects(ST_GeomFromText('POLYGON((-179 -89, 179 -89, 179 89, -179 89, -179 -89))', 32631), ST_GeomFromText('POINT(0 0)', 32631));

returns true as expected

Consequence, we need to force a projected SRS for the arguments of MBRIntersects()
clrpackages pushed a commit to clearlinux-pkgs/gdal that referenced this issue Jul 10, 2024
Alessandro Pasotti (3):
      SubdatasetInfo API: fix protocol and bogus
      SubdatasetInfo: better check for drive letters for netCDF/HDF4/HDF5 (#8891) (fixes #8881)
      Overview/RasterIO resampling: fix infinite looping when nodata has a big absolute value (#9428)

Bas Couwenberg (1):
      Include <cstdint> for uint64_t.

Daniel Baston (3):
      CI: Remove redundant clang-format check
      VRTDerivedRasterBand: Support Int8, (U)Int64 with Python pixel functions
      SWIG: Fix gdal.Warp segfault with dst=None

Even Rouault (225):
      Travis CI: update to jammy
      CI Travis: s390x: use ctest for python tests
      exr.py: add expected checksum for s390x jammy
      CI Travis: s390x: disable broken tests
      CI: skip test_tiff_read_cog_with_mask_vsicurl on s390x
      Python utilities: make gdal_edit, gdal_pansharp, gdal_retile and ogr_layer_algebra return 0 error code when invoked with --version switch
      ubuntu-full/Dockerfile: update Arrow version [ci skip]
      swig/python/README.rst: fix link [ci skip]
      gdalwarp -of COG: use target SRS from -co TILING_SCHEME when specified (fixes #8684)
      gdal_rasterize: fix inverse rasterization of polygon nested inside another one. Requires GEOS enabled build (fixes #8689)
      S57: stricter dataset identification to avoid recognize S-101 datasets we don't handle
      VRTSourcedRasterBand: serialize approximate statistics inside .vrt when there are overviews
      GPKG: fix SetFeature()/UpdateFeature()/DeleteFeature() on views with INSTEAD OF triggers (fixes #8707)
      SQLite: fix SRS retrieval of a SELECT layer from a non-Spatialite DB with a point geometry column (fixes #8677)
      MSGN: fix memleak in error code path
      bag.rst: fix MODE=INTERPOLATED
      gdal_sieve.py/gdalattachpct.py/gdalcompare.py/gdalmove.py: make sure --version and --help return 0 error code (fixes #8717)
      gdaltest.gdalurlopen(): better detect timeout
      sqlite_rtree_bulk_load.c: fix memleak in error code path
      PMTiles: avoid undefined-shift when zoom level is too big (fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=64234)
      GML: SaveClasses(): fix memleak in error code path. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=63871
      Fix build error with libxml2 2.12
      Fix build error with libxml2 2.12 (cont'd)
      [Backport release/3.8] OAPIF:  add INITIAL_REQUEST_PAGE_SIZE open option  (fixes #4556)  (#8766)
      Inverse TPS transformer: speed improvement in gdalwarp use case (fixes #8672)
      Python bindings: define entry_points.console_scripts
      COG: avoid warnings when converting from world coverage to EPSG:3857
      gdalwarp: add a heuristic to clamp northings when projecting from geographic to Mercator (typically EPSG:3857) (fixes #8730)
      Add a OGRPARSEDATE_OPTION_LAX option to OGRParseDate() and use it when reading GPKG files (fixes #8759)
      CSLLoad2(): remove CPLErrorReset()
      Shapefile reader: fix spurious warning when reading polygons (ammends fix of #8483, fixes #8767)
      GPKG: fix GetNextArrowArray() when there are more than 125 columns (affects ogr2ogr from such GPKG) (fixes #8757)
      ogr2ogr: fix GPKG to shapefile with the -preserve_fid flag (fixes #8761)
      BSB: fix opening datasets with errant 0x1A character in header (fixes #8765)
      GetArrowStreamAsNumPy(): fix missing offset when reading fixed size list of string
      PostFilterArrowArray(): various fixes to pass libarrow full validation checks (fixes #8755)
      Add OGRCloneArrowArray()
      Arrow/Parquet: use OGRCloneArrowArray() for safer filtering
      Parquet test file: write distinct values in struct_field and list_struct fields
      WriteArrowArray(): fix wrong taking into account of struct offset
      typo fixes
      GTiff multithreaded reader/writer: in update scenarios, do not force serialization to disk of dirty blocks that intersect the area of interest to read (fixes #8729)
      PMTiles: avoid undefined-shift when zoom level is too big (fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=64404)
      KEA: Create(): error out if passing a /vsi file. avoids crashes (fixes #8743)
      gdal_footprint: fix -ovr on RGBA datasets (fixes #8792)
      Prepare for GDAL 3.8.1
      NEWS.md: fix wording [ci skip]
      MRF: Avoid crashes when no overviews can be generated (#8809)
      Revert "Python bindings: define entry_points.console_scripts"
      Prepare for 3.8.1
      CMake: make GDAL_USE_LIBKML and GDAL_USE_OPENJPEG honor GDAL_USE_EXTERNAL_LIBS
      CSV writer: do not quote integer fields by default (only if STRING_QUOTING=ALWAYS is specified)
      GDALOverviewDataset::IRasterIO(): use parent dataset when possible for more efficiency
      CI: Linux: test install target
      swig/python/install_python.cmake.in: detect failure in installation
      swig/python/CMakeLists.txt: do not set SETUPTOOLS_USE_DISTUTILS=stdlib for Python 3.12 on Debian
      GTiff SRS reader: include VertCRS name from EPSG in CompoundCRS name if there's no citation geokey
      GPX: make detection of <extensions> element more robust (fixes #8827)
      COG: for JPEG compression, convert single band+alpha as single band JPEG + 1-bit mask band
      gdal_footprint: really fix datasets with alpha band, by vectorizing only the alpha band and not the other ones (really fixes #8792, fixes #8834)
      Python bindings: add a combineBands option to gdal.Footprint()
      gdal_footprint: fix taking into account of individual bands that have nodata
      Shapefile: recogize '      0' as a null date
      Shapefile: fix writing an invalid "0000/00/00" date
      ogr2ogr: fix GPKG -> Shapefile when field names are truncated (fix #8849, 3.8.0 regression)
      typo fixes
      Prepare for GDAL 3.8.1 (RC3)
      autotest: test_osr_esri_28(): make it robust when run against latest EPSG dataset version
      JPEGXL: add compatibility with latest libjxl git HEAD
      /vsis3/: takes into account AWS_CONTAINER_CREDENTIALS_FULL_URI environment variable (fixes #8858)
      STACTA: use GDAL_DISABLE_READDIR_ON_OPEN=EMPTY_DIR instead of CPL_VSIL_CURL_ALLOWED_EXTENSIONS
      gdal_footprint: return an error if the requested output layer doesn't exist
      Python bindings: gdal.Footprint(): add a minRingArea option
      Increase test coverage of gdal_footprint
      GDALTranslate(): avoid useless extra GDALOpen() call on a target GeoRaster
      Python bindings: fix build/install when there's a gdal-config from a pre-installed version in the PATH (fixes #8882)
      pct2rgb.py: emit explicit exception when source file has no color table (fixes #8793)
      NGSGEOID: make dataset identification robust to NaN values (fixes #8879)
      CI: fix brew issue
      OGRGeometryFactory::transformWithOptions(): fix WRAPDATELINE=YES on multipoint geometries (fixes #8889)
      GDALTranslate(): avoid useless extra GDALOpen() call on a target GeoRaster (again)
      OGRSpatialReference::importFromUrl(): changes to no longer use a 'Accept: application/x-ogcwkt' header
      cpl_safemaths.hpp: fix compilation with clang targetting Windows (fixes #8898)
      HDF5 classic 2D API: handle char,ushort,uint,int64,uint64 attributes when reading them as double
      HDF5 multidim: better warning when nodata value is out of range
      OSRPJContextHolder: call pthread_atfork() once for the process
      Revert "ogr_proj_p.cpp: disable pthread_atfork() optimization on MacOS (fixes #8497)"
      OGCAPI: make it robust to missing 'type' on 'self' link (fixes #8912)
      Rasterization: avoid burning pixel that we only touch (with an empty intersection) (fixes #8918)
      Python bindings: add missing reference increment on Py_None in error case of Geometry.GetPoints() (fixes #8945)
      CI: fix build-mac
      CI: fix build-mac (again)
      OGRWKBIntersectsPessimisticFixture: handle all geometry types and add tests
      ogrinfo: really honours -if (refs #8590)
      ogr2ogr: implement -if
      Doc: clarify that -if does not relax potential restrictions on file extensions (fixes #8590)
      Backport missing data test file
      STACTA: use STAC Raster extension to get number of bands, their data type, nodata value, scale/offset, units, and avoid fetching a metatile
      STACTA: do not require eo:bands extension to be able to use raster:bands one
      STACTA: add support for upcoming STAC 1.1 which merges eo:bands and raster:bands into bands
      VRTComplexSource: fix excessive RAM usage with many sources (fixes #8967, 3.8.0 regression)
      CPLGetPhysicalRAM(): fix getting right value when running inside Docker on a cgroups v1 system (like Amazon Linux 2) (fixes #8968)
      gdalhttp.py: skip test_http_4
      Prepare for GDAL 3.8.2
      CI: macosx: fix issue with lxml
      infback9: fix various build issues with clang 17
      autotest: updates to support libpng 1.6.40 and other library updates of fedora:rawhide
      gdalbuildvrt: in -separate mode, only use ComplexSource if needed
      OGRArrowArrayHelper::SetBoolOn(): fix wrong bit shift computation (affects ogr2ogr from GPKG/FlatGeoBuf to something else) (fixes #8998)
      Add specific documentation section about AWS IMDS (and fix typo)
      AWS S3: add explicit error message when IMDS fails and we know we are on EC2
      CoordinateTransformation::TransformBounds(): fix polar stereographic (including pole) to Web Mercator (fixes #8996)
      VRTDerivedRasterBand::IRasterIO(): fix potential multiplication overflow
      HOWTO-RELEASE: add signing
      Prepare for GDAL 3.8.3
      NEWS.md: fix version numbers
      VRTDerivedRasterBand::IRasterIO(): fix warning on 32-bit builds
      ogr2ogr: do not use ArrowArray interface if -clipsrc, -clipdst, -gcp or -wrapdateline are specified (fixes #9013)
      GPKG: disable by default multi-threaded ArrowArray interface. Make it opt-in with the OGR_GPKG_NUM_THREADS config option
      GPKG: fix build with sqlite 3.36.x (fixes #9021)
      Prepare for GDAL 3.8.3 RC2
      Internal libjson: resync random_seed.c with upstream, and use getrandom() implementation when available (fixes #9024)
      GPKG: fix multi-threaded ArrowArray interface and re-enable it by default
      jpegxl.py: make test pass with latest libjxl master
      Prepare for GDAL 3.8.3 RC3
      EEDA/EEDAI: use 'crsWkt' element
      gdalinfo: do not emit errors if corner coordinate reprojection fails
      HOWTO-RELEASE: update [ci skip]
      CSV: do not quote numeric fields even if STRING_QUOTING=ALWAYS (3.8.1 regression) (fixes qgis/QGIS#55808)
      OGR2SQLITE_Setup(): robustify against potential crashing scenario
      WMS: fix nullptr dereference on invalid document (fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=65772)
      gdalwarp: do not enable blank line detection when -tap and -te are specified (fixes #9059)
      CI fedora_rawhide: explicitly install python3-setuptools
      FindECW.cmake: make it work for Windows 32-bit builds (fixes #9106)
      Arrow/Parquet: add (minimum) support for libarrow 15.0
      OGRArrowLayer::MapArrowTypeToOGR(): make the code robust to potentially new entries in the arrow::Type enumeration
      GMLAS: recognize GeometricPrimitivePropertyType
      wms.py: set timeout on one test resource
      Restore use of gmtime_r and localtime_r; extend to ctime_r; use Windows variants too
      netCDF: use VSILocalTime()
      Internal libopencad: use localtime_r() or localtime_s() when possible
      PCIDSK SDK: use ctime_r() or ctime_s() when possible
      degrib: use gmtime_r() or gmtime_s() when possible
      ExecuteSQL(dialect=SQLite): support 'SELECT\n' for example (fixes #9093)
      ogr2ogr: Arrow code path: take into account -limit parameter for MAX_FEATURES_IN_BATCH
      FindSQLite3.cmake: improve detection of static libsqlite3.a (fixes #9096)
      PDS: fix compilation with Emscripten version 3.1.7
      Python bindings: remove run of 'python -m lib2to3' that is a no-op, given that lib2to3 is removed in python 3.13 (fixes #9173)
      BMP: fix reading images larger than 4GB
      MySQL: fix/workaround server-side spatial filtering when SRS is geographic with MySQL >= 8 (fixes qgis/QGIS#55463)
      OGRGeometryFactory::createGeometry(): do not assert on wkbUnkown input
      docker/ubuntu-full/Dockerfile: update to Arrow 15.0.0 (fixes #9183) [ci skip]
      OGRGeometryFactory::forceTo(): fix assertion with empty geometry and target type = unknown
      bmp_read.py: fix wrong driver name
      /vsisparse/: fix Stat() on files larger than 4 GB on 32-bit builds
      docker/ubuntu-full/Dockerfile: disable AVX2 when building TileDB [ci skip]
      PDF: correctly initialize PAM when opening a subdataset (specific page for example)
      GDALOverviewDataset: avoid setting SetEnableOverviews(false) during lifetime of object. Just do it transiently
      VRTPansharpenedRasterBand::GetOverviewCount(): robustify against potential failure of GDALCreateOverviewDataset()
      LIBKML: fix crash on a gx:Track without when subelements (fixes qgis/QGIS#55963)
      CPLAtof()/CPLStrtod(): recognize again INF and -INF
      /vsicurl/: fix potential multithreaded crash when downloading the same region in parallel and that the download fails
      ODS: fix parsing of large cells on Windows (at least with mingw64) with new expat 2.6.0 release
      GeoRSS: harmonize on a 8192 byte large parsing buffer on all platforms
      GPX: harmonize on a 8192 byte large parsing buffer on all platforms
      JML: harmonize on a 8192 byte large parsing buffer on all platforms
      KML: harmonize on a 8192 byte large parsing buffer on all platforms
      LVBAG: harmonize on a 8192 byte large parsing buffer on all platforms
      SVG: harmonize on a 8192 byte large parsing buffer on all platforms
      XLSX: harmonize on a 8192 byte large parsing buffer on all platforms
      PDF vector stream parser: correcly parse structures like '[3 3.5] 0 d '
      Prepare for GDAL 3.8.4
      gdalwarp: cutline zero-width sliver enhancement: avoid producing invalid polygons
      JP2OpenJPEG: CreateCopy(): limit number of resolutions taking into account minimum block width/height (fixes #9236)
      Python bindings: gdal.Translate()/gdal.Warp()/etc.: make sure not to modify provided options[] array (fixes #9259)
      CI: try to fix issue with Windows Conda builds
      gdal2tiles.py: fix exception when -v flag is used and overview tiles are generated (3.7.0 regression) (fixes #9272)
      PMTiles: fix 'Non increasing tile_id' error when opening some files (fixes #9288)
      ODS: declare OLCStringsAsUTF8 on newly created layers
      XLSX: declare OLCStringsAsUTF8 on newly created layers
      Make sure our vendored flatbuffers copy has a unique namespace
      VRT/gdal_translate -of 200% 200%: make sure that the synthetized virtual overviews match the dimension of the source ones when possible
      [Backport release/3.8] Pansharpening: fix error messages on consistency checks (#9363)
      VRTPansharpenedDataset: allow to specify <OpenOptions> for <PanchroBand> and <SpectralBand>
      gdalinfo -json: fix wrong axis order in STAC proj:shape member (fixes #9337)
      gdalinfo_output.schema.json: add comment about size and proj:shape ordering
      ILI2: emit an error and not just a warning when creating a dataset without a model file
      Fix false-positive -Wformat-truncation with clang 18 on fedora:rawhide CI
      ERS: avoid 'Attempt at recursively opening ERS dataset' when the .ers file references a .ecw (fixes #9352)
      OGRGeometry::getCurveGeometry(): avoid failures when building some compound curves with infered circular strings (fixes #9382)
      OpenFileGDB writer: fix corrupted maximum blob size header field in some SetFeature() scenarios (fixes #9388)
      QuietDeleteForCreateCopy(): forward source dataset open options (#9424)
      gdalinfo -json/gdal.Info(format='json'): avoid error/exception on engineering CRS (fixes #9396)
      requirements.txt: add pin for importlib-resources to avoid issue with pytest with jsonschema
      OGRLayer::GetArrowSchema(): remove potential unaligned int32_t writes
      OpenFileGDB: avoid issue with -fno-sanitize-recover=unsigned-integer-overflow with recent clang
      OGCAPI: fix potential use-after-free
      docker/ubuntu-full/Dockerfile: update ARROW_VERSION to 15.0.1-1 [ci skip]
      Internal shapelib: SBNOpenDiskTree(): make it work with node descriptors with non-increasing nBinStart
      sbnsearch.c: avoid potential integer overflow on corrupted bin size
      sbnsearch.c: avoid potential integer overflow on corrupted nNodeDescSize
      CI: force ASAN to run on 20.04
      cpl_vsil_unix_stdio_64.cpp: avoid compiler warning about calling ftello() on nullptr
      Fix FindGEOS to remove use of deprecated exec_program()
      ogr_geojson.py: avoid test failure with GEOS 3.8.0
      Fix compiler crash on gcore/overview.cpp with ICC 2024.0.2.29 (fixes #9508)
      GRIB: avoid floating-point issues with ICC 2024.0.2.29 (refs #9508)
      GPKG: avoid invalide use of pointer aliasing that caused ICC 2024.0.2.29 to generate invalid code (refs #9508)
      eedai.py: make it robust to exceptions
      vrtpansharpen.py: update expected checksums with ICC 2024.0.2.29
      transformer.py: avoid test failure with ICC 2024.0.2.29 (refs #9508)
      test_gdal_pansharpen.py: update expected checksums with ICC 2024.0.2.29
      CMake: fix NumPy detection when Intel MKL library is installed
      CMake: add modern Apple OS (visionOS|tvOS|watchOS) support (#9558)
      gdalattachpct.py: fix it when output file is a VRT (fixes #9513)
      Minimal support for TileDB 2.21 to avoid build & test issues
      GTiff: fix read error/use-after-free when reading COGs with mask from network storage (fixes #9563)
      /vsiaz/: handle properly BlobEndpoint ending with a slash (fixes #9519)
      FlatGeoBuf: implement OGRLayer::GetDataset() (refs #9568)
      CreateFieldFromArrowSchema(): don't propagate native subtype if we have to use a fallback main type
      Parquet: avoid potential assertion/out-of-bounds access when a subset of row groups is selected
      Arrow/Parquet: fix inverted logic regarding spatial filtering of multipolygon with GeoArrow interleaved encoding
      GMLAS: fix crash when reading CityGML files (fixes r-spatial/sf#2371)
      typo fixes
      Prepare for GDAL 3.8.5

Georg Semmler (1):
      Allow the project_binary_dir to contain a whitespace

Kai Pastor (1):
      Disable my_test_sqlite3_ext in static builds

Martin Daly (1):
      gdal2ogr.c: added missing close bracket

Nyall Dawson (4):
      [gpkg] Fix adding field comments after alternative name
      [openfilegdb] Correctly use "features" as related table type
      [gpkg] Ensure that mapping tables are inserted into gpkg_contents
      [gpkg] Ensure that tables present in gpkgext_relations can be read

Patrik Sylve (1):
      PAM only unset GPF_DIRTY flag

Paul Pazderski (1):
      CMake: add gdalinfo bash-completion file to list of installed files

Per Mildner (1):
      docker/ubuntu-full/Dockerfile: pin libarrow-acero-dev version (fixes #9183)

Tamas Szekeres (1):
      MSSQLSpatial Fix BCP performance problem (#9112)

Thomas Bonfort (2):
      RasterIO: fix subpixel shift when reading from overviews with non-nearest resampling
      DIMAP: add radiometric metadata

anysomewhere (1):
      PMTiles: Correct extension for temp mbtiles file

barracuda156 (1):
      sqlite_rtree_bulk_load.c: define __STDC_FORMAT_MACROS to unbreak build on platforms which need it
clrpackages pushed a commit to clearlinux-pkgs/gdal that referenced this issue Aug 8, 2024
AbelPau (14):
      Add MiraMonVector read/creation driver (#9688)
      Miramon: fixes and additional tests
      MiraMonVector fixes (2) tests improvements (+10) (#9744)
      MiraMonVector driver. Adding tests
      MIraMonVector Fix.
      MiraMonVector: fix memleak in creation error case (#9805)
      Little fixes in MiraMon metadata files
      MiraMonVector: Adding more matchs in the look-up table MM_m_idofic.csv
      MiraMonVector: Fixing error in linestring (from not polygon) metadata file
      MiraMonVector: Fixing chromium bug 68809
      Fixing chromium bug 68809 correctly
      MiraMonVector: fix a case of sensitive comparison
      MIraMonVector: fixing MMResetFeatureRecord
      MiraMonVector: fixing accepted metadata versions/subversions

Adam Gutonski (1):
      OpenFileGDB writer: set xml shape type to "esriGeometryPolyline" for LineString/MultiLineString (#9033)

Alan Ramírez Herrera (1):
      GeoRaster: Added GENSTATS options, security fixes, and prevent failing when password is near expiration (#9290)

Alessandro Pasotti (15):
      OAPIF: add INITIAL_REQUEST_PAGE_SIZE open option (fixes #4556)  (#8763)
      OGR: Add OGRLayer::GetExtent3D() (#8806)
      SubdatasetInfo API: fix protocol and bogus
      SubdatasetInfo: better check for drive letters for netCDF/HDF4/HDF5 (#8891) (fixes #8881)
      GPKG: add GetExtent3D semi-fast implementation (#8910)
      PG: add GetExtent3D fast implementation (#8939)
      GEOJSON: add GetExtent3D "fast" implementation  (#9017)
      OGR: fix read corrupted wkb with mixed 2D and 3D geoms
      GDALSuggestWarpOutput(): make it return original potential non-square pixel shape for a south-up oriented dataset (#9336)
      Overview/RasterIO resampling: fix infinite looping when nodata has a big absolute value (#9428)
      [clang-format] Add line breaks after methods definition
      clang-format all files to add line breaks
      Warp: make target resolution independent from source extent when -te is specified (#9573)
      VSICACHE: avoid EOF read (#9669)
      gdalinfo: use argparser (#9687)

Andrea Giudiceandrea (3):
      [Docs] [CEOS] Fix ref to SAR_CEOS driver
      [Docs] [SAR_CEOS] Fix ref to CEOS driver
      gdal_polygonize.py: handle error if creation of dst ds fails

Andreas Bergstrøm Aarnseth (1):
      SWIG: Exposes additional Dataset methods for the csharp wrapper (fixes #918) (#9398)

Andrew Johnston (1):
      Fix rendering of code block in python readme

Bas Couwenberg (1):
      Include <cstdint> for uint64_t.

Björn (1):
      GML: Fix reference in docs

Brad Hards (1):
      port: minor apidoc cleanup

Charlie Savage (3):
      This commit updates OGC map tiles api to support additional image formats beyond PNG/JPG as well as enables content negotiation.
      OGCAPI: Add geotiff as supported image_format option to avoid warning message (master only)
      QuietDeleteForCreateCopy(): forward source dataset open options (#9422)

Chris Toney (1):
      doc: update ogr2ogr default value for -gt in Performance hints

Dan Baston (5):
      OGRLayer: Have CreateField/CreateGeomField take const OGRFieldDefn/OGRGeomFieldDefn* argument (#8741)
      Update swig/include/python/docs/gdal_dataset_docs.i
      Doc: Update Python API docs for ogr.Feature (#9486)
      Doc: Update Python API docs for FieldDefn, FieldDomain (#9579)
      autotest: run Python tests directly from source tree on Windows (#9224)

Daniel Baston (78):
      CI: Add Ubuntu 22.04 configuration
      CI: Remove Ubuntu 18.04 x64 configuration
      CI: Add Alpine 32-bit configuration
      CI: Remove Ubuntu 18.04 i386 configuration
      CMake: Default to C++17
      DXF: Silence gcc 13 compiler warning in C++17 mode
      CI: Disable LIBKML in Windows builds
      OGRSQL: Store column defs in std::vector
      OGRSQL: Support SELECT * EXCLUDE(...)
      CI: Remove redundant clang-format check
      Doc: Add Python API docs for gdal.Dataset
      Doc: Add Python API docs for gdal.Band
      Python: Update ReadAsArray, WriteArray docstrings
      VRTDerivedRasterBand: Support Int8, (U)Int64 with Python pixel functions
      Doc: Add instructions for Python API documentation
      Doc: Add Python docstrings for some functions in gdal module
      SWIG: Fix gdal.Warp segfault with dst=None
      Doc: Add Python API docs for gdal.Driver
      Python bindings: Invalidate layer ref when Dataset closes
      Python bindings: Accept str arg in FeatureDefn.GetFieldDefn
      Doc: Update Python API docs for ogr.FeatureDefn
      Doc: Organize Python API docs
      Doc: Update vector data model description
      Python: Add Band.ReadAsMaskedArray
      Python bindings: Make gdal.GeneralCmdLineProcessor accept int, os.PathLike
      gdal_translate: avoid dataset leak on invalid -exponent and -scale
      Python bindings: Make ogr.GeneralCmdLineProcessor accept int, os.PathLike
      autotest: remove asserts under pytest.raises(Exception)
      WMS: Use GDAL_HTTP_TIMEOUT
      autotest: test_gdal_edit.py: use_tmp_path fixture
      autotest: test_gdal_fillnodata.py: use_tmp_path fixture
      autotest: test_gdal_polygonize.py: use_tmp_path fixture
      autotest: test_gdal_sieve.py: use_tmp_path fixture
      autotest: test_gdal_utils.py: use_tmp_path fixture
      autotest: test_gdallocationinfo.py: use_tmp_path fixture
      autotest: test_gdalmove.py: use_tmp_path fixture
      autotest: test_validate_geoparquet.py: use_tmp_path fixture
      autotest: test_gdal_proximity.py: use_tmp_path fixture
      autotest: test_gdal_calc.py: use_tmp_path fixture
      autotest: test_ogr_layer_algebra.py: use_tmp_path fixture
      autotest: test_ogrmerge.py: use_tmp_path fixture
      autotest: test_gdal2tiles.py: use_tmp_path fixture
      autotest: test_gdal2xyz.py: use_tmp_path fixture
      Python: remove ogr2ogr.py sample
      CMake: Add missing dependency on SubdatasetInfo.i
      gdalinfo: suggest trying ogrinfo if appropriate
      ogrinfo: suggest trying gdalinfo if appropriate
      netCDF: Add BAND_NAMES creation option
      NEWS: Fix typo
      Doc: Add Python API docs for osr module
      autotest: warn if sequential tests are not sent to same parallel worker
      autotest ogr_hana.py: mark tests as order-dependent
      autotest vsiadls.py: cleanup config options after tests run
      autotest ogr_pgdump.py: use tmp_path, tmp_vsimem
      autotest ogr_pds4.py: use tmp_path, tmp_vsimem
      autotest: Allow custom temp dir in GDALTest
      autotest tiff_read.py: use tmp_path, tmp_vsimem, parametrize
      autotest ogr_fgdb.py: mark as order-dependent, add missing argument
      autotest vsiaz.py: use tmp_vsimem
      autotest vsiadls.py: use tmp_vsimem
      autotest: ogr_pgdump.py: avoid writing to gdaltest module
      autotest ogr_georss.py: combine two interdependent tests
      autotest vsis3.py: avoid setting custom AWS_S3_ENDPOINT in tests that should not use it
      autotest vsis3.py: use tmp_vsimem fixture
      autotest ogr_hana.py: skip tests if connection string not set
      autotest ogr_db2_hack.py: combine interdependent tests
      autotest ogr_openfilegdb.py: use tmp_path, tmp_vsimem
      autotest ogr_gpkg.py: use tmp_path, tmp_vsimem
      autotest: ogr_geojson.py: use tmp_path, tmp_vsimem
      autotest: ogr_geoconcept.py: use tmp_path
      autotest: ogr_dxf.py: use tmp_path
      autotest: ogr_gpx.py: use tmp_vsimem
      autotest: ogr_index_test.py: use tmp_path
      autotest ogr_sql_test.py: use tmp_path
      Python bindings: Avoid crash when accessing closed file
      autotest vsiadls.py: use module scope for setup/cleanup
      Python scripts: Use decorator to enable exceptions
      Python bindings: Avoid crash when using orphaned subgeometry

Dave Martinez (1):
      Dockerfile Ubuntu - Remove apache arrow deb file

David Shean (1):
      gdal_edit: add -a_coord_epoch option with test, update doc

Edouard Choinière (3):
      Doc: Fix some typos in HFA -- Erdas Imagine .img docs (#9387)
      CI: Add branches-ignore on pushes to backport branches for CodeQL workflow
      CI: Add branches-ignore on pushes to dependabot branches

Edvins Liepa (1):
      gdal2xyz: Change -srcwin parameter type to integer.

Even Rouault (1633):
      Add RFC96 text: Deferred in-tree C++ plugin loading
      Set master to 3.9.0dev
      RFC 96: revise to avoid GDALPluginDriverFeatures
      gdal_create: copy GCPs present in the input file
      Travis CI: update to jammy
      RFC96: add out-of-tree deferred loaded plugin capability
      CI Travis: s390x: use ctest for python tests
      exr.py: add expected checksum for s390x jammy
      CI Travis: s390x: disable broken tests
      CI: skip test_tiff_read_cog_with_mask_vsicurl on s390x
      Python utilities: make gdal_edit, gdal_pansharp, gdal_retile and ogr_layer_algebra return 0 error code when invoked with --version switch
      RFC96: mention another backward compatibility issue
      gdalwarp -of COG: use target SRS from -co TILING_SCHEME when specified (fixes #8684)
      VRTSourcedRasterBand: serialize approximate statistics inside .vrt when there are overviews
      gdal_rasterize: fix inverse rasterization of polygon nested inside another one. Requires GEOS enabled build (fixes #8689)
      ubuntu-full/Dockerfile: update Arrow version [ci skip]
      RFC96; update with custom installation message
      S57: stricter dataset identification to avoid recognize S-101 datasets we don't handle
      docker/README.md: advertize 3.8.0 [ci skip]
      Doc: advertize 3.8.0
      swig/python/README.rst: fix link [ci skip]
      GPKG: fix SetFeature()/UpdateFeature()/DeleteFeature() on views with INSTEAD OF triggers (fixes #8707)
      SQLite: fix SRS retrieval of a SELECT layer from a non-Spatialite DB with a point geometry column (fixes #8677)
      various CMakeLists.txt: remove now useless target_compile_features(cxx_std_17)
      Doc: update requirements to C++17
      Replace uses of cpl::make_unique<> with std::make_unique<>
      cpl_conv.h: remove cpl::make_unique<> template
      Python bindings: add RasterAttributeTable::ReadValuesIOAsString, ReadValuesIOAsInteger, ReadValuesIOAsDouble, RemoveStatistics()
      GDALRATValuesIOAsString(): fix wrong type for papszStrList argument
      Add GDALCreateRasterAttributeTableFromMDArrays() to return a virtual Raster Attribute Table from several GDALMDArray's
      Remove deprecated ARG driver (fixes #7920)
      Remove GDALIsDriverDeprecatedForGDAL39StillEnabled()
      RFC96 text: add GDAL_DMD_CONNECTION_PREFIX and GDAL_DCAP_VECTOR_TRANSLATE_FROM to the list of items that must be set on the proxy
      Inverse TPS transformer: speed improvement in gdalwarp use case (fixes #8672)
      Fix a few cppcheck warnings
      MSGN: fix memleak in error code path
      Fix warnings (false positives, or non-important) raised by CSA
      CI: update CLang Static Analyzer job to ubuntu 22.04
      C++17: use if constexpr() construct
      Doc: update createFromGML() doc regarding curves (fixes #8719)
      RFC96 text: add missing word
      Python bindings: define entry_points.console_scripts
      Doc: PG: warn to force PG_USE_COPY=NO when using PgPoolII (fixes #8674)
      gdal_sieve.py/gdalattachpct.py/gdalcompare.py/gdalmove.py: make sure --version and --help return 0 error code (fixes #8717)
      bag.rst: fix MODE=INTERPOLATED
      C++17: replace CPL_FALLTHROUGH by standard [[fallthrough]];
      Replace custom StringView with std::string_view
      C++17: use structured bindings declaration and class template argument deduction for std::pair()
      Doc: change default of GDAL_HTTP_MERGE_CONSECUTIVE_RANGES to YES
      gdaltest.gdalurlopen(): better detect timeout
      sqlite_rtree_bulk_load.c: fix memleak in error code path
      PMTiles: avoid undefined-shift when zoom level is too big (fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=64234)
      RFC96: update voting history and status
      COG: avoid warnings when converting from world coverage to EPSG:3857
      gdalwarp: add a heuristic to clamp northings when projecting from geographic to Mercator (typically EPSG:3857) (fixes #8730)
      fuzzers/CMakeLists.txt: remove CXX_STANDARD redefinition
      GML: SaveClasses(): fix memleak in error code path. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=63871
      Doc: OGRFieldDefn/OGRGeomFieldDefn: add note about not modifying them directly if they belong to a layer definition
      Doc: OGRFeatureDefn: add warning about not modifying directly if belonging to a OGRLayer
      OGRFeatureDefn, OGRFieldDefn, OGRGeomFieldDefn: add Seal() and Unseal() methods
      GPKG: make use of OGRFeatureDefn sealing
      Shape: make use of OGRFeatureDefn sealing
      OpenFileGDB: make use of OGRFeatureDefn sealing
      MITAB: make use of OGRFeatureDefn sealing
      MEM, GeoJSON, JSONFG, TopoJSON, ESRIJSON, ODS, XLSX: make use of OGRFeatureDefn sealing
      PG: make use of OGRFeatureDefn sealing
      MIGRATION_GUIDE.TXT: mention RFC 97
      fuzzers/build_google_oss_fuzzers.sh: enable -std=c++17 otherwise gcc complains about 'use of deleted function ‘OGRFeatureDefn::TemporaryUnsealer::TemporaryUnsealer(const OGRFeatureDefn::TemporaryUnsealer&)' in whileUnsealing() helpers
      swig/include/gdal_array.i: no longer define GDAL_COMPILATION and DO_NOT_USE_DEBUG_BOOL
      Add whileUnsealing() helper method
      autotest/cpp: add testing of sealing functionality
      Internal libtiff: resync with upstream
      Fix build error with libxml2 2.12
      Fix build error with libxml2 2.12 (cont'd)
      GTiff/internal libtiff: Use (future) libtiff 4.6.1 TIFFOpenOptionsSetMaxSingleMemAlloc()
      ogr_swq.h: remove declaration of no longer implemented function swq_select_parse()
      Remove swq_select::Dump(): unused debugging function not testing everything, and superseded by Unparse()
      Fix swq_select::Unparse() and add tests for it
      Shapelib: resync with upstream
      .github/workflows/ubuntu_20.04/build.sh: remove useless -std=c++17
      .github/workflows/alpine/build.sh: build with -std=c++23
      GPKG: fix GetNextArrowArray() when there are more than 125 columns (affects ogr2ogr from such GPKG) (fixes #8757)
      sql_sqlite_dialect.rst: fix loading of spatialite
      ogr2ogr: fix GPKG to shapefile with the -preserve_fid flag (fixes #8761)
      Add a OGRPARSEDATE_OPTION_LAX option to OGRParseDate() and use it when reading GPKG files (fixes #8759)
      GetArrowStreamAsNumPy(): fix missing offset when reading fixed size list of string
      PostFilterArrowArray(): various fixes to pass libarrow full validation checks (fixes #8755)
      CSLLoad2(): remove CPLErrorReset()
      Shapefile reader: fix spurious warning when reading polygons (ammends fix of #8483, fixes #8767)
      OGRGeoJSONDriverIdentify: return -1 when unsure
      test_ogr_basic_10(): better error message
      Add mechanism for deferred plugin loading
      Parquet: implement deferred driver loading
      netCDF: implement deferred driver loading
      HDF5: implement deferred driver loading
      CMake: add [GDAL|OGR]_REGISTER_DRIVER_<driver_name>_FOR_LATER_PLUGIN options
      RFC96: unify the way we set metadata on plugin driver and actual driver
      ECW: implement deferred driver loading
      JP2KAK: implement deferred driver loading
      JPIPKAK: implement deferred driver loading
      HDF4: implement deferred driver loading
      PDF: implement deferred driver loading
      OpenJPEG: implement deferred driver loading
      Arrow: implement deferred driver loading
      CI Conda: add patch to enable OGR_REGISTER_DRIVER_ARROW/PARQUET_FOR_LATER_PLUGIN
      CMake: add a way of defining an external defered driver by setting one or several ADD_EXTERNAL_DEFERRED_PLUGIN_XXX CMake variables that will cause the pointed file to be built in libgdal, and a DeclareDeferredXXX() C function in it to be called by GDALAllRegister()
      JPEGXL: implement deferred driver loading
      gdalmanage: make --utility_version work
      jpegxl.py: test identifying raw codestream
      FileGDB: implement deferred driver loading
      PG: implement deferred driver loading
      MySQL: implement deferred driver loading
      MSSQL: implement deferred driver loading
      OCI: implement deferred driver loading
      HANA: implement deferred driver loading
      LIBKML: implement deferred driver loading
      DGNv8 / DWG: implement deferred driver loading
      load_postgisraster_test_data.sh: unset GDAL_DRIVER_PATH if set
      PostGISRaster: implement deferred driver loading
      WEBP: implement deferred driver loading
      EXR: implement deferred driver loading
      HEIF: implement deferred driver loading
      BASISU_KTX2: implement deferred driver loading
      GEORASTER: implement deferred driver loading
      gdal_frmts.h: remove no longer existing GDALRegister_JPEGLS() declaration
      PCRaster: implement deferred driver loading
      TileDB: implement deferred driver loading
      JP2Lura: implement deferred driver loading
      KEA: implement deferred driver loading
      Rasterlite: implement deferred driver loading
      PNG: implement deferred driver loading
      DDS: implement deferred driver loading
      GTA: implement deferred driver loading
      FITS: implement deferred driver loading
      MongoDBv3: implement deferred driver loading
      IDB: implement deferred driver loading
      SOSI: implement deferred driver loading
      ogr_sosi.py: clean up temporary directory
      XLS: implement deferred driver loading
      frmts/gdalallregister.cpp: remove disabled code
      GRIB: implement deferred driver loading
      OGDI: implement deferred driver loading
      MSG: implement deferred driver loading
      Remove unused declaration of GDALRegister_Istar()
      Zarr: implement deferred driver loading
      NITF: make it plugin capable if not using internal libtiff, libjpeg and libjpeg12
      NITF: implement deferred driver loading
      MRF: make it plugin capable if using external libraries
      MRF: implement deferred driver loading
      GIF: make it plugin capable
      GIF: implement deferred driver loading
      OpenFileGDB: implement deferred driver loading
      PCIDSK: implement deferred driver loading
      JPEG: make it plugin capable if using external libraries
      JPEG: implement deferred driver loading
      WCS: implement deferred driver loading
      WMS: implement deferred driver loading
      WMTS: implement deferred driver loading
      CAD: implement deferred driver loading
      RAW drivers: make them buildable as (a single) plugin
      PDS related drivers (PDSx, ISISx, VICAR): make them buildable as plugin if depending on external libraries
      pds4.py and isis.py: make robust to other missing drivers
      PDS related drivers (PDSx, ISISx, VICAR):implement deferred driver loading
      building_from_source.rst: update
      RFC96: add [GDAL|OGR]_DRIVER_<driver_name>_PLUGIN_INSTALLATION_MESSAGE CMake option to customize error message
      .github/workflows/coverage/build.sh: enable plugin build
      Add autotest/cpp/test_deferred_plugin.cpp
      VFK: implement deferred driver loading
      GMLAS: implement deferred driver loading
      ODBC: implement deferred driver loading
      Carto: implement deferred driver loading
      Elasticsearch: implement deferred driver loading
      PLScenes: implement deferred driver loading
      RFC96: add GDAL_DMD_CONNECTION_PREFIX and GDAL_DCAP_VECTOR_TRANSLATE_FROM to the list of items that must be set on the proxy
      Doc: link to RFC96 in raster and vector driver implementation tutorials
      rasterlitedataset.cpp: avoid CSA warning about potential nullptr
      RFC96: add a DEFINE_DRIVER_METHOD_GET_CALLBACK() macro to make code more compact
      Doc: GDAL_DRIVER_PATH: document 'disable'
      Doc: GDALOpenEx(): explain the 2 passes
      BSB: fix opening datasets with errant 0x1A character in header (fixes #8765)
      Add OGRCloneArrowArray()
      Arrow/Parquet: use OGRCloneArrowArray() for safer filtering
      Parquet test file: write distinct values in struct_field and list_struct fields
      WriteArrowArray(): fix wrong taking into account of struct offset
      GDALDriverManager::DeclareDeferredPluginDriver(): disable debug message
      typo fixes
      frmts/nitf/CMakeLists.txt: fix condition to build as plugin
      GdalDriverHelper.cmake: error out if a driver has been asked as a plugin, but conditions are not met
      [Lint] GTiff: move HasOptimizedReadMultiRange() implementation to appropriate file
      GTiff SRS reader: include VertCRS name from EPSG in CompoundCRS name if there's no citation geokey
      typo fixes
      GTiff multithreaded reader/writer: in update scenarios, do not force serialization to disk of dirty blocks that intersect the area of interest to read (fixes #8729)
      gdalwarp: progress bar tunings
      cmake/helpers/GdalDriverHelper.cmake: use better generated filename (master only)
      RFC96: change status to implemented
      PMTiles: avoid undefined-shift when zoom level is too big (fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=64404)
      KEA: Create(): error out if passing a /vsi file. avoids crashes (fixes #8743)
      OGRCloneArrowArray(): tiny perf improvements
      Avoid 'local variable ... will be copied despite being returned by name [-Wreturn-std-move]' with some clang versions
      Increase a bit test test coverage of WriteArrowBatch()
      gdal_footprint: fix -ovr on RGBA datasets (fixes #8792)
      Add missing '#include <cctype>' (master only)
      Revert "Python bindings: define entry_points.console_scripts"
      CMake: make GDAL_USE_LIBKML and GDAL_USE_OPENJPEG honor GDAL_USE_EXTERNAL_LIBS
      CI: Linux: test install target
      CSV writer: do not quote integer fields by default (only if STRING_QUOTING=ALWAYS is specified)
      swig/python/install_python.cmake.in: detect failure in installation
      swig/python/CMakeLists.txt: do not set SETUPTOOLS_USE_DISTUTILS=stdlib for Python 3.12 on Debian
      Python scripts: define entry_points.console_scripts to have launcher shell/exe scripts
      PDF: silence false positive Coverity warnings (CID 1525215,1525184,1525078)
      cpl_vsil_gzip.cpp: rework code a bit to hopefully silence CID 1525336
      swq_select_summarize(): avoid definition of potential invalid pointer (master only, CID 1525071)
      CI: test that we can compile all headers with C++11 (fixes #8796)
      No longer install cpl_minizip_ioapi.h cpl_minizip_unzip.h cpl_minizip_zip.h.
      GDALOverviewDataset::IRasterIO(): use parent dataset when possible for more efficiency
      Fix gdalgrid_priv.h compilation
      Fix gdalpansharpen.h compilation
      swig/python/setup.py.in: workaround easy_install behavior on Windows to keep .py scripts (fixes #8811)
      test_gdalinfo.py: use temporary file to avoid potential concurrency issues
      CI Windows build: test 'python setup.py install'
      autotest/cpp/CMakeLists.txt: avoid recompiling main_gtest.cpp multiple times
      pmtiles.rst: document it is built-in
      GPX: make detection of <extensions> element more robust (fixes #8827)
      Add VSIVirtualHandle::Printf()
      [Lint] GPX driver: prefix member variables and inline initialize, use smart pointers, etc.
      sozip: support generic command line options
      GeoJSON writer: add FOREIGN_MEMBERS_FEATURE and FOREIGN_MEMBERS_COLLECTION layer creation option
      ogr_CityJSON.py: improve identify() to recognize https://3d.bk.tudelft.nl/opendata/cityjson/3dcities/v2.0/9-284-556.city.json [ci skip]
      GDALDriverManager::GetPluginFullPath(): use std::move() (CID 1528548)
      GPKG: use locking to make Coverity happy (CID 1528549)
      Move Coverity suppression
      WFS: fix memleak in error code path (CID 1214433)
      OGRODBCDataSource::Open(): simplify code to avoid false-positive nullptr deref warning (CID 1525166)
      Add third_party/fast_float/resync_with_upstream.sh
      Resync third_party/fast_float with upstream
      GPSBabel: simplify code to avoid false-positive nullptr deref warning (CID 1297184, 1214416), and increase test coverage
      Doc: add instructions how to build and use the Java bindings
      COG: for JPEG compression, convert single band+alpha as single band JPEG + 1-bit mask band
      gdal_footprint.rst: typo fix
      gdal_footprint: really fix datasets with alpha band, by vectorizing only the alpha band and not the other ones (really fixes #8792, fixes #8834)
      Python bindings: add a combineBands option to gdal.Footprint()
      gdal_footprint: fix taking into account of individual bands that have nodata
      Shapefile: recogize '      0' as a null date
      Shapefile: fix writing an invalid "0000/00/00" date
      RFC 97 text: OGRFeatureDefn, OGRFieldDefn and OGRGeomFieldDefn "sealing" (#8734)
      ExecuteSQL(): add a warning if the dialect name isn't recognized (fixes #8843)
      OGRGeoPackageTableLayer::SetCreationParameters(): add missing sealing (master only)
      ogr2ogr: fix GPKG -> Shapefile when field names are truncated (fix #8849, 3.8.0 regression)
      Doc: SQL dialects: improvements
      LIBKML: fix typo in error message [ci skip]
      ogr_libkml.rst: document AUTHOR_NAME, AUTHOR_URI, AUTHOR_EMAIL options (fixes #8851)
      GDALOpen(): fix memleaks (master only)
      cpl_recode.cpp/cpl_recode_stub.cpp: small cleanup
      OGR SQL: add UTF-8 support for LIKE/ILIKE (for layers declaring OLCStringsAsUTF8) (fixes #8835)
      OGR SQLite/SQLite/GPKG: add UTF-8 support for case-insensitive LIKE (fixes #8835)
      typo fixes
      gdal_footprint: return an error if the requested output layer doesn't exist
      Python bindings: gdal.Footprint(): add a minRingArea option
      Increase test coverage of gdal_footprint
      ogr2ogr: add [--long-usage] in synopsis (fixes #8853)
      /vsis3/: takes into account AWS_CONTAINER_CREDENTIALS_FULL_URI environment variable (fixes #8858)
      FlatGeobuf: add support for reading and writing layer title, description and metadata
      GDALTranslate(): avoid useless extra GDALOpen() call on a target GeoRaster
      autotest: test_osr_esri_28(): make it robust when run against latest EPSG dataset version
      STACTA: use GDAL_DISABLE_READDIR_ON_OPEN=EMPTY_DIR instead of CPL_VSIL_CURL_ALLOWED_EXTENSIONS
      JPEGXL: add compatibility with latest libjxl git HEAD
      OpenFileGDB: add support for Integer64, Date, Time and DateTimeWithOffset data types added in ArcGIS Pro 3.2 (fixes #8862)
      pct2rgb.py: emit explicit exception when source file has no color table (fixes #8793)
      docker/README.md: advertize 3.8.1 [ci skip]
      Doc: advertize 3.8.1
      Python bindings: fix build/install when there's a gdal-config from a pre-installed version in the PATH (fixes #8882)
      GDALTranslate(): avoid useless extra GDALOpen() call on a target GeoRaster (again)
      GDALAllRegister(): fix registration order of raw drivers (master only)
      NGSGEOID: make dataset identification robust to NaN values (fixes #8879)
      OGRGeometryFactory::transformWithOptions(): fix WRAPDATELINE=YES on multipoint geometries (fixes #8889)
      CI: fix brew issue
      OGRSpatialReference::importFromUrl(): changes to no longer use a 'Accept: application/x-ogcwkt' header
      HDF5 classic 2D API: handle char,ushort,uint,int64,uint64 attributes when reading them as double
      HDF5 multidim: better warning when nodata value is out of range
      cpl_safemaths.hpp: fix compilation with clang targetting Windows (fixes #8898)
      GDALGetSubdatasetInfo(): be more friendly of deferred loaded plugins
      README.md: update badges [ci skip]
      OSRPJContextHolder: call pthread_atfork() once for the process
      vrtmisc.py: disable debug traces [ci skip]
      Revert "ogr_proj_p.cpp: disable pthread_atfork() optimization on MacOS (fixes #8497)"
      JP2KAK: make result of RasterIO() consistent depending if it is called directly or through VRT, with non-nearest upsampling (fixes #8911)
      JP2KAK: refactor how overviews work
      OGCAPI: make it robust to missing 'type' on 'self' link (fixes #8912)
      JP2KAK: remove now useless code related to non-nearest resampling
      CI: build-linux-ubuntu-focal: bump to CMake 3.16
      CMakeLists.txt: bump minimum CMake version to 3.16
      Doc: dev_environment.rst: bump to CMake >= 3.16
      code_checks.yml: disable shellcheck SC2129
      swig/java: CMAKE_UNITY_BUILD fix
      port: CMAKE_UNITY_BUILD fixes
      alg: CMAKE_UNITY_BUILD fixes
      apps: CMAKE_UNITY_BUILD fixes
      autotest/cpp: CMAKE_UNITY_BUILD fixes
      AIGRID: CMAKE_UNITY_BUILD fixes
      BASISU_KTX2: CMAKE_UNITY_BUILD fixes
      ERS: CMAKE_UNITY_BUILD fixes
      GIF: CMAKE_UNITY_BUILD fixes
      FITS: CMAKE_UNITY_BUILD fixes
      GRIB: CMAKE_UNITY_BUILD fixes
      Internal libtiff: resync with upstream: CMAKE_UNITY_BUILD fixes
      tifvsi.cpp: include xtiffio.h instead of redefining its functions
      GTiff: CMAKE_UNITY_BUILD fixes
      JAXAPALSAR: CMAKE_UNITY_BUILD fixes
      MRF: CMAKE_UNITY_BUILD fixes
      MSG: CMAKE_UNITY_BUILD fixes
      NITF: CMAKE_UNITY_BUILD fixes
      NORTHWOORD: CMAKE_UNITY_BUILD fixes
      OPENJPEG: CMAKE_UNITY_BUILD fixes
      PCIDSK SDK: CMAKE_UNITY_BUILD fixes
      PCRASTER: CMAKE_UNITY_BUILD fixes
      PDS/ISIS3/VICAR: CMAKE_UNITY_BUILD fixes
      POSTGISRaster: CMAKE_UNITY_BUILD fixes
      R: CMAKE_UNITY_BUILD fixes
      DOQ1/DOQ2: CMAKE_UNITY_BUILD fixes
      ENVI/GenBIN: CMAKE_UNITY_BUILD fixes
      RMF: CMAKE_UNITY_BUILD fixes
      TSX: CMAKE_UNITY_BUILD fixes
      VRT: CMAKE_UNITY_BUILD fixes
      WCS: CMAKE_UNITY_BUILD fixes
      WMS: CMAKE_UNITY_BUILD fixes
      ZARR: CMAKE_UNITY_BUILD fixes
      frmts/zlib/contrib/infback9: CMAKE_UNITY_BUILD fixes
      HDF4: CMAKE_UNITY_BUILD fixes
      frmts/XXXX/CMakeLists.txt: remove useles SKIP_UNITY_BUILD_INCLUSION
      JPEG: CMAKE_UNITY_BUILD fixes
      gcore: CMAKE_UNITY_BUILD fixes
      GNM: CMAKE_UNITY_BUILD fixes
      arrow_common: CMAKE_UNITY_BUILD fixes
      AVC: CMAKE_UNITY_BUILD fixes
      DWG: CMAKE_UNITY_BUILD fixes
      DXF: CMAKE_UNITY_BUILD fixes
      ogr/ogrsf_frmts/generic: CMAKE_UNITY_BUILD fixes
      GeoJSON: CMAKE_UNITY_BUILD fixes
      ILI: CMAKE_UNITY_BUILD fixes
      LIBKML: CMAKE_UNITY_BUILD fixes
      MITAB: CMAKE_UNITY_BUILD fixes
      mssqlspatial: CMAKE_UNITY_BUILD fixes
      MVT: CMAKE_UNITY_BUILD fixes
      NTF: CMAKE_UNITY_BUILD fixes
      OpenFileGDB: CMAKE_UNITY_BUILD fixes
      PG: CMAKE_UNITY_BUILD fixes
      Internal shapelib: resync with upstream: CMAKE_UNITY_BUILD fixes
      SQLite: CMAKE_UNITY_BUILD fixes
      SVG: CMAKE_UNITY_BUILD fixes
      TIGER: CMAKE_UNITY_BUILD fixes
      VFK: CMAKE_UNITY_BUILD fixes
      ogr/: CMAKE_UNITY_BUILD fixes
      Tunings for CMAKE_UNITY_BUILD with internal libjpeg, libz, libjson
      ogr_osm.h: remove unused private members
      KTX2: remove unused private member
      RMF: remove unused private member
      DWG: remove unused private members
      KML: remove unused private member
      MSG: disable UNITY_BUILD on Windows
      If CMAKE_UNITY_BUILD=YES, advertize it in 'gdalinfo --build' output
      .github/workflows/alpine/build.sh: enable -DCMAKE_UNITY_BUILD=ON
      CI: build-windows-conda: enable -DCMAKE_UNITY_BUILD=ON
      ci/travis/osx/install.sh: enable -DCMAKE_UNITY_BUILD=ON
      cmake.rst: document CMAKE_UNITY_BUILD
      NITF: fix undefined behavior when using NITFGetField() several times in the same statement
      Make MSVC happy with TemporaryUnsealer
      Update PROJ requirement to 6.3.1 and do associated cleanups
      Rasterization: avoid burning pixel that we only touch (with an empty intersection) (fixes #8918)
      windows_build.yml: update gisinternals SDK
      Update Python requirement to 3.8
      CMake: remove all remaining traces of CMake < 3.16
      Update GEOS requirement to 3.8.0 and do associated cleanups
      Update Poppler requirement to 0.86 and do associated cleanups
      Update libtiff requirement to 4.1.0 and do associated cleanups
      Update libcurl requirement to 7.68 and do associated cleanups
      Update libpng requirement to 1.6 and do associated cleanups
      Update libsqlite3 requirement to 3.31 and do associated cleanups
      Update libopenjp2 requirement to 2.3.1 and do associated cleanups
      Update libnetcdf requirement to 4.7 and do associated cleanups
      Update libhdf5 requirement to 1.10 and do associated cleanups
      autotest/gdrivers/bag.py: skip check_no_file_leaks() on CI
      Make MSVC happy with TemporaryUnsealer (again)
      GetExtent3D(): better docs, and make sure that it takes into account attribute and spatial filters (in shapefile implementation)
      RFC98 text: Build requirements for GDAL 3.9
      shpopen.c: correctly use uint32_t (was broken in 74d53797679e924cc8d57df6759eec673fa4f38e, master only, fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=64773)
      /vsicurl/: re-emit HTTP error code next times we try opening a resource that failed the first time (fixes #8922)
      Move GPKG GetExtent3D() tests to autotest/ogr/
      ogrinfo: add a -extent3D switch
      STACTA: use STAC Raster extension to get number of bands, their data type, nodata value, scale/offset, units, and avoid fetching a metatile
      gdalhttp.py: skip test_http_4
      STACTA: do not require eo:bands extension to be able to use raster:bands one
      Parquet: support reading and writing layer metadata
      gdal_footprint: fix -split_polys and -convex_hull to not consume the argument specified just after them...
      gdal_footprint: write source dataset path in a 'location' field (fixes #8795)
      GeoRaster: fix build on Windows where libjpeg's boolean typedef conflicts with OCI one
      OGREnvelope3D::Is3D(): fix it to work with MinZ/MaxZ initialization values
      Add OGRWKBGetEnvelope() with a OGREnvelope3D; also fix 2D version with POINT EMPTY
      GPKG: make OGRGeoPackageGetHeader() return bounding box without instanciating a OGRGeometry
      Arrow/Parquet: implement GetExtent3D()
      docker/: update Alpine to 3.19 [ci skip]
      STACTA: add support for upcoming STAC 1.1 which merges eo:bands and raster:bands into bands
      docker/alpine: disable IPO [ci skip]
      GPX: fix crash with GPX_ELE_AS_25D=YES config option (fixes qgis/QGIS#55558, master only); add open options
      docker/alpine-normal/Dockerfile: use py3-pillow package [ci skip]
      docker/alpine-normal/Dockerfile: use correct arrow package names
      OpenFileGDB: implement GetExtent3D()
      Geopackage: tune GetExtent3D()
      ogr_gpkg.py: test lyr.GetExtent3D() on a 2D layer, and with filters
      Shapelib: resync with upstream
      GeoRaster: fix build against external libjpeg (master only)
      Python bindings: add missing reference increment on Py_None in error case of Geometry.GetPoints() (fixes #8945)
      TileDB: silence false positive -Wnull-dereference
      CI/Docker: sort Alpine dependencies and add missing armadillo, basisu, odbc-cpp-wrapper and tiledb
      CI: coverage: add PostGIS and MySQL
      ogrinfo: really honours -if (refs #8590)
      ogr2ogr: implement -if
      Doc: clarify that -if does not relax potential restrictions on file extensions (fixes #8590)
      NITF: in xml:DES metadata domain field, expand content of XML_DATA_CONTENT DES as XML in a <xml_content> sub-node of >field name=DESDATA> instead as a Base64 value
      CI: fix build-mac
      CI: fix build-mac (again)
      OGRWKBIntersectsPessimisticFixture: handle all geometry types and add tests
      test_ogr_wkb.cpp: test return value of createFromWkt() and OGRWKBGetBoundingBox() (CID 1530437)
      PG: avoid COPY_INSTEAD_OF_MOVE warning (CID 1530436)
      Arrow: avoid AUTO_CAUSES_COPY (CID 1530434, 1530435)
      FlatGeoBuf: avoid AUTO_CAUSES_COPY
      Shapefile driver: GetNextArrowArray(): add specialized implementation restricted to situations where only retrieving of FID values is asked
      GPKG: make GetExtent3D() honour filters when there are only 2D geometries
      CMake: simplify PROJ detection (refs https://github.com/OSGeo/gdal/issues/8942#issuecomment-1851319732)
      PG: serialize GDAL multidomain metadata of layer as XML in a ogr_system_tables.metadata table
      Python bindings: add a pyproject.toml with numpy as a build requirement (#8926)
      typo fixes [ci skip]
      Internal libtiff: resync
      VRTComplexSource: fix excessive RAM usage with many sources (fixes #8967, 3.8.0 regression)
      CPLGetPhysicalRAM(): fix getting right value when running inside Docker on a cgroups v1 system (like Amazon Linux 2) (fixes #8968)
      gdal_footprint: fix memleak (master only, CID 1531315)
      test_gdal.cpp: fix warning about dead code (CID 1531312, 1531313)
      Shape: GetNextArrowArray(): avoid potential nullptr deref in OOM situation (master only, CID 1531314)
      docker/alpine-normal/Dockerfile: fix arm64 build (master only)
      Doc: IWriteBlock()/IRasterIO(GF_Write): add comment about potential modification of provided buffer
      FileGDB/OpenFileGDB: fix co-operation between the 2 drivers to make sure .cdf is opened with FileGDB
      GTiff: add JXL_LOSSLESS_OVERVIEW, JXL_EFFORT_OVERVIEW, JXL_DISTANCE_OVERVIEW and JXL_ALPHA_DISTANCE_OVERVIEW configuration options (fixes #8973)
      GTiff overviews: generalize saving resampling method in a RESAMPLING metadata item
      gdaladdo: reuse previous resampling method (from GTiff RESAMPLING metadata item) if not specifying -r and overview levels if not specifying them
      Add autotest/slow_tests and a CI job to run them
      gpkg.rst: mention related tabl extensions in extension list
      CI: macosx: fix issue with lxml
      Advertize 3.8.2
      Shapelib: resync with upstream
      libtiff: resync with upstream
      about_no_title.rst: fix version number
      gdalbuildvrt: in -separate mode, only use ComplexSource if needed
      infback9: fix various build issues with clang 17
      autotest: updates to support libpng 1.6.40 and other library updates of fedora:rawhide
      WMS: change logic to set gdalwmscache directory to honor in particular XDG_CACHE_HOME (fixes #8987)
      FIT driver: some cleanup to reduce cppcheck confusion
      cppcheck related cleanups
      ODS: long name metadata: remove trailing space
      gdalinfo, ogrinfo, etc. --formats: append list of extensions (fixes #8958)
      Update .github/PULL_REQUEST_TEMPLATE.md [ci skip]
      Add specific documentation section about AWS IMDS (and fix typo)
      AWS S3: add explicit error message when IMDS fails and we know we are on EC2
      OGRArrowArrayHelper::SetBoolOn(): fix wrong bit shift computation (affects ogr2ogr from GPKG/FlatGeoBuf to something else) (fixes #8998)
      CoordinateTransformation::TransformBounds(): fix polar stereographic (including pole) to Web Mertactor (fixes #8996)
      utf8.h: disable dead code
      Avoid coverity scan warnings about copied values
      VSICurl and derived: replace most uses of CPLString with std::string
      utf8.h: remove dead code now removed upstream
      autotest/ogr/ogr_feature.py: fix dialect names
      DGN (v7) driver: emit explicit error when attempting to open a DGNv8 file and the DGNv8 driver is not available (fixes #9004)
      GitHub actions: limit permissions further
      HOWTO-RELEASE: add signing [ci skip]
      mkgdaldist.sh: make shellcheck happy [ci skip]
      README.md: add OpenSSF best practices badge
      CI Travis: try to remove get-pip
      ogr2ogr: do not use ArrowArray interface if -clipsrc, -clipdst, -gcp or -wrapdateline are specified (fixes #9013)
      GPKG: disable by default multi-threaded ArrowArray interface. Make it opt-in with the OGR_GPKG_NUM_THREADS config option
      GPKG: fix build with sqlite 3.36.x (fixes #9021)
      GPKG: fix multi-threaded ArrowArray interface and re-enable it by default
      Internal libjson: resync random_seed.c with upstream, and use getrandom() implementation when available (fixes #9024)
      jpegxl.py: make test pass with latest libjxl master
      GMLAS: use CPLHTTPFetch() instead of /vsicurl_streaming/ to allow alternate HTTP downloader
      GMLAS: faster retrieval of GML and ISO schemas by using zip archives
      ogr_gmlas.py: clean temporary files
      HDF5 multidim: fix crash on reading compound data type with fixed-length strings
      S102: add support for spatial metadata of the QualityOfSurvey group
      S102: read nodata value from /Group_F/BathymetryCoverage
      S102: check startSequence=0,0
      EEDA/EEDAI: use 'crsWkt' element
      gdalinfo: do not emit errors if corner coordinate reprojection fails
      Replace uses of #ifdef WIN32 with #ifdef _WIN32
      cpl_port.h: no longer defines WIN32
      HOWTO-RELEASE: update [ci skip]
      Doc: advertize v3.8.3
      Internal libjson: fix warning on Windows
      docker/README.md: advertize 3.8.3 [ci skip]
      OGRGeocode(): avoid using snprintf() with a formatting string coming from an environment variable (CodeQL cpp/tainted-format-string)
      CPLODBCSession::ConnectToMsAccess(): avoid using snprintf() with a formatting string coming from an environment variable (CodeQL cpp/tainted-format-string)
      port/: add explicit widening casts to avoid CodeQL cpp/integer-multiplication-cast-to-long
      SWIG: avoid potential multiplication overflows (CodeQL cpp/integer-multiplication-cast-to-long)
      Internal libjpeg: avoid CodeQL cpp/integer-multiplication-cast-to-long
      TIGER: avoid CodeQL cpp/integer-multiplication-cast-to-long
      Selafin: avoid CodeQL cpp/integer-multiplication-cast-to-long
      cpl_port.h: add cpl::fits_on<> function
      OpenFileGDB: avoid CodeQL cpp/integer-multiplication-cast-to-long
      NTF: fix CodeQL cpp/integer-multiplication-cast-to-long
      NGW: fix CodeQL cpp/integer-multiplication-cast-to-long
      MITAB: avoid CodeQL cpp/integer-multiplication-cast-to-long
      GPKG: avoid CodeQL cpp/integer-multiplication-cast-to-long
      AVC: avoid CodeQL cpp/integer-multiplication-cast-to-long
      OGRSimpleCurve::exportToWkt(): avoid CodeQL cpp/integer-multiplication-cast-to-long
      OGRWKBIntersectsRingSequencePessimistic(): avoid CodeQL cpp/integer-multiplication-cast-to-long
      RAWDataset: avoid CodeQL cpp/integer-multiplication-cast-to-long
      GDALComputeBandStats(): avoid potential loss of precision
      GDALDataset::RasterIOResampled(): avoid CodeQL cpp/integer-multiplication-cast-to-long
      gdalrasterband: avoid CodeQL cpp/integer-multiplication-cast-to-long
      GDALVirtualMem: avoid CodeQL cpp/integer-multiplication-cast-to-long
      gdalmultidim: avoid CodeQL cpp/integer-multiplication-cast-to-long
      gdalnodatavaluesmaskband.cpp: avoid CodeQL cpp/integer-multiplication-cast-to-long
      gdalnodatamaskband.cpp: avoid CodeQL cpp/integer-multiplication-cast-to-long
      gdalexif: avoid CodeQL cpp/integer-multiplication-cast-to-long
      gdalarraybandblockcache: avoid CodeQL cpp/integer-multiplication-cast-to-long
      infback9: avoid CodeQL cpp/integer-multiplication-cast-to-long
      XYZ: avoid CodeQL cpp/integer-multiplication-cast-to-long
      WMS: avoid CodeQL cpp/integer-multiplication-cast-to-long
      VRTDerivedRasterBand::IRasterIO(): fix potential multiplication overflow
      VRT: avoid CodeQL cpp/integer-multiplication-cast-to-long
      TSX: avoid CodeQL cpp/integer-multiplication-cast-to-long
      STACTA: avoid CodeQL cpp/integer-multiplication-cast-to-long
      TGA: avoid CodeQL cpp/integer-multiplication-cast-to-long
      SRTMHGT: avoid CodeQL cpp/integer-multiplication-cast-to-long
      SAFE: avoid CodeQL cpp/integer-multiplication-cast-to-long
      SDTS: avoid CodeQL cpp/integer-multiplication-cast-to-long
      RMF: avoid CodeQL cpp/integer-multiplication-cast-to-long
      RS2: avoid CodeQL cpp/integer-multiplication-cast-to-long
      RIK: avoid CodeQL cpp/integer-multiplication-cast-to-long
      ROI_PAC: avoid CodeQL cpp/integer-multiplication-cast-to-long
      NTv2: avoid CodeQL cpp/integer-multiplication-cast-to-long
      PAux: avoid CodeQL cpp/integer-multiplication-cast-to-long
      LCP: avoid CodeQL cpp/integer-multiplication-cast-to-long
      MFF: avoid CodeQL cpp/integer-multiplication-cast-to-long
      ISCE: avoid CodeQL cpp/integer-multiplication-cast-to-long
      BT: avoid CodeQL cpp/integer-multiplication-cast-to-long
      R: avoid CodeQL cpp/integer-multiplication-cast-to-long
      Rasterlite: avoid CodeQL cpp/integer-multiplication-cast-to-long
      PostGISRaster: fix potential multiplication overflow
      PNG: avoid CodeQL cpp/integer-multiplication-cast-to-long
      PLMosaic: avoid CodeQL cpp/integer-multiplication-cast-to-long
      PDS4: avoid CodeQL cpp/integer-multiplication-cast-to-long
      ISIS3: avoid CodeQL cpp/integer-multiplication-cast-to-long
      PCIDSK: avoid CodeQL cpp/integer-multiplication-cast-to-long
      NITF: avoid CodeQL cpp/integer-multiplication-cast-to-long
      JPEG: avoid CodeQL cpp/integer-multiplication-cast-to-long
      MEM: avoid CodeQL cpp/integer-multiplication-cast-to-long
      GTiff: avoid CodeQL cpp/integer-multiplication-cast-to-long
      GRIB: avoid CodeQL cpp/integer-multiplication-cast-to-long
      ENVISAT: avoid CodeQL cpp/integer-multiplication-cast-to-long
      AIG: avoid CodeQL cpp/integer-multiplication-cast-to-long
      gdalenhance: avoid CodeQL cpp/integer-multiplication-cast-to-long
      Northwood: avoid CodeQL cpp/comparison-with-wider-type
      IRIS: avoid CodeQL cpp/comparison-with-wider-type
      EXR: avoid CodeQL cpp/comparison-with-wider-type
      testblockcache: avoid CodeQL cpp/comparison-with-wider-type
      PDF: avoid CodeQL cpp/comparison-with-wider-type
      GIF: avoid CodeQL cpp/comparison-with-wider-type
      MSGN: avoid CodeQL cpp/comparison-with-wider-type
      MRF: avoid CodeQL cpp/comparison-with-wider-type
      KMLSuperOverlay: avoid CodeQL cpp/comparison-with-wider-type
      L1B: avoid CodeQL cpp/comparison-with-wider-type
      ILWIS: avoid CodeQL cpp/comparison-with-wider-type
      IDRISI: avoid CodeQL cpp/comparison-with-wider-type
      HFA: avoid CodeQL cpp/comparison-with-wider-type
      HF2: avoid CodeQL cpp/comparison-with-wider-type
      libgeotiff: avoid CodeQL cpp/comparison-with-wider-type
      GSBG: avoid CodeQL cpp/comparison-with-wider-type
      GRIB: avoid false-positive CodeQL cpp/new-free-mismatch
      FIT: avoid CodeQL cpp/comparison-with-wider-type
      ERS: avoid CodeQL cpp/comparison-with-wider-type
      EEDA: avoid CodeQL cpp/comparison-with-wider-type
      DAAS: avoid CodeQL cpp/comparison-with-wider-type
      DTED: avoid CodeQL cpp/comparison-with-wider-type
      CTG: avoid CodeQL cpp/comparison-with-wider-type
      COSAR: avoid CodeQL cpp/comparison-with-wider-type
      CEOS2: avoid CodeQL cpp/comparison-with-wider-type
      BMP: avoid CodeQL cpp/comparison-with-wider-type
      BLX: avoid CodeQL cpp/comparison-with-wider-type
      AAIGRID: avoid CodeQL cpp/comparison-with-wider-type
      testvirtualmem: avoid CodeQL cpp/comparison-with-wider-type
      test_gdal: avoid CodeQL cpp/comparison-with-wider-type
      nearblack: avoid CodeQL cpp/comparison-with-wider-type
      gdaldem: avoid CodeQL cpp/comparison-with-wider-type
      gdalwarpoperation: avoid CodeQL cpp/comparison-with-wider-type
      gdalpansharpen: avoid CodeQL cpp/comparison-with-wider-type
      gdalproximity: avoid CodeQL cpp/comparison-with-wider-type
      gdalmediancut: avoid CodeQL cpp/comparison-with-wider-type
      gdallinearsystem: avoid CodeQL cpp/comparison-with-wider-type
      gdaldither: avoid CodeQL cpp/comparison-with-wider-type
      gdal_simplesurf: avoid CodeQL cpp/comparison-with-wider-type
      gdal_rpc: avoid CodeQL cpp/comparison-with-wider-type
      gdal_crs: avoid CodeQL cpp/comparison-with-wider-type
      CPLRecodeToWCharIconv(): avoid CodeQL cpp/incorrect-string-type-conversion
      gdaljp2structure.cpp: fix CodeQL cpp/comparison-with-wider-type
      GPKG: fix CodeQL cpp/sql-injection
      GML: fix potential cpp/external-entity-expansion CodeSQL issue
      GMLAS: fix potential cpp/external-entity-expansion CodeSQL issue
      ILI: fix potential cpp/external-entity-expansion CodeSQL issue
      NAS: fix potential cpp/external-entity-expansion CodeSQL issue
      WEBP: avoid CodeQL cpp/integer-multiplication-cast-to-long
      PDF: avoid CodeQL cpp/integer-multiplication-cast-to-long
      netCDF: avoid CodeQL cpp/integer-multiplication-cast-to-long
      BAG: avoid CodeQL cpp/integer-multiplication-cast-to-long
      HDF5: avoid CodeQL cpp/integer-multiplication-cast-to-long
      g2clib: avoid CodeQL cpp/integer-multiplication-cast-to-long
      autotest: make it compatible with current numpy 2.0dev
      test_gdal.cpp: test GDALWarpApp()/GDALTranslate()/GDALBuildVRT() and GDALReleaseDataset()
      Doc of GDALWarpApp()/GDALTranslate()/GDALBuildVRT(): better document ownership
      Create codeql.yml
      CSV: do not quote numeric fields even if STRING_QUOTING=ALWAYS (3.8.1 regression) (fixes https://github.com/qgis/QGIS/issues/55808)
      Fix querying of GDAL_DMD_PLUGIN_INSTALLATION_MESSAGE
      Improve error message when a dataset could be opened by a plugin, but we can't load it
      fuzzers/build.sh: fix curl build
      Python bindings: implement __arrow_c_stream__() interface for ogr.Layer
      Python bindings: add a ogr.Layer.GetArrowArrayStreamInterface() method
      Add GDALGetOutputDriversForDatasetName()
      Restore use of gmtime_r and localtime_r; extend to ctime_r; use Windows variants too
      netCDF: use VSILocalTime()
      Internal libopencad: use localtime_r() or localtime_s() when possible
      PCIDSK SDK: use ctime_r() or ctime_s() when possible
      Remove port/cpl_config* files no longer used since the switch to CMake
      degrib: use gmtime_r() or gmtime_s() when possible
      Add S104 (Water Level Information for Surface Navigation Product) and S111 (Surface Currents Product) raster read-only drivers
      Modify the logic of selection of overviews for non-nearest resampling; add a GDAL_OVERVIEW_OVERSAMPLING_THRESHOLD config option (#9040)
      warper: fix artifacts when reprojecting from long/lat to ortho (fixes #9056)
      GDALSuggestedWarpOutput2(): ortho->long/lat: limit extent to [lon_0-90,lon_0+90] even when poles are included
      Warper: limit artifacts when doing ortho->long/lat (provided that srcNodata is set)
      README.md: add OpenSSF Scorecard badge [ci skip]
      CI: pin actions by sha
      No longer alias CPLMutex, CPLCond and CPLJoinableThread to void in non-DEBUG builds
      Sentinel2 doc: adjust description of content of L2A subdatasets (fixes #9066)
      Sentinel2: include 10m AOT and WVP bands in 10m subdataset (refs #9066)
      Refresh CITATION and CITATION.cff [ci skip]
      OGR2SQLITE_Setup(): robustify against potential crashing scenario
      OGRCoordinateTransformation transform methods: more accurate description of return value (fixes #9069)
      gdal.cmake: set -DDEBUG for CMAKE_BUILD_TYPE=Debug for Windows builds as well
      OGRCoordinateTransformation::Transform(): change nCount parameter to size_t (C++ API only for now) (fixes #9074)
      multidim API: fix wrong DataAxisToSRSAxisMapping
      VSICurlFilesystemHandlerBase::ReadDirInternal(): avoid false positive Coverity warning about use after free
      Internal libjson: silence 'toctou'
      Avoid/fix Coverity performance warnings
      OGRProjCT::TransformWithErrorCodes(): Improve performance of axis swapping (inspired by @SunBlack proposal) (fixes #9073)
      Test effect of SetDataAxisToSRSAxisMapping([1,2,-3])
      OGRSpatialReference::SetDataAxisToSRSAxisMapping(): improve doc (fixes #9071) (#9072)
      gdalwarp: do not enable blank line detection when -tap and -te are specified (fixes #9059)
      Doc: stactit.rst: mention behavior with overlapping items
      OSR_CT: fix SetDataAxisToSRSAxisMapping([-2, 1]) on target SRS
      WMS: fix nullptr dereference on invalid document (fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=65772)
      Add .github/workflows/scorecard.yml
      Avoid/fix Coverity performance warnings
      Driver manager: avoid warning about 'DMD_PLUGIN_INSTALLATION_MESSAGE whereas its real driver doesn't declare it or with a different value'
      OGRGeometryFactory::forceTo(): make it honour dimensionality of eTargetType (in particular fix POLYGON -> LINESTRING or POLYGON -> LINESTRINGZ) (fixes #9080)
      CPLReplacePointByLocalePoint(): use regular code path for Android API >= 20
      port/CMakeLists.txt: remove unneeded SKIP_UNITY_BUILD_INCLUSION=ON
      Internal libtiff: resync with upstream (_WIN32 related changes)
      Internal shapelib: resync with upstream (_WIN32 related changes)
      .github/workflows/cmake_builds.yml: pin dependency by sha1sum
      CMake: make it ready for GDAL_DATA being filled by each driver
      Move data/vicar.json to frmts/pds/data
      Move data/vdv452.xml and xsd to ogr/ogrsf_frmts/vdv/data
      Move data/*.dxf to ogr/ogrsf_frmts/dxf/data
      Move data/grib2_* to frmts/grib/data
      Move GML data files to ogr/ogrsf_frmts/gml/data
      Move GMLAS data files to ogr/ogrsf_frmts/gmlas/data
      Move S57 data files to ogr/ogrsf_frmts/s57/data
      Move DGN data files to ogr/ogrsf_frmts/dgn/data
      Move OSM data files to ogr/ogrsf_frmts/osm/data
      Move HDF5 data files to frmts/hdf5/data
      Mode PDS4 data file to frmts/pds/data
      Move NITF data files to frmts/nitf/data
      Move netCDF data files to frmts/netcdf/data
      Move PLScenes data files to ogr/ogrsf_frmts/plscenes/data
      Move EEDA data files to frmts/eeda/data
      Move PDF data files to frmts/pdf/data
      Move SXF data files to ogr/ogrsf_frmts/sxf/data
      Move gdalinfo, gdalmdiminfo, ogrinfo output.schema.json to apps/data
      Move data/gdalvrt.xsd to frmts/vrt/data
      Move data/ogrvrt.xsd to ogr/ogrsf_frmts/vrt/data
      Move data/gt_datum.csv and data/gt_ellips.csv to frmts/nitf/data
      Move cubewerx_extra.wkt, ecw_cs.wkt, epsg.wkt, esri_StatePlane_extra.wkt, ozi_*.csv, pci_*.csv, sateplace.csv to ogr/data/
      Move data/template_tiles.mapml to swig/python/data/
      Move data/tms_*.json files to gcore/data
      typo fixes [ci skip]
      OGRParquetDriverOpen(): tune with directory
      OGRGPSBabelDriverIdentifyInternal(): tune
      ogr2ogr: do not copy private layers (would for example break SQLite -> SQLite/GPKG)
      Address cppcheck warnings constVariableReference/constParameterReference
      Avoid false positive warning about accessing moved variable
      GDALBandGetBestOverviewLevel2(): add nullptr check
      GDALMDArray::AsClassicDataset(): make it possible to use overviews
      coordinate_epoch.rst: remove outdated comment
      ogr_gmlas.py: skip test_ogr_gmlas_get_gml_and_iso_schemas() test if https://schemas.opengis.net is down
      ExecuteSQL(dialect=SQLite): support 'SELECT\n' for example (fixes #9093)
      Fix calls to isspace() to make sure argument is unsigned, otherwise unspecified behavior
      Fix calls to isdigit() to make sure argument is unsigned, otherwise unspecified behavior
      Fix calls to isalnum() to make sure argument is unsigned, otherwise unspecified behavior
      Fix calls to isalpha() to make sure argument is unsigned, otherwise unspecified behavior
      Fix calls to islower() to make sure argument is unsigned, otherwise unspecified behavior
      Fix calls to isupper() to make sure argument is unsigned, otherwise unspecified behavior
      Fix calls to tolower() and toupper() to make sure argument is unsigned, otherwise unspecified behavior
      CI: avoid hardcoding -j3
      CI fedora_rawhide: explicitly install python3-setuptools
      TileMatrixSet::parse(): increase maximum zoom level for InspireCRS84Quad to 29
      GPKG: support maximum level up to 29 or 30; add a ZOOM_LEVEL creation option
      GDALBandGetBestOverviewLevel2(): avoid numerical instability with GDAL_OVERVIEW_OVERSAMPLING_THRESHOLD = 1.0
      gdal.cmake: add comment
      [Lint] netCDFIdentifyFormat(): reduce number of magic values
      S102: read NoData value for QualityOfSurvey from /Group_F/QualityOfSurvey
      gdal2tiles.py: add debug message when UnsupportedTileMatrixSet
      FindECW.cmake: make it work for Windows 32-bit builds (fixes #9106)
      FindSQLite3.cmake: improve detection of static libsqlite3.a (fixes #9096)
      Arrow/Parquet: add (minimum) support for libarrow 15.0
      OGRArrowLayer::MapArrowTypeToOGR(): make the code robust to potentially new entries in the arrow::Type enumeration
      PDF: correctly initialize PAM when opening a subdataset (specific page for example)
      GMLAS: recognize GeometricPrimitivePropertyType
      wms.py: set timeout on one test resource
      Internal shapelib: remove CPL_UNUSED
      Add OGRSpatialReference::exportToCF1() and importFromCF1(), and make netCDF driver use them
      SWIG: add osr.SpatialReference.ImportFromCF1(), ExportToCF1(), ExportToCF1Units()
      gdalmdimtranslate: add -arrayoptions
      Zarr: be able to read CRS from CF1 conventions
      OGRSpatialReference::importFromCF1(): make it work with spatial_ref and crs_wkt attributes
      Add raster VRTTI (Virtual Raster Tile Index) driver
      Add documentation for VRTTI driver
      gdaladdo: make --partial-refresh-from-source-timestamp work on VRTTI datasets
      Make gdaltindex a C callable function: GDALTileIndex()
      gdaltindex: add -overwrite, -vrtti_filename, -tr, -te, -ot, -bandcount, -nodata, -colorinterp, -mask, -mo options
      gdaltindex: add -recursive, -filename_filter, -min_pixel_size, -max_pixel_size, -fetch_md
      Add a slow test for VRTTI
      VRTTI: also support setting the metadata as a XML attached to the xml:VRTTI metadata domain of a vector layer
      Rename VRTTI driver to GTI
      GTI: take into account comments of code review
      TileDB: be able to read datasets converted with 'tiledb-cf netcdf-convert'
      GTI / GPKG: make them both be able to handle .gti.gpkg files
      GDALOverviewDataset: avoid setting SetEnableOverviews(false) during lifetime of object. Just do it transiently
      VRTPansharpenedRasterBand::GetOverviewCount(): robustify against potential failure of GDALCreateOverviewDataset()
      LIBKML: fix crash on a gx:Track without when subelements (fixes qgis/qgis#55963)
      gti.rst: formatting fix
      Python bindings: add a ogr.Layer.WriteArrow() method consuming __arrow_c_stream__ or __arrow_c_array__ interfaces
      GDALPamRasterBand::XMLInit(): hopefully avoid false-positive 'Potential use after free' from https://github.com/OSGeo/gdal/security/code-scanning/458
      cpl_userfaultfd.cpp: check sscanf() return value (fixes https://github.com/OSGeo/gdal/security/code-scanning/466)
      CPLAtof()/CPLStrtod(): recognize again INF and -INF
      GDALDeserializeGCPListFromXML(): validate value of GCP Pixel,Line,X,Y,Z attributes
      Python bindings: ogr.Layer.WriteArrow(): also accept requested_schema implementing __arrow_c_schema__
      GPKG: fixes to make most operations compatible with PRAGMA foreign_keys=1 (fixes #9135)
      OGRGeometryFactory::forceToMultiLineString(): hopefully fix false-positive CodeQL potential-double-free (https://github.com/OSGeo/gdal/security/code-scanning/450)
      OGRGeometryFactory::forceToMultiLineString(): hopefully fix false-positive CodeQL potential-double-free (https://github.com/OSGeo/gdal/security/code-scanning/449)
      GDALPamDataset::XMLInit(): hopefully fix false-positive CodeQL potential-double-free (https://github.com/OSGeo/gdal/security/code-scanning/459)
      OGRLayer::FilterGeometry(): make it accept a 'const OGRGeometry*'
      VFK: hopefully fix false-positive CodeQL potential-double-free (https://github.com/OSGeo/gdal/security/code-scanning/485, 484, etc. down to 467)
      MITAB: hopefully fix likely false-positive CodeQL potential-double-free (https://github.com/OSGeo/gdal/security/code-scanning/465)
      OZI: hopefully fix likely false-positive CodeQL potential-double-free (https://github.com/OSGeo/gdal/security/code-scanning/460)
      GTI: fix cpp/integer-multiplication-cast-to-long (https://github.com/OSGeo/gdal/security/code-scanning/448)
      sozip: fix potential (small) leak of papszArgv in error code paths
      OGRGeometryFactory::transformWithOptions(): hopefully fix false-positive CodeQL potential-double-free (https://github.com/OSGeo/gdal/security/code-scanning/454)
      Change GDALRasterBand::poMask to be a GDALRasterBandOwnedOrNot instance, and remove GDALRasterBand::bOwnMask, to hopefully fix false-positive CodeQL potential-double-free (https://github.com/OSGeo/gdal/security/code-scanning/453)
      docker/alpine-small/Dockerfile: remove removal of unused resource files [ci skip]
      GDALDataset::ReportErrorV() and GDALRasterBand::ReportError(): avoid formatting string to be 'tainted' by dataset name (https://github.com/OSGeo/gdal/security/code-scanning/522)
      ogr2ogr: Arrow code path: take into account -limit parameter for MAX_FEATURES_IN_BATCH
      OGRGeometryFactory::forceTo(): fix nullptr dereference in error code path (master only, fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=66177)
      fix previous commit
      gdalwarp: emit explicit error message when transformation isn't inversible (fixes #9149)
      Win32 extended filenames (starting with "\\?\"): various fixes; add support for network UNC paths
      autotest: fix warning 'PytestRemovedIn9Warning: Marks applied to fixtures have no effect'
      gdaltindex: fix potential memory leak (CID 1533976)
      GTIFMemBufFromSRS: fix potential nullptr deref (CID 1533975)
      MySQL: fix/workaround server-side spatial filtering when SRS is geographic with MySQL >= 8 (fixes qgis/QGIS#55463)
      GPKG creation: set Z/M columns of gpkg_geometry_columns when there are Z/M geometries in a 2D declared layer
      VRT: add a NoDataFromMaskSource source
      NoDataFromMaskSource: add RemappedValue
      NoDataFromMaskSource: rename option to -nodata_max_mask_threshold
      GPKG: hopefully unbreak VS2017 builds
      Doc: OpenFileGDB: document OPENFILEGDB_DEFAULT_STRING_WIDTH configuration option (fixes #9165)
      BMP: fix reading images larger than 4GB
      typo fixes in code comments [ci skip]
      Java bindings: bump minimum version to Java 8
      CI: try macOS-14 for M1 MacOS runner
      CI: disable ODBC for Mac for test_cmake.sh
      Shape: make it recognize /vsizip/foo.shp.zip directories
      TileDB: make its identify() method more restrictive
      PDS: fix compilation with Emscripten version 3.1.7
      Python bindings: remove run of 'python -m lib2to3' that is a no-op, given that lib2to3 is removed in python 3.13 (fixes #9173)
      [Lint] OpenFileGDB: rename constant to DEFAULT_STRING_WIDTH and add extensive comments
      OGRGeometryFactory::createGeometry(): do not assert on wkbUnkown input
      OGRGeometryFactory::forceTo(): fix assertion with empty geometry and target type = unknown
      docker/ubuntu-full/Dockerfile: update to Arrow 15.0.0 (fixes #9183) [ci skip]
      CSV: parse header with line breaks (fixes #9172)
      bmp_read.py: fix wrong driver name
      /vsisparse/: fix Stat() on files larger than 4 GB on 32-bit builds
      PG: be robust to inexact case for schema when creating a layer 'schema_name.layer_name' (fixes #9125)
      docker/ubuntu-full/Dockerfile: disable AVX2 when building TileDB [ci skip]
      CI: add build time testing of OCI driver
      gdalwarp_lib.cpp: do floating point division (CID 1534303)
      PG: fix memleak in error code path (master only, CID 1534302)
      TileDB: fix performance warning (CID 1534301)
      exportToCF1(): make it obvious that we don't out-of-bound access param.doubles[] (CID 1534300)
      PG: fix performance warning (CID 1534299)
      HFA: make sure HFADataset::hHFA member is initialized (CID 1073932)
      Rasterlite: avoid false positive Coverity warning about nullptr deref (CID 1214415)
      LIBKML: avoid false positive Coverity warning about nullptr deref (CID 1214419)
      OSM: avoid COPY_INSTEAD_OF_MOVE (CID 1525192)
      LIBKML: avoid COPY_INSTEAD_OF_MOVE (CID 1525205)
      PDF: avoid COPY_INSTEAD_OF_MOVE (CID 1525231)
      WMS: avoid COPY_INSTEAD_OF_MOVE (CID 1525239)
      arrow_common: avoid COPY_INSTEAD_OF_MOVE (CID 1525324)
      HFA: avoid COPY_INSTEAD_OF_MOVE (CID 1525492)
      docker/ubuntu-full/bh-gdal.sh: build drivers with external dependencies as plugins (GDAL_ENABLE_PLUGINS=ON) [ci skip]
      docker/ubuntu-full/bh-gdal.sh: strip symbols from plugins [ci skip]
      CI: revert to previous method to add ppa:ubuntugis/ubuntugis-unstable
      Add VSIGetDirectorySeparator() to return the directory separator for the specified path
      CPLFormFilename(), CPLProjectRelativeFilename(), VSIReadDirRecursive(), NextDirEntry(): useVSIGetDirectorySeparator()
      /vsis3 Sync(): use VSIGetDirectorySeparator(),
      [Internal shapelib] Resync with upstream
      GeoJSONSeq: add missing feature defn sealing
      Zarr: avoid potential infinite…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug Either a bug report, or a bug fix. Let's hope for the latter! Data Provider Related to specific vector, raster or mesh data providers Regression Something which used to work, but doesn't anymore
Projects
None yet
4 participants