QGIS API Documentation  3.23.0-Master (dd0cd13a00)
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 = request.parameter( QStringLiteral( "MAP" ) );
411  if ( ! map.isEmpty() )
412  {
413  QUrlQuery query;
414  query.setQueryItems( {{"MAP", map}} );
415  urlQUrl.setQuery( query );
416  }
417  else
418  {
419  urlQUrl.setQuery( NULL );
420  }
421  return urlQUrl.url();
422 }
423 
424 QString QgsServerProjectUtils::wmsServiceUrl( const QgsProject &project, const QgsServerRequest &request, const QgsServerSettings &settings )
425 {
426  QString url = project.readEntry( QStringLiteral( "WMSUrl" ), QStringLiteral( "/" ), "" );
427  if ( url.isEmpty() )
428  {
429  url = serviceUrl( QStringLiteral( "WMS" ), request, settings );
430  }
431  return url;
432 }
433 
435 {
436  return project.readEntry( QStringLiteral( "WMSRootName" ), QStringLiteral( "/" ), "" );
437 }
438 
440 {
441  return project.readListEntry( QStringLiteral( "WMSRestrictedLayers" ), QStringLiteral( "/" ), QStringList() );
442 }
443 
445 {
446  bool ok = false;
447  QStringList values = project.readListEntry( QStringLiteral( "WMSExtent" ), QStringLiteral( "/" ), QStringList(), &ok );
448  if ( !ok || values.size() != 4 )
449  {
450  return QgsRectangle();
451  }
452  //order of value elements must be xmin, ymin, xmax, ymax
453  const double xmin = values[ 0 ].toDouble();
454  const double ymin = values[ 1 ].toDouble();
455  const double xmax = values[ 2 ].toDouble();
456  const double ymax = values[ 3 ].toDouble();
457  return QgsRectangle( xmin, ymin, xmax, ymax );
458 }
459 
460 QString QgsServerProjectUtils::wfsServiceUrl( const QgsProject &project, const QgsServerRequest &request, const QgsServerSettings &settings )
461 {
462  QString url = project.readEntry( QStringLiteral( "WFSUrl" ), QStringLiteral( "/" ), "" );
463  if ( url.isEmpty() )
464  {
465  url = serviceUrl( QStringLiteral( "WFS" ), request, settings );
466  }
467  return url;
468 }
469 
470 QStringList QgsServerProjectUtils::wfsLayerIds( const QgsProject &project )
471 {
472  return project.readListEntry( QStringLiteral( "WFSLayers" ), QStringLiteral( "/" ) );
473 }
474 
475 int QgsServerProjectUtils::wfsLayerPrecision( const QgsProject &project, const QString &layerId )
476 {
477  return project.readNumEntry( QStringLiteral( "WFSLayersPrecision" ), "/" + layerId, 6 );
478 }
479 
481 {
482  return project.readListEntry( QStringLiteral( "WFSTLayers" ), QStringLiteral( "Update" ) );
483 }
484 
486 {
487  return project.readListEntry( QStringLiteral( "WFSTLayers" ), QStringLiteral( "Insert" ) );
488 }
489 
491 {
492  return project.readListEntry( QStringLiteral( "WFSTLayers" ), QStringLiteral( "Delete" ) );
493 }
494 
495 QString QgsServerProjectUtils::wcsServiceUrl( const QgsProject &project, const QgsServerRequest &request, const QgsServerSettings &settings )
496 {
497  QString url = project.readEntry( QStringLiteral( "WCSUrl" ), QStringLiteral( "/" ), "" );
498  if ( url.isEmpty() )
499  {
500  url = serviceUrl( QStringLiteral( "WCS" ), request, settings );
501  }
502  return url;
503 }
504 
505 QStringList QgsServerProjectUtils::wcsLayerIds( const QgsProject &project )
506 {
507  return project.readListEntry( QStringLiteral( "WCSLayers" ), QStringLiteral( "/" ) );
508 }
509 
510 QString QgsServerProjectUtils::wmtsServiceUrl( const QgsProject &project, const QgsServerRequest &request, const QgsServerSettings &settings )
511 {
512  QString url = project.readEntry( QStringLiteral( "WMTSUrl" ), QStringLiteral( "/" ), "" );
513  if ( url.isEmpty() )
514  {
515  url = serviceUrl( QStringLiteral( "WMTS" ), request, settings );
516  }
517  return url;
518 }
519 
521 {
522  return project.readBoolEntry( QStringLiteral( "RenderMapTile" ), QStringLiteral( "/" ), false );
523 }
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,...
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:489
QgsPropertyCollection dataDefinedServerProperties() const
Returns the data defined properties used for overrides in user defined server parameters.
Definition: qgsproject.cpp:624
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.
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