Skip to content

Commit 203cb9b

Browse files
committed
WMS server: create rendercontext to find out visible features
1 parent eaed670 commit 203cb9b

File tree

2 files changed

+20
-6
lines changed

2 files changed

+20
-6
lines changed

src/mapserver/qgswmsserver.cpp

+18-5
Original file line numberDiff line numberDiff line change
@@ -810,6 +810,18 @@ int QgsWMSServer::getFeatureInfo( QDomDocument& result, QString version )
810810
QMap< QString, QMap< int, QString > > aliasInfo = mConfigParser->layerAliasInfo();
811811
QMap< QString, QSet<QString> > hiddenAttributes = mConfigParser->hiddenAttributes();
812812

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+
813825
QList<QgsMapLayer*> layerList;
814826
QgsMapLayer* currentLayer = 0;
815827
QStringList::const_iterator layerIt;
@@ -861,7 +873,8 @@ int QgsWMSServer::getFeatureInfo( QDomDocument& result, QString version )
861873
layerHiddenAttributes = hiddenIt.value();
862874
}
863875

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 )
865878
{
866879
continue;
867880
}
@@ -1207,6 +1220,7 @@ int QgsWMSServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
12071220
QDomDocument& infoDocument,
12081221
QDomElement& layerElement,
12091222
QgsMapRenderer* mapRender,
1223+
QgsRenderContext& renderContext,
12101224
QMap<int, QString>& aliasMap,
12111225
QSet<QString>& hiddenAttributes,
12121226
QString version,
@@ -1226,7 +1240,7 @@ int QgsWMSServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
12261240
//info point could be 0 in case there is only an attribute filter
12271241
if ( infoPoint )
12281242
{
1229-
double searchRadius = ( layerRect.xMaximum() - layerRect.xMinimum() ) / 200;
1243+
double searchRadius = ( layerRect.xMaximum() - layerRect.xMinimum() ) / 100;
12301244
searchRect.set( infoPoint->x() - searchRadius, infoPoint->y() - searchRadius,
12311245
infoPoint->x() + searchRadius, infoPoint->y() + searchRadius );
12321246
}
@@ -1262,10 +1276,9 @@ int QgsWMSServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
12621276
continue;
12631277
}
12641278

1265-
QgsRenderContext c;
1266-
r2->startRender( c, layer );
1279+
r2->startRender( renderContext, layer );
12671280
bool renderV2 = r2->willRenderFeature( feature );
1268-
r2->stopRender( c );
1281+
r2->stopRender( renderContext );
12691282
if ( !renderV2 )
12701283
{
12711284
continue;

src/mapserver/qgswmsserver.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class QgsMapRenderer;
3333
class QgsPoint;
3434
class QgsRasterLayer;
3535
class QgsRectangle;
36+
class QgsRenderContext;
3637
class QgsVectorLayer;
3738
class QgsSymbol;
3839
class QColor;
@@ -114,7 +115,7 @@ class QgsWMSServer
114115
@param featureBBox the bounding box of the selected features in output CRS
115116
@return 0 in case of success*/
116117
int featureInfoFromVectorLayer( QgsVectorLayer* layer, const QgsPoint* infoPoint, int nFeatures, QDomDocument& infoDocument, QDomElement& layerElement, QgsMapRenderer* mapRender,
117-
QMap<int, QString>& aliasMap, QSet<QString>& hiddenAttributes, QString version, QgsRectangle* featureBBox = 0 ) const;
118+
QgsRenderContext& renderContext, QMap<int, QString>& aliasMap, QSet<QString>& hiddenAttributes, QString version, QgsRectangle* featureBBox = 0 ) const;
118119
/**Appends feature info xml for the layer to the layer element of the dom document*/
119120
int featureInfoFromRasterLayer( QgsRasterLayer* layer, const QgsPoint* infoPoint, QDomDocument& infoDocument, QDomElement& layerElement, QString version ) const;
120121

0 commit comments

Comments
 (0)