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

st_read(..., drivers = "GMLAS") fails to read CityGML data #2371

Closed
dimfalk opened this issue Apr 1, 2024 · 14 comments · Fixed by OSGeo/gdal#9590
Closed

st_read(..., drivers = "GMLAS") fails to read CityGML data #2371

dimfalk opened this issue Apr 1, 2024 · 14 comments · Fixed by OSGeo/gdal#9590

Comments

@dimfalk
Copy link

dimfalk commented Apr 1, 2024

I was messing around with CityGML LoD1 data lately and was looking for a way to deal with this data using R. A blog post suggests using GDAL's GMLAS driver to read this data. Since GMLAS does not seem to be included in the GDAL distribution being shipped with sf on Windows - hope I got the dependencies right, verbally - I switched to Ubuntu 22.04 to check this out.

(By the way, any chance GMLAS will be available for sf on Windows sometime?)

Making use of GDAL directly seems to work since the file structure is being recognized:

ogrinfo --version
> GDAL 3.8.4, released 2024/02/08

# per default, GML is being used and detects only one layer
ogrinfo LoD1_32_280_5657_1_NW.gml 
> INFO: Open of `LoD1_32_280_5657_1_NW.gml'
>       using driver `GML' successful.
> Metadata:
>   NAME=LoD1_32_280_5657_1_NW
> 1: Building (3D PolyhedralSurface)

# enforcing GMLAS gets you 150 layers
ogrinfo GMLAS:LoD1_32_280_5657_1_NW.gml 
> INFO: Open of `GMLAS:LoD1_32_280_5657_1_NW.gml'
>      using driver `GMLAS' successful.
> 1: buildingpart (PolyhedralSurface, Multi Curve)
> 2: buildingpart_metadataproperty (None)
> 3: buildingpart_name (None)
> 4: building (PolyhedralSurface, Multi Curve)
> 5: building_metadataproperty (None)
> [...]

This part can be reproduced executing the commands from {sf}:

library(sf)
#> Linking to GEOS 3.12.1, GDAL 3.8.4, PROJ 9.3.0; sf_use_s2() is TRUE

# get some data
f <- "LoD1_32_280_5657_1_NW.gml"
utils::download.file(paste0("https://www.opengeodata.nrw.de/produkte/geobasis/3dg/lod1_gml/lod1_gml/", f),
                     f)

sf::gdal_utils(util = "ogrinfo", source = f)
#> INFO: Open of `LoD1_32_280_5657_1_NW.gml'
#>       using driver `GML' successful.
#> Metadata:
#>   NAME=LoD1_32_280_5657_1_NW
#> 1: Building (3D PolyhedralSurface)

sf::gdal_utils(util = "ogrinfo", source = paste0("GMLAS:", f))
#> INFO: Open of `GMLAS:LoD1_32_280_5657_1_NW.gml'
#>      using driver `GMLAS' successful.
#> 1: buildingpart (PolyhedralSurface, Multi Curve)
#> 2: buildingpart_metadataproperty (None)
#> 3: buildingpart_name (None)
#> 4: building (PolyhedralSurface, Multi Curve)
#> 5: building_metadataproperty (None)

Describe the bug
Trying to read this file using st_read(), the GMLAS driver does not seem to be supported.

To Reproduce

# GML is used per default, like above; seems to work, but only recognizes one layer
sf::st_read(f)
#> Reading layer `Building' from data source `/root/LoD1_32_280_5657_1_NW.gml' using driver `GML'
#> Simple feature collection with 81 features and 22 fields
#> Geometry type: POLYHEDRALSURFACE
#> Dimension:     XYZ
#> Bounding box:  xmin: 280851.8 ymin: 5657120 xmax: 281004.9 ymax: 5657728
#> z_range:       zmin: 35.74 zmax: 47.632
#> Projected CRS: ETRS89 / UTM zone 32N

# enforcing GMLAS, reading fails
sf::st_read(f, drivers = "GMLAS")
#> options:        GMLAS 
#> Error: Cannot open "/root/LoD1_32_280_5657_1_NW.gml"; The source could be corrupt or not supported. See `st_drivers()` for a list of supported formats.

# the driver should be supported, as far as I understand
"GMLAS" %in% sf::st_drivers()$name
#> TRUE
R version 4.1.2 (2021-11-01) Platform: x86_64-pc-linux-gnu (64-bit) Running under: Ubuntu 22.04.4 LTS
@edzer
Copy link
Member

edzer commented Apr 1, 2024

@rouault looking at the problem above, I get a segfault in GetFeatureCount with this minimal C program:

#include <stdio.h>
#include <ogrsf_frmts.h>

int main() {
	OGRRegisterAll();
	auto poDS = (GDALDataset *) GDALOpenEx("GMLAS:LoD1_32_280_5657_1_NW.gml", GDAL_OF_VECTOR | GDAL_OF_READONLY,
        NULL, NULL, NULL );
	if (poDS == NULL) {
		printf("cannot open file\n");
		return 0;
	}
	auto poLayer =   poDS->GetLayerByName("address1");
	if (poLayer == NULL) {
		printf("cannot open layer\n");
		return 0;
	}
	size_t n = poLayer->GetFeatureCount();
	printf("size: %ld\n", n);
	return 0;
}

The file is found here. Is this a logic problem on my side, or a problem on GDAL's side?

@rouault
Copy link
Contributor

rouault commented Apr 1, 2024

or a problem on GDAL's side?

Yes, a bug in the OGR GMLAS driver. Fix in OSGeo/gdal#9590.
A workaround is to call poLayer->GetLayerDefn() before GetFeatureCount()

rouault added a commit to OSGeo/gdal that referenced this issue Apr 1, 2024
GMLAS: fix crash when reading CityGML files (fixes r-spatial/sf#2371)
@edzer edzer closed this as completed in 43aec36 Apr 1, 2024
@edzer
Copy link
Member

edzer commented Apr 1, 2024

Great, thanks!

@dimfalk
Copy link
Author

dimfalk commented Apr 1, 2024

Thank you very much!

@edzer Allow me this concluding beginner question since I'm not aware of the general workflow here:

When can we roughly expect the release of a new GDAL version that includes this bug fix (just out of curiousity)? And is it generally expected that the GMLAS driver will sometime be included in GDAL, which is used by sf on Windows?

@rouault
Copy link
Contributor

rouault commented Apr 1, 2024

@dimfalk you're lucky. This was the last fix to be in the queue for the imminent GDAL 3.8.5 release

@dimfalk
Copy link
Author

dimfalk commented Apr 2, 2024

@rouault Hooray, lucky me! Thanks!

@edzer
Copy link
Member

edzer commented Apr 2, 2024

@dimfalk I implemented the workaround hinted to by @rouault in 43aec36 so things should now work when you install sf directly from github (or r-universe).

@dimfalk
Copy link
Author

dimfalk commented Apr 2, 2024

@edzer Yeah, I noticed that - will give it a try, thanks again! I was just curious how fast dependencies are updated in general, just to get an idea about lifecycle management. Not crucial regarding this issue. But what about GMLAS for GDAL on Windows? 😏

@dimfalk
Copy link
Author

dimfalk commented Apr 3, 2024

Just tried to repeat the steps described above using sf 1.0.17, but still failing, unfortunately. Am I missing something?

devtools::install_github("r-spatial/sf")

packageVersion("sf")
#> [1] '1.0.17'

library(sf)
#> Linking to GEOS 3.12.1, GDAL 3.8.4, PROJ 9.3.1; sf_use_s2() is TRUE

sf::st_read(f, drivers = "GMLAS")
#> options:        GMLAS 
#> Error: Cannot open "/root/LoD1_32_280_5657_1_NW.gml"; The source could be corrupt or not supported. See `st_drivers()` for a list of supported formats.

@edzer
Copy link
Member

edzer commented Apr 3, 2024

Looks like you have to prepend GMLAS: to the file name.

@dimfalk
Copy link
Author

dimfalk commented Apr 3, 2024

Oh, I assumed this is done underneath making use of drivers = "GMLAS". Thanks!

@StefanCiesilski
Copy link

@dimfalk Thanks for testing with CityGML LoD1. I saw the same blog post but didn't get any further. Have you already tried it with CityGML LoD2 data, too?

@dimfalk
Copy link
Author

dimfalk commented Apr 5, 2024

@StefanCiesilski: Not yet, sorry!

@StefanCiesilski
Copy link

@dimfalk OK!

clrpackages pushed a commit to clearlinux-pkgs/gdal that referenced this issue Apr 9, 2024
Alessandro Pasotti (1):
      Overview/RasterIO resampling: fix infinite looping when nodata has a big absolute value (#9428)

Daniel Baston (2):
      VRTDerivedRasterBand: Support Int8, (U)Int64 with Python pixel functions
      SWIG: Fix gdal.Warp segfault with dst=None

Even Rouault (53):
      gdalwarp: cutline zero-width sliver enhancement: avoid producing invalid polygons
      JP2OpenJPEG: CreateCopy(): limit number of resolutions taking into account minimum block width/height (fixes #9236)
      Python bindings: gdal.Translate()/gdal.Warp()/etc.: make sure not to modify provided options[] array (fixes #9259)
      CI: try to fix issue with Windows Conda builds
      gdal2tiles.py: fix exception when -v flag is used and overview tiles are generated (3.7.0 regression) (fixes #9272)
      PMTiles: fix 'Non increasing tile_id' error when opening some files (fixes #9288)
      ODS: declare OLCStringsAsUTF8 on newly created layers
      XLSX: declare OLCStringsAsUTF8 on newly created layers
      Make sure our vendored flatbuffers copy has a unique namespace
      VRT/gdal_translate -of 200% 200%: make sure that the synthetized virtual overviews match the dimension of the source ones when possible
      [Backport release/3.8] Pansharpening: fix error messages on consistency checks (#9363)
      VRTPansharpenedDataset: allow to specify <OpenOptions> for <PanchroBand> and <SpectralBand>
      gdalinfo -json: fix wrong axis order in STAC proj:shape member (fixes #9337)
      gdalinfo_output.schema.json: add comment about size and proj:shape ordering
      ILI2: emit an error and not just a warning when creating a dataset without a model file
      Fix false-positive -Wformat-truncation with clang 18 on fedora:rawhide CI
      ERS: avoid 'Attempt at recursively opening ERS dataset' when the .ers file references a .ecw (fixes #9352)
      OGRGeometry::getCurveGeometry(): avoid failures when building some compound curves with infered circular strings (fixes #9382)
      OpenFileGDB writer: fix corrupted maximum blob size header field in some SetFeature() scenarios (fixes #9388)
      QuietDeleteForCreateCopy(): forward source dataset open options (#9424)
      gdalinfo -json/gdal.Info(format='json'): avoid error/exception on engineering CRS (fixes #9396)
      requirements.txt: add pin for importlib-resources to avoid issue with pytest with jsonschema
      OGRLayer::GetArrowSchema(): remove potential unaligned int32_t writes
      OpenFileGDB: avoid issue with -fno-sanitize-recover=unsigned-integer-overflow with recent clang
      OGCAPI: fix potential use-after-free
      docker/ubuntu-full/Dockerfile: update ARROW_VERSION to 15.0.1-1 [ci skip]
      Internal shapelib: SBNOpenDiskTree(): make it work with node descriptors with non-increasing nBinStart
      sbnsearch.c: avoid potential integer overflow on corrupted bin size
      sbnsearch.c: avoid potential integer overflow on corrupted nNodeDescSize
      CI: force ASAN to run on 20.04
      cpl_vsil_unix_stdio_64.cpp: avoid compiler warning about calling ftello() on nullptr
      Fix FindGEOS to remove use of deprecated exec_program()
      ogr_geojson.py: avoid test failure with GEOS 3.8.0
      Fix compiler crash on gcore/overview.cpp with ICC 2024.0.2.29 (fixes #9508)
      GRIB: avoid floating-point issues with ICC 2024.0.2.29 (refs #9508)
      GPKG: avoid invalide use of pointer aliasing that caused ICC 2024.0.2.29 to generate invalid code (refs #9508)
      eedai.py: make it robust to exceptions
      vrtpansharpen.py: update expected checksums with ICC 2024.0.2.29
      transformer.py: avoid test failure with ICC 2024.0.2.29 (refs #9508)
      test_gdal_pansharpen.py: update expected checksums with ICC 2024.0.2.29
      CMake: fix NumPy detection when Intel MKL library is installed
      CMake: add modern Apple OS (visionOS|tvOS|watchOS) support (#9558)
      gdalattachpct.py: fix it when output file is a VRT (fixes #9513)
      Minimal support for TileDB 2.21 to avoid build & test issues
      GTiff: fix read error/use-after-free when reading COGs with mask from network storage (fixes #9563)
      /vsiaz/: handle properly BlobEndpoint ending with a slash (fixes #9519)
      FlatGeoBuf: implement OGRLayer::GetDataset() (refs #9568)
      CreateFieldFromArrowSchema(): don't propagate native subtype if we have to use a fallback main type
      Parquet: avoid potential assertion/out-of-bounds access when a subset of row groups is selected
      Arrow/Parquet: fix inverted logic regarding spatial filtering of multipolygon with GeoArrow interleaved encoding
      GMLAS: fix crash when reading CityGML files (fixes r-spatial/sf#2371)
      typo fixes
      Prepare for GDAL 3.8.5

Kai Pastor (1):
      Disable my_test_sqlite3_ext in static builds

Nyall Dawson (3):
      [openfilegdb] Correctly use "features" as related table type
      [gpkg] Ensure that mapping tables are inserted into gpkg_contents
      [gpkg] Ensure that tables present in gpkgext_relations can be read

Thomas Bonfort (1):
      DIMAP: add radiometric metadata
clrpackages pushed a commit to clearlinux-pkgs/gdal that referenced this issue Jul 10, 2024
Alessandro Pasotti (3):
      SubdatasetInfo API: fix protocol and bogus
      SubdatasetInfo: better check for drive letters for netCDF/HDF4/HDF5 (#8891) (fixes #8881)
      Overview/RasterIO resampling: fix infinite looping when nodata has a big absolute value (#9428)

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

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

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

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

Kai Pastor (1):
      Disable my_test_sqlite3_ext in static builds

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

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

Patrik Sylve (1):
      PAM only unset GPF_DIRTY flag

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

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

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

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

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

barracuda156 (1):
      sqlite_rtree_bulk_load.c: define __STDC_FORMAT_MACROS to unbreak build on platforms which need it
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants