32     return QStringLiteral( 
"1.0.0" );
 
   37     QDomElement layerElem;
 
   39       layerElem = doc.createElement( QStringLiteral( 
"CoverageOfferingBrief" ) );
 
   41       layerElem = doc.createElement( QStringLiteral( 
"CoverageOffering" ) );
 
   44     QDomElement nameElem = doc.createElement( QStringLiteral( 
"name" ) );
 
   45     QString name = layer->
name();
 
   48     name = name.replace( 
' ', 
'_' );
 
   49     QDomText nameText = doc.createTextNode( name );
 
   50     nameElem.appendChild( nameText );
 
   51     layerElem.appendChild( nameElem );
 
   54     QDomElement labelElem = doc.createElement( QStringLiteral( 
"label" ) );
 
   55     QString title = layer->
title();
 
   56     if ( title.isEmpty() )
 
   58       title = layer->
name();
 
   60     QDomText labelText = doc.createTextNode( title );
 
   61     labelElem.appendChild( labelText );
 
   62     layerElem.appendChild( labelElem );
 
   65     QString 
abstract = layer->
abstract();
 
   66     if ( !
abstract.isEmpty() )
 
   68       QDomElement descriptionElem = doc.createElement( QStringLiteral( 
"description" ) );
 
   69       QDomText descriptionText = doc.createTextNode( 
abstract );
 
   70       descriptionElem.appendChild( descriptionText );
 
   71       layerElem.appendChild( descriptionElem );
 
   77     int wgs84precision = 6;
 
   87       QgsDebugMsg( QStringLiteral( 
"Transform error caught: %1. Using original layer extent." ).arg( e.
what() ) );
 
   90     QDomElement lonLatElem = doc.createElement( QStringLiteral( 
"lonLatEnvelope" ) );
 
   91     lonLatElem.setAttribute( QStringLiteral( 
"srsName" ), QStringLiteral( 
"urn:ogc:def:crs:OGC:1.3:CRS84" ) );
 
   92     QDomElement lowerPosElem = doc.createElement( QStringLiteral( 
"gml:pos" ) );
 
   94     lowerPosElem.appendChild( lowerPosText );
 
   95     lonLatElem.appendChild( lowerPosElem );
 
   96     QDomElement upperPosElem = doc.createElement( QStringLiteral( 
"gml:pos" ) );
 
   98     upperPosElem.appendChild( upperPosText );
 
   99     lonLatElem.appendChild( upperPosElem );
 
  100     layerElem.appendChild( lonLatElem );
 
  108     QDomElement domainSetElem = doc.createElement( QStringLiteral( 
"domainSet" ) );
 
  109     layerElem.appendChild( domainSetElem );
 
  111     QDomElement spatialDomainElem = doc.createElement( QStringLiteral( 
"spatialDomain" ) );
 
  112     domainSetElem.appendChild( spatialDomainElem );
 
  122     QDomElement envelopeElem = doc.createElement( QStringLiteral( 
"gml:Envelope" ) );
 
  123     envelopeElem.setAttribute( QStringLiteral( 
"srsName" ), layerCrs.
authid() );
 
  124     QDomElement lowerCornerElem = doc.createElement( QStringLiteral( 
"gml:pos" ) );
 
  126     lowerCornerElem.appendChild( lowerCornerText );
 
  127     envelopeElem.appendChild( lowerCornerElem );
 
  128     QDomElement upperCornerElem = doc.createElement( QStringLiteral( 
"gml:pos" ) );
 
  130     upperCornerElem.appendChild( upperCornerText );
 
  131     envelopeElem.appendChild( upperCornerElem );
 
  132     spatialDomainElem.appendChild( envelopeElem );
 
  134     QDomElement rectGridElem = doc.createElement( QStringLiteral( 
"gml:RectifiedGrid" ) );
 
  135     rectGridElem.setAttribute( QStringLiteral( 
"dimension" ), 2 );
 
  136     QDomElement limitsElem = doc.createElement( QStringLiteral( 
"gml:limits" ) );
 
  137     rectGridElem.appendChild( limitsElem );
 
  138     QDomElement gridEnvElem = doc.createElement( QStringLiteral( 
"gml:GridEnvelope" ) );
 
  139     limitsElem.appendChild( gridEnvElem );
 
  140     QDomElement lowElem = doc.createElement( QStringLiteral( 
"gml:low" ) );
 
  141     QDomText lowText = doc.createTextNode( QStringLiteral( 
"0 0" ) );
 
  142     lowElem.appendChild( lowText );
 
  143     gridEnvElem.appendChild( lowElem );
 
  144     QDomElement highElem = doc.createElement( QStringLiteral( 
"gml:high" ) );
 
  145     QDomText highText = doc.createTextNode( QString::number( layer->
width() ) + 
" " + QString::number( layer->
height() ) );
 
  146     highElem.appendChild( highText );
 
  147     gridEnvElem.appendChild( highElem );
 
  148     spatialDomainElem.appendChild( rectGridElem );
 
  150     QDomElement xAxisElem = doc.createElement( QStringLiteral( 
"gml:axisName" ) );
 
  151     QDomText xAxisText = doc.createTextNode( QStringLiteral( 
"x" ) );
 
  152     xAxisElem.appendChild( xAxisText );
 
  153     rectGridElem.appendChild( xAxisElem );
 
  155     QDomElement yAxisElem = doc.createElement( QStringLiteral( 
"gml:axisName" ) );
 
  156     QDomText yAxisText = doc.createTextNode( QStringLiteral( 
"y" ) );
 
  157     yAxisElem.appendChild( yAxisText );
 
  158     rectGridElem.appendChild( yAxisElem );
 
  160     QDomElement originElem = doc.createElement( QStringLiteral( 
"gml:origin" ) );
 
  161     QDomElement originPosElem = doc.createElement( QStringLiteral( 
"gml:pos" ) );
 
  162     originElem.appendChild( originPosElem );
 
  164     originPosElem.appendChild( originPosText );
 
  165     rectGridElem.appendChild( originElem );
 
  167     QDomElement xOffsetElem = doc.createElement( QStringLiteral( 
"gml:offsetVector" ) );
 
  168     QDomText xOffsetText = doc.createTextNode( QString::number( layer->
rasterUnitsPerPixelX() ) + 
" 0" );
 
  169     xOffsetElem.appendChild( xOffsetText );
 
  170     rectGridElem.appendChild( xOffsetElem );
 
  172     QDomElement yOffsetElem = doc.createElement( QStringLiteral( 
"gml:offsetVector" ) );
 
  173     QDomText yOffsetText = doc.createTextNode( 
"0 " + QString::number( layer->
rasterUnitsPerPixelY() ) );
 
  174     yOffsetElem.appendChild( yOffsetText );
 
  175     rectGridElem.appendChild( yOffsetElem );
 
  178     QDomElement rangeSetElem = doc.createElement( QStringLiteral( 
"rangeSet" ) );
 
  179     layerElem.appendChild( rangeSetElem );
 
  188     QDomElement RangeSetElem = doc.createElement( QStringLiteral( 
"RangeSet" ) );
 
  189     rangeSetElem.appendChild( RangeSetElem );
 
  191     QDomElement rsNameElem = doc.createElement( QStringLiteral( 
"name" ) );
 
  192     QDomText rsNameText = doc.createTextNode( QStringLiteral( 
"Bands" ) );
 
  193     rsNameElem.appendChild( rsNameText );
 
  194     RangeSetElem.appendChild( rsNameElem );
 
  196     QDomElement rsLabelElem = doc.createElement( QStringLiteral( 
"label" ) );
 
  197     QDomText rsLabelText = doc.createTextNode( QStringLiteral( 
"Bands" ) );
 
  198     rsLabelElem.appendChild( rsLabelText );
 
  199     RangeSetElem.appendChild( rsLabelElem );
 
  201     QDomElement axisDescElem = doc.createElement( QStringLiteral( 
"axisDescription" ) );
 
  202     RangeSetElem.appendChild( axisDescElem );
 
  204     QDomElement AxisDescElem = doc.createElement( QStringLiteral( 
"AxisDescription" ) );
 
  205     axisDescElem.appendChild( AxisDescElem );
 
  207     QDomElement adNameElem = doc.createElement( QStringLiteral( 
"name" ) );
 
  208     QDomText adNameText = doc.createTextNode( QStringLiteral( 
"bands" ) );
 
  209     adNameElem.appendChild( adNameText );
 
  210     AxisDescElem.appendChild( adNameElem );
 
  212     QDomElement adLabelElem = doc.createElement( QStringLiteral( 
"label" ) );
 
  213     QDomText adLablelText = doc.createTextNode( QStringLiteral( 
"bands" ) );
 
  214     adLabelElem.appendChild( adLablelText );
 
  215     AxisDescElem.appendChild( adLabelElem );
 
  217     QDomElement adValuesElem = doc.createElement( QStringLiteral( 
"values" ) );
 
  218     for ( 
int idx = 0; idx < layer->
bandCount(); ++idx )
 
  220       QDomElement adValueElem = doc.createElement( QStringLiteral( 
"singleValue" ) );
 
  221       QDomText adValueText = doc.createTextNode( QString::number( idx + 1 ) );
 
  222       adValueElem.appendChild( adValueText );
 
  223       adValuesElem.appendChild( adValueElem );
 
  225     AxisDescElem.appendChild( adValuesElem );
 
  229     QDomElement sCRSElem = doc.createElement( QStringLiteral( 
"supportedCRSs" ) );
 
  230     QDomElement rCRSElem = doc.createElement( QStringLiteral( 
"requestResponseCRSs" ) );
 
  231     QDomText rCRSText = doc.createTextNode( layerCrs.
authid() );
 
  232     rCRSElem.appendChild( rCRSText );
 
  233     sCRSElem.appendChild( rCRSElem );
 
  234     QDomElement nCRSElem = doc.createElement( QStringLiteral( 
"nativeCRSs" ) );
 
  235     QDomText nCRSText = doc.createTextNode( layerCrs.
authid() );
 
  236     nCRSElem.appendChild( nCRSText );
 
  237     sCRSElem.appendChild( nCRSElem );
 
  238     layerElem.appendChild( sCRSElem );
 
  242     QDomElement sFormatsElem = doc.createElement( QStringLiteral( 
"supportedFormats" ) );
 
  243     sFormatsElem.setAttribute( QStringLiteral( 
"nativeFormat" ), QStringLiteral( 
"raw binary" ) );
 
  244     QDomElement formatsElem = doc.createElement( QStringLiteral( 
"formats" ) );
 
  245     QDomText formatsText = doc.createTextNode( QStringLiteral( 
"GeoTIFF" ) );
 
  246     formatsElem.appendChild( formatsText );
 
  247     sFormatsElem.appendChild( formatsElem );
 
  248     layerElem.appendChild( sFormatsElem );
 
  256     static QSet< QString > sFilter
 
  258       QStringLiteral( 
"REQUEST" ),
 
  259       QStringLiteral( 
"VERSION" ),
 
  260       QStringLiteral( 
"SERVICE" ),
 
  261       QStringLiteral( 
"_DC" )
 
  267     if ( href.isEmpty() )
 
  272       for ( 
auto param : q.queryItems() )
 
  274         if ( sFilter.contains( param.first.toUpper() ) )
 
  275           q.removeAllQueryItems( param.first );
 
  279       href = url.toString();
 
  288     QStringList lst = bboxStr.split( 
',' );
 
  289     if ( lst.count() != 4 )
 
  294     for ( 
int i = 0; i < 4; i++ )
 
  296       lst[i].replace( 
' ', 
'+' );
 
  297       d[i] = lst[i].toDouble( &ok );
 
This class represents a coordinate reference system (CRS).
static QgsCoordinateReferenceSystem fromOgcWmsCrs(const QString &ogcCrs)
Creates a CRS from a given OGC WMS-format Coordinate Reference System string.
QString authid() const
Returns the authority identifier for the CRS.
Custom exception class for Coordinate Reference System related exceptions.
virtual QgsRectangle extent() const
Returns the extent of the layer.
QgsCoordinateReferenceSystem crs
QString abstract() const
Returns the abstract of the layer used by QGIS Server in GetCapabilities request.
QString shortName() const
Returns the short name of the layer used by QGIS Server to identify the layer.
QString title() const
Returns the title of the layer used by QGIS Server in GetCapabilities request.
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
static QgsProject * instance()
Returns the QgsProject singleton instance.
Represents a raster layer.
int height() const
Returns the height of the (unclipped) raster.
int bandCount() const
Returns the number of bands in this layer.
double rasterUnitsPerPixelX() const
Returns the number of raster units per each raster pixel in X axis.
double rasterUnitsPerPixelY() const
Returns the number of raster units per each raster pixel in Y axis.
int width() const
Returns the width of the (unclipped) raster.
A rectangle specified with double values.
double yMaximum() const SIP_HOLDGIL
Returns the y maximum value (top side of rectangle).
double xMaximum() const SIP_HOLDGIL
Returns the x maximum value (right side of rectangle).
double xMinimum() const SIP_HOLDGIL
Returns the x minimum value (left side of rectangle).
double yMinimum() const SIP_HOLDGIL
Returns the y minimum value (bottom side of rectangle).
QgsServerRequest Class defining request interface passed to services QgsService::executeRequest() met...
QUrl originalUrl() const
Returns the request url as seen by the web server, by default this is equal to the url seen by QGIS s...
Provides a way to retrieve settings by prioritizing according to environment variables,...
SERVER_EXPORT QString wcsServiceUrl(const QgsProject &project, const QgsServerRequest &request=QgsServerRequest(), const QgsServerSettings &settings=QgsServerSettings())
Returns the WCS service url.
SERVER_EXPORT double ceilWithPrecision(double number, int places)
Returns a double greater than number to the specified number of places.
SERVER_EXPORT double floorWithPrecision(double number, int places)
Returns a double less than number to the specified number of places.
QDomElement getCoverageOffering(QDomDocument &doc, const QgsRasterLayer *layer, const QgsProject *project, bool brief)
CoverageOffering or CoverageOfferingBrief element.
QgsRectangle parseBbox(const QString &bboxStr)
Parse bounding box.
QString implementationVersion()
Returns the highest version supported by this implementation.
QString serviceUrl(const QgsServerRequest &request, const QgsProject *project, const QgsServerSettings &settings)
Service URL string.
QString qgsDoubleToString(double a, int precision=17)
Returns a string representation of a double.
CONSTLATIN1STRING geoEpsgCrsAuthId()
Geographic coord sys from EPSG authority.