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

Assertion failed when filtering a GeoParquet layer #53301

Closed
2 tasks done
ttencate opened this issue May 31, 2023 · 3 comments
Closed
2 tasks done

Assertion failed when filtering a GeoParquet layer #53301

ttencate opened this issue May 31, 2023 · 3 comments
Assignees
Labels
Bug Either a bug report, or a bug fix. Let's hope for the latter! Crash/Data Corruption Upstream Needs changes in an upstream library (like Qt, Proj, GDAL, ...)

Comments

@ttencate
Copy link

What is the bug or the crash?

When setting a filter on a GeoParquet layer, QGIS crashes.

Steps to reproduce the issue

I added a filter to a layer which is loaded from a local GeoParquet file. The filter text is:

"network_level_layer_1" = 8

The crash only happens if the layer is visible when the filter is set. Otherwise, it happens as soon as the layer is made visible.

Unfortunately, the crash is not reproducible when adding this very same layer to a blank project, not even in my normal profile, and I cannot share the full project because of confidentiality. I hope the backtrace is sufficient info to go on.

Versions

QGIS version 3.30.2-'s-Hertogenbosch QGIS code branch Release 3.30
Qt version 5.15.9
Python version 3.11.3
GDAL/OGR version 3.7.0
PROJ version 9.2.0
EPSG Registry database version v10.082 (2023-02-06)
GEOS version 3.11.2-CAPI-1.17.2
Compiled against SQLite 3.41.2 Running against SQLite 3.42.0
PDAL version 2.5.3
PostgreSQL client version unknown
SpatiaLite version 5.0.1
QWT version 6.2.0
QScintilla2 version 2.14.0
OS version Arch Linux
       
Active Python plugins
QuickOSM 2.1.1
attributeBasedClustering 2.2.1
clusterpoints 5.1
contour 2.0.12
pdokservicesplugin 4.1.2
plugin_reloader 0.9.3
pluginbuilder3 3.2.1
qgis-maptiler-plugin 3.1.1
quick_map_services 0.19.33
MetaSearch 0.3.6
db_manager 0.1.20
grassprovider 2.12.99
processing 2.12.99

Supported QGIS version

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

New profile

  • I tried with a new QGIS profile

Additional context

The output of the crash is:

/usr/include/c++/13.1.1/bits/stl_vector.h:1144: std::vector<_Tp, _Alloc>::const_reference std::vector<_Tp, _Alloc>::operator[](size_type) const [with _Tp = std::shared_ptr<arrow::Array>; _Alloc = std::allocator<std::shared_ptr<arrow::Array> >; const_reference = const std::shared_ptr<arrow::Array>&; size_type = long unsigned int]: Assertion '__n < this->size()' failed.
/bin/bash: line 1: 43143 Aborted                 (core dumped) qgis

The backtrace:

#0  __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44
#1  0x00007fdc3849f2d3 in __pthread_kill_internal (signo=6, threadid=<optimized out>) at pthread_kill.c:78
#2  0x00007fdc3844fa08 in __GI_raise (sig=6) at ../sysdeps/posix/raise.c:26
#3  <signal handler called>
#4  __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44
#5  0x00007fdc3849f2d3 in __pthread_kill_internal (signo=6, threadid=<optimized out>) at pthread_kill.c:78
#6  0x00007fdc3844fa08 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#7  0x00007fdc38438538 in __GI_abort () at abort.c:79
#8  0x00007fdc386dd3b2 in std::__glibcxx_assert_fail (file=file@entry=0x7fdba0d95670 "/usr/include/c++/13.1.1/bits/stl_vector.h", line=line@entry=1144, 
    function=function@entry=0x7fdba0d95550 "std::vector<_Tp, _Alloc>::const_reference std::vector<_Tp, _Alloc>::operator[](size_type) const [with _Tp = std::shared_ptr<arrow::Array>; _Alloc = std::allocator<std::shared_ptr<arrow::Array> >; cons"..., condition=condition@entry=0x7fdba0d950b5 "__n < this->size()")
    at /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/debug.cc:61
#9  0x00007fdba0d545f8 in std::vector<std::shared_ptr<arrow::Array>, std::allocator<std::shared_ptr<arrow::Array> > >::operator[] (this=<optimized out>, 
    __n=<optimized out>) at /usr/include/c++/13.1.1/bits/stl_vector.h:1142
#10 std::vector<std::shared_ptr<arrow::Array>, std::allocator<std::shared_ptr<arrow::Array> > >::operator[] (this=0x7fdbe8213eb0, __n=<optimized out>)
    at /usr/include/c++/13.1.1/bits/stl_vector.h:1142
#11 OGRArrowLayer::SkipToNextFeatureDueToAttributeFilter (this=this@entry=0x7fdbe8213c50)
    at /usr/src/debug/gdal/gdal-3.7.0/ogr/ogrsf_frmts/parquet/../arrow_common/ograrrowlayer.hpp:2692
#12 0x00007fdba0d5b6b0 in OGRArrowLayer::GetNextRawFeature (this=0x7fdbe8213c50)
    at /usr/src/debug/gdal/gdal-3.7.0/ogr/ogrsf_frmts/parquet/../arrow_common/ograrrowlayer.hpp:2973
#13 OGRGetNextFeatureThroughRaw<OGRArrowLayer>::GetNextFeature (this=0x7fdbe8213c50) at /usr/src/debug/gdal/gdal-3.7.0/ogr/ogrsf_frmts/ogrsf_frmts.h:404
#14 OGRArrowLayer::GetNextFeature (this=0x7fdbe8213c50) at /usr/src/debug/gdal/gdal-3.7.0/ogr/ogrsf_frmts/parquet/../arrow_common/ogr_arrow.h:200
#15 0x00007fdc3950f8eb in QgsOgrFeatureIterator::fetchFeature (this=0x7fdbe80e83d0, feature=...)
    at /usr/src/debug/qgis/qgis-3.30.2/src/core/providers/ogr/qgsogrfeatureiterator.cpp:473
#16 0x00007fdc395d7c49 in QgsAbstractFeatureIterator::nextFeature (this=0x7fdbe80e83d0, f=...) at /usr/src/debug/qgis/qgis-3.30.2/src/core/qgsfeatureiterator.cpp:69
#17 0x00007fdc39bb1a89 in QgsFeatureIterator::nextFeature (f=..., this=<optimized out>) at /usr/src/debug/qgis/qgis-3.30.2/src/core/qgsfeatureiterator.h:401
#18 QgsVectorLayerFeatureIterator::fetchFeature (this=0x7fdbe803a330, f=...) at /usr/src/debug/qgis/qgis-3.30.2/src/core/vector/qgsvectorlayerfeatureiterator.cpp:502
#19 0x00007fdc395d7c49 in QgsAbstractFeatureIterator::nextFeature (this=0x7fdbe803a330, f=...) at /usr/src/debug/qgis/qgis-3.30.2/src/core/qgsfeatureiterator.cpp:69
#20 0x00007fdc39be4177 in QgsFeatureIterator::nextFeature (f=..., this=0x7fdb5fff9178) at /usr/src/debug/qgis/qgis-3.30.2/src/core/qgsfeatureiterator.h:401
#21 QgsVectorLayerRenderer::drawRenderer (fit=..., renderer=0x556e18a236d0, this=0x556e1510f520)
    at /usr/src/debug/qgis/qgis-3.30.2/src/core/vector/qgsvectorlayerrenderer.cpp:447
#22 QgsVectorLayerRenderer::renderInternal (this=this@entry=0x556e1510f520, renderer=0x556e18a236d0)
    at /usr/src/debug/qgis/qgis-3.30.2/src/core/vector/qgsvectorlayerrenderer.cpp:414
#23 0x00007fdc39be5e0b in QgsVectorLayerRenderer::render (this=0x556e1510f520) at /usr/include/c++/13.1.1/bits/unique_ptr.h:199
#24 0x00007fdc39897174 in QgsMapRendererParallelJob::renderLayerStatic (job=...)
    at /usr/src/debug/qgis/qgis-3.30.2/src/core/maprenderer/qgsmaprendererparalleljob.cpp:373
#25 0x00007fdc39895d1a in QtConcurrent::FunctionWrapper1<void, LayerRenderJob&>::operator() (u=..., this=0x556e15670908)
    at /usr/include/qt/QtConcurrent/qtconcurrentfunctionwrappers.h:80
#26 QtConcurrent::MapKernel<__gnu_cxx::__normal_iterator<LayerRenderJob*, std::vector<LayerRenderJob, std::allocator<LayerRenderJob> > >, QtConcurrent::FunctionWrapper1<void, LayerRenderJob&> >::runIteration (it=..., this=0x556e156708d0) at /usr/include/qt/QtConcurrent/qtconcurrentmapkernel.h:68
#27 QtConcurrent::MapKernel<__gnu_cxx::__normal_iterator<LayerRenderJob*, std::vector<LayerRenderJob, std::allocator<LayerRenderJob> > >, QtConcurrent::FunctionWrapper1<void, LayerRenderJob&> >::runIterations (this=0x556e156708d0, sequenceBeginIterator=..., beginIndex=<optimized out>, endIndex=5)
    at /usr/include/qt/QtConcurrent/qtconcurrentmapkernel.h:77
#28 0x00007fdc39895efd in QtConcurrent::IterateKernel<__gnu_cxx::__normal_iterator<LayerRenderJob*, std::vector<LayerRenderJob, std::allocator<LayerRenderJob> > >, void>::forThreadFunction (this=0x556e156708d0) at /usr/include/qt/QtConcurrent/qtconcurrentiteratekernel.h:255
#29 QtConcurrent::IterateKernel<__gnu_cxx::__normal_iterator<LayerRenderJob*, std::vector<LayerRenderJob, std::allocator<LayerRenderJob> > >, void>::threadFunction (
    this=0x556e156708d0) at /usr/include/qt/QtConcurrent/qtconcurrentiteratekernel.h:217
#30 0x00007fdc3e25c625 in QtConcurrent::ThreadEngineBase::run (this=0x556e15670910) at /usr/src/debug/qt5-base/qtbase/src/concurrent/qtconcurrentthreadengine.cpp:302
#31 0x00007fdc3aaf7e81 in QThreadPoolThread::run (this=0x556e057a0eb0) at thread/qthreadpool.cpp:100
#32 0x00007fdc3aaf30da in operator() (__closure=<optimized out>) at thread/qthread_unix.cpp:350
#33 (anonymous namespace)::terminate_on_exception<QThreadPrivate::start(void*)::<lambda()> > (t=...) at thread/qthread_unix.cpp:287
#34 QThreadPrivate::start (arg=0x556e057a0eb0) at thread/qthread_unix.cpp:310
#35 0x00007fdc3849d44b in start_thread (arg=<optimized out>) at pthread_create.c:444
#36 0x00007fdc38520e40 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81

This trace might point to GDAL/OGR as the culprit. If the QGIS team can rule out that it's caused by QGIS, I'd be happy to report this upstream.

@ttencate ttencate added the Bug Either a bug report, or a bug fix. Let's hope for the latter! label May 31, 2023
@rouault rouault self-assigned this May 31, 2023
@rouault rouault added the Upstream Needs changes in an upstream library (like Qt, Proj, GDAL, ...) label May 31, 2023
@rouault
Copy link
Contributor

rouault commented May 31, 2023

I can reproduce with a dataset of mine. This is indeed a GDAL bug. Working on that

@rouault
Copy link
Contributor

rouault commented May 31, 2023

GDAL fix in OSGeo/gdal#7882

@ttencate
Copy link
Author

ttencate commented Jun 1, 2023

Wow, that's an amazing turnaround time, especially for an issue without a detailed repro case. Thank you very much!

Don't know how I didn't find the duplicate, sorry about that.

rouault added a commit to OSGeo/gdal that referenced this issue Jun 1, 2023
Parquet: fix crash when calling SetIgnoredFields() after SetAttributeFilter() (fixes qgis/QGIS#53301)
rouault added a commit to OSGeo/gdal that referenced this issue Jun 1, 2023
rouault added a commit to OSGeo/gdal that referenced this issue Jun 2, 2023
[Backport release/3.7] Parquet: fix crash when calling SetIgnoredFields() after SetAttributeFilter() (fixes qgis/QGIS#53301)
clrpackages pushed a commit to clearlinux-pkgs/gdal that referenced this issue Jul 21, 2023
Alan Thomas (1):
      DXF: Show constant ATTDEFs as text

Alessandro Pasotti (2):
      MSSQL: Fix cannot write binary field in BCP mode (#7841)
      OGCAPI: Fix TILES raster API not working

Andrea Giudiceandrea (1):
      [Shapefile] SHPRestoreSHX: update SHX content length even if error occurred

Daniel Baston (1):
      CI: Strip invalid characters from container tag

Even Rouault (110):
      gdal.cmake: install data/gfs.xsd and data/gml_registry.xsd
      Doc / NEWS: s/GetCompressedData/ReadCompressedData/
      pytest.ini.in: fix issue when running autotest from git repo when GDAL_RELEASE_NAME in gdal_version.h.in has no dev suffix
      [Backport release/3.7]  TileDB: add TILE_Z_EXTENT layer creation option, and document TILE_EXTENT (#7683)
      NEWS.md: fix link formatting [ci skip]
      Avoids warning with gcc 13.1 of mingw64
      Zarr: avoid GetMDArrayNames() to report duplicates
      cpl_compressor.h: add missing inclusion guard
      Zarr: fix SRS DataAxisToSRSAxisMapping
      CPLBloscDecompressor(): fix logic error when providing an output buffer larger than needed
      Python bindings: take into account Int64/UInt64 in gdal.Array.Write(array(...))
      Fix issues on big endian hosts: recode from UTF-16, and broken tests
      docker/ubuntu-full/bh-gdal.sh: fix Docker buildx arm64 build [ci skip]
      docker/util.sh: optimize docker buildx --release --push mode [ci skip]
      SDTS: fix reading of polygon geometries (fixes #7680)
      JP2OpenJPEG: avoid hard crash in multi-threaded writing mode when opj_write_tile() fails (fixes #7713)
      MITAB: fix reading CRS with LCC_2SP and non-metre unit (fixes #7715)
      [Backport release/3.7] DIMAP: Correctly set RPC origin for SPOT, PHR and PNEO (#7726)
      Multidim GDALGroup::CopyFrom(): modify logic to copy first indexing variables. Fixes issue with gdalmdimtranslate from Zarr to netCDF
      netCDF multidim: fix issues with data vs definition mode
      Internal libjson: use locale insensitive CPLStrtod() to parse floating point numbers (fixes qgis/QGIS#52731)
      Add testing that internal libjson is using locale insensitive functions
      minified_zutil.h: fix build error on Gentoo and derivatives (fixes #7739)
      WMTS: workaround buggy TileMatrix.TopLeftCorner of one server (fixes #5729)
      Warp (average,mode,min,max,med,Q1,Q3): fix issue on edge of target valid area when oversampling (fixes #7733)
      Warp average resampling: using Weighted incremental algorithm mean for numeric stability
      CI: linux_build.yml: set travis_branch: ubuntu_1804
      autotest/osr: make it work with latest PROJ master
      OpenFileGDB: allows to modify a record with a GlobalID field without regenerating it
      OpenFileGDB: reduce debug traces on raster datasets
      OpenFileGDB raster: do not emit error if SRS is unknown (refs #7794)
      OpenFileGDB raster: correctly deal with rasters whose block_origin_x/y != (eminx, emaxy) (fixes #7794)
      [Backport release/3.7] gdal_calc.py: allow "none" or a float for --NoDataValue (#7796)
      [Backport release/3.7] MSSQL: fix crash in ogr2ogr when BCP is enabled (#7798)
      CI: windows_build.yml: disable downloading of libdeflate.zip which now fails quasi systematically for unknown reason
      ISG: relax tolerence check to accept GEOIDEAR16_20160419.isg
      gdallocationinfo: set exit code to 1 as soon as one coordinate is off the file (fixes #7759)
      gdal_rasterize: issue explicit error message when specifying invalid layer name, and catch absence of bounds (refs #7763)
      CSV: do not allow CREATE_CSVT=YES with /vsistdout/ (fixes #7699), and make it possible to use GEOMETRY_NAME with /vsistdout/ (fixes #7700)
      netCDF multidim: deal with _FillValue attribute of different type as variable (e.g. for NASA GEDI L2B products)
      HDF5 multidim: deal with _FillValue attribute of different type as variable (e.g. for NASA GEDI L2B products)
      RequiresUnixPathSeparator(): takes into account /vsihdfs/ and /vsiwebhdfs/ (refs #7801)
      Shape driver: in creation, uses w+b file opening mode instead of wb followed by r+b, to support network file systems having sequential write only and when using CPL_VSIL_USE_TEMP_FILE_FOR_RANDOM_WRITE=YES (fixes #7801)
      Python bindings: do not pass deprecated -py3 SWIG switch for SWIG >= 4.1
      Move OGRWKBGetBoundingBox() to ogr_wkb.h/cpp so it can be reused by other drivers
      OGR TileDB: fully apply spatial filter when using ArrowArray interface
      Avoid hanging on test_wms_19
      Fix gcc 13.1.1 -Werror=array-bounds false positive
      [Backport release/3.7] MSSQL: fix GEOGRAPHY clockwise vertex order (#7842)
      Python bindings: GetArrowStreamAsNumPy(): fix wrong retrieval of content when ArrowArray::offset != 0 on a field of primitive type (integer, float)
      /vsiadls/: make it take into account Azure SAS token
      MySQL: add support for inserting new SRS in MySQL >= 8 INFORMATION_SCHEMA.ST_SPATIAL_REFERENCE_SYSTEMS table (refs #7781)
      netCDF: parse coordinates attribute from Sentinel-3 Synergy product
      GeoTIFF SRS writer: make sure to write EPSG codes only in VerticalDatumGeoKey and VerticalUnitsGeoKey, and write VerticalCSTypeGeoKey = KvUserDefined, VerticalDatumGeoKey = KvUserDefined and VerticalCitationGeoKey=CRS name when the vertical CRS code is unknown (refs #7833)
      GeoTIFF SRS reader: try to recover the vertical datum from the name of the vertical CRS if we only know it (refs #7833)
      gdalsrsinfo: when -e flag is passed, report properly non EPSG authorities (refs #7833)
      DGN: CreateFeature(): fix crash on empty geometries (fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=56771)
      RawRasterBand::IRasterIO(): avoid harmless unsigned integer overflow (https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=57371)
      ERS: avoid integer overflow (fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=57472)
      DIPEx: fix memleak in error code path (fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=57478)
      netCDF vector: fix crash on invalid layer (fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=58469)
      GDALWarpResolveWorkingDataType(): take into account both source and target dataset
      /vsiaz/: fix truncated Authorization header with very large SAS tokens
      CI: try to avoid libjpeg-turbo 2.0 from non-conda-forge channel to be installed
      TileDB: FillPrimitiveListArray(): fix data corruption with spatial filter (Coverity CID 1512587, 1512576)
      CMake: only try to detect HDF5 CXX component if KEA is detected
      CMake: capture dependency of MBTiles driver to MVT
      CI: fedora:rawhide: workarounds bug in Docker image
      Parquet: fix crash when calling SetIgnoredFields() after SetAttributeFilter() (fixes qgis/QGIS#53301)
      CI: fix build-mac
      Fix build error with MSYS64 UCRT64 with gcc 13 (fixes #7909)
      GPKG: sanitize type use of GPkgFieldToOGR()
      GPKG: ArrowArray interface: make it tolerant to Spatialite geometries
      GPKG: fix handling of geometry column from a view, ...
      GPKG: define a 'gdal_spatialite_computed_geom_column' extension when a view has its geometry column being the result of Spatialite SQL function
      gdal_rasterize: fix logic error of fix of #7663 (CID 1512568)
      FlatGeobuf: fix build error when new Abseil headers are present (fixes #7894)
      GML: fix 3.7.0 regression when reading files with several layers, whose features have gml:boundedBy elements and the geometry element name is different between the different layers (fixes #7925)
      MVT generation: improve dealing with polygon inner rings (fixes #7890)
      MVT generation: fix wrong winding order for polygons after MakeValid()
      CI/Docker: build libjxl with -DJPEGXL_ENABLE_JPEGLI_LIBJPEG=OFF to avoid install a libjpeg.so
      GPKG: implement GeoPackage 1.4 RTree triggers, and add a VERSION=1.4 dsco (fixes #7823)
      GTiff multi-threaded reader: avoid error when reading PlanarConfiguration=Separate and ExtraSamples > 0 (fixes #7921)
      GTiff multi-threaded reader: avoid error when reading PlanarConfiguration=Separate and ExtraSamples > 0 (fixes #7921)
      GTiff multi-threaded reader: fix crash/read errors when reading a PlanarConfiguration=Separate file band per band (fixes rasterio/rasterio#2847)
      SAFE: fix non-contiguous number in subdataset names (fixes #7939)
      vsis3.py: fix to make tests pass when port = 8081 (fixes #7952)
      Fix build against latest libjxl master
      OGCAPI: make sure OGR_ENABLE_DRIVER_GML is set when the driver is built
      OGCAPI: reduce the scope of code #ifdef'ed by OGR_ENABLE_DRIVER_GML
      Python bindings: works around issue with SWIG 4.1 related to module unloading
      GML: add a USE_BBOX=YES open option to allow using gml:boundedBy as feature geometry
      Internal Shapelib: update list of symbols to rename to avoid conflicts with external shapelib (fixes microsoft/vcpkg#32070)
      CMake: add a EXPAT_USE_STATIC_LIBS hint
      CMake: add a CURL_USE_STATIC_LIBS hint
      Doc: add hint for OpenSSL static linking (fixes #7955)
      GeoTIFF SRS reader: try to retrieve the EPSG code of a CompoundCRS if the one of its horizontal and vertical part is known (fixes #7982)
      FileGDB / OGRCreateFromShapeBin(): accept empty polygon (refs #7986)
      OGRGeometryFactory::createGeometry(): take into account Z/M flags
      OpenFileGDB: correctly read POINT EMPTY (fixes #7986)
      SQL SQLite: fix error on field of type String with GetWidth() > 0 and a field domain
      gdalwarp: make -cutline to work again with PostGIS datasources (fixes 3.7.0 regression, fixes #8023)
      gdal_calc.py: make --hideNoData imply --NoDataValue=none as documented (fixes #8009)
      GDALBufferHasOnlyNoData() / GTiff SPARSE_OK=YES: recognize negative floating point 0 as 0 (fixes #8025)
      GTiff creation: do not emit 'WEBP_LEVEL is specified, but WEBP_LOSSLESS=YES' warning when only WEBP_LOSSLESS=YES is specified
      GTiff: fix 9708291b90498e45b9dbf520f336b5c7a3f869ce
      PAM rasterband: on .aux.xml reading do not systematically set (offset,scale) to (0,1)
      Arrow/Parquet: do not hang on empty RecordBatch (fixes #8042)
      typo fixes
      Prepare for GDAL 3.7.1

Kathryn Mason (1):
      GTFS: Fix date parsing

Laurențiu Nicola (1):
      GDALDatasetPool: Make VRT pool size clamping more lenient (#7977)

drons (1):
      Add missing include <memory>
jeffypooo pushed a commit to IgnisTechnologies/gdal that referenced this issue Aug 9, 2023
clrpackages pushed a commit to clearlinux-pkgs/gdal that referenced this issue Nov 14, 2023
Aaron Boxer (1):
      JP2OpenJPEG: refactor into re-usable template

Alan Thomas (2):
      DXF: Preserve attributes in nested block insertions
      DXF: Show constant ATTDEFs as text

Alessandro Pasotti (13):
      MSSQL: fix crash in ogr2ogr when BCP is enabled (#7792)
      MSSQL: fix GEOGRAPHY clockwise vertex order (#7826)
      MSSQL: Fix cannot write binary field in BCP mode (#7841)
      MSSQL: add test for geometry column identification (#7871)
      OGCAPI: Fix TILES raster API not working
      Add OGCAPI intial tests (#7926)
      OGCAPI: more tests for errors (#8110)
      Fix build with DEBUG_VERBOSE on
      OPENCL: scan multiple devices for each platform (#8537)
      OGR2OGR: fix preserve_fid and explodecollections incompatible options (#8539)
      API: add GDALGetSubdatasetInfo() and related functions  (#8155)
      OAPIF: bump default limit to 1000 and honor schema from API (#8566)
      OGR2OGR: test JSON types roundtrip (#8609)

Andrea Giudiceandrea (4):
      [Shapefile] SHPRestoreSHX: update SHX content length even if error occurred
      Docs: fix gdal_rasterize.rst
      Doc: substitute remotesensing.org/geotiff/proj_list with gdal.org/proj_list/
      Fix link in javadoc.java

Barry DeZonia (6):
      SWIG JAVA: add Read/WriteRaster abilities for GDT_UInt64 & GDT_Int64 (#7893)
      Java binding: eliminate some deprecations / compiler warnings (#8055)
      Add a compatiblity method to swig bindings that is Java Only
      Make sure to remove the %rename for GetFieldType from ogr_java.i
      Java binding: make multidimensional API usable (#8048)
      Make the 2d multidim test exercise itself harder

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

Brad Hards (1):
      Update gmlas.rst

Bryce Mecum (1):
      Rename arrow repo links from master to main

Chris Toney (2):
      updates to the documentation for LCP format
      Doc: update url for R bindings

Craig de Stigter (1):
      WFS: Don't issue STARTINDEX if feature count is small (#8146)

Dan Baston (11):
      Update doc/source/drivers/raster/bag.rst
      Update doc/source/drivers/raster/bag.rst
      Update doc/source/drivers/vector/eeda.rst--
      Update doc/source/drivers/raster/blx.rst
      Update doc/source/drivers/vector/geoconcept.rst
      Update doc/source/drivers/vector/elasticsearch.rst
      Apply suggestions from code review
      Update autotest/pyscripts/test_gdal_ls_py.py
      autotest: skip test_vsicurl_streaming_1 on Travis
      validate_geoparquet: avoid GitHub login via .netrc (#8096)
      Doc: Update Python gotchas (#8489)

Daniel Baston (262):
      Doc: Remove outdated information on building Python bindings
      autotest: fix incomplete download when size is unknown
      autotest: simplify gdaltest.download_file
      ogr_sxf.py: Quiet debugging output
      autotest: skip tests requiring unavailable downloads
      hdf5.py: Update test data URL
      autotest: Consolidate JSON validation logic, catch timeout errors
      CI: Strip invalid characters from container tag
      Doc: Add doxygen target to doc Makefile
      Python bindings: Return context manager from Create, CreateDataSource
      Doc: Add directives/roles for declaring and referencing options
      configoptions.rst: Use source file links
      configoptions.rst: Move CPL_VSIL_CURL* to Networking section
      configoptions.rst: Remove GDAL_CACHEMAX history
      configoptions.rst: Remove GDAL_VALIDATE_CREATION_OPTIONS
      Doc: Remove old config options index
      Doc: Use config directives in driver pages (raster)
      Doc: Use config directives in driver pages (vector)
      Doc: Use config directives in program pages
      Doc: Use config directives in user docs
      Doc: Remove :decl_configoption:
      georaster.rst: format code blocks
      configoptions.rst: reorganize global options
      Doc: fix typos, formatting
      configoptions.rst: Reformat options as list
      bag.rst: fix typo
      idb.rst: Distinguish between config options and env vars
      Doc: Fix typos in libkml config option names
      Doc: correct name of GDAL_VRT_PYTHON_TRUSTED_MODULES
      Doc: correct name of PDF_USER_PWD config option
      Doc: Ignore config option usages not in PDF output
      GDALRasterBand: Document and validate GDAL_BAND_BLOCK_CACHE
      Doc: Document OGR_PROMOTE_TO_INTEGER64
      Doc: Document GDAL_MAX_BAND_COUNT
      Doc: Add documentation for HTTP config options
      Doc: Add entry for GDAL_CONFIG_FILE
      Doc: Document GDAL_PYTHON_DRIVER_PATH
      Doc: Migrate gdal_merge.py examples from wiki
      Doc: Migrate gdalwarp information from wiki
      Doc: Migrate gdal_translate information from wiki
      Doc: Migrate ogrinfo information from wiki
      configoptions.rst: Remove default for GDAL_NUM_THREADS
      Doc: Improve documentation for OGR_ORGANIZE_POLYGONS
      autotest: Add some tests for OGRGeometryFactory::organizePolygons
      CI: Run ctest in parallel for most Linux builds
      autotest: Add attribute_filter and spatial_filter context managers
      autotest: Use context managers to remove "assert tr" pattern
      autotest gdrivers/gpkg.py: Update code conventions
      autotest: use asserts in ogrtest helpers
      autotest: remove asserts of ogrtest helper function return values
      autotest: call pytest.skip from skip_on_travis()
      autotest: avoid calling post_reason in gdaltest.equal_srs_from_wkt
      autotest: use assert in gdaltest.rpcs_equal, avoid post_reason
      autotest: Move assert inside gdaltest.geotransform_equals
      autotest: remove gdaltest.post_reason
      autotest: skip test_http_1 on Travis
      autotest: Enhancements to ogrtest.check_feature_geometry
      autotest: check for mismatched dims in ogrtest.check_feature_geometry
      Doc: Update PAM config options
      organizePolygons: Remove handling of nonpolygonal geometries
      autotest netcdf.py: make tests independent
      autotest ogr_sql_sqlite.py: make tests independent
      Python bindings: Invalidate band and layer refs when dataset closes
      SWIG: Increment FeatureDefn ref count on ogr.Layer.GetLayerDefn()
      autotest: remove global setting of ECW_DO_NOT_RESOLVE_DATUM_PROJECTION
      Python bindings: Invalidate mask, overview references after dataset close
      Python bindings: Invalidate refs from CreateLayer on datasource close
      Python bindings: Invalidate refs from CopyLayer on datasource close
      autotest ogr_sql_test.py: make tests independent
      autotest vsizip.py: disable exceptions
      autotest tiff_read.py: make tests independent
      autotest pam.py: make tests independent
      autotest rat.py: make tests independent
      autotest ogr_sql_rfc28.py: make tests independent
      autotest colortable.py: make tests independent
      autotest gdal_stats.py: make tests independent
      autotest hfa_write.py: make tests independent
      GDAL_RASTERIO_RESAMPLING: add doc and test
      Doc: Add entry for GDAL_READDIR_LIMIT_ON_OPEN
      Doc: Document COMPRESS_GEOM configuration option
      Doc: Document CHECK_DISK_FREE_SPACE
      Doc: Add docs for VRT_SHARED_SOURCE
      Doc: formatting fix in jp2openjpeg.rst
      Doc: Add USE_TILE_AS_BLOCK to JP2KAK
      Doc: Add USE_SPILL configuration option to HFA
      OSR_WKT_FORMAT: Add doc and test
      Doc: Add docs for some OSR options
      OSR_DEFAULT_AXIS_MAPPING_STRATEGY: Add doc and test
      autotest: add test to clarify configuration option/env var precedence
      Python bindings: Fix gdal.config_options to prevent migration of config
      autotest: remove unused globals, functions from gdaltest
      autotest: remove usage of GDALTest return values
      autotest: fix test_misc_6 incorrect early return before test completion
      autotest: remove some always-true checks
      autotest: remove assignment of non-existing return values
      rasterlite: restore original state after temporarily setting OGR_SQLITE_EXACT_EXTENT
      SWIG: Expose GetConfigOptions()
      Python bindings: Allow passing options as dict
      autotest: fix execution of commands on Windows with backslashes
      autotest test_gdal_contour.py: make tests independent
      autotest test_gdal_grid.py: make tests independent
      autotest test_gdal_grid.py: split and parametrize tests, use tmp_path
      autotest test_gdaladdo.py: make tests independent
      autotest test_gdaldem.py: make tests independent
      autotest test_nearblack.py: make tests independent
      autotest test_ogrlineref.py: make tests independent
      autotest test_gdal_translate.py: make tests independent
      autotest test_gdalwarp.py: make tests independent
      autotest test_gdalwarp_lib.py: make tests independent
      autotest test_ogrtindex.py: move cleanup into fixture
      autotest test_gdalbuildvrt.py: make tests independent, use tmp_path
      autotest: disable random order for test_gdaltindex and test_gdalgnmutils
      autotest test_gdal_merge.py: make tests independent, use tmp_path
      gdal_pansharpen.py: avoid error trying to generate relative path
      autotest test_gdal_pansharpen.py: make tests independent, use tmp_path
      autotest test_gdal_retile.py: make tests independent, use tmp_path
      autotest: Remove test for deprecated raster GMT driver
      Doc: Document GDAL_OVR_PROPAGATE_NODATA
      autotest test_pct.py: make tests independent, use tmp_path
      autotest mask.py: make tests independent
      autotest histogram.py: make tests independent
      autotest numpy_rw_multidim.py: move setup to fixture
      autotest vsicrypt.py: move setup to fixture
      autotest vsihdfs.py: move setup into fixture
      autotest gcore/tiff: make tests independent
      autotest hfa_rfc40.py: mark to disabled random order
      autotest gif.py: make tests independent
      autotest bsb.py: use pytest.mark.require_driver
      autotest bt.py: use pytest.mark.parameterize, move cleanup to fixture
      autotest vrtrawlink.py: make tests independent, use tmp_path
      autotest vrtwarp.py: combine two interdependent tests
      autotest rasterlite.py: combine two interdependent tests
      autotest postgisraster.py: move cleanup into fixture, add skip messages
      autotest mbtiles.py: move webserver into fixture
      autotest test_validate_jp2.py: move setup, cleanup into fixture
      autotest kmlsuperoverlay.py: move cleanup into fixture
      autotest jpeg.py: make tests independent
      autotest hfa.py: combine interdependent tests
      autotest srtmhgt.py: make tests independent
      autotest srp.py: parametrize tests, use fixture for cleanup
      autotest ehdr.py: merge two interdependent tests
      autotest esric.py: use fixture for sample dataset
      autotest fast.py: use fixture for test dataset
      autotest: restore netcdf_cf checks
      autotest wms.py: update SEDAC url, re-enable tests
      autotest wms.py: use new ESRI test server
      autotest wms.py: pull TileCache test server into fixture
      autotest wms.py: make GIBS TWMS tests independent
      autotest wms.py: fix always-skipped test, use tmp_path for wms cache
      autotest wcs.py: parametrize test_wcs_6, remove global variables
      autotest wcs.py: use fixture for geoserver.wcs
      autotest plmosaic.py: make tests independent
      autotest nitf.py: move cleanup to fixture, merge interdependent tests
      autotest: disable random order for gdrivers/ngw.py
      autotest pcidsk.py: combine interdependent tests
      autotest: test_ogrinfo.py: use tmp_path fixture
      autotest: test_gdal_create.py: use tmp_path fixture
      autotest: test_gdal_footprint.py: use tmp_path fixture
      autotest: test_ogr2ogr.py: use tmp_path fixture
      autotest: test_gdal_rasterize.py: use tmp_path fixture
      autotest: test_gdaladdo.py: use tmp_path fixture
      autotest: test_gdalinfo.py: use tmp_path fixture
      autotest: test_gdalsrsinfo.py: use tmp_path fixture
      autotest: test_gdallocationinfo.py: use tmp_path fixture
      autotest: test_gdaldem.py: use tmp_path fixture
      autotest: test_ogrtindex.py: use tmp_path fixture
      autotest: test_gdalwarp_lib.py: use tmp_path fixture
      autotest: test_gdal_translate.py: use tmp_path fixture
      autotest: test_gdalmdimtranslate.py: use tmp_path fixture
      autotest: test_ogr2ogr_lib.py: use tmp_path fixture
      autotest: test_gdal_rasterize_lib.py: use tmp_path fixture
      autotest: test_gdalwarp.py: use tmp_path fixture
      autotest: test_ogrlineref.py: use tmp_path fixture
      autotest: test_nearblack.py: use tmp_path fixture
      autotest: test_gdal_translate_lib.py: use tmp_path fixture
      autotest: test_gdaltindex.py: use tmp_path fixture
      autotest: test_sozip.py: use tmp_path fixture
      autotest: test_gdal_viewshed.py: use tmp_path fixture
      autotest: test_gnmutils.py: use tmp_path fixture
      autotest: add tmp_vsimem fixture
      autotest: ogr_rfc35_shape.py: make tests independent
      autotest: combine ogr_rfc_35 tests
      OGR: Add OGR_F_DumpReadableAsString
      Python bindings: Use DumpReadable for Feature __repr__
      Python bindings: Accept os.PathLike arguments where applicable
      autotest: test that Python bool can be used in options dict
      autotest: use gdal.quiet_errors()
      Python bindings: Support os.PathLike inputs in utilities
      Python bindings: accept options as dicts in CLI wrapper functions
      autotest: contour.py: make tests independent
      autotest: ogr_basic_test.py: make tests independent, use tmp_path
      autotest: ogr_kml.py: combine two interdependent tests, use tmp_ fixtures
      autotest: ogr_mem.py: make tests independent
      autotest: ogr_shape.py: make tests independent, use tmp_path and tmp_vsimem
      autotest: ogr_svg.py: make tests independent
      autotest: ogr_tiger.py: make tests independent
      autotest: ogr_pdf.py: make tests independent
      autotest: ogr_vrt.py: make tests independent, use tmp_ fixtures
      autotest: ogr_csv.py: make tests independent, use tmp_ fixtures
      autotest: ogr_dgn.py: merge two interdependent tests
      autotest: ogr_sxf.py: avoid assigning global variables
      autotest: ogr_pcidsk.py: make tests independent
      autotest: ogr_jml.py: use tmp_vsimem, split tests
      autotest: ogr_mitab.py: make tests independent, parametrize and use tmp_ fixtures
      autotest: ogr_libkml.py: combine interdependent tests, parametrize and use tmp_ fixtures
      autotest: ogr_layer_algebra.py: split tests, use fixtures for inputs
      autotest: ogr_gml.py: make tests independent, parametrize, use tmp_ fixtures
      autotest: ogr_georss.py: make tests independent
      autotest: ogr_pythondrivers.py: use fixture for setup and cleanup
      autotest: ogr_ili: use tmp_path, mark as order-dependent
      autotest: ogr_selafin.py: make tests independent
      autotest: ogr_vfk.py: make tests independent
      autotest: ogr_vdv.py: make tests independent, parametrize
      autotest: ogr_s57.py: make tests independent
      autotest: ogr_csw.py: make tests independent, use tmp_vsimem
      autotest: ogr_plscenes.py: use pytest.mark.require_driver
      autotest: ogr_gmlas.py: make tests independent
      autotest: ogr_mitab.py: fix format parametrization of mapinfo_ds fixture
      autotest: ogr_gml_read.py: copy xsd files with gml into tmp_path
      autotest: ogr_gml_read.py: test that out-of-date gfs files are ignored
      Doc: Add NASA logo to sponsorship page
      Python bindings: Allow ExecuteSQL context manager to work on empty datasources
      autotest: ogr_sqlite.py: make tests independent, use tmp_ fixtures
      autotest ogr_mysql.py: make tests independent
      autotest: ogr_pg.py: make tests independent
      SWIG: Expose GDALClose
      Python bindings: Avoid crash when using dataset after Destroy or Release
      autotest: add gdaltest.reopen helper
      autotest: ogr_gpkg.py: make tests independent, parallel-safe
      Python bindings: Avoid crashes when using orphaned Geometry refs
      Python bindings: Accept more os.PathLike inputs
      autotest: utilities: use tmp_vsimem fixture
      autotest: zarr_driver.py: use tmp_vsimem in test_zarr_create_array_bad_compressor
      vsimem: implicitly create parent dirs when creating file
      MIGRATION_GUIDE: Document behavior changes in /vsimem
      ElasticSearch: modify paths to avoid having both /vsimem/foo file and /vsimem/foo/ directory
      PLMosaic testing: Use webserver to avoid file and dir with same name in vsimem
      autotest: daas.py: use tmp_vsimem fixture
      autotest: ogr_oapif.py: avoid modifying FileHandler internal dict
      autotest: ogr_elasticsearch.py: use webserver, make tests independent
      autotest: ogr_plscenes.py: use webserver, split some tests
      autotest: webserver.py: uninstall handler if final_check throws
      autotest: ogr_elasticsearch.py: skip test failing on Windows
      autotest: ogr_refcount.py: make tests independent
      autotest: ogr_ogdi.py: make tests independent
      autotest: ecrgtoc.py: make tests independent
      autotest: kea.py: use setup fixture, tmp_path, parametrize
      autotest: ecw.py: combine interdependent tests, use tmp_path
      autotest: ogr_fgdb.py: make tests independent, use tmp_path
      autotest: vsioss.py: make tests independent
      autotest: vsiswift.py: make tests independent
      autotest: vsiwebhdfs.py: make tests independent
      autotest: vsicurl.py: use webserver fixture, skip tests of unavailable urls
      autotest: ogr_mongodbv3.py: mark with require_driver
      autotest: ogr_mvt.py: use webserver fixture
      autotest: ogr_carto.py: move cleanup into fixture
      autotest: ogr_mssqlspatial.py: make tests independent
      autotest: arg.py: mark as order-dependent
      autotest: overviewds.py: make tests independent, use tmp_path
      autotest: idrisi.py: avoid creating new files in data dir
      autotest: eedai.py: disable random order
      autotest: ecw.py: avoid writing file to data dir

Erica Fischer (1):
      GeoJSONand GeoJSONSeq: add AUTODETECT_JSON_STRINGS layer creation option (#8391)

Even Rouault (893):
      Tag master as 3.8.0dev
      mkgdaldist.sh: update to take account python bindings generated files are no longer included [ci skip]
      HOWTO-RELEASE: update [ci skip]
      Fix building without fuzzers/ and perftests/ directory
      gdal.cmake: install data/gfs.xsd and data/gml_registry.xsd
      Doc / NEWS: s/GetCompressedData/ReadCompressedData/
      pytest.ini.in: fix issue when running autotest from git repo when GDAL_RELEASE_NAME in gdal_version.h.in has no dev suffix
      C/C++ multidimensional API: add Rename() methods
      SWIG: map multidimensional API Rename() methods
      MEM multidim: implement Rename() for group, dimensions, arrays and attributes
      netCDF multidim: implement Rename() for group, dimensions, arrays and attributes
      ZARR: fix full name of attributes
      ZARR multidim: implement Rename() for group
      Zarr: avoid GetMDArrayNames() to report several times the same name in some circumstances
      ZARR multidim: implement Rename() for array
      ZARR multidim: implement Rename() for attribute
      ZARR multiidm: implement Rename() for dimension
      cppcheck-related tunings
      Lint: remove useless variable
      geopackage_aspatial.rst: mention it is superseded
      Add third_party/fast_float header library for fast string->double conversion
      scripts/clang-format.sh: exclude third_party/
      CPLStrtodDelim(): use fast_float
      bench_ogr_batch: add a --stream-opt switch
      Parquet: add a COORDINATE_PRECISION layer creation option
      Add a OGRWKTToWKBTranslator utility class
      Parquet: add fast implementation of Arrow Array interface when requesting WKT as WKB
      SDTS: fix reading of polygon geometries (fixes #7680)
      WMTS: workaround buggy TileMatrix.TopLeftCorner of one server (fixes #5729)
      Arrow/Parquet: emit ARROW:extension:name=ogc.wkb in Feature field metadata, and return it also through GetArrowStream() for Parquet; make Parquet driver recognize a geometry column if it has ARROW:extension:name=ogc.wkb/ogc.wkt field metadata
      Add perftests/bench_ogr_to_geopandas.py (from RFC 90 benchmark programs)
      Parquet: add a GEOM_POSSIBLE_NAMES and CRS open options for wider compatibility with datasets not following GeoParquet dataset-level metadata
      Zarr: move code belonging to classes to dedicated files; rename classes ZarrGroupVx to ZarrVXGroup (no functional change)
      NEWS.md: fix link formatting [ci skip]
      Avoids warning with gcc 13.1 of mingw64
      Fix issues on big endian hosts: recode from UTF-16, and broken tests
      OGRSpatialReference::importFromPCI(): lint / avoid Coverity scan warning about leaked memory (CID 1509441)
      Zarr: split ZarrArray in 2 classes (no functional change)
      Zarr V3: update to current specification (breaks backward compatibility), but without codec/compression support for now
      Zarr: robustify detection of existing array/group on creation
      cpl_compressor.h: add missing inclusion guard
      Zarr: fix SRS DataAxisToSRSAxisMapping
      GDALDatasetFromArray: fix write/update support
      Zarr: allow update support in classic mode
      CPLBloscDecompressor(): fix logic error when providing an output buffer larger than needed
      Add CPLJSONObject::Clone()
      Python bindings: take into account Int64/UInt64 in gdal.Array.Write(array(...))
      Zarr V3: add support for endian, transpose, gzip and blosc codecs
      Zarr V3: implement group, array, attribute and dimension renaming
      Multidim rename: factor code related to changing m_osFullName and add a NotifyChildrenOfRenaming() virtual method
      Zarr rename: detect conflict between group and array within the same group
      docker/ubuntu-full/bh-gdal.sh: fix Docker buildx arm64 build [ci skip]
      docker/util.sh: optimize docker buildx --release --push mode [ci skip]
      JP2OpenJPEG: avoid hard crash in multi-threaded writing mode when opj_write_tile() fails (fixes #7713)
      MITAB: fix reading CRS with LCC_2SP and non-metre unit (fixes #7715)
      [Refactor] GTiff: split geotiff.cpp content per class ...
      Internal libjson: use locale insensitive CPLStrtod() to parse floating point numbers (fixes qgis/qgis#52731)
      Add testing that internal libjson is using locale insensitive functions
      Multidim GDALGroup::CopyFrom(): modify logic to copy first indexing variables. Fixes issue with gdalmdimtranslate from Zarr to netCDF
      netCDF multidim: fix issues with data vs definition mode
      Doc: option GDAL_USE_QB3 is actually called GDAL_USE_LIBQB3 (fixes #7727)
      ISG: relax tolerence check to accept GEOIDEAR16_20160419.isg
      Python bindings: make gdal.Group.GetGroupNames() and GetMDArrayNames() return an empty list instead of None
      Multidim API: add DeleteGroup(), DeleteMDArray(), DeleteAttribute() methods in C/C++/SWIG API
      MEM multidim: implement DeleteGroup(), DeleteMDArray(), DeleteAttribute()
      netCDF multidim: implement DeleteAttribute()
      Zarr multidim: implement DeleteGroup(), DeleteMDArray(), DeleteAttribute()
      COG: only update mode if the IGNORE_COG_LAYOUT_BREAK=YES open option is specified (fixes #7735)
      netcdf.py: add missing require_driver('CSV')
      Doc: advertize 3.7.0
      docker/README.md: advertize 3.7.0 [ci skip]
      netCDF: add new member variables to make it easier for follow-up change (no functional change)
      netCDF: on reading, set NETCDF_DIM_xxx band metadata items in on-demand way (helps with network accesses)
      netCDF: do not set NETCDF_DIM_xxxx_VALUES dataset metadata items for variables of unlimited dimensions on network access for performance reasons
      Update doc/source/drivers/raster/cog.rst
      isg.rst: fix broken link (fixes #7738)
      Warp (average,mode,min,max,med,Q1,Q3): fix issue on edge of target valid area when oversampling (fixes #7733)
      minified_zutil.h: fix build error on Gentoo and derivatives (fixes #7739)
      Warp average resampling: using Weighted incremental algorithm mean for numeric stability
      CI: linux_build.yml: set travis_branch: ubuntu_1804
      Zarr V3: add support for fill_value for complex data types
      Zarr: implement GDALDriver::Rename(), Delete() and CopyFiles()
      /vsimem/: make it safe to use in multi-threaded scenarios
      Add perftests/gtiff_multi_ds_parallel_write.py to measure TIFF write performance
      [Perf improvement] GTiff: avoid using block cache when writing whole blocks
      Doc: avoid incorrect display of "--" as "&#8212;" (fixes #7752)
      Revert "doc_build.yml: pin sphinx==6.0.1 to workround https://github.com/sphinx-doc/sphinx/issues/11163 (fixes #7251)"
      gdallocationinfo: set exit code to 1 as soon as one coordinate is off the file (fixes #7759)
      gdal_rasterize: issue explicit error message when specifying invalid layer name, and catch absence of bounds (refs #7763)
      OGRProjCT::Transform(): do not emit generic error message if a specific one has already been emitted
      Add OGRCoordinateTransformationOptions::SetOnlyBest() / OCTCoordinateTransformationOptionsSetOnlyBest()
      autotest/osr: make it work with latest PROJ master
      Add OGR_G_IsClockwise() and map it to SWIG
      Parquet: add a way to write custom geoparquet metadata for unit testing purposes
      CSV: do not allow CREATE_CSVT=YES with /vsistdout/ (fixes #7699), and make it possible to use GEOMETRY_NAME with /vsistdout/ (fixes #7700)
      Revert "Conda: add libarchive.patch"
      Addresses various Coverity Scan warnings about performance & bad use of iterators
      CI: install jsonschema for build-windows-conda
      PDFDataset::ExploreTree(): fix detection of loops
      WCS: replace most uses of CPLString with std::string; addresses various Coverity Scan warnings about performance & bad use of iterators
      scripts/clang-format.sh: skip pcidsk/sdk and third_party
      Addresses various Coverity Scan warnings about performance & bad use of iterators
      Add validate_geoparquet.py sample Python script
      Warper: auto-enable OPTIMIZE_SIZE warping option when reasonable (fixes #7761)
      SHPRestoreSHX(): add extra sanity checks
      CPLParseXML(): do not call CPLErrorReset()
      GDALIdentifyDriverEx() and GDALDriver::QuietDelete(): do not call CPLErrorReset()
      Geoloc transformer: warn if the input dataset is larger in width or height compared to the geoloc array (fixes #7751)
      Python bindings: detect invalid use of ReleaseResultSet() (fixes #7782)
      Doc: fix case of SQLite3_INCLUDE_DIR/SQLite3_LIBRARY in example (fixes #7785)
      netCDF multidim: deal with _FillValue attribute of different type as variable (e.g. for NASA GEDI L2B products)
      HDF5 multidim: deal with _FillValue attribute of different type as variable (e.g. for NASA GEDI L2B products)
      OpenFileGDB: allows to modify a record with a GlobalID field without regenerating it
      OpenFileGDB: reduce debug traces on raster datasets
      OpenFileGDB raster: do not emit error if SRS is unknown (refs #7794)
      OpenFileGDB raster: correctly deal with rasters whose block_origin_x/y != (eminx, emaxy) (fixes #7794)
      RequiresUnixPathSeparator(): takes into account /vsihdfs/ and /vsiwebhdfs/ (refs #7801)
      Shape driver: in creation, uses w+b file opening mode instead of wb followed by r+b, to support network file systems having sequential write only and when using CPL_VSIL_USE_TEMP_FILE_FOR_RANDOM_WRITE=YES (fixes #7801)
      Fix building with -DDEBUG_CONFIG_OPTIONS (fixes #7789)
      Python bindings: do not pass deprecated -py3 SWIG switch for SWIG >= 4.1
      CMake: emit better error message when a raster driver cannot be enabled because of OGR_BUILD_OPTIONAL_DRIVERS=OFF
      Doc: CSharp: add a paragraph about issues related to signing of build artifacts (fixes #7804)
      CI: windows_build.yml: disable downloading of libdeflate.zip which now fails quasi systematically for unknown reason
      Internal libtiff: resync with upstream
      MySQL: add support for inserting new SRS in MySQL >= 8 INFORMATION_SCHEMA.ST_SPATIAL_REFERENCE_SYSTEMS table (refs #7781)
      MySQL: fix compliance issues with test_ogrsf
      netCDF: parse coordinates attribute from Sentinel-3 Synergy product
      Move OGRWKBGetBoundingBox() to ogr_wkb.h/cpp so it can be reused by other drivers
      OGR TileDB: fully apply spatial filter when using ArrowArray interface
      gdalmdiminfo: output details of indexing variables that can be accessed only from the array (typically for TileDB dimension labels)
      .github/workflows/ubuntu_20.04/Dockerfile.ci: update to TileDB 2.15.3
      docker/ubuntu-full/Dockerfile: update to TileDB 2.15.3
      TileDB: add read/write multidimensional support
      GRIB: allow opening files with invalid Earth of shape (fixes #7811)
      Avoid hanging on test_wms_19
      GDALDataset::Open(): take into account open options for OF_SHARED mode (fixes #7824)
      GeoTIFF SRS writer: make sure to write EPSG codes only in VerticalDatumGeoKey and VerticalUnitsGeoKey, and write VerticalCSTypeGeoKey = KvUserDefined, VerticalDatumGeoKey = KvUserDefined and VerticalCitationGeoKey=CRS name when the vertical CRS code is unknown (refs #7833)
      GeoTIFF SRS reader: try to recover the vertical datum from the name of the vertical CRS if we only know it (refs #7833)
      gdalsrsinfo: when -e flag is passed, report properly non EPSG authorities (refs #7833)
      Fix gcc 13.1.1 -Werror=array-bounds false positive
      Python bindings: GetArrowStreamAsNumPy(): fix wrong retrieval of content when ArrowArray::offset != 0 on a field of primitive type (integer, float)
      OGRArrowLayer::CreateWKTArrayFromWKBArray(): fix when ArrowArray::offset != 0 (master only)
      GPKG: sanitize type use of GPkgFieldToOGR()
      GPKG: ArrowArray interface: make it tolerant to Spatialite geometries
      GPKG: fix handling of geometry column from a view, ...
      /vsiadls/: make it take into account Azure SAS token
      Move parts of OGRLayer dealing with Arrow C interface in a dedicated ogrlayerarrow.cpp file
      Parquet/Arrow: implement faster spatial filtering with ArrowArray interface
      GetArrowStreamAsNumPy(): add a few sanity checks
      GetArrowStreamAsNumPy(): remove likely erroneous offseting of data buffer for array of type 'list of strings'
      GPKG: define a 'gdal_spatialite_computed_geom_column' extension when a view has its geometry column being the result of Spatialite SQL function
      CMake: only try to detect HDF5 CXX component if KEA is detected
      TileDB: FillPrimitiveListArray(): fix data corruption with spatial filter (Coverity CID 1512587, 1512576)
      gdal_rasterize: fix logic error of fix of #7663 (CID 1512568)
      CMake: capture dependency of MBTiles driver to MVT
      GDALMDArrayMask: take into account attributes at construction time
      GDALMDArray::GetMask(): add a UNMASK_FLAGS option
      DGN: CreateFeature(): fix crash on empty geometries (fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=56771)
      RawRasterBand::IRasterIO(): avoid harmless unsigned integer overflow (https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=57371)
      ERS: avoid integer overflow (fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=57472)
      DIPEx: fix memleak in error code path (fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=57478)
      netCDF vector: fix crash on invalid layer (fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=58469)
      PAM .aux.xml: read geotransform from Esri GeodataXform.CoeffX/CoeffY elements (fixes qgis/qgis#53125)
      GPKG: implement GeoPackage 1.4 RTree triggers, and add a VERSION=1.4 dsco (fixes #7823)
      Doc: gpkg.rst: mention VERSION=1.4 (refs #7823)
      gdal_translate: emit warning when -a_scale/-a_offset + -unscale is specified (fixes #7863)
      Update rfc4_geolocate.rst: update status
      GDALWarpResolveWorkingDataType(): take into account both source and target dataset
      /vsiaz/: fix truncated Authorization header with very large SAS tokens
      CI: try to avoid libjpeg-turbo 2.0 from non-conda-forge channel to be installed
      [Lint] nearblack: isolate current algorithm in a dedicated function
      [Lint] nearblack: better C++ification
      nearblack: add "-alg floodfill" to select a flood fill algorithm
      nearblack: make floodfill call twopasses when number of non-black pixels > 0
      Parquet: fix crash when calling SetIgnoredFields() after SetAttributeFilter() (fixes qgis/QGIS#53301)
      TileDB multidim: create TileDB attribute with the GDAL MDArray name (instead of 'TDB_VALUES')
      OpenFileGDB: add support for FileGDB v9 raster
      CI: fedora:rawhide: workarounds bug in Docker image
      OGRArrowLayer::CreateWKTArrayFromWKBArray(): avoid minimal 2 GB allocation... (master only fix)
      Doc: multidimensional_api_tut.rst: improve links
      MVT generation: improve dealing with polygon inner rings (fixes #7890)
      FlatGeobuf: fix build error when new Abseil headers are present (fixes #7894)
      ZarrV3: fix crash on invalid shape/chunk_shape values (master only) (fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=59607)
      gdal_fuzzer: avoid false positive warning about div by zero (CID 1512809)
      CPLStrtod(): avoid false positive warning about untrusted loop bound (CID 1512808)
      MySQL: fix unused value warning (CID 1512807)
      MAP: fix memleak in error code path (CID 1512806)
      GDALDriver::DefaultRename(): avoid warning about unused return value (CID 1512805)
      VSIMemHandle::Write(): disable coverity false positive (CID 1512585)
      feat2kml(): use std::move() (CID 1509476)
      Zarr: fix warning about useless copy (CID 1509443)
      CI: fix build-mac
      Fix typos
      Fix build error with MSYS64 UCRT64 with gcc 13 (fixes #7909)
      gdalwarp: in -tr mode (without -ts / -te), detect blank edge lines/columns before warping and remove them (fixes #7905)
      tiff_ovr.py: add expected checksum for GISInternals build
      /vsiaz/: add options to pass object_id/client_id/msi_res_id in IMDS authentication requests
      Internal libtiff: resync with v4.5.1rc1
      gdal_polygonize: add a -overwrite switch (fixes #7913)
      ESRIC: directly open a .tpkx file
      GTiff multi-threaded reader: catch errors emitted in worker threads and re-emit them in main thread
      GTiff multi-threaded reader: avoid error when reading PlanarConfiguration=Separate and ExtraSamples > 0 (fixes #7921)
      Internal libtiff: resync with v4.5.1rc3
      CSV: change to use separator with the most occurences,  (#7831)
      TileDB multidim: fix creating an array with a dimension of same name as the array
      GML: fix 3.7.0 regression when reading files with several layers, whose features have gml:boundedBy elements and the geometry element name is different between the different layers (fixes #7925)
      OpenFileGDB write: fix memory leak in error code path (fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=57365)
      ossfuzz builds: use internal libpng
      SAFE: fix non-contiguous number in subdataset names (fixes #7939)
      ARG: mark it deprecated, removal planned for GDAL 3.9 (refs #7920)
      MVT generation: fix wrong winding order for polygons after MakeValid()
      Selafin: remove problematic trace in DEBUG_VERBOSE mode
      Python bindings: works around issue with SWIG 4.1 related to module unloading
      GML: add a USE_BBOX=YES open option to allow using gml:boundedBy as feature geometry
      gml.rst: document USE_BBOX
      VRT: fix crash in DEBUG_VERBOSE mode (fixes #7958)
      CI/Docker: build libjxl with -DJPEGXL_ENABLE_JPEGLI_LIBJPEG=OFF to avoid install a libjpeg.so
      Multidim API: add option to set actual_range in netCDF and Zarr when computing statistics
      gdal_rasterize_lib: fix error message
      gdal_rasterize_lib: other error messages fixes
      GTiff multi-threaded reader: fix crash/read errors when reading a PlanarConfiguration=Separate file band per band (fixes rasterio/rasterio#2847)
      fuzzers/build.sh: add back -lpng since it is needed by freetype
      Internal Shapelib: update list of symbols to rename to avoid conflicts with external shapelib (fixes microsoft/vcpkg#32070)
      MVT/MBTiles: take into account tileStats metadata item to decide if a field of type 'number' might be Integer or Integer64
      CPLJSon: add setters for uint64_t
      Add PMTiles read-only vector driver
      VSIUnixStdioHandle / VSIWin32Handle: make Close() be callable multiple times to be friendly with VSIVirtualHandleUniquePtr
      core and ogr2ogr: add logic so that ogr2ogr can try a driver specific implementation of GDALVectorTranslate()
      MVT writer: clamp generated tile x, y coordinates to [0,(1<<z)-1]
      PMTiles: add a MBTiles -> PMTiles converter mode through ogr2ogr
      PMTiles: implement regular Create() mode, using MBTiles as an intermediate
      mvtutils.h: change description of COMPRESS option to use GZip
      GPKG: avoid Coverity Scan warning about nullptr deref (CID 1513124)
      gdalmultidim: fix Coverity Scan warning about nullptr deref (CID 1513122) (master only)
      vsis3.py: fix to make tests pass when port = 8081 (fixes #7952)
      CMake: add a EXPAT_USE_STATIC_LIBS hint
      CMake: add a CURL_USE_STATIC_LIBS hint
      Doc: add hint for OpenSSL static linking (fixes #7955)
      GeoTIFF SRS reader: try to retrieve the EPSG code of a CompoundCRS if the one of its horizontal and vertical part is known (fixes #7982)
      typo fixes [ci skip]
      FileGDB / OGRCreateFromShapeBin(): accept empty polygon (refs #7986)
      OGRGeometryFactory::createGeometry(): take into account Z/M flags
      OpenFileGDB: correctly read POINT EMPTY (fixes #7986)
      Fix build against latest libjxl master
      Add gdal_footprint utility
      OGCAPI: make sure OGR_ENABLE_DRIVER_GML is set when the driver is built
      OGCAPI: reduce the scope of code #ifdef'ed by OGR_ENABLE_DRIVER_GML
      OGCAPI: make it work when the media type of links (expected to be application/json) is missing, using Accept content negotiation (fixes #7970)
      OGCAPI: vector tiles: avoid potential infinite time to establish layer definition
      PAM rasterband: on .aux.xml reading do not systematically set (offset,scale) to (0,1)
      JPEG: allow QUALITY down to 1 (refs #7996) and redirect JPEG 'output message' to GDAL debug messages
      gdal_calc.py: make --hideNoData imply --NoDataValue=none as documented (fixes #8009)
      Internal libtiff: resync with upstream
      ogrinfo: speed-up string concatenation
      GPKG: speed-up HasMetadataTables()() on dataset with many layers
      GPKG: speed-up unique constraint discovery on dataset with many layers
      Changes to make ogr_p.h includable with CPL_SUPRESS_CPLUSPLUS (from SWIG bindings)
      test_ogrinfo_lib.py: test reading field domains as JSON output
      SWIG bindings: add ogr.CreateRangeFieldDomainDateTime() and Domain.GetMinAsString()/GetMaxAsString()
      ogrinfo: add support for DateTime field domains
      OpenFileGDB: add support for DateTime field domains
      SQL SQLite: fix error on field of type String with GetWidth() > 0 and a field domain
      Remove unused cmake/template/Makefile.PL.in
      gdal.pc generation: use CMAKE_INSTALL_INCLUDEDIR/CMAKE_INSTALL_LIBDIR for includedir/libdir (refs #8012)
      gdal-config: add a --plugindir switch (fixes #8012)
      gdalwarp: make -cutline to work again with PostGIS datasources (fixes 3.7.0 regression, fixes #8023)
      GDALBufferHasOnlyNoData() / GTiff SPARSE_OK=YES: recognize negative floating point 0 as 0 (fixes #8025)
      Internal libtiff: WebP decoder: fix error when reading a 3-band blob in a RGBA image
      XLSX: add FIELD_TYPES and HEADERS open options (fixes #8028)
      ODS: add FIELD_TYPES and HEADERS open options (fixes #8028)
      Python bindings: accept numpy.int64/float64 arguments for xoff, yoff, win_xsize, win_ysize, buf_xsize, buf_ysize arguments of ReadAsArray() (fixes #8026)
      GTiff creation: do not emit 'WEBP_LEVEL is specified, but WEBP_LOSSLESS=YES' warning when only WEBP_LOSSLESS=YES is specified
      Arrow/Parquet: do not hang on empty RecordBatch (fixes #8042)
      GTiff: fix ff769d91f0d906b7ff0ae9cf6c77d604a7e5feda
      /vsicurl/: avoid the same region to be downloaded at the same time from concurrent threads (fixes #8041)
      fuzzers/build.sh: try to fix build [ci skip]
      test_osr_set_proj_search_paths.cpp: override PROJ_DATA as well
      CI: macos_build: update dependencies
      CI: build-windows-msys2-mingw: workaround jsonschema 4.18 installation issue
      CI: macos: install lxml and jsonschema from conda
      SWIG: add gdal.SuggestedWarpOutput()
      CI fedora: workaround jsonschema 4.18 installation issue
      CI: add a coverage job
      Use coverallsapp/github-action@v2
      CI fedora: workaround jsonschema 4.18 installation issue (again)
      netcdf_cf.py: remove use of 'imp' module removed in python 3.12
      README.md: add coveralls badge [ci skip]
      typo fixes [ci skip]
      OpenFileGDB: make Open() to fail if requested to open in update mode and that files are in read-only (fixes qgis/QGIS#53715)
      gdaladdo: add options to partially refresh existing overviews
      CI: linux_build.yml: build and run tests as non-root
      Doc: testing.rst: add a paragraph about test coverage
      validate_geoparquet.py: make it use non-deprecated remote resource resolution with jsonschema >= 4.18
      autotest: avoid deprecation warning with jsonschema 4.18
      PMTiles: fix 2 Coverity scan warnings
      Python samples: remove gdal_zip.py now we have the sozip utility (fixes #8062)
      GeoPackage: deal with DateTime fields without milliseconds or seconds, as allowed by GeoPackage 1.4 (fixes #8037)
      GeoPackage: add a DATETIME_PRECISION layer creation option (fixes #8037)
      Add testing of OGRParseDateTimeYYYYMMDDTHHMMZ()
      Internal libtiff: WebP codec: turn exact mode when creating lossless files to avoid altering R,G,B values in areas where alpha=0 (fixes #8038)
      WFS: do not surround selected fields names in PROPERTYNAME with open and close parenthesis (fixes #8089)
      autotest: ogr_wfs.py: make it work with pytest --random-order
      Doc: advertize 3.7.1 release
      docker/README.md: advertize v3.7.1 [ci skip]
      Make gdal-config executable in build directory (refs #8029)
      Python bindings: make setup.py check that libgdal version >= python bindings version (fixes #8029)
      Add COPY_SRC_MDD=AUTO/YES/NO and SRC_MDD=domain_name creation options
      vsioss.py: fix letter inversion in test names
      autotest: skip tests that randomly fail on mac
      gdal2tiles: fix exception with dataset in EPSG:4326 with longitudes > 180 in WebMercator profile (fixes #8100)
      Ccache.cmake: fix warning
      ogr2ogr: support -nlt GEOMETRY -nlt CONVERT_TO_LINEAR (fixes #8101)
      vsis3.py: skip another randomly failing test on mac
      Java bindings: implement ogr.CreateCodedFieldDomain() and FieldDomain.GetEnumeration() (fixes #8085)
      WEBP: fix build against libwebp < 0.4.0 (fixes #8111)
      autotest: replace deprecated numpy.alltrue() (will be removed in numpy 2.0) with numpy.all()
      GTiff: fix reading .tif + .tif.aux.xml file with xml:ESRI SourceGCPs without TIFFTAG_RESOLUTIONUNIT (fixes #8083)
      GTiff: fix reading .tif + .tif.aux.xml file with xml:ESRI SourceGCPs without TIFFTAG_RESOLUTIONUNIT - remove useless code (fixes #8083)
      SWIG bindings: fix warning related to redefinition of CPLErr
      Python bindings: fix CoordinateTransform.TransformPoint(sequence of 3 or 4 values)
      Add driver for JSONFG (OGC Features and Geometries JSON)
      tiledbsparse.cpp: fix compiler warning with MSVC
      CI: avoid hang on Windows Conda testing related to https://github.com/conda-forge/libnetcdf-feedstock/issues/182
      Java bindings: change default installation directory of JNI shared library and control it with GDAL_JAVA_JNI_INSTALL_DIR
      TileMatrixSet::parse(): add support for OGC 2D Tile Matrix Set v2 (fixes #6882)
      OGCAPI: do not try to use the 'uri' member of a tilematrixset definition document, as it might not be resolvable, and doesn't bring much
      OGC API: resolve different issues with the raster tile API
      STACIT: correctly process asset 'href' starting with 'file://' (fixes #8135)
      GRIB: implement CCSDS Adaptive Entropy Coding decompression (template 5.42).
      Add a DCAP_FLUSHCACHE_CONSISTENT_STATE capability
      SWIG bindings: fix warning related to redefinition of CPLErr
      OGRGeoJSONReader::FirstPassReadLayer(): fix potential memleak (but likely impossible to occur in practice) (CID 1518087)
      JSONFG: fix wrong variable name in nullptr check (CID 1518086)
      GDALDriver::DefaultCopyMetadata(): fix memleak (master only) (CID 1518085)
      GTiff: fix memleak (master only) (CID 1518084)
      JSONFG: silence Coverity warning (CID 1518083)
      VRT: fix memleak (master only) (CID 1518082)
      GDALFootprintOptionsNew(): remove dead code (CID 1518081)
      Silence Coverity false positive (CID 1518080)
      JSONFG: hopefully avoid Coverity false positive about memleak (CID 1518079)
      Silence Coverity false positive (CID 1518078)
      gdalinfo -json output: emit a stac['proj:epsg'] = null object when emitting proj:wkt2 or proj:projjson (fixes #8137)
      STACIT: make it tolerant to missing proj:epsg if proj:wkt2 or proj:projjson are provided (fixes #8137)
      COG: fix memleak (master only) (CID 1518077)
      Silence Coverity false positive (CID 1518076)
      PMTiles: fix Coverity scan warning (CID 1517749)
      GeoJSON: modify to implement DCAP_FLUSHCACHE_CONSISTENT_STATE
      ogr2ogr: calls FlushCache() (fixes #8033)
      JSONFG: implement DCAP_FLUSHCACHE_CONSISTENT_STATE
      GPKG: implement DCAP_FLUSHCACHE_CONSISTENT_STATE
      Doc: sponsors.rst: remove sponsors which haven't renewed
      XLS: avoid compiler warning when building against freexl 2.0
      NITF: fix MIN/MAX_LONG/LAT when reading RPC00B
      CI Alpine: fix pip install
      CI Fedora: remove mongo-cxx-driver-devel. It has been removed per https://src.fedoraproject.org/rpms/mongo-cxx-driver/c/3cfdc2f6bee3fda0808a5eb91b76640074de176b?branch=rawhide
      Revert "CI: fedora:rawhide: workarounds bug in Docker image"
      CI: fedora:rawhide: use dnf5
      /vsicurl/ / /vsicurl_streaming/: recognize IGNORE_FILENAME_RESTRICTIONS=YES open option to skip any extension based filtering (refs #8162)
      Zarr: ignore filename restrictions when reading tile data files (fixes #8162)
      /vsiaz/: fix cached URL names when listing /vsiaz/
      Python bindings: handle 'tsn:' (DateTime in nanoseconds) data type for GetArrowStreamAsNumPy()
      Arrow/Parquet: avoid data corruption through GetNextArrowArray() API when using spatial filters (master only)
      ArrowArray interface: make PostFilterArrowArray() deal with attribute filter, and enable that in Parquet&Arrow drivers
      Parquet: fix ExecuteSQL() MIN/MAX optimization on a UINT32 field on a Parquet 2 file
      FindSPATIALITE.cmake: quote variable
      CMakeLists.txt: update maximum range to 3.27
      Add delete_untagged_containers.yml [ci skip]
      CI: linux_build.yml: sanitize CACHE_CONTAINER_TAG in the same way as CONTAINER_TAG, to be able to actually use an up-to-date image
      gdalwarp_lib.cpp: C++ify CropToCutline() (no functional change)
      gdalwarp_lib.cpp: C++ify TransformCutlineToSource() (no functional change)
      gdalwarp: fix cutline processing when warping with a cutline geometry in UTM 1/60 crossing the antimeridian, on a raster in long/lat SRS (fixes #8163)
      gdalinfo.py: use math.isnan() (fixes #8196)
      Doc: ogrinfo.rst: fix options fields and geom (fixes #8195)
      gdalinfo.py: fix wrong order of long,lat corner coordinates (fixes #8199)
      test_cpl.cpp: robustify test_cpl.CPLCopyTree
      Add VSIGetCanonicalFilename()
      Shapefile driver: use VSIGetCanonicalFilename() in GetFileList() (fixes #8164)
      linux_build.yml: try to fix issue with Fedora CI
      [Lint] CSV: replace GDAL_OVERRIDE with plain override
      [Lint] CSV: have OGRCSVLayer and OGRCSVEditableLayer inherit from a same base class
      CSV: implement GetFileList() and return .csvt if used (fixes #8165)
      Revert "linux_build.yml: try to fix issue with Fedora CI"
      Shapefile driver: make CreateLayer() + GetFileList() list the .prj file when it exists (fixes #8167)
      VRT: ignore <OverviewList> when external .vrt.ovr is present, as documented and intended
      CI: workaround weird caching issue with fedora_rawhide builds
      /vsis3_streaming/ and the like: implement ReadDir() by forwarding to non-streaming filesystem (fixes #8191)
      ZarrV2: fix duplicate array listing when both a 'foo' file and 'foo/' directory exist on the object storage (fixes #8192)
      More accurate / fixes for M_PI/180 or 180/M_PI constants (fixes #8178)
      CITATION.cff: update with contributors (#8201)
      openjpeg: fix build with MSVC2017 (master only)
      Python bindings: fix typo on slopeFormat parameter (fixes #8154)
      OGRParseDate(): restrict valid times to HH:MM:SS(.sss) with at least 2 figures (fixes #8150)
      Warper: do not modify bounds when doing geographic->geographic on a dataset with world extent but not in [-180,180] (fixes #8194)
      ogrinfo: return non-zero ret code if -sql failed (fixes #8215)
      Doc: removing Twitter, or X or whatever it will be named when I'll have commit this
      Adjust test for libjson-c 0.17
      PDF: update to support (and require) PDFium/5952
      Doc: gdalwarp: clarify that -t_srs might still be needed when using -ct (fixes #8242)
      Overview/RasterIO resampling: use Float64 as working data type for Float64 input data (fixes #8187)
      RMS resampling: avoid potential integer overflow with UInt16 values
      RasterIOResampled(): make mingw gcc happy
      GDALResampleChunk_Mode(): use template for the different working data types
      Fix ExecuteSQL(dialect='SQLITE', spatialFilter=...) on a Memory datasource
      MEM: allocate a single buffer for band-interleaved data
      HDF5: optimize code-paths for RasterIO() without resampling (depends on commit f9cc44abef)
      /vsiaz/: implement Azure Active Directoy Workload Identity authentication, typically for Azure Kubernetes
      NITF: add support for CSCSDB (Common Sensor Covariance Support Data) DES from GLAS/GFM SDEs
      nitf_spec.xml: corrections to CSEXRB TRE
      GDALChecksumImage(): fix 3.6.0 regression regarding integer overflow on images with more than 2 billion pixels (fixes #8254)
      Doc: import https://github.com/OSGeo/libgeotiff / geotiff/html/proj_list under gdal.org/ (fixes #8221)
      HDF5: more efficient metadata collection (no fonctional change)
      HDF5: deal with int64/uint64 attributes
      HDF5: remove trailing space in multi-valued metadata items, remove dataset name prefix in band level metadata, and address Planet's datacube band-specific metadata
      Parquet: add OGRParquetLayer::GetMinMaxForField() and use in ExecuteSQL() (no fonctional change)
      Parquet: optimize SELECT MIN(FID), MAX(FID)
      Parquet: restrict FID column detection to Int32/Int64 data types
      Arrow/Parquet: optimize attribute filter on FID column
      OGRArrowLayer::GetNextArrowArray(): make sure to invalidate potentially modified batches at end of iteration
      Parquet: use statistics to skip row groups that don't match attribute filter (fixes #8225)
      Regenerate autotest/ogr/data/arrow/test.feather
      cpl_json: add CPLJSONArray::AddNull() and CPLJSONObject constructor with primitive types
      Arrow/Parquet: support/reading nested list/map datatypes as JSON (fixes #8227)
      autotest: make tmp_vsimem fixture create the directory (similarly to pytest's tmp_path)
      Arrow/Parquet: make TestCapability(OLCFastGetExtent) call FastGetExtent
      Parquet: use statistics of bbox.minx/miny/max/maxy fields (as found in Ouverture Maps datasets) to implement fast GetExtent()
      OGRArrowLayer::GetNextRawFeature(): save some use of shared_ptr refcount
      Doc: Remove AWS from GDAL Sponsorship program (#8238)
      OGRArrowLayer::GetNextRawFeature(): make it use bbox.minx/miny/max/maxy for faster spatial filter testing
      Parquet: use statistics of bbox.minx/miny/max/maxy fields to skip row groups for faster spatial filter testing
      [code cleanup] ogrlayerarrow.cpp: use helper functions
      [code cleanup] ogrlayerarrow.cpp: rename pabyNull to pabyValidity
      Doc: document performance issues with JPEG2000 through network access (fixes #8275)
      PDF: prefix member variables of PDFDataset class with m_, and use inline initialization
      PDF: avoid CSA false positive
      PDF: use VSIVirtualHandleUniquePtr for m_fp
      PDF: use unique_ptr for m_apoOvrDS and m_apoOvrDSBackup
      pdf.py: add missing require_driver()
      PDF: implement overviews for Poppler backend by adjusting the DPI value (fixes #8233)
      PDF: improve performance of overviews
      Python bindings: add a outputGeotransform option to gdal.Translate()
      PDF: increase threshold to detect tile size and band count (fixes #8236, fixes #8240)
      PDF: avoid int overflow on compressed stream whose decompressed size > 2 GB
      PDF: limit decompression of compressed streams with Poppler backend
      PDF: avoid potential OOM crash in PDFium backend
      PDF: catch C++ exceptions from Poppler
      PDF: limit memory allocations on huge PDF name objects
      CPLvsnprintf(): deal with '%.*f' formatting
      Python bindings: make Feature.SetField(field_idx_or_name, binary_values); add feature.SetFieldBinary(field_idx_or_name, binary_values)
      autotest: replace use of SetFieldBinaryFromHexString() where possible
      gdalmdimtranslate: fix wrong output dimension size when using syntax like '-array name=XXX,view=[::factor_gt_1]'
      Zarr: add MULTIBAND=YES/NO, DIM_X and DIM_Y open options (fixes #8237)
      Zarr: change MULTIBAND open option to default to YES (fixes #8237)
      GDALMDArray::AsClassicDataset(): add a LOAD_EXTRA_DIM_METADATA_DELAY option, and expose it in Zarr driver
      Zarr: fix writing partial tiles
      ZarrArray::IWrite(): optimize inner loop
      Zarr: classic raster API: write multi-band datasets as Zarr 3D arrays (writing them as several 2D arrays as in GDAL 3.7 can be asked with the SINGLE_ARRAY=NO creation option)
      OGRCurve::isClockwise(): fix wrong result when lowest rightmost vertex is the first one (fixes #8296)
      Test OGRCurve::isClockwise()
      ogrinfo_output.schema.json: make schema reflect actual output of ogrinfo (fixes #8300)
      autotest: display loaded shared objects (if psutil installed)
      CI: skip test_driver_metadata on mingw64 since it now crashes for unknown reason
      VRT: add 'min' and 'max' pixel functions (fixes #8292)
      Docker: update dependencies, and bump Alpine to 3.18 [ci skip]
      Python bindings: throw exceptions (when enabled) on gdal_array.OpenArray()/OpenNumPyArray()/OpenMultiDimensionalNumPyArray()
      OGR MEM: add a FID layer creation option to specify the FID column name
      SQLite dialect: when the underlying layer has a FID column name, enable the user to use it as an alias of ROWID
      GPKG: remove duplicate call to CancelAsyncNextArrowArray() in DeleteFeature()
      OGRGeoPackageLayer: prefix all member variables with m_, and use inline initialization
      GPKG: implement SetNextByIndex() on table layers (by appending 'OFFSET -1 LIMIT index')
      osgeo_utils: allign base.get_extension() and util.DoesDriverHandleExtension() on C++ versions, and add tests (fixes #8277)
      TileDB ArrowArray: make sure ResetReading() does not invalidate array
      OGRLayer::GetArrowStream(): do not issue ResetReading() at beginning of iteration, but at end instead, so SetNextByIndex() can be honoured
      GPKG: make GetArrowStream() honour SetNextByIndex()
      Doc: resync OGR_L_SetAttributeFilter() with OGRLayer::SetAttributeFilter() (fixes #8308)
      Python: robustify typemaps, use more fragments
      OGRGeometry classes: add addGeometry()/addRing()/addCurve() methods accepting a std::unique_ptr
      gml2ogrgeometry: use std::unique_ptr
      autotest: ogr_gml_geom.py: enhance tests for gml:Surface
      gml2ogrgeometry: reject empty <gml:Triangle/>
      Simplify GML2FaceExtRing()
      Document and make --help and --help-general available in all utilities (fixes #3816)
      Address warnings of cppcheck master
      ISG: make it able to read headers > 1024 bytes
      ISG: take into ISG format 2.0
      Internal libtiff: resync
      Doc: better document --formats (fixes #8315)
      resync_from_upstream.sh: fix shellcheck issue
      Build: fix building test_ofgdb_write (fixes #8321)
      TileDBRasterBand::IRasterIO(): use correct band indexing
      TileDB: read/write Int8, Int64 and UInt64
      GPKG: add a CRS_WKT_EXTENSION=YES/NO dataset creation option to force addition of definition_12_063 column
      GDALGeoPackageRasterBand::GetMetadata(): fix use after free
      GDALGeoPackageRasterBand: fix missing GRID_CELL_ENCODING metadata item when there is other metadata
      GPKG: remove .aux.xml file in Delete()
      GPKG: add a METADATA_TABLES creation option to control creation of system metadata tables
      /vsis3/ and /vsioss/: less error prone management of redirects / region discovery
      /vsiaz/: do not append trailing slash for directories deduced from .gdal_marker_for_dir special file
      typo fixes [ci skip]
      /vsiaz/: implement server-side copy from /vsis3/, /vsigs/, /vsiadls/, /vsicurl/ to /vsiaz
      VSISync() network to network: implement SyncStrategy::TIMESTAMP
      gdal2tiles: raise explicit exception if bad value for --s_srs (fixes #8331)
      frmts/mrf/CMakeLists.txt: ignore HAVE_JPEGTURBO_DUAL_MODE_8_12 if GDAL_USE_JPEG is OFF (tune #8336)
      Python bindings: improve performance of CSLFromPySequence() on large sequences (like > 100,000 strings)
      GDALGeneralCmdLineProcessor(): improve perf with lots of strings in --optfile
      MEM driver: fix memleak in Create(nBands=0) (master only)
      VSIFilesystemHandler: remove 'virtual' qualifier from ReadDir(), which now forwards to ReadDirEx(); modify all implementations to implement ReadDirEx()
      Add /vsicached? virtual file system, as another way of doing the same as VSICreateCachedFile() / VSI_CACHE=YES
      bench_ogr_batch: add a -v flag
      Arrow/Parquet: fix crash on ArrowArray interface when there is a fid column
      OGR2SQLITE_FeatureFromArgs(): fix memleak (master only)
      GPKG SQL layer GetNextArrowArray(): fix wrong array size when spatial filtering occurs
      OGRWKBGetBoundingBox(): properly initialize envelope
      Add OGRWKBIsWithinPessimistic()
      Add OGRLayer::FilterWKBGeometry()
      JPEG: only take into account first Exif directory found
      GPKG table layer GetNextArrowArray(): implement full spatial filtering (not just bbox intersection)
      Arrow/Parquet GetNextArrowArray(): implement full spatial filtering (not just bbox intersection) (fixes #8347)
      TileDB: GetNextArrowArray(): implement full spatial filtering (not just bbox intersection)
      FlatGeoBuf: GetNextArrowArray(): implement full spatial filtering (not just bbox intersection
      OpenFileGDB: fix opening of .gdb directories whose last component starts with 'a' and is 18 character long... (fixes #8357)
      Add support for PoDoFo >= 0.10.0 (fixes #8356)
      alpine/Dockerfile.ci: add libpodofo-dev (0.10.1 at time of writing)
      autotest/gcore/vrt_read.py: fix random failure
      AAIGRID output: remove leading space on each line (fixes #8344)
      Doc: adjust & resync content of doc/source/api/python_bindings.rst and swig/python/README.rst
      gdal_translate -scale: change dstMax value from 255.999 to 255
      VRTComplexSource (scaling typically): make sure to take into account constraints from VRTRasterBand data type in RasterIO() (rather than just taking into account output buffer data type)
      MITAB: avoid memory leak in edge case (fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=61127)
      COG: add a STATISTICS=AUTO/YES/NO creation option and forward gdal_translate -stats to it (fixes #8169)
      Doc: advertize 3.7.2
      docker/README.md: update with 3.7.2 [ci skip]
      vrt_read.py: fix breakage due to another concurrent change, and turn on exceptions
      PDF: unique_ptr'ification of GDALPDFArray implementations
      PDF: CreateCopy(): add #ifdef magick to produce a PDF to reproduce #8372
      PDF: pdfreadvectors.cpp: improve debugging
      PDF: pdfreadvectors.cpp: (minimal) take into account BMC operator to correctly handle BMC/EMC pairs w.r.t BDC/EMC ones (fixes #8372)
      PDF read vector unstructured: take into account OCMD constructs as found in recent USGS GeoPDFs (fixes #8372)
      PDF: ignore non-relevant StructTreeRoot in most recent USGS GeoPDFs (fixes #8372)
      Internal giflib: fix memleak on animations (fixes #8380)
      Internal giflib: fix memleak on truncate files (fixes #8383)
      scripts/clang-format.sh: skip giflib
      gdal_translate -ovr: properly rescale RPC (fixes #8386)
      GTiff and COG: add a MAX_Z_ERROR_OVERVIEW creation option to separately control the error threshold of overviews w.r.t the one of the full resolution image
      .github/workflows/fedora_rawhide/Dockerfile.ci: revert to dnf
      Add support for TileDB 2.17
      OSR SetFromUserInput(): add support for urn:ogc:def:coordinateMetadata (if PROJ >= 9.4)
      OSR SetFromUserInput(): recognize 'EPSG:XXXX@YYYY' (PROJ >= 9.4)
      Add OSRHasPointMotionOperation() (PROJ >= 9.4)
      OGR_CT: handle point motion operations (PROJ >= 9.4)
      gdalwarp: tune usage to allow both -s_coord_epoch and -t_coord_epoch
      ogr2ogr: tune usage to allow both -s_coord_epoch and -t_coord_epoch
      GDALCreateGenImgProjTransformer2(): correctly deal with same CRS but SRC_COORDINATE_EPOCH != DST_COORDINATE_EPOCH
      gdaltransform: add -s_coord_epoch and -t_coord_epoch
      OGR_CT: display epochs in debug messages
      netCDF: better doc and error message when reading from /vsi is not possible (fixes #8398, #8378)
      GDALCreateGenImgProjTransformer2(): deal with discontinuity of GCPs around antimeridian (fixes #8371)
      docker/alpine-normal/Dockerfile: fix build of freexl 2.0 on arm64 architecture [ci skip]
      docker/ubuntu-full/Dockerfile: workaround issue with GDAL not finding Arrow 13.0 on arm64 [ci skip]
      netCDF: renormalize CRS and geotransform to metric, for EUMETSAT OSI SAF products with a proj4_string, units=km and geospatial_bounds_crs
      CSV: avoid extra comma at end of header line with GEOMETRY=AS_XYZ and a single attribute (fixes #8410)
      SQLite: ignore 'SRID=' layer creation option (fixes https://github.com/qgis/QGIS/issues/54560)
      test_driver_metadata.py: skip on build-windows-conda due to crashes
      /vsi network file systems: make Open() method common for all FS (no functional change)
      /vsi network file system: support r+ access under CPL_VSIL_USE_TEMP_FILE_FOR_RANDOM_WRITE=YES by copying initial content of remove file locally
      Parquet: emit GeoParquet 1.0.0 version number now it has been released
      OGRGF_DetectArc(): harden tolerance when detecting consecutive arcs to avoid incorrect arc center computation (refs #8332)
      ogr2ogr: better deal when reprojecting curve geometries to a non-curve geometry type (fixes #8332)
      netCDF multidim: add write support for Int8 data type (fixes #8421)
      GeoJSON writer: when writing with limited coordinate precision, run MakeValid() to avoid creating invalid geometries
      GTiff: SRS writer: write Projected 3D built as a pseudo-compound in .aux.xml
      netCDF: amend previous commit to make it less specific to EUMETSAT OSI SAF and add a PRESERVE_AXIS_UNIT_IN_CRS=YES/NO open option
      netCDF (traditional): add support for EMIT band data ordering and geolocation array (not using glt_x/glt_y)
      GDALMDArrayResampled::Create(): fix assertion if providing a input non-empty dimension for the non-X/Y dimensions
      netCDF multidimensional: add support for EMIT band data ordering and geolocation array (not using glt_x/glt_y)
      netCDF multidimensional: use glt_x/glt_y for EMIT data
      gdalmdimtranslate: add support for resample=yes array spec option
      netCDFVariable::IReadWrite(): emit error message from NCGetPutVaraFunc()
      gdalwarp: fix error when using -ct and -cutline (master only), and actually use the -ct when possible if sourceCRS != targetCRS and targetCRS == cutlineCRS
      Add RFC95 text: Use standard C/C++ integer types
      RFC95: updates with GDAL 4.0, removing questions
      ogrinfo: emit distinct error message if the file doesn't exist or can't be opened (fixes #8432)
      OGR SQL: allow MIN() and MAX() on string fields
      OpenFileGDB raster: add a RASTER_DATASE…
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! Crash/Data Corruption Upstream Needs changes in an upstream library (like Qt, Proj, GDAL, ...)
Projects
None yet
Development

No branches or pull requests

2 participants