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     const 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     const QDomText labelText = doc.createTextNode( title );
 
   61     labelElem.appendChild( labelText );
 
   62     layerElem.appendChild( labelElem );
 
   65     const QString 
abstract = layer->
abstract();
 
   66     if ( !
abstract.isEmpty() )
 
   68       QDomElement descriptionElem = doc.createElement( QStringLiteral( 
"description" ) );
 
   69       const QDomText descriptionText = doc.createTextNode( 
abstract );
 
   70       descriptionElem.appendChild( descriptionText );
 
   71       layerElem.appendChild( descriptionElem );
 
   77     const 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     const QDomText lowText = doc.createTextNode( QStringLiteral( 
"0 0" ) );
 
  142     lowElem.appendChild( lowText );
 
  143     gridEnvElem.appendChild( lowElem );
 
  144     QDomElement highElem = doc.createElement( QStringLiteral( 
"gml:high" ) );
 
  145     const 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     const QDomText xAxisText = doc.createTextNode( QStringLiteral( 
"x" ) );
 
  152     xAxisElem.appendChild( xAxisText );
 
  153     rectGridElem.appendChild( xAxisElem );
 
  155     QDomElement yAxisElem = doc.createElement( QStringLiteral( 
"gml:axisName" ) );
 
  156     const 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     const 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     const 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     const QDomText rsNameText = doc.createTextNode( QStringLiteral( 
"Bands" ) );
 
  193     rsNameElem.appendChild( rsNameText );
 
  194     RangeSetElem.appendChild( rsNameElem );
 
  196     QDomElement rsLabelElem = doc.createElement( QStringLiteral( 
"label" ) );
 
  197     const 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     const QDomText adNameText = doc.createTextNode( QStringLiteral( 
"bands" ) );
 
  209     adNameElem.appendChild( adNameText );
 
  210     AxisDescElem.appendChild( adNameElem );
 
  212     QDomElement adLabelElem = doc.createElement( QStringLiteral( 
"label" ) );
 
  213     const 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       const 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     const QDomText rCRSText = doc.createTextNode( layerCrs.
authid() );
 
  232     rCRSElem.appendChild( rCRSText );
 
  233     sCRSElem.appendChild( rCRSElem );
 
  234     QDomElement nCRSElem = doc.createElement( QStringLiteral( 
"nativeCRSs" ) );
 
  235     const 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     const QDomText formatsText = doc.createTextNode( QStringLiteral( 
"GeoTIFF" ) );
 
  246     formatsElem.appendChild( formatsText );
 
  247     sFormatsElem.appendChild( formatsElem );
 
  248     layerElem.appendChild( sFormatsElem );
 
  256     static const QSet< QString > sFilter
 
  258       QStringLiteral( 
"REQUEST" ),
 
  259       QStringLiteral( 
"VERSION" ),
 
  260       QStringLiteral( 
"SERVICE" ),
 
  261       QStringLiteral( 
"_DC" )
 
  267     if ( href.isEmpty() )
 
  272       const QList<QPair<QString, QString> > queryItems = q.queryItems();
 
  273       for ( 
const QPair<QString, QString> ¶m : queryItems )
 
  275         if ( sFilter.contains( param.first.toUpper() ) )
 
  276           q.removeAllQueryItems( param.first );
 
  280       href = url.toString();
 
  289     QStringList lst = bboxStr.split( 
',' );
 
  290     if ( lst.count() != 4 )
 
  295     for ( 
int i = 0; i < 4; i++ )
 
  297       lst[i].replace( 
' ', 
'+' );
 
  298       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.
 
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.