diff --git a/src/server/services/wfs/qgswfsgetcapabilities.cpp b/src/server/services/wfs/qgswfsgetcapabilities.cpp
index 26485073f484..26dba9c99d44 100644
--- a/src/server/services/wfs/qgswfsgetcapabilities.cpp
+++ b/src/server/services/wfs/qgswfsgetcapabilities.cpp
@@ -582,7 +582,7 @@ namespace QgsWfs
//transform the layers native CRS into WGS84
const QgsCoordinateReferenceSystem wgs84 = QgsCoordinateReferenceSystem::fromOgcWmsCrs( geoEpsgCrsAuthId() );
const int wgs84precision = 6;
- QgsRectangle wgs84BoundingRect;
+ QgsRectangle wgs84BoundingRect( 0, 0, 0, 0 );
if ( !layerExtent.isNull() )
{
const QgsCoordinateTransform exGeoTransform( layer->crs(), wgs84, project );
@@ -592,7 +592,7 @@ namespace QgsWfs
}
catch ( const QgsCsException & )
{
- wgs84BoundingRect = QgsRectangle();
+ wgs84BoundingRect = QgsRectangle( 0, 0, 0, 0 );
}
}
diff --git a/tests/src/python/test_qgsserver_wfs.py b/tests/src/python/test_qgsserver_wfs.py
index e728aac36147..e632e5912f22 100644
--- a/tests/src/python/test_qgsserver_wfs.py
+++ b/tests/src/python/test_qgsserver_wfs.py
@@ -236,6 +236,28 @@ def test_wfs_getcapabilities_100_url(self):
self.assertEqual(
"onlineResource=\"my_wfs_advertised_url\"" in item, True)
+ def test_wfs_getcapabilities_110_no_data(self):
+ """Check that GetCapabilities response is correct if a layer
+ does not contain data"""
+
+ project = self.testdata_path + "test_wfs_no_data.qgs"
+ self.assertTrue(os.path.exists(project), "Project file not found: " + project)
+
+ query_string = "?" + "&".join(["%s=%s" % i for i in list({
+ "MAP": urllib.parse.quote(project),
+ "SERVICE": "WFS",
+ "VERSION": "1.1.0",
+ "REQUEST": "GetCapabilities"
+ }.items())])
+
+ header, body = self._execute_request(query_string)
+
+ self.result_compare(
+ "wfs_getCapabilities_1_1_0_no_data.txt",
+ f"request {query_string} failed.\n Query: GetCapabilities",
+ header, body
+ )
+
def result_compare(self, file_name, error_msg_header, header, body):
self.assert_headers(header, body)
diff --git a/tests/testdata/qgis_server/test_wfs_no_data.gpkg b/tests/testdata/qgis_server/test_wfs_no_data.gpkg
new file mode 100644
index 000000000000..5ff89aa18478
Binary files /dev/null and b/tests/testdata/qgis_server/test_wfs_no_data.gpkg differ
diff --git a/tests/testdata/qgis_server/test_wfs_no_data.qgs b/tests/testdata/qgis_server/test_wfs_no_data.qgs
new file mode 100644
index 000000000000..57f4c49c9321
--- /dev/null
+++ b/tests/testdata/qgis_server/test_wfs_no_data.qgs
@@ -0,0 +1,678 @@
+
+
+
+
+
+
+
+
+ GEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],CS[ellipsoidal,2],AXIS["geodetic latitude (Lat)",north,ORDER[1],ANGLEUNIT["degree",0.0174532925199433]],AXIS["geodetic longitude (Lon)",east,ORDER[2],ANGLEUNIT["degree",0.0174532925199433]],USAGE[SCOPE["Horizontal component of 3D system."],AREA["World."],BBOX[-90,-180,90,180]],ID["EPSG",4326]]
+ +proj=longlat +datum=WGS84 +no_defs
+ 3452
+ 4326
+ EPSG:4326
+ WGS 84
+ longlat
+ EPSG:7030
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+ - test_wfs_no_data_a1e298c7_7c28_43f3_9fc9_6be3461ad064
+
+
+
+
+
+
+
+
+
+
+ degrees
+
+ -2.35425938109626198
+ -1.94592800723966652
+ 2.31988234115373704
+ 1.3040980220103342
+
+ 0
+
+
+ GEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],CS[ellipsoidal,2],AXIS["geodetic latitude (Lat)",north,ORDER[1],ANGLEUNIT["degree",0.0174532925199433]],AXIS["geodetic longitude (Lon)",east,ORDER[2],ANGLEUNIT["degree",0.0174532925199433]],USAGE[SCOPE["Horizontal component of 3D system."],AREA["World."],BBOX[-90,-180,90,180]],ID["EPSG",4326]]
+ +proj=longlat +datum=WGS84 +no_defs
+ 3452
+ 4326
+ EPSG:4326
+ WGS 84
+ longlat
+ EPSG:7030
+ true
+
+
+ 0
+
+
+
+
+
+
+ Annotations_7c0a9ed4_6510_4bbe_8b94_b924f766cd96
+
+
+
+
+ Annotations
+
+
+ GEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],CS[ellipsoidal,2],AXIS["geodetic latitude (Lat)",north,ORDER[1],ANGLEUNIT["degree",0.0174532925199433]],AXIS["geodetic longitude (Lon)",east,ORDER[2],ANGLEUNIT["degree",0.0174532925199433]],USAGE[SCOPE["Horizontal component of 3D system."],AREA["World."],BBOX[-90,-180,90,180]],ID["EPSG",4326]]
+ +proj=longlat +datum=WGS84 +no_defs
+ 3452
+ 4326
+ EPSG:4326
+ WGS 84
+ longlat
+ EPSG:7030
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+
+
+
+
+ false
+
+
+
+
+
+
+ 1
+ 1
+ 1
+ 0
+
+
+
+
+ 1
+ 0
+
+
+
+
+ test_wfs_no_data_a1e298c7_7c28_43f3_9fc9_6be3461ad064
+ ./test_wfs_no_data.gpkg|layername=test_wfs_no_data
+
+
+
+ test_wfs_no_data
+
+
+ GEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],CS[ellipsoidal,2],AXIS["geodetic latitude (Lat)",north,ORDER[1],ANGLEUNIT["degree",0.0174532925199433]],AXIS["geodetic longitude (Lon)",east,ORDER[2],ANGLEUNIT["degree",0.0174532925199433]],USAGE[SCOPE["Horizontal component of 3D system."],AREA["World."],BBOX[-90,-180,90,180]],ID["EPSG",4326]]
+ +proj=longlat +datum=WGS84 +no_defs
+ 3452
+ 4326
+ EPSG:4326
+ WGS 84
+ longlat
+ EPSG:7030
+ true
+
+
+
+
+
+
+ dataset
+
+
+
+
+
+
+
+
+ GEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],CS[ellipsoidal,2],AXIS["geodetic latitude (Lat)",north,ORDER[1],ANGLEUNIT["degree",0.0174532925199433]],AXIS["geodetic longitude (Lon)",east,ORDER[2],ANGLEUNIT["degree",0.0174532925199433]],USAGE[SCOPE["Horizontal component of 3D system."],AREA["World."],BBOX[-90,-180,90,180]],ID["EPSG",4326]]
+ +proj=longlat +datum=WGS84 +no_defs
+ 3452
+ 4326
+ EPSG:4326
+ WGS 84
+ longlat
+ EPSG:7030
+ true
+
+
+
+
+ ogr
+
+
+
+
+
+
+
+
+
+
+ 1
+ 1
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+ 0
+ generatedlayout
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+ 255
+ 255
+ 255
+ 255
+ 0
+ 255
+ 255
+
+
+
+
+
+
+ EPSG:7030
+
+
+ m2
+ meters
+
+
+ 5
+ 2.5
+ false
+ false
+ false
+ 1
+ 0
+ false
+ false
+ true
+ 0
+ 255,0,0,255,rgb:1,0,0,1
+
+
+ false
+
+
+ true
+ 2
+
+ false
+
+ 1
+
+
+
+
+ test_wfs_no_data_a1e298c7_7c28_43f3_9fc9_6be3461ad064
+
+
+ 8
+
+
+
+
+
+
+
+ None
+ false
+ false
+
+
+
+
+
+ 1
+ false
+ conditions unknown
+ 90
+
+
+
+ 1
+
+ 8
+
+ false
+
+ false
+
+ false
+ 0
+
+ false
+
+
+
+
+
+
+
+ false
+
+
+
+
+ false
+
+ 5000
+
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Jean Felder
+ 2024-01-23T17:41:59
+
+
+
+
+
+
+
+
+
+
+ GEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],CS[ellipsoidal,2],AXIS["geodetic latitude (Lat)",north,ORDER[1],ANGLEUNIT["degree",0.0174532925199433]],AXIS["geodetic longitude (Lon)",east,ORDER[2],ANGLEUNIT["degree",0.0174532925199433]],USAGE[SCOPE["Horizontal component of 3D system."],AREA["World."],BBOX[-90,-180,90,180]],ID["EPSG",4326]]
+ +proj=longlat +datum=WGS84 +no_defs
+ 3452
+ 4326
+ EPSG:4326
+ WGS 84
+ longlat
+ EPSG:7030
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ GEOGCRS["WGS 84",ENSEMBLE["World Geodetic System 1984 ensemble",MEMBER["World Geodetic System 1984 (Transit)"],MEMBER["World Geodetic System 1984 (G730)"],MEMBER["World Geodetic System 1984 (G873)"],MEMBER["World Geodetic System 1984 (G1150)"],MEMBER["World Geodetic System 1984 (G1674)"],MEMBER["World Geodetic System 1984 (G1762)"],MEMBER["World Geodetic System 1984 (G2139)"],ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]],ENSEMBLEACCURACY[2.0]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],CS[ellipsoidal,2],AXIS["geodetic latitude (Lat)",north,ORDER[1],ANGLEUNIT["degree",0.0174532925199433]],AXIS["geodetic longitude (Lon)",east,ORDER[2],ANGLEUNIT["degree",0.0174532925199433]],USAGE[SCOPE["Horizontal component of 3D system."],AREA["World."],BBOX[-90,-180,90,180]],ID["EPSG",4326]]
+ +proj=longlat +datum=WGS84 +no_defs
+ 3452
+ 4326
+ EPSG:4326
+ WGS 84
+ longlat
+ EPSG:7030
+ true
+
+
+
+
+
+
+
diff --git a/tests/testdata/qgis_server/wfs_getCapabilities_1_1_0_no_data.txt b/tests/testdata/qgis_server/wfs_getCapabilities_1_1_0_no_data.txt
new file mode 100644
index 000000000000..130471b1cd52
--- /dev/null
+++ b/tests/testdata/qgis_server/wfs_getCapabilities_1_1_0_no_data.txt
@@ -0,0 +1,130 @@
+Content-Length: 5652
+Content-Type: text/xml; charset=utf-8
+
+
+
+ Untitled
+ WFS
+ 1.1.0
+ conditions unknown
+ None
+
+
+
+
+
+
+
+
+
+
+
+ WFS
+
+
+ 1.1.0
+ 1.0.0
+
+
+ text/xml
+
+
+
+
+
+
+
+
+
+
+ XMLSCHEMA
+ text/xml; subtype=gml/2.1.2
+ text/xml; subtype=gml/3.1.1
+
+
+
+
+
+
+
+
+
+
+ text/xml; subtype=gml/2.1.2
+ text/xml; subtype=gml/3.1.1
+ application/vnd.geo+json
+
+
+ results
+ hits
+
+
+
+
+
+
+
+
+
+
+ text/xml; subtype=gml/2.1.2
+ text/xml; subtype=gml/3.1.1
+ application/vnd.geo+json
+
+
+
+
+
+ Query
+
+
+ test_wfs_no_data
+ test_wfs_no_data
+ EPSG:4326
+ EPSG:3857
+
+ Query
+
+
+ 0 0
+ 0 0
+
+
+
+
+
+
+ gml:Point
+ gml:LineString
+ gml:Polygon
+ gml:Envelope
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LessThan
+ GreaterThan
+ LessThanEqualTo
+ GreaterThanEqualTo
+ EqualTo
+ Like
+ Between
+
+
+
+
+
+
+