41 #ifdef HAVE_SERVER_PYTHON_PLUGINS 45 const QDomDocument *capabilitiesDocument =
nullptr;
47 #ifdef HAVE_SERVER_PYTHON_PLUGINS 49 if ( cacheManager && cacheManager->
getCachedDocument( &doc, project, request, accessControl ) )
51 capabilitiesDocument = &doc;
61 capabilitiesDocument = &doc;
65 capabilitiesDocument = &doc;
67 response.
setHeader( QStringLiteral(
"Content-Type" ), QStringLiteral(
"text/xml; charset=utf-8" ) );
68 response.
write( capabilitiesDocument->toByteArray() );
80 QDomElement wfsCapabilitiesElement = doc.createElement( QStringLiteral(
"WFS_Capabilities" ) );
81 wfsCapabilitiesElement.setAttribute( QStringLiteral(
"xmlns" ),
WFS_NAMESPACE );
82 wfsCapabilitiesElement.setAttribute( QStringLiteral(
"xmlns:xsi" ), QStringLiteral(
"http://www.w3.org/2001/XMLSchema-instance" ) );
83 wfsCapabilitiesElement.setAttribute( QStringLiteral(
"xsi:schemaLocation" ),
WFS_NAMESPACE +
" http://schemas.opengis.net/wfs/1.0.0/WFS-capabilities.xsd" );
84 wfsCapabilitiesElement.setAttribute( QStringLiteral(
"xmlns:ogc" ),
OGC_NAMESPACE );
85 wfsCapabilitiesElement.setAttribute( QStringLiteral(
"xmlns:gml" ),
GML_NAMESPACE );
86 wfsCapabilitiesElement.setAttribute( QStringLiteral(
"xmlns:ows" ), QStringLiteral(
"http://www.opengis.net/ows" ) );
87 wfsCapabilitiesElement.setAttribute( QStringLiteral(
"xmlns:xlink" ), QStringLiteral(
"http://www.w3.org/1999/xlink" ) );
89 wfsCapabilitiesElement.setAttribute( QStringLiteral(
"updateSequence" ), QStringLiteral(
"0" ) );
90 doc.appendChild( wfsCapabilitiesElement );
108 QDomElement filterCapabilitiesElement = doc.createElement( QStringLiteral(
"ogc:Filter_Capabilities" ) );
109 wfsCapabilitiesElement.appendChild( filterCapabilitiesElement );
110 QDomElement spatialCapabilitiesElement = doc.createElement( QStringLiteral(
"ogc:Spatial_Capabilities" ) );
111 filterCapabilitiesElement.appendChild( spatialCapabilitiesElement );
113 QStringList geometryOperands;
114 geometryOperands << QStringLiteral(
"gml:Point" ) << QStringLiteral(
"gml:LineString" ) << QStringLiteral(
"gml:Polygon" )
115 << QStringLiteral(
"gml:Envelope" );
116 QDomElement geometryOperandsElem = doc.createElement( QStringLiteral(
"ogc:GeometryOperands" ) );
117 for (
const QString &geometryOperand : geometryOperands )
119 QDomElement geometryOperandElem = doc.createElement( QStringLiteral(
"ogc:GeometryOperand" ) );
120 QDomText geometryOperandText = doc.createTextNode( geometryOperand );
121 geometryOperandElem.appendChild( geometryOperandText );
122 geometryOperandsElem.appendChild( geometryOperandElem );
124 spatialCapabilitiesElement.appendChild( geometryOperandsElem );
126 QStringList spatialOperators;
127 spatialOperators << QStringLiteral(
"Equals" ) << QStringLiteral(
"Disjoint" ) << QStringLiteral(
"Touches" )
128 << QStringLiteral(
"Within" ) << QStringLiteral(
"Overlaps" ) << QStringLiteral(
"Crosses" )
129 << QStringLiteral(
"Intersects" ) << QStringLiteral(
"Contains" ) << QStringLiteral(
"DWithin" )
130 << QStringLiteral(
"Beyond" ) << QStringLiteral(
"BBOX" );
131 QDomElement spatialOperatorsElem = doc.createElement( QStringLiteral(
"ogc:SpatialOperators" ) );
132 for (
const QString &spatialOperator : spatialOperators )
134 QDomElement spatialOperatorElem = doc.createElement( QStringLiteral(
"ogc:SpatialOperator" ) );
135 spatialOperatorElem.setAttribute( QStringLiteral(
"name" ), spatialOperator );
136 spatialOperatorsElem.appendChild( spatialOperatorElem );
138 spatialCapabilitiesElement.appendChild( spatialOperatorsElem );
139 QDomElement scalarCapabilitiesElement = doc.createElement( QStringLiteral(
"ogc:Scalar_Capabilities" ) );
140 filterCapabilitiesElement.appendChild( scalarCapabilitiesElement );
141 QDomElement logicalOperatorsElement = doc.createElement( QStringLiteral(
"ogc:LogicalOperators" ) );
142 scalarCapabilitiesElement.appendChild( logicalOperatorsElement );
144 QStringList comparisonOperators;
145 comparisonOperators << QStringLiteral(
"LessThan" ) << QStringLiteral(
"GreaterThan" )
146 << QStringLiteral(
"LessThanEqualTo" ) << QStringLiteral(
"GreaterThanEqualTo" )
147 << QStringLiteral(
"EqualTo" ) << QStringLiteral(
"Like" ) << QStringLiteral(
"Between" );
148 QDomElement comparisonOperatorsElem = doc.createElement( QStringLiteral(
"ogc:ComparisonOperators" ) );
149 for (
const QString &comparisonOperator : comparisonOperators )
151 QDomElement comparisonOperatorElem = doc.createElement( QStringLiteral(
"ogc:ComparisonOperator" ) );
152 QDomText comparisonOperatorText = doc.createTextNode( comparisonOperator );
153 comparisonOperatorElem.appendChild( comparisonOperatorText );
154 comparisonOperatorsElem.appendChild( comparisonOperatorElem );
156 scalarCapabilitiesElement.appendChild( comparisonOperatorsElem );
158 QDomElement idCapabilitiesElement = doc.createElement( QStringLiteral(
"ogc:Id_Capabilities" ) );
159 QDomElement fidElem = doc.createElement( QStringLiteral(
"ogc:FID" ) );
160 idCapabilitiesElement.appendChild( fidElem );
161 filterCapabilitiesElement.appendChild( idCapabilitiesElement );
170 QDomElement serviceElem = doc.createElement( QStringLiteral(
"ows:ServiceIdentification" ) );
173 if ( !title.isEmpty() )
175 QDomElement titleElem = doc.createElement( QStringLiteral(
"ows:Title" ) );
176 QDomText titleText = doc.createTextNode( title );
177 titleElem.appendChild( titleText );
178 serviceElem.appendChild( titleElem );
182 if ( !
abstract.isEmpty() )
184 QDomElement abstractElem = doc.createElement( QStringLiteral(
"ows:Abstract" ) );
185 QDomText abstractText = doc.createCDATASection(
abstract );
186 abstractElem.appendChild( abstractText );
187 serviceElem.appendChild( abstractElem );
191 if ( !keywords.isEmpty() && !keywords.join( QStringLiteral(
", " ) ).isEmpty() )
193 QDomElement keywordsElem = doc.createElement( QStringLiteral(
"ows:Keywords" ) );
194 for (
const QString &keyword : keywords )
196 if ( !keyword.isEmpty() )
198 QDomElement keywordElem = doc.createElement( QStringLiteral(
"ows:Keyword" ) );
199 QDomText keywordText = doc.createTextNode( keyword );
200 keywordElem.appendChild( keywordText );
201 keywordsElem.appendChild( keywordElem );
204 serviceElem.appendChild( keywordsElem );
208 QDomElement serviceTypeElem = doc.createElement( QStringLiteral(
"ows:ServiceType" ) );
209 QDomText serviceTypeText = doc.createTextNode(
"WFS" );
210 serviceTypeElem.appendChild( serviceTypeText );
211 serviceElem.appendChild( serviceTypeElem );
214 QDomElement serviceTypeVersionElem = doc.createElement( QStringLiteral(
"ows:ServiceTypeVersion" ) );
215 QDomText serviceTypeVersionText = doc.createTextNode(
"1.1.0" );
216 serviceTypeVersionElem.appendChild( serviceTypeVersionText );
217 serviceElem.appendChild( serviceTypeVersionElem );
219 QDomElement feesElem = doc.createElement( QStringLiteral(
"ows:Fees" ) );
220 QDomText feesText = doc.createTextNode(
"None" );
222 if ( !fees.isEmpty() )
224 feesText = doc.createTextNode( fees );
226 feesElem.appendChild( feesText );
227 serviceElem.appendChild( feesElem );
229 QDomElement accessConstraintsElem = doc.createElement( QStringLiteral(
"ows:AccessConstraints" ) );
231 QDomText accessConstraintsText = doc.createTextNode(
"None" );
232 if ( !accessConstraints.isEmpty() )
234 accessConstraintsText = doc.createTextNode( accessConstraints );
236 accessConstraintsElem.appendChild( accessConstraintsText );
237 serviceElem.appendChild( accessConstraintsElem );
246 QDomElement serviceElem = doc.createElement( QStringLiteral(
"ows:ServiceProvider" ) );
250 if ( !contactOrganization.isEmpty() )
252 QDomElement providerNameElem = doc.createElement( QStringLiteral(
"ows:ProviderName" ) );
253 QDomText providerNameText = doc.createTextNode( contactOrganization );
254 providerNameElem.appendChild( providerNameText );
255 serviceElem.appendChild( providerNameElem );
260 if ( !contactPerson.isEmpty() ||
261 !contactPosition.isEmpty() )
264 QDomElement serviceContactElem = doc.createElement( QStringLiteral(
"ows:ServiceContact" ) );
266 if ( !contactPerson.isEmpty() )
268 QDomElement individualNameElem = doc.createElement( QStringLiteral(
"ows:IndividualName" ) );
269 QDomText individualNameText = doc.createTextNode( contactPerson );
270 individualNameElem.appendChild( individualNameText );
271 serviceContactElem.appendChild( individualNameElem );
274 if ( !contactPosition.isEmpty() )
276 QDomElement positionNameElem = doc.createElement( QStringLiteral(
"ows:PositionName" ) );
277 QDomText positionNameText = doc.createTextNode( contactPosition );
278 positionNameElem.appendChild( positionNameText );
279 serviceContactElem.appendChild( positionNameElem );
285 if ( !contactMail.isEmpty() ||
286 !contactPhone.isEmpty() ||
287 !onlineResource.isEmpty() )
290 QDomElement contactInfoElem = doc.createElement( QStringLiteral(
"ows:ContactInfo" ) );
292 if ( !contactPhone.isEmpty() )
294 QDomElement phoneElem = doc.createElement( QStringLiteral(
"ows:Phone" ) );
295 QDomElement voiceElem = doc.createElement( QStringLiteral(
"ows:Voice" ) );
296 QDomText voiceText = doc.createTextNode( contactPhone );
297 voiceElem.appendChild( voiceText );
298 phoneElem.appendChild( voiceElem );
299 contactInfoElem.appendChild( phoneElem );
302 if ( !contactMail.isEmpty() )
304 QDomElement addressElem = doc.createElement( QStringLiteral(
"ows:Address" ) );
305 QDomElement mailElem = doc.createElement( QStringLiteral(
"ows:ElectronicMailAddress" ) );
306 QDomText mailText = doc.createTextNode( contactMail );
307 mailElem.appendChild( mailText );
308 addressElem.appendChild( mailElem );
309 contactInfoElem.appendChild( addressElem );
312 if ( !onlineResource.isEmpty() )
314 QDomElement onlineResourceElem = doc.createElement( QStringLiteral(
"ows:OnlineResource" ) );
315 onlineResourceElem.setAttribute(
"xlink:href", onlineResource );
316 contactInfoElem.appendChild( onlineResourceElem );
320 QDomElement roleElem = doc.createElement( QStringLiteral(
"ows:Role" ) );
321 QDomText roleText = doc.createTextNode(
"PointOfContact" );
322 roleElem.appendChild( roleText );
323 serviceContactElem.appendChild( roleElem );
325 serviceElem.appendChild( serviceContactElem );
334 QDomElement parameterElement = doc.createElement( QStringLiteral(
"ows:Parameter" ) );
335 parameterElement.setAttribute( QStringLiteral(
"name" ), name );
337 for (
const QString &v : values )
339 QDomElement valueElement = doc.createElement( QStringLiteral(
"ows:Value" ) );
340 QDomText valueText = doc.createTextNode( v );
341 valueElement.appendChild( valueText );
342 parameterElement.appendChild( valueElement );
345 return parameterElement;
350 QDomElement oprationsElement = doc.createElement( QStringLiteral(
"ows:OperationsMetadata" ) );
353 QString hrefString =
serviceUrl( request, project );
355 QDomElement operationElement = doc.createElement( QStringLiteral(
"ows:Operation" ) );
356 QDomElement dcpElement = doc.createElement( QStringLiteral(
"ows:DCP" ) );
357 QDomElement httpElement = doc.createElement( QStringLiteral(
"ows:HTTP" ) );
358 QDomElement getElement = doc.createElement( QStringLiteral(
"ows:Get" ) );
359 getElement.setAttribute( QStringLiteral(
"xlink:href" ), hrefString );
360 httpElement.appendChild( getElement );
362 QDomElement postElement = doc.createElement( QStringLiteral(
"ows:Post" ) );
363 postElement.setAttribute( QStringLiteral(
"xlink:href" ), hrefString );
364 httpElement.appendChild( postElement );
366 dcpElement.appendChild( httpElement );
367 operationElement.appendChild( dcpElement );
370 QDomElement getCapabilitiesElement = operationElement.cloneNode().toElement();
371 getCapabilitiesElement.setAttribute( QStringLiteral(
"name" ), QStringLiteral(
"GetCapabilities" ) );
373 QDomElement serviceParameterElement =
getParameterElement( doc, QStringLiteral(
"service" ),
374 QStringList() << QStringLiteral(
"WFS" ) );
375 getCapabilitiesElement.appendChild( serviceParameterElement );
377 QDomElement acceptVersionsParameterElement =
getParameterElement( doc, QStringLiteral(
"AcceptVersions" ),
378 QStringList() << QStringLiteral(
"1.1.0" ) << QStringLiteral(
"1.0.0" ) );
379 getCapabilitiesElement.appendChild( acceptVersionsParameterElement );
381 QDomElement acceptFormatsParameterElement =
getParameterElement( doc, QStringLiteral(
"AcceptFormats" ),
382 QStringList() << QStringLiteral(
"text/xml" ) );
383 getCapabilitiesElement.appendChild( acceptFormatsParameterElement );
385 oprationsElement.appendChild( getCapabilitiesElement );
388 QDomElement describeFeatureTypeElement = operationElement.cloneNode().toElement();
389 describeFeatureTypeElement.setAttribute( QStringLiteral(
"name" ), QStringLiteral(
"DescribeFeatureType" ) );
391 QDomElement dftOutputFormatParameterElement =
getParameterElement( doc, QStringLiteral(
"outputFormat" ),
392 QStringList() << QStringLiteral(
"XMLSCHEMA" )
393 << QStringLiteral(
"text/xml; subtype=gml/2.1.2" )
394 << QStringLiteral(
"text/xml; subtype=gml/3.1.1" ) );
395 describeFeatureTypeElement.appendChild( dftOutputFormatParameterElement );
397 oprationsElement.appendChild( describeFeatureTypeElement );
400 QDomElement getFeatureElement = operationElement.cloneNode().toElement();
401 getFeatureElement.setAttribute( QStringLiteral(
"name" ), QStringLiteral(
"GetFeature" ) );
403 QDomElement gfOutputFormatParameterElement =
getParameterElement( doc, QStringLiteral(
"outputFormat" ),
404 QStringList() << QStringLiteral(
"text/xml; subtype=gml/2.1.2" )
405 << QStringLiteral(
"text/xml; subtype=gml/3.1.1" )
406 << QStringLiteral(
"application/vnd.geo+json" ) );
407 getFeatureElement.appendChild( gfOutputFormatParameterElement );
409 QDomElement resultTypeParameterElement =
getParameterElement( doc, QStringLiteral(
"resultType" ),
410 QStringList() << QStringLiteral(
"results" ) << QStringLiteral(
"hits" ) );
411 getFeatureElement.appendChild( resultTypeParameterElement );
413 oprationsElement.appendChild( getFeatureElement );
416 QDomElement transactionElement = operationElement.cloneNode().toElement();
417 transactionElement.setAttribute( QStringLiteral(
"name" ), QStringLiteral(
"Transaction" ) );
419 QDomElement inputFormatParameterElement =
getParameterElement( doc, QStringLiteral(
"inputFormat" ),
420 QStringList() << QStringLiteral(
"text/xml; subtype=gml/2.1.2" )
421 << QStringLiteral(
"text/xml; subtype=gml/3.1.1" )
422 << QStringLiteral(
"application/vnd.geo+json" ) );
423 transactionElement.appendChild( inputFormatParameterElement );
425 oprationsElement.appendChild( transactionElement );
427 return oprationsElement;
433 #ifdef HAVE_SERVER_PYTHON_PLUGINS 440 QDomElement featureTypeListElement = doc.createElement( QStringLiteral(
"FeatureTypeList" ) );
442 QDomElement operationsElement = doc.createElement( QStringLiteral(
"Operations" ) );
443 featureTypeListElement.appendChild( operationsElement );
445 QDomElement operationElement = doc.createElement( QStringLiteral(
"Operation" ) );
446 QDomText queryText = doc.createTextNode(
"Query" );
447 operationElement.appendChild( queryText );
448 operationsElement.appendChild( operationElement );
454 for (
const QString &wfsLayerId : wfsLayerIds )
465 #ifdef HAVE_SERVER_PYTHON_PLUGINS 471 QDomElement layerElem = doc.createElement( QStringLiteral(
"FeatureType" ) );
474 QDomElement nameElem = doc.createElement( QStringLiteral(
"Name" ) );
475 QDomText nameText = doc.createTextNode(
layerTypeName( layer ) );
476 nameElem.appendChild( nameText );
477 layerElem.appendChild( nameElem );
480 QDomElement titleElem = doc.createElement( QStringLiteral(
"Title" ) );
481 QString title = layer->
title();
482 if ( title.isEmpty() )
484 title = layer->
name();
486 QDomText titleText = doc.createTextNode( title );
487 titleElem.appendChild( titleText );
488 layerElem.appendChild( titleElem );
491 QString
abstract = layer->
abstract();
492 if ( !
abstract.isEmpty() )
494 QDomElement abstractElem = doc.createElement( QStringLiteral(
"Abstract" ) );
495 QDomText abstractText = doc.createTextNode(
abstract );
496 abstractElem.appendChild( abstractText );
497 layerElem.appendChild( abstractElem );
502 if ( !keywords.isEmpty() )
504 QDomElement keywordsElem = doc.createElement( QStringLiteral(
"ows:Keywords" ) );
505 for (
const QString &keyword : keywords.split(
',' ) )
507 if ( !keyword.trimmed().isEmpty() )
509 QDomElement keywordElem = doc.createElement( QStringLiteral(
"ows:Keyword" ) );
510 QDomText keywordText = doc.createTextNode( keyword.trimmed() );
511 keywordElem.appendChild( keywordText );
512 keywordsElem.appendChild( keywordElem );
515 layerElem.appendChild( keywordsElem );
519 const QString defaultSrs = layer->
crs().
authid();
520 QDomElement srsElem = doc.createElement( QStringLiteral(
"DefaultSRS" ) );
521 QDomText srsText = doc.createTextNode( defaultSrs );
522 srsElem.appendChild( srsText );
523 layerElem.appendChild( srsElem );
527 for (
const QString &
crs : outputCrsList )
529 if (
crs == defaultSrs )
531 QDomElement otherSrsElem = doc.createElement( QStringLiteral(
"OtherSRS" ) );
532 QDomText otherSrsText = doc.createTextNode(
crs );
533 otherSrsElem.appendChild( otherSrsText );
534 layerElem.appendChild( otherSrsElem );
538 QDomElement operationsElement = doc.createElement( QStringLiteral(
"Operations" ) );
540 QDomElement operationElement = doc.createElement( QStringLiteral(
"Operation" ) );
541 QDomText queryText = doc.createTextNode( QStringLiteral(
"Query" ) );
542 operationElement.appendChild( queryText );
543 operationsElement.appendChild( operationElement );
545 if ( wfstUpdateLayersId.contains( layer->
id() ) ||
546 wfstInsertLayersId.contains( layer->
id() ) ||
547 wfstDeleteLayersId.contains( layer->
id() ) )
554 QDomElement operationElement = doc.createElement( QStringLiteral(
"Operation" ) );
555 QDomText insertText = doc.createTextNode( QStringLiteral(
"Insert" ) );
556 operationElement.appendChild( insertText );
557 operationsElement.appendChild( operationElement );
562 wfstUpdateLayersId.contains( layer->
id() ) )
565 QDomElement operationElement = doc.createElement( QStringLiteral(
"Operation" ) );
566 QDomText updateText = doc.createTextNode( QStringLiteral(
"Update" ) );
567 operationElement.appendChild( updateText );
568 operationsElement.appendChild( operationElement );
574 QDomElement operationElement = doc.createElement( QStringLiteral(
"Operation" ) );
575 QDomText deleteText = doc.createTextNode( QStringLiteral(
"Delete" ) );
576 operationElement.appendChild( deleteText );
577 operationsElement.appendChild( operationElement );
581 layerElem.appendChild( operationsElement );
584 QDomElement outputFormatsElem = doc.createElement( QStringLiteral(
"OutputFormats" ) );
585 QDomElement outputFormatElem = doc.createElement( QStringLiteral(
"Format" ) );
586 QDomText outputFormatText = doc.createTextNode( QStringLiteral(
"text/xml; subtype=gml/3.1.1" ) );
587 outputFormatElem.appendChild( outputFormatText );
588 outputFormatsElem.appendChild( outputFormatElem );
589 layerElem.appendChild( outputFormatsElem );
596 if ( !layerExtent.
isNull() )
601 wgs84BoundingRect = exGeoTransform.transformBoundingBox( layerExtent );
610 QDomElement bBoxElement = doc.createElement( QStringLiteral(
"ows:WGS84BoundingBox" ) );
611 bBoxElement.setAttribute( QStringLiteral(
"dimensions" ), QStringLiteral(
"2" ) );
612 QDomElement lCornerElement = doc.createElement( QStringLiteral(
"ows:LowerCorner" ) );
613 QDomText lCornerText = doc.createTextNode( QString::number( wgs84BoundingRect.
xMinimum() ) +
" " + QString::number( wgs84BoundingRect.
yMinimum() ) );
614 lCornerElement.appendChild( lCornerText );
615 bBoxElement.appendChild( lCornerElement );
616 QDomElement uCornerElement = doc.createElement( QStringLiteral(
"ows:UpperCorner" ) );
617 QDomText uCornerText = doc.createTextNode( QString::number( wgs84BoundingRect.
xMaximum() ) +
" " + QString::number( wgs84BoundingRect.
yMaximum() ) );
618 uCornerElement.appendChild( uCornerText );
619 bBoxElement.appendChild( uCornerElement );
620 layerElem.appendChild( bBoxElement );
624 if ( !metadataUrl.isEmpty() )
626 QDomElement metaUrlElem = doc.createElement( QStringLiteral(
"MetadataURL" ) );
628 metaUrlElem.setAttribute( QStringLiteral(
"type" ), metadataUrlType );
630 metaUrlElem.setAttribute( QStringLiteral(
"format" ), metadataUrlFormat );
631 QDomText metaUrlText = doc.createTextNode( metadataUrl );
632 metaUrlElem.appendChild( metaUrlText );
633 layerElem.appendChild( metaUrlElem );
636 featureTypeListElement.appendChild( layerElem );
639 return featureTypeListElement;
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...
SERVER_EXPORT QStringList wmsOutputCrsList(const QgsProject &project)
Returns the WMS output CRS list.
QDomElement getParameterElement(QDomDocument &doc, const QString &name, const QStringList &values)
Create a parameter element.
A rectangle specified with double values.
Base class for all map layer types.
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...
QDomDocument createGetCapabilitiesDocument(QgsServerInterface *serverIface, const QgsProject *project, const QString &version, const QgsServerRequest &request)
Create get capabilities document.
QgsMapLayerType type() const
Returns the type of the layer.
SERVER_EXPORT QString owsServiceContactPosition(const QgsProject &project)
Returns the owsService contact position defined in project.
SERVER_EXPORT QString owsServiceContactPerson(const QgsProject &project)
Returns the owsService contact person defined in project.
SERVER_EXPORT QStringList owsServiceKeywords(const QgsProject &project)
Returns the owsService keywords defined in project.
QDomElement getFeatureTypeListElement(QDomDocument &doc, QgsServerInterface *serverIface, const QgsProject *project)
Create FeatureTypeList element for get capabilities document.
SERVER_EXPORT QString owsServiceAbstract(const QgsProject &project)
Returns the owsService abstract defined in project.
QString abstract() const
Returns the abstract of the layer used by QGIS Server in GetCapabilities request. ...
const QgsCoordinateReferenceSystem & crs
virtual void write(const QString &data)
Write string This is a convenient method that will write directly to the underlying I/O device...
QString layerTypeName(const QgsMapLayer *layer)
Returns typename from vector layer.
virtual QgsRectangle extent() const
Returns the extent of the layer.
QString metadataUrlFormat() const
Returns the metadata format of the layer used by QGIS Server in GetCapabilities request.
QString serviceUrl(const QgsServerRequest &request, const QgsProject *project)
Service URL string.
QString id() const
Returns the layer's unique ID, which is used to access this layer from QgsProject.
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...
QString keywordList() const
Returns the keyword list of the layer used by QGIS Server in GetCapabilities request.
QDomElement getServiceIdentificationElement(QDomDocument &doc, const QgsProject *project)
Create Service Identification element for get capabilities document.
const QString GML_NAMESPACE
const QString WFS_NAMESPACE
A helper class that centralizes caches accesses given by all the server cache filter plugins...
Allows modifications of geometries.
Encapsulates a QGIS project, including sets of map layers and their styles, layouts, annotations, canvases, etc.
const QString GEO_EPSG_CRS_AUTHID
Geographic coord sys from EPSG authority.
QDomElement getOperationsMetadataElement(QDomDocument &doc, const QgsProject *project, const QgsServerRequest &request)
Create OperationsMetadata element for get capabilities document.
QString implementationVersion()
Returns the highest version supported by this implementation.
SERVER_EXPORT QString owsServiceFees(const QgsProject &project)
Returns the owsService fees defined in project.
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.
SERVER_EXPORT QString owsServiceAccessConstraints(const QgsProject &project)
Returns the owsService access constraints defined in project.
SERVER_EXPORT QString owsServiceOnlineResource(const QgsProject &project)
Returns the owsService online resource defined in project.
QString title() const
Returns the title of the layer used by QGIS Server in GetCapabilities request.
SERVER_EXPORT QString owsServiceContactOrganization(const QgsProject &project)
Returns the owsService contact organization defined in project.
double yMinimum() const
Returns the y minimum value (bottom side of rectangle).
const QString OGC_NAMESPACE
double xMaximum() const
Returns the x maximum value (right side of rectangle).
QgsServerRequest Class defining request interface passed to services QgsService::executeRequest() met...
bool layerReadPermission(const QgsMapLayer *layer) const
Returns the layer read right.
QgsServerInterface Class defining interfaces exposed by QGIS Server and made available to plugins...
static QgsCoordinateReferenceSystem fromOgcWmsCrs(const QString &ogcCrs)
Creates a CRS from a given OGC WMS-format Coordinate Reference System string.
SERVER_EXPORT QStringList wfsLayerIds(const QgsProject &project)
Returns the Layer ids list defined in a QGIS project as published in WFS.
This class represents a coordinate reference system (CRS).
bool isNull() const
Test if the rectangle is null (all coordinates zero or after call to setMinimal()).
bool setCachedDocument(const QDomDocument *doc, const QgsProject *project, const QgsServerRequest &request, QgsAccessControl *accessControl) const
Updates or inserts the document in cache like capabilities.
virtual QgsServerCacheManager * cacheManager() const =0
Gets the registered server cache filters.
double xMinimum() const
Returns the x minimum value (left side of rectangle).
A helper class that centralizes restrictions given by all the access control filter plugins...
Q_INVOKABLE QgsMapLayer * mapLayer(const QString &layerId) const
Retrieve a pointer to a registered layer by layer ID.
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...
void writeGetCapabilities(QgsServerInterface *serverIface, const QgsProject *project, const QString &version, const QgsServerRequest &request, QgsServerResponse &response)
Output WFS GetCapabilities response.
QString metadataUrl() const
Returns the metadata URL of the layer used by QGIS Server in GetCapabilities request.
Allows deletion of features.
double yMaximum() const
Returns the y maximum value (top side of rectangle).
QgsServerResponse Class defining response interface passed to services QgsService::executeRequest() m...
Custom exception class for Coordinate Reference System related exceptions.
virtual QgsAccessControl * accessControls() const =0
Gets the registered access control filters.
SERVER_EXPORT QString owsServiceContactMail(const QgsProject &project)
Returns the owsService contact mail defined in project.
QgsVectorDataProvider * dataProvider() FINAL
Returns the layer's data provider, it may be nullptr.
This is the base class for vector data providers.
QDomElement getServiceProviderElement(QDomDocument &doc, const QgsProject *project)
Create Service Provider element for get capabilities document.
Represents a vector layer which manages a vector based data sets.
Allows modification of attribute values.
QString authid() const
Returns the authority identifier for the CRS.
SERVER_EXPORT QString owsServiceTitle(const QgsProject &project)
Returns the owsService title defined in project.
QgsCoordinateReferenceSystem crs
QString metadataUrlType() const
Returns the metadata type of the layer used by QGIS Server in GetCapabilities request.
SERVER_EXPORT QString owsServiceContactPhone(const QgsProject &project)
Returns the owsService contact phone defined in project.