@@ -2225,35 +2225,45 @@ int QgsWmsServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
22252225#endif
22262226
22272227 QgsFeatureIterator fit = layer->getFeatures ( fReq );
2228+ QgsFeatureRenderer* r2 = layer->renderer ();
2229+ if ( r2 )
2230+ {
2231+ r2->startRender ( renderContext, layer->pendingFields () );
2232+ }
22282233
22292234 bool featureBBoxInitialized = false ;
22302235 while ( fit.nextFeature ( feature ) )
22312236 {
2237+ if ( layer->wkbType () == QgsWkbTypes::NoGeometry && ! searchRect.isEmpty () )
2238+ {
2239+ break ;
2240+ }
2241+
22322242 ++featureCounter;
22332243 if ( featureCounter > nFeatures )
22342244 {
22352245 break ;
22362246 }
22372247
2238- QgsFeatureRenderer* r2 = layer->renderer ();
2239- if ( !r2 )
2248+ if ( layer->wkbType () != QgsWkbTypes::NoGeometry && ! searchRect.isEmpty () )
22402249 {
2241- continue ;
2242- }
2250+ if ( !r2 )
2251+ {
2252+ continue ;
2253+ }
22432254
2244- renderContext.expressionContext ().setFeature ( feature );
2255+ renderContext.expressionContext ().setFeature ( feature );
22452256
2246- // check if feature is rendered at all
2247- r2->startRender ( renderContext, layer->pendingFields () );
2248- bool render = r2->willRenderFeature ( feature, renderContext );
2249- r2->stopRender ( renderContext );
2250- if ( !render )
2251- {
2252- continue ;
2257+ // check if feature is rendered at all
2258+ bool render = r2->willRenderFeature ( feature, renderContext );
2259+ if ( !render )
2260+ {
2261+ continue ;
2262+ }
22532263 }
22542264
22552265 QgsRectangle box;
2256- if ( hasGeometry )
2266+ if ( layer-> wkbType () != QgsWkbTypes::NoGeometry && hasGeometry )
22572267 {
22582268 box = mapRender->layerExtentToOutputExtent ( layer, feature.geometry ().boundingBox () );
22592269 if ( featureBBox ) // extend feature info bounding box if requested
@@ -2344,7 +2354,7 @@ int QgsWmsServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
23442354 }
23452355
23462356 // append feature bounding box to feature info xml
2347- if ( hasGeometry && mapRender && mConfigParser )
2357+ if ( layer-> wkbType () != QgsWkbTypes::NoGeometry && hasGeometry && mapRender && mConfigParser )
23482358 {
23492359 QDomElement bBoxElem = infoDocument.createElement ( " BoundingBox" );
23502360 bBoxElem.setAttribute ( version == " 1.1.1" ? " SRS" : " CRS" , outputCrs.authid () );
@@ -2356,7 +2366,7 @@ int QgsWmsServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
23562366 }
23572367
23582368 // also append the wkt geometry as an attribute
2359- if ( addWktGeometry && hasGeometry )
2369+ if ( layer-> wkbType () != QgsWkbTypes::NoGeometry && addWktGeometry && hasGeometry )
23602370 {
23612371 QgsGeometry geom = feature.geometry ();
23622372 if ( !geom.isEmpty () )
@@ -2389,6 +2399,10 @@ int QgsWmsServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
23892399 }
23902400 }
23912401 }
2402+ if ( r2 )
2403+ {
2404+ r2->stopRender ( renderContext );
2405+ }
23922406
23932407 return 0 ;
23942408}
0 commit comments