@@ -810,6 +810,18 @@ int QgsWMSServer::getFeatureInfo( QDomDocument& result, QString version )
810
810
QMap< QString, QMap< int , QString > > aliasInfo = mConfigParser ->layerAliasInfo ();
811
811
QMap< QString, QSet<QString> > hiddenAttributes = mConfigParser ->hiddenAttributes ();
812
812
813
+ // Render context is needed to determine feature visibility for vector layers
814
+ QgsRenderContext renderContext;
815
+ if ( mMapRenderer )
816
+ {
817
+ renderContext.setExtent ( mMapRenderer ->extent () );
818
+ renderContext.setRasterScaleFactor ( 1.0 );
819
+ renderContext.setMapToPixel ( *( mMapRenderer ->coordinateTransform () ) );
820
+ renderContext.setRendererScale ( mMapRenderer ->scale () );
821
+ renderContext.setScaleFactor ( mMapRenderer ->outputDpi () / 25.4 );
822
+ renderContext.setPainter ( 0 );
823
+ }
824
+
813
825
QList<QgsMapLayer*> layerList;
814
826
QgsMapLayer* currentLayer = 0 ;
815
827
QStringList::const_iterator layerIt;
@@ -861,7 +873,8 @@ int QgsWMSServer::getFeatureInfo( QDomDocument& result, QString version )
861
873
layerHiddenAttributes = hiddenIt.value ();
862
874
}
863
875
864
- if ( featureInfoFromVectorLayer ( vectorLayer, infoPoint, featureCount, result, layerElement, mMapRenderer , layerAliasInfo, layerHiddenAttributes, version, featuresRect ) != 0 )
876
+ if ( featureInfoFromVectorLayer ( vectorLayer, infoPoint, featureCount, result, layerElement, mMapRenderer , renderContext,
877
+ layerAliasInfo, layerHiddenAttributes, version, featuresRect ) != 0 )
865
878
{
866
879
continue ;
867
880
}
@@ -1207,6 +1220,7 @@ int QgsWMSServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
1207
1220
QDomDocument& infoDocument,
1208
1221
QDomElement& layerElement,
1209
1222
QgsMapRenderer* mapRender,
1223
+ QgsRenderContext& renderContext,
1210
1224
QMap<int , QString>& aliasMap,
1211
1225
QSet<QString>& hiddenAttributes,
1212
1226
QString version,
@@ -1226,7 +1240,7 @@ int QgsWMSServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
1226
1240
// info point could be 0 in case there is only an attribute filter
1227
1241
if ( infoPoint )
1228
1242
{
1229
- double searchRadius = ( layerRect.xMaximum () - layerRect.xMinimum () ) / 200 ;
1243
+ double searchRadius = ( layerRect.xMaximum () - layerRect.xMinimum () ) / 100 ;
1230
1244
searchRect.set ( infoPoint->x () - searchRadius, infoPoint->y () - searchRadius,
1231
1245
infoPoint->x () + searchRadius, infoPoint->y () + searchRadius );
1232
1246
}
@@ -1262,10 +1276,9 @@ int QgsWMSServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
1262
1276
continue ;
1263
1277
}
1264
1278
1265
- QgsRenderContext c;
1266
- r2->startRender ( c, layer );
1279
+ r2->startRender ( renderContext, layer );
1267
1280
bool renderV2 = r2->willRenderFeature ( feature );
1268
- r2->stopRender ( c );
1281
+ r2->stopRender ( renderContext );
1269
1282
if ( !renderV2 )
1270
1283
{
1271
1284
continue ;
0 commit comments