Skip to content

Commit 9adb57e

Browse files
author
marco
committedNov 13, 2011
Don't show invisible layers and features in wms server feature info
1 parent 41de1a0 commit 9adb57e

File tree

1 file changed

+27
-1
lines changed

1 file changed

+27
-1
lines changed
 

‎src/mapserver/qgswmsserver.cpp

+27-1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
#include "qgssymbol.h"
3737
#include "qgssymbolv2.h"
3838
#include "qgsrenderer.h"
39+
#include "qgsrendererv2.h"
3940
#include "qgslegendmodel.h"
4041
#include "qgscomposerlegenditem.h"
4142
#include "qgslogger.h"
@@ -624,7 +625,8 @@ int QgsWMSServer::getFeatureInfo( QDomDocument& result )
624625
//find out the current scale denominater and set it to the SLD parser
625626
QgsScaleCalculator scaleCalc(( outputImage->logicalDpiX() + outputImage->logicalDpiY() ) / 2 , mMapRenderer->destinationCrs().mapUnits() );
626627
QgsRectangle mapExtent = mMapRenderer->extent();
627-
mConfigParser->setScaleDenominator( scaleCalc.calculate( mapExtent, outputImage->width() ) );
628+
double scaleDenominator = scaleCalc.calculate( mapExtent, outputImage->width() );
629+
mConfigParser->setScaleDenominator( scaleDenominator );
628630
delete outputImage; //no longer needed for feature info
629631

630632
//read FEATURE_COUNT
@@ -742,6 +744,12 @@ int QgsWMSServer::getFeatureInfo( QDomDocument& result )
742744
continue;
743745
}
744746

747+
//skip layer if not visible at current map scale
748+
if ( currentLayer->hasScaleBasedVisibility() && ( currentLayer->minimumScale() > scaleDenominator || currentLayer->maximumScale() < scaleDenominator ) )
749+
{
750+
continue;
751+
}
752+
745753
if ( infoPoint && infoPointToLayerCoordinates( i, j, infoPoint, mMapRenderer, currentLayer ) != 0 )
746754
{
747755
continue;
@@ -1216,6 +1224,24 @@ int QgsWMSServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
12161224
break;
12171225
}
12181226

1227+
//check if feature is rendered at all
1228+
if ( layer->isUsingRendererV2() )
1229+
{
1230+
QgsFeatureRendererV2* r2 = layer->rendererV2();
1231+
if ( !r2 || !r2->symbolForFeature( feature ) )
1232+
{
1233+
continue;
1234+
}
1235+
}
1236+
else
1237+
{
1238+
QgsRenderer* r = const_cast<QgsRenderer*>( layer->renderer() ); //bad, 'willRenderFeature' should be const
1239+
if ( !r || !r->willRenderFeature( &feature ) )
1240+
{
1241+
continue;
1242+
}
1243+
}
1244+
12191245
QDomElement featureElement = infoDocument.createElement( "Feature" );
12201246
featureElement.setAttribute( "id", FID_TO_STRING( feature.id() ) );
12211247
layerElement.appendChild( featureElement );

0 commit comments

Comments
 (0)
Please sign in to comment.