24   double scaleFactor = std::pow( 10.0, places );
 
   25   return ( std::ceil( number * scaleFactor ) / scaleFactor );
 
   30   double scaleFactor = std::pow( 10.0, places );
 
   31   return ( std::floor( number * scaleFactor ) / scaleFactor );
 
   36   return project.
readBoolEntry( QStringLiteral( 
"WMSServiceCapabilities" ), QStringLiteral( 
"/" ), 
false );
 
   41   QString title = project.
readEntry( QStringLiteral( 
"WMSServiceTitle" ), QStringLiteral( 
"/" ) );
 
   42   if ( title.isEmpty() )
 
   44     title = project.
title();
 
   46   if ( title.isEmpty() )
 
   48     title = QObject::tr( 
"Untitled" );
 
   55   return project.
readEntry( QStringLiteral( 
"WMSServiceAbstract" ), QStringLiteral( 
"/" ) );
 
   60   QStringList keywordList;
 
   61   QStringList list = project.
readListEntry( QStringLiteral( 
"WMSKeywordList" ), QStringLiteral( 
"/" ), QStringList() );
 
   62   if ( !list.isEmpty() )
 
   64     for ( 
int i = 0; i < list.size(); ++i )
 
   66       QString keyword = list.at( i );
 
   67       if ( !keyword.isEmpty() )
 
   69         keywordList.append( keyword );
 
   78   QString wmsOnlineResource = project.
readEntry( QStringLiteral( 
"WMSOnlineResource" ), QStringLiteral( 
"/" ) );
 
   84     return wmsOnlineResourceProperty.
valueAsString( context, wmsOnlineResource );
 
   87   return wmsOnlineResource;
 
   92   return project.
readEntry( QStringLiteral( 
"WMSContactOrganization" ), QStringLiteral( 
"/" ) );
 
   97   return project.
readEntry( QStringLiteral( 
"WMSContactPosition" ), QStringLiteral( 
"/" ) );
 
  102   return project.
readEntry( QStringLiteral( 
"WMSContactPerson" ), QStringLiteral( 
"/" ) );
 
  107   return project.
readEntry( QStringLiteral( 
"WMSContactMail" ), QStringLiteral( 
"/" ) );
 
  112   return project.
readEntry( QStringLiteral( 
"WMSContactPhone" ), QStringLiteral( 
"/" ) );
 
  117   return project.
readEntry( QStringLiteral( 
"WMSFees" ), QStringLiteral( 
"/" ) );
 
  122   return project.
readEntry( QStringLiteral( 
"WMSAccessConstraints" ), QStringLiteral( 
"/" ) );
 
  127   return project.
readNumEntry( QStringLiteral( 
"WMSMaxWidth" ), QStringLiteral( 
"/" ), -1 );
 
  132   return project.
readNumEntry( QStringLiteral( 
"WMSMaxHeight" ), QStringLiteral( 
"/" ), -1 );
 
  137   return project.
readBoolEntry( QStringLiteral( 
"WMSUseLayerIDs" ), QStringLiteral( 
"/" ), 
false );
 
  142   return project.
readNumEntry( QStringLiteral( 
"WMSImageQuality" ), QStringLiteral( 
"/" ), -1 );
 
  147   return project.
readNumEntry( QStringLiteral( 
"WMSTileBuffer" ), QStringLiteral( 
"/" ), 0 );
 
  152   return project.
readNumEntry( QStringLiteral( 
"WMSMaxAtlasFeatures" ), QStringLiteral( 
"/" ), 1 );
 
  157   return project.
readDoubleEntry( QStringLiteral( 
"WMSDefaultMapUnitsPerMm" ), QStringLiteral( 
"/" ), 1 );
 
  162   QString sia2045 = project.
readEntry( QStringLiteral( 
"WMSInfoFormatSIA2045" ), QStringLiteral( 
"/" ), 
"" );
 
  164   return sia2045.compare( QLatin1String( 
"enabled" ), Qt::CaseInsensitive ) == 0
 
  165          || sia2045.compare( QLatin1String( 
"true" ), Qt::CaseInsensitive ) == 0;
 
  170   QString wktGeom = project.
readEntry( QStringLiteral( 
"WMSAddWktGeometry" ), QStringLiteral( 
"/" ), 
"" );
 
  172   return wktGeom.compare( QLatin1String( 
"enabled" ), Qt::CaseInsensitive ) == 0
 
  173          || wktGeom.compare( QLatin1String( 
"true" ), Qt::CaseInsensitive ) == 0;
 
  178   QString useFormSettings = project.
readEntry( QStringLiteral( 
"WMSFeatureInfoUseAttributeFormSettings" ), QStringLiteral( 
"/" ), 
"" );
 
  179   return useFormSettings.compare( QLatin1String( 
"enabled" ), Qt::CaseInsensitive ) == 0
 
  180          || useFormSettings.compare( QLatin1String( 
"true" ), Qt::CaseInsensitive ) == 0;
 
  185   QString segmGeom = project.
readEntry( QStringLiteral( 
"WMSSegmentizeFeatureInfoGeometry" ), QStringLiteral( 
"/" ), 
"" );
 
  187   return segmGeom.compare( QLatin1String( 
"enabled" ), Qt::CaseInsensitive ) == 0
 
  188          || segmGeom.compare( QLatin1String( 
"true" ), Qt::CaseInsensitive ) == 0;
 
  193   return project.
readNumEntry( QStringLiteral( 
"WMSPrecision" ), QStringLiteral( 
"/" ), 6 );
 
  198   return project.
readEntry( QStringLiteral( 
"WMSFeatureInfoDocumentElement" ), QStringLiteral( 
"/" ), 
"" );
 
  203   return project.
readEntry( QStringLiteral( 
"WMSFeatureInfoDocumentElementNS" ), QStringLiteral( 
"/" ), 
"" );
 
  208   return project.
readEntry( QStringLiteral( 
"WMSFeatureInfoSchema" ), QStringLiteral( 
"/" ), 
"" );
 
  213   QHash<QString, QString> aliasMap;
 
  216   QStringList aliasLayerStringList = project.
readListEntry( QStringLiteral( 
"WMSFeatureInfoAliasLayers" ), QStringLiteral( 
"/value" ), QStringList() );
 
  217   if ( aliasLayerStringList.isEmpty() )
 
  223   QStringList layerAliasStringList = project.
readListEntry( QStringLiteral( 
"WMSFeatureInfoLayerAliases" ), QStringLiteral( 
"/value" ), QStringList() );
 
  224   if ( layerAliasStringList.isEmpty() )
 
  229   int nMapEntries = std::min( aliasLayerStringList.size(), layerAliasStringList.size() );
 
  230   for ( 
int i = 0; i < nMapEntries; ++i )
 
  232     aliasMap.insert( aliasLayerStringList.at( i ), layerAliasStringList.at( i ) );
 
  240   return project.
readBoolEntry( QStringLiteral( 
"WMSInspire" ), QStringLiteral( 
"/activated" ) );
 
  245   return project.
readEntry( QStringLiteral( 
"WMSInspire" ), QStringLiteral( 
"/language" ) );
 
  250   return project.
readEntry( QStringLiteral( 
"WMSInspire" ), QStringLiteral( 
"/metadataUrl" ) );
 
  255   return project.
readEntry( QStringLiteral( 
"WMSInspire" ), QStringLiteral( 
"/metadataUrlType" ) );
 
  260   return project.
readEntry( QStringLiteral( 
"WMSInspire" ), QStringLiteral( 
"/temporalReference" ) );
 
  265   return project.
readEntry( QStringLiteral( 
"WMSInspire" ), QStringLiteral( 
"/metadataDate" ) );
 
  270   return project.
readListEntry( QStringLiteral( 
"WMSRestrictedComposers" ), QStringLiteral( 
"/" ), QStringList() );
 
  276   QStringList wmsCrsList = project.
readListEntry( QStringLiteral( 
"WMSCrsList" ), QStringLiteral( 
"/" ), QStringList() );
 
  277   if ( !wmsCrsList.isEmpty() )
 
  279     for ( 
int i = 0; i < wmsCrsList.size(); ++i )
 
  281       QString 
crs = wmsCrsList.at( i );
 
  282       if ( !
crs.isEmpty() )
 
  284         crsList.append( 
crs );
 
  288   if ( crsList.isEmpty() )
 
  290     QStringList valueList = project.
readListEntry( QStringLiteral( 
"WMSEpsgList" ), QStringLiteral( 
"/" ), QStringList() );
 
  292     for ( 
int i = 0; i < valueList.size(); ++i )
 
  294       int epsgNr = valueList.at( i ).toInt( &conversionOk );
 
  297         crsList.append( QStringLiteral( 
"EPSG:%1" ).arg( epsgNr ) );
 
  301   if ( crsList.isEmpty() )
 
  304     QString projectCrsId = project.
crs().
authid();
 
  305     crsList.append( projectCrsId );
 
  306     if ( projectCrsId.compare( QLatin1String( 
"EPSG:4326" ), Qt::CaseInsensitive ) != 0 )
 
  308       crsList.append( QStringLiteral( 
"EPSG:%1" ).arg( 4326 ) );
 
  310     if ( projectCrsId.compare( QLatin1String( 
"EPSG:3857" ), Qt::CaseInsensitive ) != 0 )
 
  312       crsList.append( QStringLiteral( 
"EPSG:%1" ).arg( 3857 ) );
 
  320   const QString serviceUpper = service.toUpper();
 
  321   QString url = settings.
serviceUrl( serviceUpper );
 
  322   if ( ! url.isEmpty() )
 
  328   if ( serviceUpper == QLatin1String( 
"WMS" ) )
 
  330     header = QgsServerRequest::RequestHeader::X_QGIS_WMS_SERVICE_URL;
 
  332   else if ( serviceUpper == QLatin1String( 
"WFS" ) )
 
  334     header = QgsServerRequest::RequestHeader::X_QGIS_WFS_SERVICE_URL;
 
  336   else if ( serviceUpper == QLatin1String( 
"WCS" ) )
 
  338     header = QgsServerRequest::RequestHeader::X_QGIS_WCS_SERVICE_URL;
 
  340   else if ( serviceUpper == QLatin1String( 
"WMTS" ) )
 
  342     header = QgsServerRequest::RequestHeader::X_QGIS_WMTS_SERVICE_URL;
 
  344   url = request.
header( header );
 
  345   if ( ! url.isEmpty() )
 
  349   url = request.
header( QgsServerRequest::RequestHeader::X_QGIS_SERVICE_URL );
 
  350   if ( ! url.isEmpty() )
 
  359   if ( ! forwarded.isEmpty() )
 
  361     forwarded = forwarded.split( QLatin1Char( 
',' ) )[0];
 
  362     QStringList elements = forwarded.split( 
';' );
 
  363     for ( 
const QString &element : elements )
 
  365       QStringList splited_element = element.trimmed().split( QLatin1Char( 
'=' ) );
 
  366       if ( splited_element[0] == 
"host" )
 
  368         host = splited_element[1];
 
  370       if ( splited_element[0] == 
"proto" )
 
  372         proto = splited_element[1];
 
  377   if ( host.isEmpty() )
 
  379     host = request.
header( QgsServerRequest::RequestHeader::X_FORWARDED_HOST );
 
  380     proto = request.
header( QgsServerRequest::RequestHeader::X_FORWARDED_PROTO );
 
  383   if ( host.isEmpty() )
 
  385     host = request.
header( QgsServerRequest::RequestHeader::HOST );
 
  388   QUrl urlQUrl = request.
baseUrl();
 
  389   if ( ! proto.isEmpty() )
 
  391     urlQUrl.setScheme( proto );
 
  394   if ( ! host.isEmpty() )
 
  396     QStringList hostPort = host.split( QLatin1Char( 
':' ) );
 
  397     if ( hostPort.length() == 1 )
 
  399       urlQUrl.setHost( hostPort[0] );
 
  400       urlQUrl.setPort( -1 );
 
  402     if ( hostPort.length() == 2 )
 
  404       urlQUrl.setHost( hostPort[0] );
 
  405       urlQUrl.setPort( hostPort[1].toInt() );
 
  410   const QString map = request.
parameter( QStringLiteral( 
"MAP" ) );
 
  411   if ( ! map.isEmpty() )
 
  414     query.setQueryItems( {{
"MAP", map}} );
 
  415     urlQUrl.setQuery( query );
 
  419     urlQUrl.setQuery( NULL );
 
  421   return urlQUrl.url();
 
  426   QString url = project.
readEntry( QStringLiteral( 
"WMSUrl" ), QStringLiteral( 
"/" ), 
"" );
 
  429     url = 
serviceUrl( QStringLiteral( 
"WMS" ), request, settings );
 
  436   return project.
readEntry( QStringLiteral( 
"WMSRootName" ), QStringLiteral( 
"/" ), 
"" );
 
  441   return project.
readListEntry( QStringLiteral( 
"WMSRestrictedLayers" ), QStringLiteral( 
"/" ), QStringList() );
 
  447   QStringList values = project.
readListEntry( QStringLiteral( 
"WMSExtent" ), QStringLiteral( 
"/" ), QStringList(), &ok );
 
  448   if ( !ok || values.size() != 4 )
 
  453   double xmin = values[ 0 ].toDouble();
 
  454   double ymin = values[ 1 ].toDouble();
 
  455   double xmax = values[ 2 ].toDouble();
 
  456   double ymax = values[ 3 ].toDouble();
 
  462   QString url = project.
readEntry( QStringLiteral( 
"WFSUrl" ), QStringLiteral( 
"/" ), 
"" );
 
  465     url = 
serviceUrl( QStringLiteral( 
"WFS" ), request, settings );
 
  472   return project.
readListEntry( QStringLiteral( 
"WFSLayers" ), QStringLiteral( 
"/" ) );
 
  477   return project.
readNumEntry( QStringLiteral( 
"WFSLayersPrecision" ), 
"/" + layerId, 6 );
 
  482   return project.
readListEntry( QStringLiteral( 
"WFSTLayers" ), QStringLiteral( 
"Update" ) );
 
  487   return project.
readListEntry( QStringLiteral( 
"WFSTLayers" ), QStringLiteral( 
"Insert" ) );
 
  492   return project.
readListEntry( QStringLiteral( 
"WFSTLayers" ), QStringLiteral( 
"Delete" ) );
 
  497   QString url = project.
readEntry( QStringLiteral( 
"WCSUrl" ), QStringLiteral( 
"/" ), 
"" );
 
  500     url = 
serviceUrl( QStringLiteral( 
"WCS" ), request, settings );
 
  507   return project.
readListEntry( QStringLiteral( 
"WCSLayers" ), QStringLiteral( 
"/" ) );
 
  512   QString url = project.
readEntry( QStringLiteral( 
"WMTSUrl" ), QStringLiteral( 
"/" ), 
"" );
 
  515     url = 
serviceUrl( QStringLiteral( 
"WMTS" ), request, settings );
 
  522   return project.
readBoolEntry( QStringLiteral( 
"RenderMapTile" ), QStringLiteral( 
"/" ), 
false );
 
QString authid() const
Returns the authority identifier for the CRS.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
int readNumEntry(const QString &scope, const QString &key, int def=0, bool *ok=nullptr) const
Reads an integer from the specified scope and key.
QString title() const
Returns the project's title.
QgsPropertyCollection dataDefinedServerProperties() const
Returns the data defined properties used for overrides in user defined server parameters.
QgsExpressionContext createExpressionContext() const override
This method needs to be reimplemented in all classes which implement this interface and return an exp...
QString readEntry(const QString &scope, const QString &key, const QString &def=QString(), bool *ok=nullptr) const
Reads a string from the specified scope and key.
bool readBoolEntry(const QString &scope, const QString &key, bool def=false, bool *ok=nullptr) const
Reads a boolean from the specified scope and key.
QgsCoordinateReferenceSystem crs
double readDoubleEntry(const QString &scope, const QString &key, double def=0, bool *ok=nullptr) const
Reads a double from the specified scope and key.
QStringList readListEntry(const QString &scope, const QString &key, const QStringList &def=QStringList(), bool *ok=nullptr) const
Reads a string list from the specified scope and key.
QgsProperty property(int key) const override
Returns a matching property from the collection, if one exists.
A store for object properties.
QString expressionString() const
Returns the expression used for the property value.
QString valueAsString(const QgsExpressionContext &context, const QString &defaultString=QString(), bool *ok=nullptr) const
Calculates the current value of the property and interprets it as a string.
bool isActive() const
Returns whether the property is currently active.
A rectangle specified with double values.
QgsServerRequest Class defining request interface passed to services QgsService::executeRequest() met...
virtual QString header(const QString &name) const
Returns the header value.
QString parameter(const QString &key, const QString &defaultValue=QString()) const
Gets a parameter value.
QUrl baseUrl() const
Returns the base URL of QGIS server.
RequestHeader
The internal HTTP Header used for the request as enum.
Provides a way to retrieve settings by prioritizing according to environment variables,...
QString serviceUrl(const QString &service) const
Returns the service URL from the setting.
SERVER_EXPORT QString wmsFeatureInfoSchema(const QgsProject &project)
Returns the schema URL for XML GetFeatureInfo request.
SERVER_EXPORT int wmsTileBuffer(const QgsProject &project)
Returns the tile buffer in pixels for WMS images defined in a QGIS project.
SERVER_EXPORT QString wcsServiceUrl(const QgsProject &project, const QgsServerRequest &request=QgsServerRequest(), const QgsServerSettings &settings=QgsServerSettings())
Returns the WCS service url.
SERVER_EXPORT QString wmsRootName(const QgsProject &project)
Returns the WMS root layer name defined in a QGIS project.
SERVER_EXPORT bool wmsInfoFormatSia2045(const QgsProject &project)
Returns if the info format is SIA20145.
SERVER_EXPORT QString wmsInspireMetadataUrl(const QgsProject &project)
Returns the Inspire metadata URL.
SERVER_EXPORT QString wmtsServiceUrl(const QgsProject &project, const QgsServerRequest &request=QgsServerRequest(), const QgsServerSettings &settings=QgsServerSettings())
Returns the WMTS service url.
SERVER_EXPORT int wmsFeatureInfoPrecision(const QgsProject &project)
Returns the geometry precision for GetFeatureInfo request.
SERVER_EXPORT double ceilWithPrecision(double number, int places)
Returns a double greater than number to the specified number of places.
SERVER_EXPORT QString wmsFeatureInfoDocumentElementNs(const QgsProject &project)
Returns the document element namespace for XML GetFeatureInfo request.
SERVER_EXPORT QStringList wmsRestrictedComposers(const QgsProject &project)
Returns the restricted composer list.
SERVER_EXPORT QgsRectangle wmsExtent(const QgsProject &project)
Returns the WMS Extent restriction.
SERVER_EXPORT bool wmsUseLayerIds(const QgsProject &project)
Returns if layer ids are used as name in WMS.
SERVER_EXPORT bool wmsFeatureInfoSegmentizeWktGeometry(const QgsProject &project)
Returns if the geometry has to be segmentize in GetFeatureInfo request.
SERVER_EXPORT QString owsServiceAccessConstraints(const QgsProject &project)
Returns the owsService access constraints defined in project.
SERVER_EXPORT QStringList wfsLayerIds(const QgsProject &project)
Returns the Layer ids list defined in a QGIS project as published in WFS.
SERVER_EXPORT bool wmsRenderMapTiles(const QgsProject &project)
Returns true if WMS requests should use the QgsMapSettings::RenderMapTile flag, so that no visible ar...
SERVER_EXPORT QString owsServiceOnlineResource(const QgsProject &project)
Returns the owsService online resource defined in project.
SERVER_EXPORT QString owsServiceFees(const QgsProject &project)
Returns the owsService fees defined in project.
SERVER_EXPORT QStringList owsServiceKeywords(const QgsProject &project)
Returns the owsService keywords defined in project.
SERVER_EXPORT QString owsServiceContactPosition(const QgsProject &project)
Returns the owsService contact position defined in project.
SERVER_EXPORT QStringList wfstUpdateLayerIds(const QgsProject &project)
Returns the Layer ids list defined in a QGIS project as published as WFS-T with update capabilities.
SERVER_EXPORT bool wmsFeatureInfoUseAttributeFormSettings(const QgsProject &project)
Returns if feature form settings should be considered for the format of the feature info response.
SERVER_EXPORT QString serviceUrl(const QString &service, const QgsServerRequest &request, const QgsServerSettings &settings)
Returns the service url defined in the environment variable or with HTTP header.
SERVER_EXPORT QStringList wfstInsertLayerIds(const QgsProject &project)
Returns the Layer ids list defined in a QGIS project as published as WFS-T with insert capabilities.
SERVER_EXPORT QString wmsInspireTemporalReference(const QgsProject &project)
Returns the Inspire temporal reference.
SERVER_EXPORT QStringList wmsOutputCrsList(const QgsProject &project)
Returns the WMS output CRS list.
SERVER_EXPORT QString wmsInspireMetadataDate(const QgsProject &project)
Returns the Inspire metadata date.
SERVER_EXPORT QString owsServiceContactOrganization(const QgsProject &project)
Returns the owsService contact organization defined in project.
SERVER_EXPORT QHash< QString, QString > wmsFeatureInfoLayerAliasMap(const QgsProject &project)
Returns the mapping between layer name and wms layer name for GetFeatureInfo request.
SERVER_EXPORT bool wmsFeatureInfoAddWktGeometry(const QgsProject &project)
Returns if the geometry is displayed as Well Known Text in GetFeatureInfo request.
SERVER_EXPORT QString wmsServiceUrl(const QgsProject &project, const QgsServerRequest &request=QgsServerRequest(), const QgsServerSettings &settings=QgsServerSettings())
Returns the WMS service url.
SERVER_EXPORT QStringList wmsRestrictedLayers(const QgsProject &project)
Returns the restricted layer name list.
SERVER_EXPORT int wmsImageQuality(const QgsProject &project)
Returns the quality for WMS images defined in a QGIS project.
SERVER_EXPORT QString wmsInspireLanguage(const QgsProject &project)
Returns the Inspire language.
SERVER_EXPORT QString wmsInspireMetadataUrlType(const QgsProject &project)
Returns the Inspire metadata URL type.
SERVER_EXPORT double wmsDefaultMapUnitsPerMm(const QgsProject &project)
Returns the default number of map units per millimeters in case of the scale is not given.
SERVER_EXPORT bool owsServiceCapabilities(const QgsProject &project)
Returns if owsService capabilities are enabled.
SERVER_EXPORT bool wmsInspireActivate(const QgsProject &project)
Returns if Inspire is activated.
SERVER_EXPORT int wmsMaxWidth(const QgsProject &project)
Returns the maximum width for WMS images defined in a QGIS project.
SERVER_EXPORT QString owsServiceTitle(const QgsProject &project)
Returns the owsService title defined in project.
SERVER_EXPORT QString owsServiceContactMail(const QgsProject &project)
Returns the owsService contact mail defined in project.
SERVER_EXPORT QString owsServiceAbstract(const QgsProject &project)
Returns the owsService abstract defined in project.
SERVER_EXPORT double floorWithPrecision(double number, int places)
Returns a double less than number to the specified number of places.
SERVER_EXPORT QStringList wfstDeleteLayerIds(const QgsProject &project)
Returns the Layer ids list defined in a QGIS project as published as WFS-T with delete capabilities.
SERVER_EXPORT QString wfsServiceUrl(const QgsProject &project, const QgsServerRequest &request=QgsServerRequest(), const QgsServerSettings &settings=QgsServerSettings())
Returns the WFS service url.
SERVER_EXPORT int wmsMaxHeight(const QgsProject &project)
Returns the maximum height for WMS images defined in a QGIS project.
SERVER_EXPORT QStringList wcsLayerIds(const QgsProject &project)
Returns the Layer ids list defined in a QGIS project as published in WCS.
SERVER_EXPORT QString wmsFeatureInfoDocumentElement(const QgsProject &project)
Returns the document element name for XML GetFeatureInfo request.
SERVER_EXPORT int wmsMaxAtlasFeatures(const QgsProject &project)
Returns the maximum number of atlas features which can be printed in a request.
SERVER_EXPORT QString owsServiceContactPhone(const QgsProject &project)
Returns the owsService contact phone defined in project.
SERVER_EXPORT int wfsLayerPrecision(const QgsProject &project, const QString &layerId)
Returns the Layer precision defined in a QGIS project for the WFS GetFeature.
SERVER_EXPORT QString owsServiceContactPerson(const QgsProject &project)
Returns the owsService contact person defined in project.
const QgsCoordinateReferenceSystem & crs