Skip to content

Commit

Permalink
[server] do not drop layers with duplicate names
Browse files Browse the repository at this point in the history
Fix #33928
  • Loading branch information
m-kuhn committed Jan 22, 2020
1 parent c4a2bb0 commit b3be308
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 18 deletions.
38 changes: 21 additions & 17 deletions src/server/services/wms/qgswmsrendercontext.cpp
Expand Up @@ -296,7 +296,7 @@ void QgsWmsRenderContext::initNicknameLayers()
{ {
for ( QgsMapLayer *ml : mProject->mapLayers() ) for ( QgsMapLayer *ml : mProject->mapLayers() )
{ {
mNicknameLayers[ layerNickname( *ml ) ] = ml; mNicknameLayers.insert( layerNickname( *ml ), ml );
} }


// init groups // init groups
Expand Down Expand Up @@ -412,14 +412,15 @@ void QgsWmsRenderContext::searchLayersToRender()


if ( mFlags & AddQueryLayers ) if ( mFlags & AddQueryLayers )
{ {
const auto constLayers { flattenedQueryLayers() }; const QStringList queryLayerNames { flattenedQueryLayers() };
for ( const QString &layer : constLayers ) for ( const QString &layerName : queryLayerNames )
{ {
if ( mNicknameLayers.contains( layer ) const QList<QgsMapLayer *> layers = mNicknameLayers.values( layerName );
&& !mLayersToRender.contains( mNicknameLayers[layer] ) ) for ( QgsMapLayer *lyr : layers )
{ if ( !mLayersToRender.contains( lyr ) )
mLayersToRender.append( mNicknameLayers[layer] ); {
} mLayersToRender.append( lyr );
}
} }
} }
} }
Expand Down Expand Up @@ -455,7 +456,7 @@ void QgsWmsRenderContext::searchLayersToRenderSld()
if ( mNicknameLayers.contains( lname ) ) if ( mNicknameLayers.contains( lname ) )
{ {
mSlds[lname] = namedElem; mSlds[lname] = namedElem;
mLayersToRender.append( mNicknameLayers[ lname ] ); mLayersToRender.append( mNicknameLayers.values( lname ) );
} }
else if ( mLayerGroups.contains( lname ) ) else if ( mLayerGroups.contains( lname ) )
{ {
Expand Down Expand Up @@ -491,7 +492,7 @@ void QgsWmsRenderContext::searchLayersToRenderStyle()
mStyles[nickname] = style; mStyles[nickname] = style;
} }


mLayersToRender.append( mNicknameLayers[ nickname ] ); mLayersToRender.append( mNicknameLayers.values( nickname ) );
} }
else if ( mLayerGroups.contains( nickname ) ) else if ( mLayerGroups.contains( nickname ) )
{ {
Expand All @@ -509,7 +510,7 @@ void QgsWmsRenderContext::searchLayersToRenderStyle()


for ( const auto &name : layersFromGroup ) for ( const auto &name : layersFromGroup )
{ {
mLayersToRender.append( mNicknameLayers[ name ] ); mLayersToRender.append( mNicknameLayers.values( name ) );
} }
} }
else else
Expand All @@ -531,13 +532,16 @@ bool QgsWmsRenderContext::layerScaleVisibility( const QString &name ) const
return visible; return visible;
} }


const QgsMapLayer *layer = mNicknameLayers[ name ]; const QList<QgsMapLayer *>layers = mNicknameLayers.values( name );
bool scaleBasedVisibility = layer->hasScaleBasedVisibility(); for ( QgsMapLayer *layer : layers )
bool useScaleConstraint = ( scaleDenominator() > 0 && scaleBasedVisibility );

if ( !useScaleConstraint || layer->isInScaleRange( scaleDenominator() ) )
{ {
visible = true; bool scaleBasedVisibility = layer->hasScaleBasedVisibility();
bool useScaleConstraint = ( scaleDenominator() > 0 && scaleBasedVisibility );

if ( !useScaleConstraint || layer->isInScaleRange( scaleDenominator() ) )
{
visible = true;
}
} }


return visible; return visible;
Expand Down
2 changes: 1 addition & 1 deletion src/server/services/wms/qgswmsrendercontext.h
Expand Up @@ -259,7 +259,7 @@ namespace QgsWms
double mScaleDenominator = -1.0; double mScaleDenominator = -1.0;


// nickname of all layers defined within the project // nickname of all layers defined within the project
QMap<QString, QgsMapLayer *> mNicknameLayers; QMultiMap<QString, QgsMapLayer *> mNicknameLayers;


// map of layers to use for rendering // map of layers to use for rendering
QList<QgsMapLayer *> mLayersToRender; QList<QgsMapLayer *> mLayersToRender;
Expand Down

0 comments on commit b3be308

Please sign in to comment.