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.