39 QDomDocument getStyledLayerDescriptorDocument(
QgsServerInterface *serverIface,
const QgsProject *project,
const QgsWmsRequest &request );
44 const QDomDocument doc =
getStyles( serverIface, project, request );
45 response.
setHeader( QStringLiteral(
"Content-Type" ), QStringLiteral(
"text/xml; charset=utf-8" ) );
46 response.
write( doc.toByteArray() );
51 return getStyledLayerDescriptorDocument( serverIface, project, request );
56 QDomDocument getStyledLayerDescriptorDocument(
QgsServerInterface *serverIface,
const QgsProject *project,
const QgsWmsRequest &request )
59 const QgsWmsParameters parameters = request.wmsParameters();
61 QgsWmsRenderContext context( project, serverIface );
63 context.setParameters( parameters );
66 QDomDocument myDocument = QDomDocument();
68 const QDomNode header = myDocument.createProcessingInstruction( QStringLiteral(
"xml" ), QStringLiteral(
"version=\"1.0\" encoding=\"UTF-8\"" ) );
69 myDocument.appendChild( header );
72 QDomElement root = myDocument.createElementNS( QStringLiteral(
"http://www.opengis.net/sld" ), QStringLiteral(
"StyledLayerDescriptor" ) );
73 root.setAttribute( QStringLiteral(
"version" ), QStringLiteral(
"1.1.0" ) );
74 root.setAttribute( QStringLiteral(
"xsi:schemaLocation" ), QStringLiteral(
"http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/StyledLayerDescriptor.xsd" ) );
75 root.setAttribute( QStringLiteral(
"xmlns:ogc" ), QStringLiteral(
"http://www.opengis.net/ogc" ) );
76 root.setAttribute( QStringLiteral(
"xmlns:se" ), QStringLiteral(
"http://www.opengis.net/se" ) );
77 root.setAttribute( QStringLiteral(
"xmlns:xlink" ), QStringLiteral(
"http://www.w3.org/1999/xlink" ) );
78 root.setAttribute( QStringLiteral(
"xmlns:xsi" ), QStringLiteral(
"http://www.w3.org/2001/XMLSchema-instance" ) );
79 myDocument.appendChild( root );
81 for (
auto layer : context.layersToRender() )
84 QDomElement namedLayerNode = myDocument.createElement( QStringLiteral(
"NamedLayer" ) );
85 root.appendChild( namedLayerNode );
88 QDomElement nameNode = myDocument.createElement( QStringLiteral(
"se:Name" ) );
89 nameNode.appendChild( myDocument.createTextNode( context.layerNickname( *layer ) ) );
90 namedLayerNode.appendChild( nameNode );
104 props[QStringLiteral(
"scaleMinDenom" )] = QString::number( vlayer->
maximumScale() );
105 props[QStringLiteral(
"scaleMaxDenom" )] = QString::number( vlayer->
minimumScale() );
108 for (
const QString &styleName : vlayer->styleManager()->styles() )
112 QDomElement userStyleElem = myDocument.createElement( QStringLiteral(
"UserStyle" ) );
114 QDomElement styleNameElem = myDocument.createElement( QStringLiteral(
"se:Name" ) );
115 styleNameElem.appendChild( myDocument.createTextNode( styleName ) );
117 userStyleElem.appendChild( styleNameElem );
119 QDomElement featureTypeStyleElem = myDocument.createElement( QStringLiteral(
"se:FeatureTypeStyle" ) );
120 userStyleElem.appendChild( featureTypeStyleElem );
122 vlayer->
renderer()->
toSld( myDocument, featureTypeStyleElem, props );
128 namedLayerNode.appendChild( userStyleElem );
virtual void toSld(QDomNode &parent, const QVariantMap &props) const
Writes the SE 1.1 TextSymbolizer element based on the current layer labeling settings.
virtual void toSld(QDomDocument &doc, QDomElement &element, const QVariantMap &props=QVariantMap()) const
used from subclasses to create SLD Rule elements following SLD v1.1 specs
QString currentStyle() const
Returns name of the current style.
bool setCurrentStyle(const QString &name)
Set a different style as the current style - will apply it to the layer.
bool hasScaleBasedVisibility() const
Returns whether scale based visibility is enabled for the layer.
double minimumScale() const
Returns the minimum map scale (i.e.
QgsMapLayerStyleManager * styleManager() const
Gets access to the layer's style manager.
double maximumScale() const
Returns the maximum map scale (i.e.
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
QgsServerInterface Class defining interfaces exposed by QGIS Server and made available to plugins.
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...
Represents a vector layer which manages a vector based data sets.
bool labelsEnabled() const
Returns whether the layer contains labels which are enabled and should be drawn.
bool isSpatial() const FINAL
Returns true if this is a geometry layer and false in case of NoGeometry (table only) or UnknownGeome...
const QgsAbstractVectorLayerLabeling * labeling() const
Access to const labeling configuration.
QgsFeatureRenderer * renderer()
Returns the feature renderer used for rendering the features in the layer in 2D map views.
Class defining request interface passed to WMS service.
Median cut implementation.
QDomDocument getStyles(QgsServerInterface *serverIface, const QgsProject *project, const QgsWmsRequest &request)
Returns an SLD file with the styles of the requested layers.
void writeGetStyles(QgsServerInterface *serverIface, const QgsProject *project, const QgsWmsRequest &request, QgsServerResponse &response)
Output GetStyles response.