From e0beec4dfb6318b17ef43aacdcb3926f8deb6b57 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Tue, 26 May 2020 23:51:53 +0200 Subject: [PATCH] [Server, WCS] Fix several non compliance errors in CoverageDescription output There were several non-compliance in the CoverageDescription output to a DescribeCoverage request. The corrected result has been validated against the OGC WCS 1.0.0 schema. Fixes #36504 --- src/server/services/wcs/qgswcsutils.cpp | 23 ++++++++++++++----- .../qgis_server/wcs_describecoverage.txt | 16 ++++++++----- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/server/services/wcs/qgswcsutils.cpp b/src/server/services/wcs/qgswcsutils.cpp index a5faca6d8289..a2a243ea31b0 100644 --- a/src/server/services/wcs/qgswcsutils.cpp +++ b/src/server/services/wcs/qgswcsutils.cpp @@ -150,28 +150,29 @@ namespace QgsWcs QDomElement xAxisElem = doc.createElement( QStringLiteral( "gml:axisName" ) ); QDomText xAxisText = doc.createTextNode( QStringLiteral( "x" ) ); xAxisElem.appendChild( xAxisText ); - spatialDomainElem.appendChild( xAxisElem ); + rectGridElem.appendChild( xAxisElem ); QDomElement yAxisElem = doc.createElement( QStringLiteral( "gml:axisName" ) ); QDomText yAxisText = doc.createTextNode( QStringLiteral( "y" ) ); yAxisElem.appendChild( yAxisText ); - spatialDomainElem.appendChild( yAxisElem ); + rectGridElem.appendChild( yAxisElem ); QDomElement originElem = doc.createElement( QStringLiteral( "gml:origin" ) ); QDomElement originPosElem = doc.createElement( QStringLiteral( "gml:pos" ) ); + originElem.appendChild( originPosElem ); QDomText originPosText = doc.createTextNode( qgsDoubleToString( QgsServerProjectUtils::floorWithPrecision( layerBBox.xMinimum(), precision ), precision ) + " " + qgsDoubleToString( QgsServerProjectUtils::floorWithPrecision( layerBBox.yMinimum(), precision ), precision ) ); originPosElem.appendChild( originPosText ); - spatialDomainElem.appendChild( originElem ); + rectGridElem.appendChild( originElem ); QDomElement xOffsetElem = doc.createElement( QStringLiteral( "gml:offsetVector" ) ); QDomText xOffsetText = doc.createTextNode( QString::number( layer->rasterUnitsPerPixelX() ) + " 0" ); xOffsetElem.appendChild( xOffsetText ); - spatialDomainElem.appendChild( xOffsetElem ); + rectGridElem.appendChild( xOffsetElem ); QDomElement yOffsetElem = doc.createElement( QStringLiteral( "gml:offsetVector" ) ); QDomText yOffsetText = doc.createTextNode( "0 " + QString::number( layer->rasterUnitsPerPixelY() ) ); yOffsetElem.appendChild( yOffsetText ); - spatialDomainElem.appendChild( yOffsetElem ); + rectGridElem.appendChild( yOffsetElem ); //GML property containing one RangeSet GML object. QDomElement rangeSetElem = doc.createElement( QStringLiteral( "rangeSet" ) ); @@ -192,6 +193,11 @@ namespace QgsWcs rsNameElem.appendChild( rsNameText ); RangeSetElem.appendChild( rsNameElem ); + QDomElement rsLabelElem = doc.createElement( QStringLiteral( "label" ) ); + QDomText rsLabelText = doc.createTextNode( QStringLiteral( "Bands" ) ); + rsLabelElem.appendChild( rsLabelText ); + RangeSetElem.appendChild( rsLabelElem ); + QDomElement axisDescElem = doc.createElement( QStringLiteral( "axisDescription" ) ); RangeSetElem.appendChild( axisDescElem ); @@ -203,10 +209,15 @@ namespace QgsWcs adNameElem.appendChild( adNameText ); AxisDescElem.appendChild( adNameElem ); + QDomElement adLabelElem = doc.createElement( QStringLiteral( "label" ) ); + QDomText adLablelText = doc.createTextNode( QStringLiteral( "bands" ) ); + adLabelElem.appendChild( adLablelText ); + AxisDescElem.appendChild( adLabelElem ); + QDomElement adValuesElem = doc.createElement( QStringLiteral( "values" ) ); for ( int idx = 0; idx < layer->bandCount(); ++idx ) { - QDomElement adValueElem = doc.createElement( QStringLiteral( "value" ) ); + QDomElement adValueElem = doc.createElement( QStringLiteral( "singleValue" ) ); QDomText adValueText = doc.createTextNode( QString::number( idx + 1 ) ); adValueElem.appendChild( adValueText ); adValuesElem.appendChild( adValueElem ); diff --git a/tests/testdata/qgis_server/wcs_describecoverage.txt b/tests/testdata/qgis_server/wcs_describecoverage.txt index 38b10a83945a..40a164cb6617 100644 --- a/tests/testdata/qgis_server/wcs_describecoverage.txt +++ b/tests/testdata/qgis_server/wcs_describecoverage.txt @@ -22,22 +22,26 @@ Content-Type: text/xml; charset=utf-8 3600 3600 + x + y + + -30 29.999999 + + 0.00833333 0 + 0 0.00833333 - x - y - - 0.00833333 0 - 0 0.00833333 Bands + bands + - 1 + 1