QGIS API Documentation  3.24.2-Tisler (13c1a02865)
qgsserverprojectutils.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgsserverprojectutils.cpp
3  -------------------------
4  begin : December 19, 2016
5  copyright : (C) 2016 by Paul Blottiere
6  email : paul dot blottiere at oslandia dot com
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #include "qgsserverprojectutils.h"
19 #include "qgsproject.h"
20 #include "qgsmessagelog.h"
21 
22 double QgsServerProjectUtils::ceilWithPrecision( double number, int places )
23 {
24  const double scaleFactor = std::pow( 10.0, places );
25  return ( std::ceil( number * scaleFactor ) / scaleFactor );
26 }
27 
28 double QgsServerProjectUtils::floorWithPrecision( double number, int places )
29 {
30  const double scaleFactor = std::pow( 10.0, places );
31  return ( std::floor( number * scaleFactor ) / scaleFactor );
32 }
33 
35 {
36  return project.readBoolEntry( QStringLiteral( "WMSServiceCapabilities" ), QStringLiteral( "/" ), false );
37 }
38 
40 {
41  QString title = project.readEntry( QStringLiteral( "WMSServiceTitle" ), QStringLiteral( "/" ) );
42  if ( title.isEmpty() )
43  {
44  title = project.title();
45  }
46  if ( title.isEmpty() )
47  {
48  title = QObject::tr( "Untitled" );
49  }
50  return title;
51 }
52 
54 {
55  return project.readEntry( QStringLiteral( "WMSServiceAbstract" ), QStringLiteral( "/" ) );
56 }
57 
59 {
60  QStringList keywordList;
61  const QStringList list = project.readListEntry( QStringLiteral( "WMSKeywordList" ), QStringLiteral( "/" ), QStringList() );
62  if ( !list.isEmpty() )
63  {
64  for ( int i = 0; i < list.size(); ++i )
65  {
66  const QString keyword = list.at( i );
67  if ( !keyword.isEmpty() )
68  {
69  keywordList.append( keyword );
70  }
71  }
72  }
73  return keywordList;
74 }
75 
77 {
78  QString wmsOnlineResource = project.readEntry( QStringLiteral( "WMSOnlineResource" ), QStringLiteral( "/" ) );
79 
80  const QgsProperty wmsOnlineResourceProperty = project.dataDefinedServerProperties().property( QgsProject::DataDefinedServerProperty::WMSOnlineResource );
81  if ( wmsOnlineResourceProperty.isActive() && ! wmsOnlineResourceProperty.expressionString().isEmpty() )
82  {
83  const QgsExpressionContext context = project.createExpressionContext();
84  return wmsOnlineResourceProperty.valueAsString( context, wmsOnlineResource );
85  }
86 
87  return wmsOnlineResource;
88 }
89 
91 {
92  return project.readEntry( QStringLiteral( "WMSContactOrganization" ), QStringLiteral( "/" ) );
93 }
94 
96 {
97  return project.readEntry( QStringLiteral( "WMSContactPosition" ), QStringLiteral( "/" ) );
98 }
99 
101 {
102  return project.readEntry( QStringLiteral( "WMSContactPerson" ), QStringLiteral( "/" ) );
103 }
104 
106 {
107  return project.readEntry( QStringLiteral( "WMSContactMail" ), QStringLiteral( "/" ) );
108 }
109 
111 {
112  return project.readEntry( QStringLiteral( "WMSContactPhone" ), QStringLiteral( "/" ) );
113 }
114 
116 {
117  return project.readEntry( QStringLiteral( "WMSFees" ), QStringLiteral( "/" ) );
118 }
119 
121 {
122  return project.readEntry( QStringLiteral( "WMSAccessConstraints" ), QStringLiteral( "/" ) );
123 }
124 
126 {
127  return project.readNumEntry( QStringLiteral( "WMSMaxWidth" ), QStringLiteral( "/" ), -1 );
128 }
129 
131 {
132  return project.readNumEntry( QStringLiteral( "WMSMaxHeight" ), QStringLiteral( "/" ), -1 );
133 }
134 
136 {
137  return project.readBoolEntry( QStringLiteral( "WMSUseLayerIDs" ), QStringLiteral( "/" ), false );
138 }
139 
141 {
142  return project.readNumEntry( QStringLiteral( "WMSImageQuality" ), QStringLiteral( "/" ), -1 );
143 }
144 
146 {
147  return project.readNumEntry( QStringLiteral( "WMSTileBuffer" ), QStringLiteral( "/" ), 0 );
148 }
149 
151 {
152  return project.readNumEntry( QStringLiteral( "WMSMaxAtlasFeatures" ), QStringLiteral( "/" ), 1 );
153 }
154 
156 {
157  return project.readDoubleEntry( QStringLiteral( "WMSDefaultMapUnitsPerMm" ), QStringLiteral( "/" ), 1 );
158 }
159 
161 {
162  const QString sia2045 = project.readEntry( QStringLiteral( "WMSInfoFormatSIA2045" ), QStringLiteral( "/" ), "" );
163 
164  return sia2045.compare( QLatin1String( "enabled" ), Qt::CaseInsensitive ) == 0
165  || sia2045.compare( QLatin1String( "true" ), Qt::CaseInsensitive ) == 0;
166 }
167 
169 {
170  const QString wktGeom = project.readEntry( QStringLiteral( "WMSAddWktGeometry" ), QStringLiteral( "/" ), "" );
171 
172  return wktGeom.compare( QLatin1String( "enabled" ), Qt::CaseInsensitive ) == 0
173  || wktGeom.compare( QLatin1String( "true" ), Qt::CaseInsensitive ) == 0;
174 }
175 
177 {
178  const QString useFormSettings = project.readEntry( QStringLiteral( "WMSFeatureInfoUseAttributeFormSettings" ), QStringLiteral( "/" ), "" );
179  return useFormSettings.compare( QLatin1String( "enabled" ), Qt::CaseInsensitive ) == 0
180  || useFormSettings.compare( QLatin1String( "true" ), Qt::CaseInsensitive ) == 0;
181 }
182 
184 {
185  const QString segmGeom = project.readEntry( QStringLiteral( "WMSSegmentizeFeatureInfoGeometry" ), QStringLiteral( "/" ), "" );
186 
187  return segmGeom.compare( QLatin1String( "enabled" ), Qt::CaseInsensitive ) == 0
188  || segmGeom.compare( QLatin1String( "true" ), Qt::CaseInsensitive ) == 0;
189 }
190 
192 {
193  return project.readNumEntry( QStringLiteral( "WMSPrecision" ), QStringLiteral( "/" ), 6 );
194 }
195 
197 {
198  return project.readEntry( QStringLiteral( "WMSFeatureInfoDocumentElement" ), QStringLiteral( "/" ), "" );
199 }
200 
202 {
203  return project.readEntry( QStringLiteral( "WMSFeatureInfoDocumentElementNS" ), QStringLiteral( "/" ), "" );
204 }
205 
207 {
208  return project.readEntry( QStringLiteral( "WMSFeatureInfoSchema" ), QStringLiteral( "/" ), "" );
209 }
210 
211 QHash<QString, QString> QgsServerProjectUtils::wmsFeatureInfoLayerAliasMap( const QgsProject &project )
212 {
213  QHash<QString, QString> aliasMap;
214 
215  //WMSFeatureInfoAliasLayers
216  const QStringList aliasLayerStringList = project.readListEntry( QStringLiteral( "WMSFeatureInfoAliasLayers" ), QStringLiteral( "/value" ), QStringList() );
217  if ( aliasLayerStringList.isEmpty() )
218  {
219  return aliasMap;
220  }
221 
222  //WMSFeatureInfoLayerAliases
223  const QStringList layerAliasStringList = project.readListEntry( QStringLiteral( "WMSFeatureInfoLayerAliases" ), QStringLiteral( "/value" ), QStringList() );
224  if ( layerAliasStringList.isEmpty() )
225  {
226  return aliasMap;
227  }
228 
229  const int nMapEntries = std::min( aliasLayerStringList.size(), layerAliasStringList.size() );
230  for ( int i = 0; i < nMapEntries; ++i )
231  {
232  aliasMap.insert( aliasLayerStringList.at( i ), layerAliasStringList.at( i ) );
233  }
234 
235  return aliasMap;
236 }
237 
239 {
240  return project.readBoolEntry( QStringLiteral( "WMSInspire" ), QStringLiteral( "/activated" ) );
241 }
242 
244 {
245  return project.readEntry( QStringLiteral( "WMSInspire" ), QStringLiteral( "/language" ) );
246 }
247 
249 {
250  return project.readEntry( QStringLiteral( "WMSInspire" ), QStringLiteral( "/metadataUrl" ) );
251 }
252 
254 {
255  return project.readEntry( QStringLiteral( "WMSInspire" ), QStringLiteral( "/metadataUrlType" ) );
256 }
257 
259 {
260  return project.readEntry( QStringLiteral( "WMSInspire" ), QStringLiteral( "/temporalReference" ) );
261 }
262 
264 {
265  return project.readEntry( QStringLiteral( "WMSInspire" ), QStringLiteral( "/metadataDate" ) );
266 }
267 
269 {
270  return project.readListEntry( QStringLiteral( "WMSRestrictedComposers" ), QStringLiteral( "/" ), QStringList() );
271 }
272 
274 {
275  QStringList crsList;
276  const QStringList wmsCrsList = project.readListEntry( QStringLiteral( "WMSCrsList" ), QStringLiteral( "/" ), QStringList() );
277  if ( !wmsCrsList.isEmpty() )
278  {
279  for ( int i = 0; i < wmsCrsList.size(); ++i )
280  {
281  const QString crs = wmsCrsList.at( i );
282  if ( !crs.isEmpty() )
283  {
284  crsList.append( crs );
285  }
286  }
287  }
288  if ( crsList.isEmpty() )
289  {
290  const QStringList valueList = project.readListEntry( QStringLiteral( "WMSEpsgList" ), QStringLiteral( "/" ), QStringList() );
291  bool conversionOk;
292  for ( int i = 0; i < valueList.size(); ++i )
293  {
294  const int epsgNr = valueList.at( i ).toInt( &conversionOk );
295  if ( conversionOk )
296  {
297  crsList.append( QStringLiteral( "EPSG:%1" ).arg( epsgNr ) );
298  }
299  }
300  }
301  if ( crsList.isEmpty() )
302  {
303  //no CRS restriction defined in the project. Provide project CRS, wgs84 and pseudo mercator
304  const QString projectCrsId = project.crs().authid();
305  crsList.append( projectCrsId );
306  if ( projectCrsId.compare( QLatin1String( "EPSG:4326" ), Qt::CaseInsensitive ) != 0 )
307  {
308  crsList.append( QStringLiteral( "EPSG:%1" ).arg( 4326 ) );
309  }
310  if ( projectCrsId.compare( QLatin1String( "EPSG:3857" ), Qt::CaseInsensitive ) != 0 )
311  {
312  crsList.append( QStringLiteral( "EPSG:%1" ).arg( 3857 ) );
313  }
314  }
315  return crsList;
316 }
317 
318 QString QgsServerProjectUtils::serviceUrl( const QString &service, const QgsServerRequest &request, const QgsServerSettings &settings )
319 {
320  const QString serviceUpper = service.toUpper();
321  QString url = settings.serviceUrl( serviceUpper );
322  if ( ! url.isEmpty() )
323  {
324  return url;
325  }
326 
327  QgsServerRequest::RequestHeader header = QgsServerRequest::RequestHeader::X_QGIS_SERVICE_URL;
328  if ( serviceUpper == QLatin1String( "WMS" ) )
329  {
330  header = QgsServerRequest::RequestHeader::X_QGIS_WMS_SERVICE_URL;
331  }
332  else if ( serviceUpper == QLatin1String( "WFS" ) )
333  {
334  header = QgsServerRequest::RequestHeader::X_QGIS_WFS_SERVICE_URL;
335  }
336  else if ( serviceUpper == QLatin1String( "WCS" ) )
337  {
338  header = QgsServerRequest::RequestHeader::X_QGIS_WCS_SERVICE_URL;
339  }
340  else if ( serviceUpper == QLatin1String( "WMTS" ) )
341  {
342  header = QgsServerRequest::RequestHeader::X_QGIS_WMTS_SERVICE_URL;
343  }
344  url = request.header( header );
345  if ( ! url.isEmpty() )
346  {
347  return url;
348  }
349  url = request.header( QgsServerRequest::RequestHeader::X_QGIS_SERVICE_URL );
350  if ( ! url.isEmpty() )
351  {
352  return url;
353  }
354 
355  QString proto;
356  QString host;
357 
358  QString forwarded = request.header( QgsServerRequest::FORWARDED );
359  if ( ! forwarded.isEmpty() )
360  {
361  forwarded = forwarded.split( QLatin1Char( ',' ) )[0];
362  const QStringList elements = forwarded.split( ';' );
363  for ( const QString &element : elements )
364  {
365  QStringList splited_element = element.trimmed().split( QLatin1Char( '=' ) );
366  if ( splited_element[0] == "host" )
367  {
368  host = splited_element[1];
369  }
370  if ( splited_element[0] == "proto" )
371  {
372  proto = splited_element[1];
373  }
374  }
375  }
376 
377  if ( host.isEmpty() )
378  {
379  host = request.header( QgsServerRequest::RequestHeader::X_FORWARDED_HOST );
380  proto = request.header( QgsServerRequest::RequestHeader::X_FORWARDED_PROTO );
381  }
382 
383  if ( host.isEmpty() )
384  {
385  host = request.header( QgsServerRequest::RequestHeader::HOST );
386  }
387 
388  QUrl urlQUrl = request.baseUrl();
389  if ( ! proto.isEmpty() )
390  {
391  urlQUrl.setScheme( proto );
392  }
393 
394  if ( ! host.isEmpty() )
395  {
396  QStringList hostPort = host.split( QLatin1Char( ':' ) );
397  if ( hostPort.length() == 1 )
398  {
399  urlQUrl.setHost( hostPort[0] );
400  urlQUrl.setPort( -1 );
401  }
402  if ( hostPort.length() == 2 )
403  {
404  urlQUrl.setHost( hostPort[0] );
405  urlQUrl.setPort( hostPort[1].toInt() );
406  }
407  }
408 
409  // https://docs.qgis.org/3.16/en/docs/server_manual/services.html#wms-map
410  const QString map = QUrlQuery( request.originalUrl().query().replace( QLatin1String( "MAP" ), QStringLiteral( "MAP" ), Qt::CaseInsensitive ) ).queryItemValue( QStringLiteral( "MAP" ) );
411 
412  if ( ! map.isEmpty() )
413  {
414  QUrlQuery query;
415  query.setQueryItems( {{"MAP", map}} );
416  urlQUrl.setQuery( query );
417  }
418  else
419  {
420  urlQUrl.setQuery( NULL );
421  }
422 
423  return urlQUrl.url();
424 }
425 
426 QString QgsServerProjectUtils::wmsServiceUrl( const QgsProject &project, const QgsServerRequest &request, const QgsServerSettings &settings )
427 {
428  QString url = project.readEntry( QStringLiteral( "WMSUrl" ), QStringLiteral( "/" ), "" );
429  if ( url.isEmpty() )
430  {
431  url = serviceUrl( QStringLiteral( "WMS" ), request, settings );
432  }
433  return url;
434 }
435 
437 {
438  return project.readEntry( QStringLiteral( "WMSRootName" ), QStringLiteral( "/" ), "" );
439 }
440 
442 {
443  return project.readListEntry( QStringLiteral( "WMSRestrictedLayers" ), QStringLiteral( "/" ), QStringList() );
444 }
445 
447 {
448  bool ok = false;
449  QStringList values = project.readListEntry( QStringLiteral( "WMSExtent" ), QStringLiteral( "/" ), QStringList(), &ok );
450  if ( !ok || values.size() != 4 )
451  {
452  return QgsRectangle();
453  }
454  //order of value elements must be xmin, ymin, xmax, ymax
455  const double xmin = values[ 0 ].toDouble();
456  const double ymin = values[ 1 ].toDouble();
457  const double xmax = values[ 2 ].toDouble();
458  const double ymax = values[ 3 ].toDouble();
459  return QgsRectangle( xmin, ymin, xmax, ymax );
460 }
461 
462 QString QgsServerProjectUtils::wfsServiceUrl( const QgsProject &project, const QgsServerRequest &request, const QgsServerSettings &settings )
463 {
464  QString url = project.readEntry( QStringLiteral( "WFSUrl" ), QStringLiteral( "/" ), "" );
465  if ( url.isEmpty() )
466  {
467  url = serviceUrl( QStringLiteral( "WFS" ), request, settings );
468  }
469  return url;
470 }
471 
472 QStringList QgsServerProjectUtils::wfsLayerIds( const QgsProject &project )
473 {
474  return project.readListEntry( QStringLiteral( "WFSLayers" ), QStringLiteral( "/" ) );
475 }
476 
477 int QgsServerProjectUtils::wfsLayerPrecision( const QgsProject &project, const QString &layerId )
478 {
479  return project.readNumEntry( QStringLiteral( "WFSLayersPrecision" ), "/" + layerId, 6 );
480 }
481 
483 {
484  return project.readListEntry( QStringLiteral( "WFSTLayers" ), QStringLiteral( "Update" ) );
485 }
486 
488 {
489  return project.readListEntry( QStringLiteral( "WFSTLayers" ), QStringLiteral( "Insert" ) );
490 }
491 
493 {
494  return project.readListEntry( QStringLiteral( "WFSTLayers" ), QStringLiteral( "Delete" ) );
495 }
496 
497 QString QgsServerProjectUtils::wcsServiceUrl( const QgsProject &project, const QgsServerRequest &request, const QgsServerSettings &settings )
498 {
499  QString url = project.readEntry( QStringLiteral( "WCSUrl" ), QStringLiteral( "/" ), "" );
500  if ( url.isEmpty() )
501  {
502  url = serviceUrl( QStringLiteral( "WCS" ), request, settings );
503  }
504  return url;
505 }
506 
507 QStringList QgsServerProjectUtils::wcsLayerIds( const QgsProject &project )
508 {
509  return project.readListEntry( QStringLiteral( "WCSLayers" ), QStringLiteral( "/" ) );
510 }
511 
512 QString QgsServerProjectUtils::wmtsServiceUrl( const QgsProject &project, const QgsServerRequest &request, const QgsServerSettings &settings )
513 {
514  QString url = project.readEntry( QStringLiteral( "WMTSUrl" ), QStringLiteral( "/" ), "" );
515  if ( url.isEmpty() )
516  {
517  url = serviceUrl( QStringLiteral( "WMTS" ), request, settings );
518  }
519  return url;
520 }
521 
523 {
524  return project.readBoolEntry( QStringLiteral( "RenderMapTile" ), QStringLiteral( "/" ), false );
525 }
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,...
Definition: qgsproject.h:101
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.
Definition: qgsproject.cpp:491
QgsPropertyCollection dataDefinedServerProperties() const
Returns the data defined properties used for overrides in user defined server parameters.
Definition: qgsproject.cpp:626
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
Definition: qgsproject.h:106
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.
Definition: qgsproperty.h:231
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.
Definition: qgsrectangle.h:42
QgsServerRequest Class defining request interface passed to services QgsService::executeRequest() met...
virtual QString header(const QString &name) const
Returns the header value.
QUrl baseUrl() const
Returns the base URL of QGIS server.
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...
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