summarylogtreecommitdiffstats
path: root/gdal.changelog
blob: 72ab36d9b1c7c9b9230dcfd67854e2f28f2af148 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
# GDAL/OGR 3.8.2 Release Notes

GDAL 3.8.2 is a bugfix release.

## GDAL 3.8.2

### Port

* /vsis3/: takes into account AWS_CONTAINER_CREDENTIALS_FULL_URI environment
  variable (#8858)
* cpl_safemaths.hpp: fix compilation with clang targeting Windows (#8898)
* CPLGetPhysicalRAM(): fix getting right value when running inside Docker on a
  cgroups v1 system (like Amazon Linux 2) (#8968)

### Algorithms

* Rasterization: avoid burning pixel that we only touch (with an empty
  intersection) (#8918)

### Utilities

* gdal_footprint: return an error if the requested output layer doesn't exist
* gdal_translate: avoid useless extra GDALOpen() call on a target GeoRaster
* pct2rgb.py: emit explicit exception when source file has no color table (#8793)

### Raster drivers

HDF5 driver:
 * classic 2D API: handle char,ushort,uint,int64,uint64 attributes when
   reading them as double
 * multidim: better warning when nodata value is out of range

JPEGXL driver:
 * add compatibility with latest libjxl git HEAD

NGSGEOID driver:
 * make dataset identification robust to NaN values (#8879)

OGCAPI driver:
 * make it robust to missing 'type' on 'self' link (#8912)

STACTA driver:
 * use GDAL_DISABLE_READDIR_ON_OPEN=EMPTY_DIR instead of
   CPL_VSIL_CURL_ALLOWED_EXTENSIONS
 * use STAC Raster extension to get number of bands, their data type, nodata
   value, scale/offset, units, and avoid fetching a metatile
 * add support for upcoming STAC 1.1 which merges eo:bands and raster:bands
   into bands

netCDF, HDF4, HDF5:
 * SubdatasetInfo API: fix various issues (#8869, #8881)

VRT driver:
 * VRTComplexSource: fix excessive RAM usage with many sources (#8967, 3.8.0 regression)

### OGR 3.8.2

### Core

* OGRGeometryFactory::transformWithOptions(): fix WRAPDATELINE=YES on
  multipoint geometries (#8889)
* OGRSpatialReference::importFromUrl(): changes to no longer use a
  'Accept: application/x-ogcwkt' header
* OSRPJContextHolder: call pthread_atfork() once for the process, and
  re-enable it for MacOS
* OGRWKBIntersectsPessimisticFixture: handle all geometry types

### Utilities

* ogrinfo: really honours -if (refs #8590)
* ogr2ogr: implement -if

### Vector drivers

* PMTiles: Correct extension for temporary mbtiles file

## Python bindings

* gdal.Footprint(): add a minRingArea option
* fix build/install when there's a gdal-config from a pre-installed version in
  the PATH (#8882)
* add missing reference increment on Py_None in error case of
  Geometry.GetPoints() (#8945)

# GDAL/OGR 3.8.1 Release Notes

GDAL 3.8.1 is a bugfix release.

## Build

* CMake: add gdalinfo bash-completion file to list of installed files
* Fix build error with libxml2 2.12
* CMake: make GDAL_USE_LIBKML and GDAL_USE_OPENJPEG honor GDAL_USE_EXTERNAL_LIBS
* Detect failure in installation of the Python bindings

## GDAL 3.8.1

### Port

* CSLLoad2(): remove CPLErrorReset()

### Core

* RasterIO: fix subpixel shift when reading from overviews with non-nearest
  resampling
* GDALOverviewDataset::IRasterIO(): use parent dataset when possible for more
  efficiency

### Algorithms

* Inverse TPS transformer: speed improvement in gdalwarp use case (#8672)

### Utilities

* gdalwarp -of COG: use target SRS from -co TILING_SCHEME when specified (#8684)
* gdalwarp: add a heuristic to clamp northings when projecting from geographic
  to Mercator (typically EPSG:3857) (#8730)
* gdal_rasterize: fix inverse rasterization of polygon nested inside another
  one. Requires GEOS enabled build (#8689)
* gdal_footprint: fix -ovr on RGBA datasets (#8792)
* gdal_footprint: fix wrong taking into account of alpha band (#8834)
* gdal_footprint: fix taking into account of individual bands that have nodata
* gdal_sieve.py/gdalattachpct.py/gdalcompare.py/gdalmove.py:
  make sure --version and --help return 0 error code (#8717)

### Raster drivers

BSB driver:
 * fix opening datasets with errant 0x1A character in header (#8765)

COG driver:
 * avoid warnings when converting from world coverage to EPSG:3857
 * for JPEG compression, convert single band+alpha as single band JPEG +
   1-bit mask band

KEA driver:
 * Create(): error out if passing a /vsi file. avoids crashes (#8743)

MRF driver:
 * Avoid crashes when no overviews can be generated (#8809)

MSGN driver:
 * fix memleak in error code path

GeoTIFF driver:
* multithreaded reader/writer: in update scenarios, do not force serialization
  to disk of dirty blocks that intersect the area of interest to read (#8729)
* SRS reader: include VertCRS name from EPSG in CompoundCRS name if there's no
  citation geokey

VRT driver:
 * VRTSourcedRasterBand: serialize approximate statistics inside .vrt when
   there are overviews

## OGR 3.8.1

### Core

* PostFilterArrowArray(): various fixes to pass libarrow full validation checks
 (#8755)
* Add OGRCloneArrowArray()
* WriteArrowArray(): fix wrong taking into account of struct offset

### Utilities

* ogr2ogr: fix GPKG to shapefile with the -preserve_fid flag (#8761,
  3.8.0 regression)
* ogr2ogr: fix GPKG -> Shapefile when field names are truncated (#8849,
  3.8.0 regression)

### Vector drivers

Arrow/Parquet driver:
 * use OGRCloneArrowArray() for safer filtering

CSV driver:
 * CSV writer: do not quote integer fields by default (only if
   STRING_QUOTING=ALWAYS is specified)

GML driver:
 * SaveClasses(): fix memleak in error code path (ossfuzz#63871)

GPKG driver:
 * fix SetFeature()/UpdateFeature()/DeleteFeature() on views with INSTEAD OF
   triggers (#8707)
 * sqlite_rtree_bulk_load.c: fix memleak in error code path
 * fix adding field comments after alternative name
 * Add a OGRPARSEDATE_OPTION_LAX option to OGRParseDate() and use it when
   reading GPKG files (#8759)
 * fix GetNextArrowArray() when there are more than 125 columns (affects
   ogr2ogr from such GPKG) (#8757)

GPX driver:
 * make detection of extensions element more robust (#8827)

OAPIF driver:
 * add INITIAL_REQUEST_PAGE_SIZE open option (#4556)

PMTiles driver:
 * avoid undefined-shift when zoom level is too big (ossfuzz#64234,
   ossfuzz#64404)

S57 driver:
 * stricter dataset identification to avoid recognize S-101 datasets we don't
   handle

Shapefile driver:
 * fix spurious warning when reading polygons (#8767)
 * recognize '      0' as a null date
 * fix writing an invalid "0000/00/00" date

SQLite driver:
 * fix SRS retrieval of a SELECT layer from a non-Spatialite DB with a point
   geometry column (#8677)

## Python bindings

* GetArrowStreamAsNumPy(): fix missing offset when reading fixed size list of
  string
* Fix installation issue with Python 3.12 on Debian
* Python bindings: add a combineBands option to gdal.Footprint()

# GDAL/OGR 3.8.0 Releases Notes

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

## In a nutshell...

* Add [JSONFG](https://gdal.org/drivers/vector/jsonfg.html) read/write vector
  driver for OGC Features and Geometries JSON.
* Add [PMTiles](https://gdal.org/drivers/vector/pmtiles.html) read/write vector
  driver for PMTiles v3 datasets containing MVT PBF tiles
* Add [S102](https://gdal.org/drivers/raster/s102.html) raster read-only driver
  for S-102 bathymetric products (depends on libhdf5)
* Add [gdal_footprint](https://gdal.org/programs/gdal_footprint.html) utility:
  compute the footprint of a raster file, taking into account nodata/mask band,
  and generating polygons/multipolygons corresponding to areas where pixels are
  valid (#6264)
* Python bindings: various enhancements to reduce the number of "gotchas"
  related to inter-object ownership relationships, and a few syntaxic sugar
  enhancements
* Arrow interface: improve spatial and attribute filtering on read side;
  add write side with OGRLayer::WriteArrowBatch()
* GeoPackage: much faster spatial index creation (~ 3-4 times faster)
* ARG driver deprecated: will be removed in 3.9.0

## Backward compatibility issues

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

## New optional dependencies

* libaec to enable CCSDS Adaptive Entropy Coding decompression in the GRIB driver

## Build

* emit better error message when a raster driver cannot be enabled
  because of OGR_BUILD_OPTIONAL_DRIVERS=OFF
* improve static linking for CURL and EXPAT
* Java bindings: change default installation directory of JNI shared
  library and control it with GDAL_JAVA_JNI_INSTALL_DIR
* automatically enable SQLite driver if -DOGR_ENABLE_DRIVER_GPKG=ON
* Don't use libjpeg if disabled (and libjpeg-turbo >= 3.0 available) (#8336)
* gdal.pc generation: use CMAKE_INSTALL_INCLUDEDIR/CMAKE_INSTALL_LIBDIR for
  includedir/libdir (#8012)
* gdal-config: add a --plugindir switch (#8012)

## GDAL 3.8.0 - Overview of Changes

### Port

* Add third_party/fast_float header library for fast string->double conversion
  for CPLStrtodDelim()
* /vsimem/: make it safe to use in multi-threaded scenarios
* /vsimem/: implicitly create parent directories when creating file
* CPLParseXML(): do not call CPLErrorReset()
* CPLJSon: add setters for uint64_t
* Add CPLJSONArray::AddNull() and CPLJSONObject constructor with primitive types
* VSIUnixStdioHandle / VSIWin32Handle: make Close() be callable multiple times
  to be friendly with VSIVirtualHandleUniquePtr
* /vsicurl/: avoid the same region to be downloaded at the same time from
  concurrent threads (#8041)
* /vsicurl/ / /vsicurl_streaming/: recognize IGNORE_FILENAME_RESTRICTIONS=YES
  open option to skip any extension based filtering (#8162)
* /vsicurl/: emit warnings if invalid values of CPL_VSIL_CURL_CHUNK_SIZE and
  CPL_VSIL_CURL_CACHE_SIZE are used (#8499)
* /vsicurl_streaming/: implement retry strategy if GDAL_HTTP_MAX_RETRY is set
* /vsis3_streaming/ and the like: implement ReadDir() by forwarding to
  non-streaming filesystem (#8191)
* IVSIS3LikeFSHandler::CopyFile(): retry with non-streaming source for more
  robustness
* /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
* /vsiaz/: implement server-side copy from /vsis3/, /vsigs/, /vsiadls/,
  /vsicurl/ to /vsiaz
* /vsiaz/: fix CopyObject() when source and target are both /vsiaz/ but in
  different buckets
* /vsiaz/: update to version 2020-12-06 for GetSignedURL(), limit to https and
  use blob resource type
* /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
* VSISync() network to network: implement SyncStrategy::TIMESTAMP
* Add VSIGetCanonicalFilename()
* CPLvsnprintf(): deal with '%.*f' formatting
* 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
* VSIFilesystemHandler::CopyFile(): detect wrong target file size w.r.t source
  file size
* /vsi7z/: Accept ArcGIS Pro Project Packages extension
* cpl_vsil_win32: check return value of FlushFileBuffers(), and open file with
  GENERIC_WRITE only if access=w or wb
* cpl_vsil_win32: implement a WRITE_THROUGH=YEs option to pass to VSIFOpenEx2L()

### Core

* GDALIdentifyDriverEx() and GDALDriver::QuietDelete(): do not call
  CPLErrorReset()
* GDALDataset::Open(): take into account open options for OF_SHARED mode (#7824)
* PAM .aux.xml: read geotransform from Esri GeodataXform.CoeffX/CoeffY elements
 (qgis/qgis#53125)
* Add a DCAP_FLUSHCACHE_CONSISTENT_STATE capability, and fix GeoJSON, JSONFG,
  GPKG drivers to implement it
* Overview/RasterIO resampling: use Float64 as working data type for Float64
  input data (#8187)
* Add GDALRegisterPlugins function to register all/only plugins (#8447)
* GDALDriver::DefaultCreateCopy(): in non-strict mode, turn (ignored) errors as
  warnings and do not silence them
* Add a GDALPamDataset::SetDerivedDatasetName() method, and use it to be able to
  save statistics of datasets returned by GDALMDArray::AsClassicDataset()
* Add GDALGetSubdatasetInfo() and related functions  (#8155)

### Multidimensional API

* add Rename() methods. Implemented in MEM, netCDF, Zarr drivers
* add DeleteGroup(), DeleteMDArray(), DeleteAttribute()
  methods. Implemented in MEM, netCDF (for attributes) and Zarr drivers
* GDALDatasetFromArray: fix write/update support
* GDALMDArrayMask: take into account attributes at construction time
* GetMask(): add a UNMASK_FLAGS option
* GDALMDArray::ComputeStatistics(): add option to set actual_range in netCDF
  and Zarr when computing statistics
* GDALMDArray::AsClassicDataset(): add a LOAD_EXTRA_DIM_METADATA_DELAY option,
  and expose it in Zarr driver
* GDALMDArray::AsClassicDataset(): allow to map band indexing arrays as band
  metadata items with BAND_METADATA option
* Add GDALGroup::SubsetDimensionFromSelection()

### Algorithms

* Warp average resampling: using Weighted incremental algorithm mean for numeric
  stability
* Warper: auto-enable OPTIMIZE_SIZE warping option when reasonable (#7761)
* Geoloc transformer: warn if the input dataset is larger in width or height
  compared to the geoloc array (#7751)
* GDALCreateGenImgProjTransformer2(): deal with discontinuity of GCPs around
  antimeridian (#8371)
* TPS transformer: use an iterative method to refine the inverse transformation
  (#8572)

### Utilities

* gdaladdo: add options to partially refresh existing overviews:
  ``--partial-refresh-from-source-timestamp,``,
  ``--partial-refresh-from-projwin <ulx> <uly> <lrx> <lry>``,`
  ``--partial-refresh-from-source-extent <filename1,...,filenameN>``
* gdal_translate: emit warning when -a_scale/-a_offset + -unscale is specified
 (#7863)
* gdal_translate: GTiff, COG, VRT, PNG and JPEG drivers recognize
  COPY_SRC_MDD=AUTO/YES/NO and SRC_MDD=domain_name creation options
* gdal_translate: add -a_gt option to assign geotransform (#8248)
* gdal_translate -scale: change dstMax value from 255.999 to 255
* gdal_translate: when specifying -srcwin, preserve source block size in the
  temporary VRT if srcwin top,left is a multiple of the block size
* gdalwarp: in -tr mode (without -ts / -te), detect blank edge lines/columns
  before warping and remove them (#7905)
* gdalwarp: fix cutline processing when warping with a cutline geometry in UTM
  1/60 crossing the antimeridian, on a raster in long/lat SRS (#8163)
* gdalwarp: tune usage to allow both -s_coord_epoch and -t_coord_epoch
* gdalwarp: fix error when using -ct and -cutline (master only), and actually
  use the -ct when possible if sourceCRS != targetCRS and targetCRS == cutlineCRS
* gdalwarp: do not enter a specific COG optimized code path when some of its
  preconditons are not met (#8655)
* gdalmdiminfo: output details of indexing variables that can be accessed only
  from the array (typically for TileDB dimension labels)
* nearblack: add "-alg floodfill" to select a flood fill algorithm, to address
  concave areas.
* gdalmdimtranslate: add support for resample=yes array spec option
* gdalbuildvrt: make -separate option process all bands of input datasets,
  unless -b is specified (#8584)
* gdal_polygonize: add a -overwrite switch (#7913)
* gdal_rasterize_lib: fix error messages
* gdaltransform: add -s_coord_epoch and -t_coord_epoch
* gdalcompare.py: multiple enhancements and new command line options
* gdal_pansharpen.py: avoid error trying to generate relative path
* Add validate_geoparquet.py sample Python script
* gdalinfo.py: use math.isnan() (#8196)
* gdalinfo.py: fix wrong order of long,lat corner coordinates (#8199)
* make --help and --help-general available in all utilities (#3816)

### Raster drivers

AAIGRID driver:
 * writing: remove leading space on each line (#8344)

ARG driver:
 * mark it deprecated, removal planned for GDAL 3.9 (#7920)

BAG driver:
 * increase the efficiency of getting depth&uncertainty values from the
   refinement grids
 * use low-resolution grid as the last overview level in MODE=RESAMPLED_GRID
 * add a MODE=INTERPOLATED mode using mostly bilinear interpolation of the
   refinement grid nodes

COG driver:
 * only update mode if the IGNORE_COG_LAYOUT_BREAK=YES open option is specified
   (#7735)
 * add a STATISTICS=AUTO/YES/NO creation option and forward gdal_translate
   -stats to it (#8169)
 * Lerc: 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

ENVI driver:
 * warn if assigning different nodata value to different bands
 * support Int64 and UInt64

ESRIC driver:
 * Implement ESRI Tile Package (.tpkx) support (#7799)

GRIB driver:
 * allow opening files with invalid Earth of shape (#7811)
 * implement CCSDS Adaptive Entropy Coding decompression. Requires libaec (#8092)
 * only emit a CPLDebug() instead of a message on stdout when there are trailing
   bytes (#8574)
 * GRIB2 SRS writing: add support for Rotated LatLong grids (fixes #8536)

GTiff driver:
 * Performance improvement: avoid using block cache when writing whole blocks
   (up to about twice faster in some scenarios)
 * GTiff multi-threaded reader: catch errors emitted in worker threads and
   re-emit them in main thread
 * Internal libtiff: WebP codec: turn exact mode when creating lossless files
   to avoid altering R,G,B values in areas where alpha=0 (#8038)
 * Lerc: 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
 * SRS writer: write Projected 3D built as a pseudo-compound in .aux.xml
 * Internal libtiff and libgeotiff: resynchronization with upstream

HDF5 driver:
 * optimize code-paths for RasterIO() without resampling
 * multidim: speed-up very slow cases of IRead()

ISG driver:
 * make it able to read headers > 1024 bytes
 * take into ISG format 2.0

JPEG driver:
 * allow QUALITY down to 1
 * redirect JPEG 'output message' to GDAL debug messages
 * only take into account first Exif directory found

MBTiles driver:
 * Add WEBP support (#8409)

MEM driver:
 * allocate a single buffer for band-interleaved data

netCDF driver:
 * on reading, set NETCDF_DIM_xxx band metadata items in on-demand way (helps
   with network accesses)
 * do not set NETCDF_DIM_xxxx_VALUES dataset metadata items for variables of
   unlimited dimensions on network access for performance reasons
 * better error message when reading from /vsi is not possible (#8398, #8378)
 * renormalize CRS and geotransform to metric, typically for EUMETSAT OSI SAF
   products. Add a PRESERVE_AXIS_UNIT_IN_CRS=YES/NO open option
 * add support for EMIT band data ordering and geolocation array (
   using glt_x/glt_y for multidimensional API)

NITF driver:
 * add support for CSCSDB (Common Sensor Covariance Support Data) DES from
   GLAS/GFM SDEs

OpenFileGDB raster:
 * add support for FileGDB v9 raster datasets
 * add a RASTER_DATASET metadata item with the name of the RasterDataset (#8427)

PDF driver:
 * PDFium backend: update to support (and require) PDFium/5952
 * Poppler backend: implement overviews by adjusting the DPI value (#8233)
 * PoDoFo backend: add support for PoDoFo >= 0.10.0 (#8356)
 * increase threshold to detect tile size and band count (#8236, #8240)
 * Various robustness fixes

PRF driver:
 * add associated PRJ file read

Sentinel2 driver:
 * additional metadata (#8379)

TileDB driver:
 * add read/write multidimensional support (requires libtiledb >= 2.15)
 * TileDBRasterBand::IRasterIO(): use correct band indexing
 * read/write Int8, Int64 and UInt64
 * add capability to read arbitrary (i.e. not created by GDAL) 2D/3D dense
   array (provided it uses uint64 dimension)
 * Add support for TileDB 2.17

VRT driver:
 * add `norm_diff` (#8081), `min` and `max` pixel functions (#8292)
 * ignore <OverviewList> when external .vrt.ovr is present, as documented and
   intended
 * vrt:// connection string: add `projwin`, `projwin_srs`, `tr`, `r`,
   `srcwin`, `a_gt`, `oo`, `scale`, `unscale`, `a_coord_epoch`, `nogcp`, `eco`,
   `epo`
 * 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)
 * IRasterIO(): avoid edge effects at sources boundaries when downsampling with
   non-nearest resampling
 * VRTMDArraySourceFromArray: fix taking into account relativeToVRT=1
 * allow a <ArraySource> element containing a 2D multidimensional array as a
   VRTRasterBand source and through the use of a <DerivedArray> make it possible
   to create a 2D array from a 3D or more multidimensional one, by slicing,
   transposing, resampling, gridding, etc.
 * VRTComplexSource: perf improvement: add specialization when only NODATA for
   Byte/UInt16/Int16 data types
 * VRTSimpleSource::GetFileList(): do not issue a stat() as it may be slow on
   network drives
 * VRTSourcedRasterBand::GetMinimum/GetMaximum(): limit to 1 second max when
   iterating over sources
 * VRTSourcedRasterBand::GetMinimum/GetMaximum(): use STATISTICS_MINIMUM/MAXIMUM
   metadata first

WCS driver:
 * remove non-standard 'FORMAT' parameter from 'DescribeCoverage' requests
   (#8381)

Zarr driver:
 * allow update support in classic mode
 * Zarr V3: update to current specification (breaks backward compatibility)
 * implement GDALDriver::Rename(), Delete() and CopyFiles()
 * ignore filename restrictions when reading tile data files (#8162)
 * add MULTIBAND=YES/NO, DIM_X and DIM_Y open options (#8237)
 * 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)
 * fix writing partial tiles

## OGR 3.8.0 - Overview of Changes

### Core

* exportToGEOS(): do not drop M dimension with GEOS >= 3.12
* Add OGR_G_IsClockwise() and map it to SWIG
* core and ogr2ogr: add logic so that ogr2ogr can try a driver specific
  implementation of GDALVectorTranslate()
* OGRParseDate(): restrict valid times to HH:MM:SS(.sss) with at least 2 figures
  (#8150)
* Add OGR_F_DumpReadableAsString
* ArrowArray interface: make PostFilterArrowArray() deal with attribute filter,
  and enable that in Parquet&Arrow drivers
* OGRLayer::GetArrowStream(): do not issue ResetReading() at beginning of
  iteration, but at end instead, so SetNextByIndex() can be honoured
* ArrowStream interface: make TIMEZONE="unknown", "UTC", "(+|:)HH:MM" or any
  other Arrow supported value as an option of the generic implementation
* Add OGRLayer::WriteArrowBatch()
* ArrowArray: implement fast 'FID IN (...)' / 'FID = ...' attribute filter in
  generic GetNextArrowArray(), and use it for FlatGeoBuf one too (when it has a
  spatial index) (#8590)
* GetArrowStream(): support a GEOMETRY_METADATA_ENCODING=GEOARROW option (#8605)
* GetNextArrowArray() implementations: automatically adjust batch size of list/
  string/binary arrays do not saturate their capacity (2 billion elements)
* OGRGeometry classes: add addGeometry()/addRing()/addCurve() methods accepting
  a std::unique_ptr
* OGRLineString/Polygon/MultiPolygon/MultiLineString: make it possible to run
  importFromWkb() on the same object and limiting the number of dynamic memory
  (re)allocations
* organizePolygons: Remove handling of nonpolygonal geometries
* OGRGeometryFactory::transformWithOptions() WRAPDATELINE=YES: remove heuristics
  about points exactly at +/- 180 (#8645)
* gml2ogrgeometry: reject empty <gml:Triangle/>
* OGRGF_DetectArc(): harden tolerance when detecting consecutive arcs to avoid
  incorrect arc center computation (#8332)
* OGR SQL: allow MIN() and MAX() on string fields
* SQLite dialect: when the underlying layer has a FID column name, enable the
  user to use it as an alias of ROWID
* SQLite dialect: error out with explicit message on unsupported commands (#8430)
* Add OGRFieldDefn::GetTZFlag()/SetTZFlag(), and OGR_TZFLAG_ constants
* GDALDataset::ICreateLayer(): now takes a const OGRSpatialReference* instead of
  a OGRSpatialReference*. Affects out-of-tree drivers (#8493)
* OGR Python drivers: support WKB geometries

### OGRSpatialReference

* Add OGRCoordinateTransformationOptions::SetOnlyBest() /
  OCTCoordinateTransformationOptionsSetOnlyBest() (#7753)
* OGRProjCT::Transform(): do not emit generic error message if a specific one
  has already been emitted
* SetFromUserInput(): add support for urn:ogc:def:coordinateMetadata (PROJ >=
  9.4)
* SetFromUserInput(): recognize 'EPSG:XXXX@YYYY' (PROJ >= 9.4)
* Add OSRHasPointMotionOperation() (PROJ >= 9.4)
* OGR_CT: handle point motion operations (PROJ >= 9.4)

### Utilities

* ogrinfo: speed-up string concatenation
* ogrinfo: add support for DateTime field domains
* ogrinfo: emit distinct error message if the file doesn't exist or can't be
  opened (#8432)
* ogrinfo: output timezone flag
* ogr2ogr: calls FlushCache() (#8033)
* ogr2ogr: tune usage to allow both -s_coord_epoch and -t_coord_epoch
* ogr2ogr: better deal when reprojecting curve geometries to a non-curve
  geometry type (#8332)
* ogr2ogr: use Arrow interface in reading and writing when possible
* make -select '' work (or gdal.VectorTranslate(selectFields=[]))

### Vector drivers

Arrow/Parquet driver:
 * emit ARROW:extension:name=ogc.wkb in Feature field metadata, and return it
   also through GetArrowStream() for Parquet
 * implement faster spatial filtering with ArrowArray interface
 * optimize attribute filter on FID column
 * support/reading nested list/map datatypes as JSON
 * implement full spatial filtering (not just bbox intersection)
 * reading and writing: use field TZFlag
 * implement WriteArrowBatch() specific implementation
 * support LargeString and LargeBinary for geometry columns (read support only)

CSV driver:
 * reader: change to use separator with the most occurrences (#7831)
 * and add a SEPARATOR=AUTO/COMMA/SEMICOLON/TAB/SPACE/PIPE open option (#7829)
 * implement GetFileList() and return .csvt if used (#8165)

DGN driver:
 * CreateFeature(): fix crash on empty geometries (ossfuzz#56771)

DXF driver:
 * Preserve attributes in nested block insertions

ESRIJSON driver:
 * add support for esriFieldTypeSingle and esriFieldTypeDate data types

FlatGeoBuf driver:
 * GetNextArrowArray(): implement full spatial filtering (not just bbox
   intersection)

GeoJSON driver:
 * add AUTODETECT_JSON_STRINGS layer creation option (#8391)
 * writer: when writing with limited coordinate precision, run MakeValid() to
   avoid creating invalid geometries
 * reading: set field TZFlag
 * writer: in RFC7946 mode, refine logic to determine if a multipolygon spans
   over the antimeridian to write correct bbox (qgis/qgis#42827)
 * writer: use faster file write() primitive and detect write() errors

GeoJSONSeq driver:
 * add AUTODETECT_JSON_STRINGS layer creation option (#8391)
 * writer: use faster file write() primitive and detect write() errors

GeoPackage driver:
 * use much faster creation of RTree with a in-memory RTree building
 * speed-up HasMetadataTables() on dataset with many layers
 * speed-up unique constraint discovery on dataset with many layers
 * more efficient retrieval of layer extent from RTree content
 * deal with DateTime fields without milliseconds or seconds, as allowed by
   GeoPackage 1.4 (#8037)
 * add a DATETIME_PRECISION layer creation option (#8037)
 * implement SetNextByIndex() on table layers (by appending
   'OFFSET -1 LIMIT index')
 * make GetArrowStream() honour SetNextByIndex()
 * add a CRS_WKT_EXTENSION=YES/NO dataset creation option to force addition of
   definition_12_063 column
 * add a METADATA_TABLES creation option to control creation of system metadata
   tables
 * GetNextArrowArray(): implement full spatial filtering (not just bbox
   intersection)
 * GetNextArrowArray(): only do multi-threaded prefetch if more than 1 GB RAM
   available
 * make invalid attribute filter to cause error in main thread (so Python
   binding can emit an exception)
 * GPKG / SQLite dialect: improve detection of geometry columns when first row
   is NULL (#8587)
 * make GetFeatureCount() do full geometry intersection and not just bounding
   box (#8625)

GPX driver:
 * add a CREATOR dataset creation option

HANA driver:
 * Set sessionVariable:APPLICATION in connection string
 * Support connections using a user store key (#7946)

Memory driver:
 * add a FID layer creation option to specify the FID column name

MVT/MBTiles driver:
 * take into account tileStats metadata item to decide if a field of type
   'number' might be Integer or Integer64
 * MVT writer: clamp generated tile x, y coordinates to \[0,(1<<z)-1\]

NAS driver:
 * remove unused nas relation layer and remove GML driver's out-of-band
   attribute handling only used for it
 * support gfs @ notation for attributes to handle attributes for codelists
   (fixes norBIT/alkis-import#65)
 * Fix (and refactor) update operations for GID7

MySQL driver:
 * fix compliance issues with test_ogrsf

OAPIF driver:
 * bump default limit to 1000 and honor schema from API (#8566)

ODS driver:
 * add FIELD_TYPES and HEADERS open options (#8028)

OpenFileGDB driver:
 * add support for DateTime field domains
 * expose layer alias name in ALIAS_NAME layer metadata item

Parquet driver:
 * emit GeoParquet 1.0.0 version number
 * add a COORDINATE_PRECISION layer creation option
 * add fast implementation of Arrow Array interface when requesting WKT as WKB
 * make Parquet driver recognize a geometry column if it has
   ARROW:extension:name=ogc.wkb/ogc.wkt field metadata
 * add a GEOM_POSSIBLE_NAMES and CRS open options for wider compatibility with
   datasets not following GeoParquet dataset-level metadata
 * fix ExecuteSQL() MIN/MAX optimization on a UINT32 field on a Parquet 2 file
 * optimize SELECT MIN(FID), MAX(FID)
 * restrict FID column detection to Int32/Int64 data types
 * use statistics to skip row groups that don't match attribute filter (#8225)
 * use statistics of bbox.minx/miny/max/maxy fields (as found in Ouverture Maps
   datasets) to implement fast GetExtent()

PDF driver:
 * (minimal) take into account BMC operator to correctly handle BMC/EMC pairs
   w.r.t BDC/EMC ones (#8372)
 * Read vector unstructured: take into account OCMD constructs as found in
   recent USGS GeoPDFs (#8372)
 * ignore non-relevant StructTreeRoot in most recent USGS GeoPDFs (#8372)

PGDump driver:
 * use faster file write() primitive

PostgreSQL driver:
 * do not override search_path when not needed (#8641)

Shapefile driver:
 * use VSIGetCanonicalFilename() in GetFileList() (#8164)
 * be tolerant with .prj with lon, lat axis order (fixes #8452)

TileDB driver:
 * GetNextArrowArray(): implement full spatial filtering (not just bbox
   intersection)

XLSX driver:
 * add FIELD_TYPES and HEADERS open options (#8028)

WFS driver:
 * Don't issue STARTINDEX if feature count is small (#8146)
 * do not emit twice DescribeFeatureType request on servers with complex
   features and a single layer
 * ExecuteSQL(): skip leading spaces that could cause the rest of the function
   to malfunction
 * correctly paginate when number of features is lower than page size (#8653)
 * use numberMatched when present to avoid last empty GetFeature request, and
   set GetFeatureCount()

## SWIG Language Bindings

All bindings:
 * Map multidimensional API Rename() methods
 * Increment FeatureDefn ref count on ogr.Layer.GetLayerDefn()
 * add ogr.CreateRangeFieldDomainDateTime() and Domain.GetMinAsString()
   /GetMaxAsString()
 * Expose GetConfigOptions()
 * add gdal.SuggestedWarpOutput()
 * Expose GDALClose

Java bindings:
 * add Read/WriteRaster abilities for GDT_UInt64 & GDT_Int64 (#7893)
 * make multidimensional API usable (#8048)
 * implement ogr.CreateCodedFieldDomain() and FieldDomain.GetEnumeration()
  (#8085)
 * eliminate some deprecations / compiler warnings (#8055)
 * Add FieldDefn::GetFieldType() compatibility method

Python bindings:
 * Allow passing options as dict
 * Return context manager from Create, CreateDataSource
 * Use ogr.DataSource and gdal.Dataset as context managers
 * make gdal.Group.GetGroupNames() and GetMDArrayNames() return an empty list instead of None
 * detect invalid use of ReleaseResultSet() (#7782)
 * Invalidate band and layer refs when dataset closes
 * Invalidate mask, overview references after dataset close
 * Invalidate refs from CreateLayer on datasource close
 * Invalidate refs from CopyLayer on datasource close
 * Avoid crash when using dataset after Destroy or Release
 *  Avoid crashes when using orphaned Geometry refs
 * GetArrowStreamAsNumPy(): various fixes
 * Fix gdal.config_options to prevent migration of config options in and out of
   thread-local storage (#8018)
 * accept numpy.int64/float64 arguments for xoff, yoff, win_xsize, win_ysize,
   buf_xsize, buf_ysize arguments of ReadAsArray() (#8026)
 * make setup.py check that libgdal version >= python bindings version (#8029)
 * fix CoordinateTransform.TransformPoint(sequence of 3 or 4 values)
 * Use DumpReadable for Feature __repr__
 * add a outputGeotransform option to gdal.Translate()
 * Accept os.PathLike arguments where applicable
 * make Feature.SetField(field_idx_or_name, binary_values) work
 * add feature.SetFieldBinary(field_idx_or_name, binary_values)
 * throw exceptions (when enabled) on gdal_array.OpenArray()/OpenNumPyArray()/
   OpenMultiDimensionalNumPyArray()
 * improve performance of CSLFromPySequence() on large sequences
   (like > 100,000 strings)
 * Allow ExecuteSQL context manager to work on empty datasources
 * make sure that CPL_DEBUG=ON and gdal.UseExceptions() work fine during
   gdal.VectorTranslate() (and similar) (#8552)

# GDAL/OGR 3.7.0 Releases Notes

GDAL/OGR 3.7.0 is a feature release.
Those notes include changes since GDAL 3.6.0, but not already included in a
GDAL 3.6.x bugfix release.

## In a nutshell...

* [RFC 87](https://gdal.org/development/rfc/rfc87_signed_int8.html): Add
  GDT_Int8 support
* [RFC 88](https://gdal.org/development/rfc/rfc88_googletest.html): switch
  to GoogleTest framework for C++ tests (#3525)
* [RFC 89](https://gdal.org/development/rfc/rfc89_sql_logging_callback.html):
  SQL query logging callback (#6967)
* [RFC 90](https://gdal.org/development/rfc/rfc90_read_compressed_data.html):
  Direct access to compressed raster data
* [RFC 91](https://gdal.org/development/rfc/rfc91_dataset_close.html):
  GDALDataset::Close() method
* [RFC 93](https://gdal.org/development/rfc/rfc93_update_feature.html):
  OGRLayer::UpdateFeature() method
* [RFC 94](https://gdal.org/development/rfc/rfc94_field_precision_width_metadata.html):
  Numeric fields width/precision metadata
* ogrinfo: make it accessible through a new GDALVectorInfo() C API call, and
  a -json switch
* Add read-only raster driver NOAA_B to read NOAA GEOCON/NADCON5 .b grids
* Add read-only raster driver NSIDCbin for Sea Ice Concentrations (#7263)
* Add read-only vector GTFS (General Transit Feed Specification) driver
* TileDB: add read/write vector side
* Add support for [SOZip](https://sozip.org) (Seek Optimized ZIP) with enhanced
  /vsizip/ virtual file system and a new sozip utility
* OpenFileGDB: add read-only support for raster datasets (.gdb v10)
* PNG: 1.7-2.0x speed-up in whole image decompression with libdeflate on
  Intel/AMD CPUs. Benefits GPKG, MRF drivers
* [RFC 69](https://gdal.org/development/rfc/rfc69_cplusplus_formatting.html):
  C++ code reformatting
* Code linting and security fixes
* Remove any traces of Rasdaman driver, now moved to OSGeo/gdal-extra-drivers
  repository (#4808)

## Backward compatibility issues

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

## New installed files

* data/gfs.xsd: XML schema for .gfs files (#6655)
* data/gml_registry.xsd: new file with XML schema of gml_registry.xml (#6716)
* data/ogrinfo_output.schema.json: to validate ogrinfo -json output
* data/gdalinfo_output.schema.json: to validate gdalinfo -json output (fixes #6850)
* data/grib2_table_4_2_0_21.csv
* data/grib2_table_4_2_2_6.csv
* bin/sozip

## Build

* make BUILD_JAVA/CSHARP/PYTHON_BINDINGS default value dependent on the
  presence of requirements, and error out if those variables are set but
  requirements are missing
* Python bindings: remove generated files and require SWIG to be present
* Fix build with -DOGR_ENABLE_DRIVER_GML=OFF (#6647)
* make it possible to build on Linux if linux/fs.h is missing by explicitly
  setting ACCEPT_MISSING_LINUX_FS_HEADER
* Add support for (future) libjpeg-turbo 2.2 with its 8/12 bit dual mode (#6645)
* PDF driver with PDFium support must be built against PDFium from
  https://github.com/rouault/pdfium_build_gdal_3_7
* No longer alias VSILFILE* to FILE* in non-DEBUG builds (#6790)
* Add build option for using static Arrow/Parquet build (#7082)
* Quote variables for INTERFACE_INCLUDE_DIRECTORIES / IMPORTED_LOCATION
* Enable OpenCL at build-time, but disable it at runtime by default unless
  the USE_OPENCL warping option or GDAL_USE_OPENCL config option is set (#7224)
* Fix MSVC x64 builds with /arch:AVX2 (#7625)

## New optional dependencies

* libarchive for new /vsi7z/ and /vsirar/ virtual file systems

## GDAL 3.7.0 - Overview of Changes

### Port

* /vsizip/: add read support for Deflate64 (#7013)
* Add read-only /vsi7z/ and /vsirar/ virtual file systems (depends on libarchive)
* Make it possible to specify all HTTP related configuration options as
  path-specific options with VSISetPathSpecificOption()
* VSIGSFSHandler::UnlinkBatch(): avoid potential nullptr deref
* /vsiaz/: implement UnlinkBatch()
* /vsis3/: add CPL_VSIS3_CREATE_DIR_OBJECT configuration option
* /vsigs/ allow GDAL_HTTP_HEADERS config option to be used as authentication method if contains at least a line starting with "Authorization:"
* /vsihdfs/: fix ReadDir() and EOF flag (#7632)
* add a robust CPLParseKeyValueJson() function (#6753)
* HTTP: set default User-Agent header to GDAL/x.y.z and add a
  CPLHTTPSetDefaultUserAgent() function (#6376)
* HTTP: CUSTOMREQUEST option overrides POST while send form
* /vsicurl/ / CPLHTTPFetch(): add a GDAL_HTTP_NETRC_FILE config option
* /vsicurl/ / CPLHTTPFetch(): add options to support SSL client certificates
* VSICurlHandle::ReadMultiRange(): avoid potential infinite loop
* Add VSIVirtualHandle::AdviseRead() virtual method and implement it in /vsicurl
* Add VSICopyFile()
* CPLCopyFile(): remap onto VSICopyFile()
* Implement CopyFile() for VSIZipFilesystemHandler
* Implement GetFileMetadata() for /vsizip/
* CPLDefaultFindFile: Warn if file not found and GDAL_DATA not defined
* Add VSIDuplicateFileSystemHandler() (for remote stores identifcal to popular
  ones, but with different settings).
* Make C type VSILFILE an alias of C++ VSIVirtualHandle (and make it a struct
  for that purpose) (#6643)
* Add a CPLGetErrorHandler() function
* Add VSIVirtualHandleUniquePtr type, unique pointer of VSIVirtualHandle that
  calls the Close() method

### Core

* ComputeRasterMinMax(), ComputeStatistics(), GetHistogram(): take into account
  mask band (and not only nodata value)
* Modify GDALFlushCache() and GDALDataset::FlushCache() to return CPLErr
  instead of void
* Add GDALDataset::Close() virtual method, call it from GDALClose() and make
  GDALClose() return a CPLErr
* GDALDataset:: add a SetBand() method that takes a GDALRasterBand unique_ptr
* RawRasterBand: cache GDAL_ONE_BIG_READ value for RasterIO (#6726)
* RawRasterBand: add IsValid() and Create() methods that return a unique_ptr
* RawDataset::RasterIO(): add optimization when reading from a BIP dataset to
  a BIP buffer (#6819)
* RAW: fix performance issue when reading files with very small width (#1140)
* Raw drivers: check RawRasterBand validity
* LoadPythonAPI(): take into account Python 3.12
* NASAKeywordHandler: add a Parse() method and change Ingest() return type to be bool
* Add GDALMDArray::GetGridded() / GDALMDArrayGetGridded()
* Add GDALMDArray::Resize() / GDALMDArrayResize(). Implement it in MEM, netCDF
  and Zarr drivers
* Support blocks > 2GB in GDALAllValidMaskBand and GDALNoDataValuesMaskBand
* GDALVersionInfo("BUILD_INFO"): report CURL_ENABLED=YES and CURL_VERSION=x.y.z
* Add CPLSubscribeToSetConfigOption() to subscribe to config option settings
* GoogleMapsCompatible tiling scheme: Increase max zoom level from 24 to 30
* JP2 structure dump: fix interpretation of METH field in COLR JP2 box
* Enable SSE2/AVX2 optims on 32bit MSVC builds if /arch:AVX2 is defined (#7625)

### Algorithms

* Polygonizer: switch implementation to Two-Arm Chains EdgeTracing Algorithm,
  which is much faster in some cases (#7344)
* Prefix ParseAlgorithmAndOptions() public symbol with GDALGrid for proper
  namespacing, and add #define alias for API compat (but ABI breakage)
* Pansharpening: require geotransform on panchromatic and multispectral bands.
  Remove undocumented and somewhat broken MSShiftX and MSShiftY options
* Warper: fix issue with insufficiently large source window, visible with RPC
  DEM warping (#7491)

### Utilities

* gdalwarp: add -srcband (aliased to -b) and -dstband options
* gdalwarp: preserve source resolution by default when no reprojection is
  involved (behavior change), and add '-tr square' to use previous behavior
* gdalwarp: better error message when not providing enough values after a switch
  (#7086)
* gdal_rasterize: support @filename for -sql option (#7232)
* gdal_rasterize: add -oo switch for open options (#7329)
* gdal_grid: add -oo switch for open options (#7329)
* gdal_polygonize.py: use transactions to speed-up writing
* gdal_polygonize.py: add a -lco option, and fix -o (#7374)
* gdalbuildvrt: implement numerically stable averaging of resolution (#7502)
* gdal2tiles: use logging module instead of print() for verbose output (#4894)
* gdal2tiles: update doctype to html format (#7631)
* gdal2tiles: uses GDALTermProgress() for progress bar
* gdal_calc: uses GDALTermProgress() for progress bar (#7549)
* gdal_fillnodata: fix parsing of -co option
* validate_gpkg.py: make it work better on examples from ngageoint repositories
* gdal_cp.py: use gdal.CopyFile()
* C/C++ command line utilities: take into account GDALClose() error code

### Raster drivers

ARG driver:
 * add support for int64/uint64

COG driver:
 * relax a bit the tolerance when computing tile number
 * propagate NUM_THREADS to warping (#7479)
 * add NBITS creation option (#7361)

ERS driver:
 * support GDA2020

GeoPackage driver:
 * load/save band statistics in GPKG metadata tables or PAM .aux.xml

GRIB driver:
 * update tables to wmo-im/GRIB2@v30
 * g2clib: allow negative longitudes in grid templates Lon/Lat, Rotated,
   Stretched, Stretched & Rotated, LAEA (#7456) and Mercator
 * fix GetNoDataValue() on band > 1 when there's a bitmap section (#7649)

GTiff driver:
 * add a JXL_ALPHA_DISTANCE creation option, e.g. to have lossless alpha and
   lossy RGB.
 * call VSIVirtualHandle::AdviseRead() in multithreaded read implementation
 * implement GetCompressionFormats() and ReadCompressedData()
 * add minimum support for reading CRS from ESRI's .xml side car file (#7187)
 * use libtiff >= 4.5 reentrant error handlers (when available) (#6659)
 * make sure that band description in PAM overrides the one coming from
   GDAL_METADATA tag
 * Internal libtiff: resync with upstream

HFA driver:
 * add a DISABLEPESTRING=YES creation option to disable use of ArcGIS PE String
   (#1003)

HDF5 driver:
 * add generic support for HDF-EOS5 grids and swaths (#7117)

JP2OpenJPEG driver:
 * add workaround for dop10 orthophotos wrong colorspace

JPEG driver:
 * add a APPLY_ORIENTATION=YES open option to take into account EXIF_Orientation
 * advertise JPEG_QUALITY metadata item in IMAGE_STRUCTURE domain
 * use ReadCompressedData(), implement lossless copy from JPEGXL that has
   JPEG reconstruction box
 * add a LOSSLESS_COPY creation option
 * add support for reading lossless 8-bit JPEG if using libjpeg-turbo >= 2.2
 * change behavior to return an error and not just a warning with reading a
   truncated file
 * Internal libjpeg: decompressor: initialize Huffman tables to avoid issues
   with some FileGDB raster

JPEGXL driver:
 * add a ALPHA_DISTANCE creation option, e.g. to have lossless alpha and
   lossy RGB.
 * add a APPLY_ORIENTATION=YES open option to take into account EXIF_Orientation
 * advertise COMPRESSION_REVERSIBILITY=LOSSY when there is a JPEG reconstruction
   box
 * add a LOSSLESS_COPY creation option
 * implement creation from JPEGXL content
 * fix lossless copy of JPEG with zlib compressed mask band
 * implement GetCompressionFormats() and ReadCompressedData()

MEM driver:
 * implement GetCoordinateVariables() from coordinates attribute
 * Adds 'SPATIALREFERENCE' element to the DSN format (#7272)

MRF driver:
 * make it use PNG driver for decompression of 8-bit images

netCDF driver:
 * add a ASSUME_LONGLAT open option (#6195)
 * add heuristics to detect invalid validity range when scale_factor is
   present (#7167)
 * report geolocation array for NASA L2 ocean colour products (#7605)

NITF driver:
 * nitf_spec.xml: add definition for subheader of CSATTB, CEEPHB and CSSFAB DES
   of GLAS/GFM
 * add capability of decoding DES data part as XML fields and add descriptors
   for CSATTB, CEEPHB and CSSFAB DES
 * add VALIDATE and FAIL_IF_VALIDATION_ERROR open options
 * fix bug that prevents adding subsequent TREs after a HEX TRE (#6827)

OGCAPI driver:
 * define raster/vector scope of open options
 * Passed uri to TileMatrixSet::parse
 * Updated uris of well-known tile matrix sets

PCIDSK driver:
 * support Web Mercator projection (#7647)

PDF driver:
 * skip JP2ECW driver if ECW_ENCODE_KEY required but not found

PNG driver:
 * 1.7-2.0x speed-up in whole image decompression with libdeflate on Intel/AMD CPUs

RMF driver:
 * Add scale, name, frame support.
 * Add vert CS write support.
 * Implement GetSuggestedBlockAccessPattern

VRT driver:
 * add 'a_offset', 'a_scale', 'a_srs', 'a_ullr', 'expand', 'exponent', 'gcp',
  'if', 'ot', 'outsize', 'ovr', 'scale' options for vrt:// connection string
 * add BLOCKXSIZE and BLOCKYSIZE creation options
 * Fix excessive RAM usage when reading a VRT made of single-tiled JPEG2000
   files read with the JP2OpenJPEG driver
 * implement GetCompressionFormats() and ReadCompressedData()
 * derived band: add a <SkipNonContributingSources>true optional element
   to discard non contributing sources (#7223)
 * VRTPansharpened: avoid issue when querying overviews when PAN and MS bands
   have significant different spatial extent
 * serialize NODATA/NoDataValue elements with double precision (#7486)
 * fix warning regarding with OpenShared with vrt://http://example.com/test.jp2
   with the JP2OpenJPEG driver

WEBP driver:
 * implement GetCompressionFormats() and ReadCompressedData()

## OGR 3.7.0 - Overview of Changes

### Core

* Add OGRLayer::UpdateFeature() and OGR_L_UpdateFeature() (RFC 93).
  Implement it in Memory, GPKG, MongoDBv3, PG
* OGRFeatureDefn: add GetFields() and GetGeomFields() for easier C++ iteration
* OGRFieldDefn: add GetComment() / SetComment() methods
* OGRFeature/OGRGeometry: add a DumpReadable method that outputs to a string
* Add GDAL_DMD_ILLEGAL_FIELD_NAMES, and feel it for OpenFileGDB, FileGDB,
  PostgreSQL
* Add GDAL_DMD_RELATIONSHIP_RELATED_TABLE_TYPES: list of standard related table
  types recognized by the driver, and feel it for OpenFileGDB, FileGDB and GPKG
* Add GDAL_DMD_CREATION_FIELD_DEFN_FLAGS metadata
* Add DCAP_FEATURE_STYLES_READ and DCAP_FEATURE_STYLES_WRITE capabilities
* Add ALTER_ALTERNATIVE_NAME_FLAG for use changing a field's alternative name
  when calling OGR_L_AlterFieldDefn
* Add ALTER_COMMENT_FLAG for altering field comments via OGR_L_AlterFieldDefn
* Add OGRLayer::GetSupportedSRSList() and SetActiveSRS()
* OGRToOGCGeomType(): add options to control output
* GenSQL: fix SetAttributeFilter() when dialect=OGRSQL and not forwarding the
  initial where clause to the source layer (#7087)
* OGR SQL: do not emit error message when comparing a NULL datetime
* OGRFeature::SetField(string argument): for bool, recognize 0/false/off/no as
  false and 1/true/on/yes as true
* Add OGRFeature::GetFieldAsISO8601DateTime() (#7555)
* Geometry WKT import: accept nan as a value, for parity with PostGIS and GEOS
* GDALDataset::CopyLayer(): copy source layer metadata, unless the COPY_MD=NO
  option is specified
* Add OGRGeometry::UnaryUnion() / OGR_G_UnaryUnion()
* SQL SQLite parser: correctly take into account statements like
  'SELECT ... FROM json_each(...)' (#7464)
* Make OGRGeometry::getSpatialReference() return a const OGRSpatialReference*
* Make OGRGeomFieldDefn::GetSpatialRef() return a const OGRSpatialReference*

### OGRSpatialReference

* importFromWkt(): take into account COORDINATEMETADATA[] (PROJ >= 9.2)
* update hard-coded definition of OGC:CRS84 to include the ID
* OSR_Panorama: Add some spatial references (GSK 2011, etc.)
* OSR_Panorama: Fix TM zone for projections with negative central meridian
* OSR_Panorama: Fix import from invalid data
* SetFromUserInput(): skip leading white space (#7170)
* Make OGRCoordinateTransformation::GetSourceCS() and GetTargetCS() return a
  const OGRSpatialReference* (#7377)
* OSRImportFromEPSG(): emit warning message about deprecated CRS substitution
  (#7524)
* Allow CPLSetConfigOption('PROJ_DATA', ...) to work by making it call
  OSRSetPROJSearchPaths()

### Utilities

* ogrinfo: make it accessible through a new GDALVectorInfo() C API call
* ogrinfo: add a -json switch
* ogrinfo: output CRS supported list
* ogrinfo: output relationships
* ogr2ogr: use SetActiveSRS() when possible when -t_srs is used
* ogr2ogr: make conversion from GML2 to GPKG work without explicit -lco
  FID=some_name_different_than_fid
* ogr2ogr: add a -dateTimeTo option to convert datetime between timezones (#5256)
* ogr2ogr: Improve performance of -clipsrc and -clipdst (#7197)
* ogr2ogr: LoadGeometry(): use UnaryUnion()
* ogrmerge.py: add optimization for GPKG -> GPKG non-single layer case (up to
  10x faster)

### Vector drivers

Arrow driver:
 * add support for getting/setting field alternative name and comment in
   gdal:schema extension

CSV driver:
 * recognize pipe separator and .psv extension for read (#6811)
 * fix GetFeatureCount() to work correctly with spatial and attribute filters
 * allow reading single column file (#7595)

CSW driver:
 * Add 'title' as query-able property

FileGDB driver:
 * do not set Length/Precision from OGR width/precision for floating-point data
   types (#7283)
 * correct ObjectID field to have a Length of 4.

FlatGeobuf driver:
 * decrease memory usage when inserting lots of features
 * speed-up writing of DateTime/Date values
 * avoid crash when writing huge geometry
 * Support reading/writing field comments in field description metadata (#7598)

GML driver:
 * Use geometry in boundedBy element if there are no geometry properties
 * use srsDimension on top gml:Envelope as the default one (#6986)
 * GML geometry parsing: don't promote to 3D a 2D <gml:Box>