35 const QDomDocument doc =
describeLayer( serverIface, project, request );
36 response.
setHeader( QStringLiteral(
"Content-Type" ), QStringLiteral(
"text/xml; charset=utf-8" ) );
37 response.
write( doc.toByteArray() );
46 if ( !parameters.contains( QStringLiteral(
"SLD_VERSION" ) ) )
49 QStringLiteral(
"SLD_VERSION is mandatory for DescribeLayer operation" ), 400 );
51 if ( parameters[ QStringLiteral(
"SLD_VERSION" )] != QLatin1String(
"1.1.0" ) )
54 QStringLiteral(
"SLD_VERSION = %1 is not supported" ).arg( parameters[ QStringLiteral(
"SLD_VERSION" )] ), 400 );
57 if ( !parameters.contains( QStringLiteral(
"LAYERS" ) ) )
60 QStringLiteral(
"LAYERS is mandatory for DescribeLayer operation" ), 400 );
63 #if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
64 QStringList layersList = parameters[ QStringLiteral(
"LAYERS" )].split(
',', QString::SkipEmptyParts );
66 const QStringList layersList = parameters[ QStringLiteral(
"LAYERS" )].split(
',', Qt::SkipEmptyParts );
68 if ( layersList.isEmpty() )
70 throw QgsServiceException( QStringLiteral(
"InvalidParameterValue" ), QStringLiteral(
"Layers is empty" ), 400 );
72 QDomDocument myDocument = QDomDocument();
74 const QDomNode header = myDocument.createProcessingInstruction( QStringLiteral(
"xml" ), QStringLiteral(
"version=\"1.0\" encoding=\"UTF-8\"" ) );
75 myDocument.appendChild( header );
78 QDomElement root = myDocument.createElementNS( QStringLiteral(
"http://www.opengis.net/sld" ), QStringLiteral(
"DescribeLayerResponse" ) );
79 root.setAttribute( QStringLiteral(
"xsi:schemaLocation" ), QStringLiteral(
"http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/DescribeLayer.xsd" ) );
80 root.setAttribute( QStringLiteral(
"xmlns:ows" ), QStringLiteral(
"http://www.opengis.net/ows" ) );
81 root.setAttribute( QStringLiteral(
"xmlns:se" ), QStringLiteral(
"http://www.opengis.net/se" ) );
82 root.setAttribute( QStringLiteral(
"xmlns:xlink" ), QStringLiteral(
"http://www.w3.org/1999/xlink" ) );
83 root.setAttribute( QStringLiteral(
"xmlns:xsi" ), QStringLiteral(
"http://www.w3.org/2001/XMLSchema-instance" ) );
84 myDocument.appendChild( root );
87 QDomElement versionNode = myDocument.createElement( QStringLiteral(
"Version" ) );
88 versionNode.appendChild( myDocument.createTextNode( QStringLiteral(
"1.1.0" ) ) );
89 root.appendChild( versionNode );
98 if ( wfsHrefString.isEmpty() )
100 wfsHrefString = wmsHrefString;
106 if ( wcsHrefString.isEmpty() )
108 wcsHrefString = wmsHrefString;
112 #ifdef HAVE_SERVER_PYTHON_PLUGINS
128 QString name = layer->name();
131 else if ( !layer->shortName().isEmpty() )
132 name = layer->shortName();
134 if ( !layersList.contains( name ) )
140 if ( restrictedLayers.contains( layer->name() ) )
145 #ifdef HAVE_SERVER_PYTHON_PLUGINS
153 QDomElement layerNode = myDocument.createElement( QStringLiteral(
"LayerDescription" ) );
154 root.appendChild( layerNode );
157 QDomElement typeNode = myDocument.createElement( QStringLiteral(
"owsType" ) );
159 QDomElement oResNode = myDocument.createElement( QStringLiteral(
"se:OnlineResource" ) );
160 oResNode.setAttribute( QStringLiteral(
"xlink:type" ), QStringLiteral(
"simple" ) );
162 QDomElement nameNode = myDocument.createElement( QStringLiteral(
"TypeName" ) );
163 switch ( layer->type() )
167 typeNode.appendChild( myDocument.createTextNode( QStringLiteral(
"wfs" ) ) );
171 oResNode.setAttribute( QStringLiteral(
"xlink:href" ), wfsHrefString );
175 QDomElement typeNameNode = myDocument.createElement( QStringLiteral(
"se:FeatureTypeName" ) );
176 typeNameNode.appendChild( myDocument.createTextNode( name ) );
177 nameNode.appendChild( typeNameNode );
182 typeNode.appendChild( myDocument.createTextNode( QStringLiteral(
"wcs" ) ) );
186 oResNode.setAttribute( QStringLiteral(
"xlink:href" ), wcsHrefString );
190 QDomElement typeNameNode = myDocument.createElement( QStringLiteral(
"se:CoverageTypeName" ) );
191 typeNameNode.appendChild( myDocument.createTextNode( name ) );
192 nameNode.appendChild( typeNameNode );
204 layerNode.appendChild( typeNode );
205 layerNode.appendChild( oResNode );
206 layerNode.appendChild( nameNode );
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.
Base class for all map layer types.
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
QMap< QString, QgsMapLayer * > mapLayers(const bool validOnly=false) const
Returns a map of all registered layers by layer ID.
QgsServerInterface Class defining interfaces exposed by QGIS Server and made available to plugins.
virtual QgsAccessControl * accessControls() const =0
Gets the registered access control filters.
virtual QgsServerSettings * serverSettings()=0
Returns the server settings.
QgsServerRequest::Parameters parameters() const
Returns a map of query parameters with keys converted to uppercase.
QMap< QString, QString > Parameters
QgsServerResponse Class defining response interface passed to services QgsService::executeRequest() m...
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...
Exception thrown when data access violates access controls.
Exception class for WMS service exceptions.
Class defining request interface passed to WMS service.
@ PointCloudLayer
Point cloud layer. Added in QGIS 3.18.
@ MeshLayer
Mesh layer. Added in QGIS 3.2.
@ VectorLayer
Vector layer.
@ RasterLayer
Raster layer.
@ GroupLayer
Composite group layer. Added in QGIS 3.24.
@ VectorTileLayer
Vector tile layer. Added in QGIS 3.14.
@ AnnotationLayer
Contains freeform, georeferenced annotations. Added in QGIS 3.16.
@ PluginLayer
Plugin based layer.
SERVER_EXPORT QString wcsServiceUrl(const QgsProject &project, const QgsServerRequest &request=QgsServerRequest(), const QgsServerSettings &settings=QgsServerSettings())
Returns the WCS service url.
SERVER_EXPORT bool wmsUseLayerIds(const QgsProject &project)
Returns if layer ids are used as name in WMS.
SERVER_EXPORT QStringList wfsLayerIds(const QgsProject &project)
Returns the Layer ids list defined in a QGIS project as published in WFS.
SERVER_EXPORT QStringList wmsRestrictedLayers(const QgsProject &project)
Returns the restricted layer name list.
SERVER_EXPORT QString wfsServiceUrl(const QgsProject &project, const QgsServerRequest &request=QgsServerRequest(), const QgsServerSettings &settings=QgsServerSettings())
Returns the WFS service url.
SERVER_EXPORT QStringList wcsLayerIds(const QgsProject &project)
Returns the Layer ids list defined in a QGIS project as published in WCS.
Median cut implementation.
QDomDocument describeLayer(QgsServerInterface *serverIface, const QgsProject *project, const QgsWmsRequest &request)
DescribeLayer is defined for WMS1.1.1/SLD1.0 and in WMS 1.3.0 SLD Extension.
void writeDescribeLayer(QgsServerInterface *serverIface, const QgsProject *project, const QgsWmsRequest &request, QgsServerResponse &response)
Output GetMap response in DXF format.
QUrl serviceUrl(const QgsServerRequest &request, const QgsProject *project, const QgsServerSettings &settings)
Returns WMS service URL.