Skip to content

Commit 6e4c507

Browse files
committed
WMS server: support predefined layer styles in GetMap requests
1 parent ba495f3 commit 6e4c507

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

src/server/qgswmsprojectparser.cpp

+13-2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "qgsconfigparserutils.h"
2121
#include "qgslogger.h"
2222
#include "qgsmaplayer.h"
23+
#include "qgsmaplayerstylemanager.h"
2324
#include "qgsmapserviceexception.h"
2425
#include "qgspallabeling.h"
2526
#include "qgsvectorlayer.h"
@@ -97,7 +98,6 @@ void QgsWMSProjectParser::layersAndStylesCapabilities( QDomElement& parentElemen
9798

9899
QList<QgsMapLayer*> QgsWMSProjectParser::mapLayerFromStyle( const QString& lName, const QString& styleName, bool useCache ) const
99100
{
100-
Q_UNUSED( styleName );
101101
QMap< int, QgsMapLayer* > layers;
102102

103103
//first check if the layer name refers an unpublished layer / group
@@ -106,12 +106,23 @@ QList<QgsMapLayer*> QgsWMSProjectParser::mapLayerFromStyle( const QString& lName
106106
return QList<QgsMapLayer*>();
107107
}
108108

109+
// can't use layer cache if we are going to apply a non-default style
110+
if ( !styleName.isEmpty() )
111+
useCache = false;
112+
109113
//does lName refer to a leaf layer
110114
const QHash< QString, QDomElement > &projectLayerElements = mProjectParser->useLayerIDs() ? mProjectParser->projectLayerElementsById() : mProjectParser->projectLayerElementsByName();
111115
QHash< QString, QDomElement >::const_iterator layerElemIt = projectLayerElements.find( lName );
112116
if ( layerElemIt != projectLayerElements.constEnd() )
113117
{
114-
return QList<QgsMapLayer*>() << mProjectParser->createLayerFromElement( layerElemIt.value(), useCache );
118+
QgsMapLayer* ml = mProjectParser->createLayerFromElement( layerElemIt.value(), useCache );
119+
if ( !styleName.isEmpty() )
120+
{
121+
// try to apply the specified style
122+
if ( !ml->styleManager()->setCurrentStyle( styleName ) )
123+
throw QgsMapServiceException( "StyleNotDefined", QString( "Style \"%1\" does not exist for layer \"%2\"" ).arg( styleName ).arg( lName ) );
124+
}
125+
return QList<QgsMapLayer*>() << ml;
115126
}
116127

117128
//group or project name

0 commit comments

Comments
 (0)