35using namespace Qt::StringLiterals;
45#ifdef HAVE_SERVER_PYTHON_PLUGINS
49 const QDomDocument *capabilitiesDocument =
nullptr;
51#ifdef HAVE_SERVER_PYTHON_PLUGINS
53 if ( cacheManager && cacheManager->
getCachedDocument( &doc, project, request, accessControl ) )
55 capabilitiesDocument = &doc;
65 capabilitiesDocument = &doc;
69 capabilitiesDocument = &doc;
71 response.
setHeader( u
"Content-Type"_s, u
"text/xml; charset=utf-8"_s );
72 response.
write( capabilitiesDocument->toByteArray() );
83 QDomElement wfsCapabilitiesElement = doc.createElement( u
"WFS_Capabilities"_s );
84 wfsCapabilitiesElement.setAttribute( u
"xmlns"_s,
WFS_NAMESPACE );
85 wfsCapabilitiesElement.setAttribute( u
"xmlns:xsi"_s, u
"http://www.w3.org/2001/XMLSchema-instance"_s );
86 wfsCapabilitiesElement.setAttribute( u
"xsi:schemaLocation"_s,
WFS_NAMESPACE +
" http://schemas.opengis.net/wfs/1.1.0/wfs.xsd" );
87 wfsCapabilitiesElement.setAttribute( u
"xmlns:ogc"_s,
OGC_NAMESPACE );
88 wfsCapabilitiesElement.setAttribute( u
"xmlns:gml"_s,
GML_NAMESPACE );
89 wfsCapabilitiesElement.setAttribute( u
"xmlns:ows"_s, u
"http://www.opengis.net/ows"_s );
90 wfsCapabilitiesElement.setAttribute( u
"xmlns:xlink"_s, u
"http://www.w3.org/1999/xlink"_s );
92 wfsCapabilitiesElement.setAttribute( u
"updateSequence"_s, u
"0"_s );
93 doc.appendChild( wfsCapabilitiesElement );
111 QDomElement filterCapabilitiesElement = doc.createElement( u
"ogc:Filter_Capabilities"_s );
112 wfsCapabilitiesElement.appendChild( filterCapabilitiesElement );
113 QDomElement spatialCapabilitiesElement = doc.createElement( u
"ogc:Spatial_Capabilities"_s );
114 filterCapabilitiesElement.appendChild( spatialCapabilitiesElement );
116 QStringList geometryOperands;
117 geometryOperands << u
"gml:Point"_s << u
"gml:LineString"_s << u
"gml:Polygon"_s
118 << u
"gml:Envelope"_s;
119 QDomElement geometryOperandsElem = doc.createElement( u
"ogc:GeometryOperands"_s );
120 for (
const QString &geometryOperand : geometryOperands )
122 QDomElement geometryOperandElem = doc.createElement( u
"ogc:GeometryOperand"_s );
123 const QDomText geometryOperandText = doc.createTextNode( geometryOperand );
124 geometryOperandElem.appendChild( geometryOperandText );
125 geometryOperandsElem.appendChild( geometryOperandElem );
127 spatialCapabilitiesElement.appendChild( geometryOperandsElem );
129 QStringList spatialOperators;
130 spatialOperators << u
"Equals"_s << u
"Disjoint"_s << u
"Touches"_s
131 << u
"Within"_s << u
"Overlaps"_s << u
"Crosses"_s
132 << u
"Intersects"_s << u
"Contains"_s << u
"BBOX"_s;
133 QDomElement spatialOperatorsElem = doc.createElement( u
"ogc:SpatialOperators"_s );
134 for (
const QString &spatialOperator : spatialOperators )
136 QDomElement spatialOperatorElem = doc.createElement( u
"ogc:SpatialOperator"_s );
137 spatialOperatorElem.setAttribute( u
"name"_s, spatialOperator );
138 spatialOperatorsElem.appendChild( spatialOperatorElem );
140 spatialCapabilitiesElement.appendChild( spatialOperatorsElem );
141 QDomElement scalarCapabilitiesElement = doc.createElement( u
"ogc:Scalar_Capabilities"_s );
142 filterCapabilitiesElement.appendChild( scalarCapabilitiesElement );
143 const QDomElement logicalOperatorsElement = doc.createElement( u
"ogc:LogicalOperators"_s );
144 scalarCapabilitiesElement.appendChild( logicalOperatorsElement );
146 QStringList comparisonOperators;
147 comparisonOperators << u
"LessThan"_s << u
"GreaterThan"_s
148 << u
"LessThanEqualTo"_s << u
"GreaterThanEqualTo"_s
149 << u
"EqualTo"_s << u
"Like"_s << u
"Between"_s;
150 QDomElement comparisonOperatorsElem = doc.createElement( u
"ogc:ComparisonOperators"_s );
151 for (
const QString &comparisonOperator : comparisonOperators )
153 QDomElement comparisonOperatorElem = doc.createElement( u
"ogc:ComparisonOperator"_s );
154 const QDomText comparisonOperatorText = doc.createTextNode( comparisonOperator );
155 comparisonOperatorElem.appendChild( comparisonOperatorText );
156 comparisonOperatorsElem.appendChild( comparisonOperatorElem );
158 scalarCapabilitiesElement.appendChild( comparisonOperatorsElem );
160 QDomElement idCapabilitiesElement = doc.createElement( u
"ogc:Id_Capabilities"_s );
161 const QDomElement fidElem = doc.createElement( u
"ogc:FID"_s );
162 idCapabilitiesElement.appendChild( fidElem );
163 filterCapabilitiesElement.appendChild( idCapabilitiesElement );
171 QDomElement serviceElem = doc.createElement( u
"ows:ServiceIdentification"_s );
174 QDomElement titleElem = doc.createElement( u
"ows:Title"_s );
175 const QDomText titleText = doc.createTextNode( title );
176 titleElem.appendChild( titleText );
177 serviceElem.appendChild( titleElem );
180 if ( !abstract.isEmpty() )
182 QDomElement abstractElem = doc.createElement( u
"ows:Abstract"_s );
183 const QDomText abstractText = doc.createCDATASection( abstract );
184 abstractElem.appendChild( abstractText );
185 serviceElem.appendChild( abstractElem );
189 if ( !keywords.isEmpty() && !keywords.join(
", "_L1 ).isEmpty() )
191 QDomElement keywordsElem = doc.createElement( u
"ows:Keywords"_s );
192 for (
const QString &keyword : keywords )
194 if ( !keyword.isEmpty() )
196 QDomElement keywordElem = doc.createElement( u
"ows:Keyword"_s );
197 const QDomText keywordText = doc.createTextNode( keyword );
198 keywordElem.appendChild( keywordText );
199 keywordsElem.appendChild( keywordElem );
202 serviceElem.appendChild( keywordsElem );
206 QDomElement serviceTypeElem = doc.createElement( u
"ows:ServiceType"_s );
207 const QDomText serviceTypeText = doc.createTextNode(
"WFS" );
208 serviceTypeElem.appendChild( serviceTypeText );
209 serviceElem.appendChild( serviceTypeElem );
212 QDomElement serviceTypeVersionElem = doc.createElement( u
"ows:ServiceTypeVersion"_s );
213 const QDomText serviceTypeVersionText = doc.createTextNode(
"1.1.0" );
214 serviceTypeVersionElem.appendChild( serviceTypeVersionText );
215 serviceElem.appendChild( serviceTypeVersionElem );
217 QDomElement feesElem = doc.createElement( u
"ows:Fees"_s );
218 QDomText feesText = doc.createTextNode(
"None" );
220 if ( !fees.isEmpty() )
222 feesText = doc.createTextNode( fees );
224 feesElem.appendChild( feesText );
225 serviceElem.appendChild( feesElem );
227 QDomElement accessConstraintsElem = doc.createElement( u
"ows:AccessConstraints"_s );
229 QDomText accessConstraintsText = doc.createTextNode(
"None" );
230 if ( !accessConstraints.isEmpty() )
232 accessConstraintsText = doc.createTextNode( accessConstraints );
234 accessConstraintsElem.appendChild( accessConstraintsText );
235 serviceElem.appendChild( accessConstraintsElem );
243 QDomElement serviceElem = doc.createElement( u
"ows:ServiceProvider"_s );
247 if ( !contactOrganization.isEmpty() )
249 QDomElement providerNameElem = doc.createElement( u
"ows:ProviderName"_s );
250 const QDomText providerNameText = doc.createTextNode( contactOrganization );
251 providerNameElem.appendChild( providerNameText );
252 serviceElem.appendChild( providerNameElem );
257 if ( !contactPerson.isEmpty() || !contactPosition.isEmpty() )
260 QDomElement serviceContactElem = doc.createElement( u
"ows:ServiceContact"_s );
262 if ( !contactPerson.isEmpty() )
264 QDomElement individualNameElem = doc.createElement( u
"ows:IndividualName"_s );
265 const QDomText individualNameText = doc.createTextNode( contactPerson );
266 individualNameElem.appendChild( individualNameText );
267 serviceContactElem.appendChild( individualNameElem );
270 if ( !contactPosition.isEmpty() )
272 QDomElement positionNameElem = doc.createElement( u
"ows:PositionName"_s );
273 const QDomText positionNameText = doc.createTextNode( contactPosition );
274 positionNameElem.appendChild( positionNameText );
275 serviceContactElem.appendChild( positionNameElem );
281 if ( !contactMail.isEmpty() || !contactPhone.isEmpty() || !onlineResource.isEmpty() )
284 QDomElement contactInfoElem = doc.createElement( u
"ows:ContactInfo"_s );
286 if ( !contactPhone.isEmpty() )
288 QDomElement phoneElem = doc.createElement( u
"ows:Phone"_s );
289 QDomElement voiceElem = doc.createElement( u
"ows:Voice"_s );
290 const QDomText voiceText = doc.createTextNode( contactPhone );
291 voiceElem.appendChild( voiceText );
292 phoneElem.appendChild( voiceElem );
293 contactInfoElem.appendChild( phoneElem );
296 if ( !contactMail.isEmpty() )
298 QDomElement addressElem = doc.createElement( u
"ows:Address"_s );
299 QDomElement mailElem = doc.createElement( u
"ows:ElectronicMailAddress"_s );
300 const QDomText mailText = doc.createTextNode( contactMail );
301 mailElem.appendChild( mailText );
302 addressElem.appendChild( mailElem );
303 contactInfoElem.appendChild( addressElem );
306 if ( !onlineResource.isEmpty() )
308 QDomElement onlineResourceElem = doc.createElement( u
"ows:OnlineResource"_s );
309 onlineResourceElem.setAttribute(
"xlink:href", onlineResource );
310 contactInfoElem.appendChild( onlineResourceElem );
314 QDomElement roleElem = doc.createElement( u
"ows:Role"_s );
315 const QDomText roleText = doc.createTextNode(
"PointOfContact" );
316 roleElem.appendChild( roleText );
317 serviceContactElem.appendChild( roleElem );
319 serviceElem.appendChild( serviceContactElem );
327 QDomElement parameterElement = doc.createElement( u
"ows:Parameter"_s );
328 parameterElement.setAttribute( u
"name"_s, name );
330 for (
const QString &v : values )
332 QDomElement valueElement = doc.createElement( u
"ows:Value"_s );
333 const QDomText valueText = doc.createTextNode( v );
334 valueElement.appendChild( valueText );
335 parameterElement.appendChild( valueElement );
338 return parameterElement;
343 QDomElement oprationsElement = doc.createElement( u
"ows:OperationsMetadata"_s );
346 const QString hrefString =
serviceUrl( request, project, *settings );
348 QDomElement operationElement = doc.createElement( u
"ows:Operation"_s );
349 QDomElement dcpElement = doc.createElement( u
"ows:DCP"_s );
350 QDomElement httpElement = doc.createElement( u
"ows:HTTP"_s );
351 QDomElement getElement = doc.createElement( u
"ows:Get"_s );
352 getElement.setAttribute( u
"xlink:href"_s, hrefString );
353 httpElement.appendChild( getElement );
355 QDomElement postElement = doc.createElement( u
"ows:Post"_s );
356 postElement.setAttribute( u
"xlink:href"_s, hrefString );
357 httpElement.appendChild( postElement );
359 dcpElement.appendChild( httpElement );
360 operationElement.appendChild( dcpElement );
363 QDomElement getCapabilitiesElement = operationElement.cloneNode().toElement();
364 getCapabilitiesElement.setAttribute( u
"name"_s, u
"GetCapabilities"_s );
366 const QDomElement serviceParameterElement =
getParameterElement( doc, u
"service"_s, QStringList() << u
"WFS"_s );
367 getCapabilitiesElement.appendChild( serviceParameterElement );
369 const QDomElement acceptVersionsParameterElement =
getParameterElement( doc, u
"AcceptVersions"_s, QStringList() << u
"1.1.0"_s << u
"1.0.0"_s );
370 getCapabilitiesElement.appendChild( acceptVersionsParameterElement );
372 const QDomElement acceptFormatsParameterElement =
getParameterElement( doc, u
"AcceptFormats"_s, QStringList() << u
"text/xml"_s );
373 getCapabilitiesElement.appendChild( acceptFormatsParameterElement );
375 oprationsElement.appendChild( getCapabilitiesElement );
378 QDomElement describeFeatureTypeElement = operationElement.cloneNode().toElement();
379 describeFeatureTypeElement.setAttribute( u
"name"_s, u
"DescribeFeatureType"_s );
381 const QDomElement dftOutputFormatParameterElement =
getParameterElement( doc, u
"outputFormat"_s, QStringList() << u
"XMLSCHEMA"_s << u
"text/xml; subtype=gml/2.1.2"_s << u
"text/xml; subtype=gml/3.1.1"_s );
382 describeFeatureTypeElement.appendChild( dftOutputFormatParameterElement );
384 oprationsElement.appendChild( describeFeatureTypeElement );
387 QDomElement getFeatureElement = operationElement.cloneNode().toElement();
388 getFeatureElement.setAttribute( u
"name"_s, u
"GetFeature"_s );
390 const QDomElement gfOutputFormatParameterElement =
getParameterElement( doc, u
"outputFormat"_s, QStringList() << u
"text/xml; subtype=gml/2.1.2"_s << u
"text/xml; subtype=gml/3.1.1"_s << u
"application/vnd.geo+json"_s );
391 getFeatureElement.appendChild( gfOutputFormatParameterElement );
393 const QDomElement resultTypeParameterElement =
getParameterElement( doc, u
"resultType"_s, QStringList() << u
"results"_s << u
"hits"_s );
394 getFeatureElement.appendChild( resultTypeParameterElement );
396 oprationsElement.appendChild( getFeatureElement );
399 QDomElement transactionElement = operationElement.cloneNode().toElement();
400 transactionElement.setAttribute( u
"name"_s, u
"Transaction"_s );
402 const QDomElement inputFormatParameterElement =
getParameterElement( doc, u
"inputFormat"_s, QStringList() << u
"text/xml; subtype=gml/2.1.2"_s << u
"text/xml; subtype=gml/3.1.1"_s << u
"application/vnd.geo+json"_s );
403 transactionElement.appendChild( inputFormatParameterElement );
405 oprationsElement.appendChild( transactionElement );
407 return oprationsElement;
412#ifdef HAVE_SERVER_PYTHON_PLUGINS
415 ( void ) serverIface;
419 QDomElement featureTypeListElement = doc.createElement( u
"FeatureTypeList"_s );
421 QDomElement operationsElement = doc.createElement( u
"Operations"_s );
422 featureTypeListElement.appendChild( operationsElement );
424 QDomElement operationElement = doc.createElement( u
"Operation"_s );
425 const QDomText queryText = doc.createTextNode(
"Query" );
426 operationElement.appendChild( queryText );
427 operationsElement.appendChild( operationElement );
433 for (
const QString &wfsLayerId : wfsLayerIds )
444#ifdef HAVE_SERVER_PYTHON_PLUGINS
450 QDomElement layerElem = doc.createElement( u
"FeatureType"_s );
453 QDomElement nameElem = doc.createElement( u
"Name"_s );
455 nameElem.appendChild( nameText );
456 layerElem.appendChild( nameElem );
459 QDomElement titleElem = doc.createElement( u
"Title"_s );
461 if ( title.isEmpty() )
463 title = layer->
name();
465 const QDomText titleText = doc.createTextNode( title );
466 titleElem.appendChild( titleText );
467 layerElem.appendChild( titleElem );
471 if ( !abstract.isEmpty() )
473 QDomElement abstractElem = doc.createElement( u
"Abstract"_s );
474 const QDomText abstractText = doc.createTextNode( abstract );
475 abstractElem.appendChild( abstractText );
476 layerElem.appendChild( abstractElem );
481 if ( !keywords.isEmpty() )
483 QDomElement keywordsElem = doc.createElement( u
"ows:Keywords"_s );
484 for (
const QString &keyword : keywords.split(
',' ) )
486 if ( !keyword.trimmed().isEmpty() )
488 QDomElement keywordElem = doc.createElement( u
"ows:Keyword"_s );
489 const QDomText keywordText = doc.createTextNode( keyword.trimmed() );
490 keywordElem.appendChild( keywordText );
491 keywordsElem.appendChild( keywordElem );
494 layerElem.appendChild( keywordsElem );
498 const QString defaultSrs = layer->
crs().
toOgcUrn();
499 QDomElement srsElem = doc.createElement( u
"DefaultSRS"_s );
500 const QDomText srsText = doc.createTextNode( defaultSrs );
501 srsElem.appendChild( srsText );
502 layerElem.appendChild( srsElem );
506 for (
const QString &crs : outputCrsList )
508 if ( crs == defaultSrs )
510 QDomElement otherSrsElem = doc.createElement( u
"OtherSRS"_s );
511 const QDomText otherSrsText = doc.createTextNode( crs );
512 otherSrsElem.appendChild( otherSrsText );
513 layerElem.appendChild( otherSrsElem );
517 QDomElement operationsElement = doc.createElement( u
"Operations"_s );
519 QDomElement operationElement = doc.createElement( u
"Operation"_s );
520 const QDomText queryText = doc.createTextNode( u
"Query"_s );
521 operationElement.appendChild( queryText );
522 operationsElement.appendChild( operationElement );
524 if ( wfstUpdateLayersId.contains( layer->
id() ) || wfstInsertLayersId.contains( layer->
id() ) || wfstDeleteLayersId.contains( layer->
id() ) )
531 QDomElement operationElement = doc.createElement( u
"Operation"_s );
532 const QDomText insertText = doc.createTextNode( u
"Insert"_s );
533 operationElement.appendChild( insertText );
534 operationsElement.appendChild( operationElement );
540 QDomElement operationElement = doc.createElement( u
"Operation"_s );
541 const QDomText updateText = doc.createTextNode( u
"Update"_s );
542 operationElement.appendChild( updateText );
543 operationsElement.appendChild( operationElement );
549 QDomElement operationElement = doc.createElement( u
"Operation"_s );
550 const QDomText deleteText = doc.createTextNode( u
"Delete"_s );
551 operationElement.appendChild( deleteText );
552 operationsElement.appendChild( operationElement );
556 layerElem.appendChild( operationsElement );
562 const int wgs84precision = 6;
564 if ( !layerExtent.
isNull() )
578 QDomElement bBoxElement = doc.createElement( u
"ows:WGS84BoundingBox"_s );
579 bBoxElement.setAttribute( u
"dimensions"_s, u
"2"_s );
580 QDomElement lCornerElement = doc.createElement( u
"ows:LowerCorner"_s );
582 lCornerElement.appendChild( lCornerText );
583 bBoxElement.appendChild( lCornerElement );
584 QDomElement uCornerElement = doc.createElement( u
"ows:UpperCorner"_s );
586 uCornerElement.appendChild( uCornerText );
587 bBoxElement.appendChild( uCornerElement );
588 layerElem.appendChild( bBoxElement );
594 QDomElement metaUrlElem = doc.createElement( u
"MetadataURL"_s );
595 const QString metadataUrlType = url.type;
596 metaUrlElem.setAttribute( u
"type"_s, metadataUrlType );
597 const QString metadataUrlFormat = url.format;
598 metaUrlElem.setAttribute( u
"format"_s, metadataUrlFormat );
599 const QDomText metaUrlText = doc.createTextNode( url.url );
600 metaUrlElem.appendChild( metaUrlText );
601 layerElem.appendChild( metaUrlElem );
604 featureTypeListElement.appendChild( layerElem );
607 return featureTypeListElement;
@ AddFeatures
Allows adding features.
@ ChangeGeometries
Allows modifications of geometries.
@ DeleteFeatures
Allows deletion of features.
@ ChangeAttributeValues
Allows modification of attribute values.
static QString geographicCrsAuthId()
Geographic coordinate system auth:id string for a default geographic CRS (EPSG:4326).
A helper class that centralizes restrictions given by all the access control filter plugins.
bool layerReadPermission(const QgsMapLayer *layer) const
Returns the layer read right.
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 toOgcUrn() const
Returns the crs as OGC URN (format: urn:ogc:def:crs:OGC:1.3:CRS84) Returns an empty string on failure...
Custom exception class for Coordinate Reference System related exceptions.
QString keywordList() const
Returns the keyword list of the layerused by QGIS Server in GetCapabilities request.
QString wfsTitle() const
Returns the optional WFS title if set or the title of the layer used by QGIS WFS in GetCapabilities r...
QString wfsTypeName() const
Returns WFS typename for the layer.
QString abstract() const
Returns the abstract of the layerused by QGIS Server in GetCapabilities request.
Base class for all map layer types.
virtual bool isSpatial() const
Returns true if the layer is considered a spatial layer, ie it has some form of geometry associated w...
virtual QgsRectangle extent() const
Returns the extent of the layer.
QgsCoordinateReferenceSystem crs
QgsMapLayerServerProperties * serverProperties()
Returns QGIS Server Properties for the map layer.
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
Q_INVOKABLE QgsMapLayer * mapLayer(const QString &layerId) const
Retrieve a pointer to a registered layer by layer ID.
A rectangle specified with double values.
A helper class that centralizes caches accesses given by all the server cache filter plugins.
bool setCachedDocument(const QDomDocument *doc, const QgsProject *project, const QgsServerRequest &request, QgsAccessControl *accessControl) const
Updates or inserts the document in cache like capabilities.
bool getCachedDocument(QDomDocument *doc, const QgsProject *project, const QgsServerRequest &request, QgsAccessControl *accessControl) const
Returns cached document (or 0 if document not in cache) like capabilities.
Defines interfaces exposed by QGIS Server and made available to plugins.
virtual QgsServerCacheManager * cacheManager() const =0
Gets the registered server cache filters.
virtual QgsAccessControl * accessControls() const =0
Gets the registered access control filters.
virtual QgsServerSettings * serverSettings()=0
Returns the server settings.
static double ceilWithPrecision(double number, int places)
Returns a double greater than number to the specified number of places.
static QString owsServiceAccessConstraints(const QgsProject &project)
Returns the owsService access constraints defined in project.
static QStringList wfsLayerIds(const QgsProject &project)
Returns the Layer ids list defined in a QGIS project as published in WFS.
static QString owsServiceOnlineResource(const QgsProject &project)
Returns the owsService online resource defined in project.
static QString owsServiceFees(const QgsProject &project)
Returns the owsService fees defined in project.
static QStringList owsServiceKeywords(const QgsProject &project)
Returns the owsService keywords defined in project.
static QString owsServiceContactPosition(const QgsProject &project)
Returns the owsService contact position defined in project.
static QStringList wfstUpdateLayerIds(const QgsProject &project)
Returns the Layer ids list defined in a QGIS project as published as WFS-T with update capabilities.
static QStringList wmsOutputCrsListAsOgcUrn(const QgsProject &project)
Returns the WMS output CRS list as OGC URNs.
static QStringList wfstInsertLayerIds(const QgsProject &project)
Returns the Layer ids list defined in a QGIS project as published as WFS-T with insert capabilities.
static QString owsServiceContactOrganization(const QgsProject &project)
Returns the owsService contact organization defined in project.
static QString owsServiceTitle(const QgsProject &project)
Returns the owsService title defined in project.
static QString owsServiceContactMail(const QgsProject &project)
Returns the owsService contact mail defined in project.
static QString owsServiceAbstract(const QgsProject &project)
Returns the owsService abstract defined in project.
static double floorWithPrecision(double number, int places)
Returns a double less than number to the specified number of places.
static QStringList wfstDeleteLayerIds(const QgsProject &project)
Returns the Layer ids list defined in a QGIS project as published as WFS-T with delete capabilities.
static QString owsServiceContactPhone(const QgsProject &project)
Returns the owsService contact phone defined in project.
static QString owsServiceContactPerson(const QgsProject &project)
Returns the owsService contact person defined in project.
Defines requests passed to QgsService classes.
Defines the response interface passed to QgsService.
virtual void write(const QString &data)
Write string This is a convenient method that will write directly to the underlying I/O device.
virtual void setHeader(const QString &key, const QString &value)=0
Set Header entry Add Header entry to the response Note that it is usually an error to set Header afte...
Provides a way to retrieve settings by prioritizing according to environment variables,...
Base class for vector data providers.
virtual Q_INVOKABLE Qgis::VectorProviderCapabilities capabilities() const
Returns flags containing the supported capabilities.
Represents a vector layer which manages a vector based dataset.
QgsVectorDataProvider * dataProvider() final
Returns the layer's data provider, it may be nullptr.
QString implementationVersion()
Returns the highest version supported by this implementation.
QDomElement getParameterElement(QDomDocument &doc, const QString &name, const QStringList &values)
Create a parameter element.
QString serviceUrl(const QgsServerRequest &request, const QgsProject *project, const QgsServerSettings &settings)
Service URL string.
const QString OGC_NAMESPACE
QDomElement getOperationsMetadataElement(QDomDocument &doc, const QgsProject *project, const QgsServerRequest &request, const QgsServerSettings *settings)
Create OperationsMetadata element for get capabilities document.
const QString GML_NAMESPACE
const QString WFS_NAMESPACE
QDomElement getFeatureTypeListElement(QDomDocument &doc, QgsServerInterface *serverIface, const QgsProject *project)
Create FeatureTypeList element for get capabilities document.
void writeGetCapabilities(QgsServerInterface *serverIface, const QgsProject *project, const QString &version, const QgsServerRequest &request, QgsServerResponse &response)
Output WFS GetCapabilities response.
QDomDocument createGetCapabilitiesDocument(QgsServerInterface *serverIface, const QgsProject *project, const QString &version, const QgsServerRequest &request)
Create get capabilities document.
QDomElement getServiceIdentificationElement(QDomDocument &doc, const QgsProject *project)
Create Service Identification element for get capabilities document.
QDomElement getServiceProviderElement(QDomDocument &doc, const QgsProject *project)
Create Service Provider element for get capabilities document.
QString qgsDoubleToString(double a, int precision=17)
Returns a string representation of a double.