@@ -2225,35 +2225,45 @@ int QgsWmsServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
2225
2225
#endif
2226
2226
2227
2227
QgsFeatureIterator fit = layer->getFeatures ( fReq );
2228
+ QgsFeatureRenderer* r2 = layer->renderer ();
2229
+ if ( r2 )
2230
+ {
2231
+ r2->startRender ( renderContext, layer->pendingFields () );
2232
+ }
2228
2233
2229
2234
bool featureBBoxInitialized = false ;
2230
2235
while ( fit.nextFeature ( feature ) )
2231
2236
{
2237
+ if ( layer->wkbType () == QgsWkbTypes::NoGeometry && ! searchRect.isEmpty () )
2238
+ {
2239
+ break ;
2240
+ }
2241
+
2232
2242
++featureCounter;
2233
2243
if ( featureCounter > nFeatures )
2234
2244
{
2235
2245
break ;
2236
2246
}
2237
2247
2238
- QgsFeatureRenderer* r2 = layer->renderer ();
2239
- if ( !r2 )
2248
+ if ( layer->wkbType () != QgsWkbTypes::NoGeometry && ! searchRect.isEmpty () )
2240
2249
{
2241
- continue ;
2242
- }
2250
+ if ( !r2 )
2251
+ {
2252
+ continue ;
2253
+ }
2243
2254
2244
- renderContext.expressionContext ().setFeature ( feature );
2255
+ renderContext.expressionContext ().setFeature ( feature );
2245
2256
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
+ }
2253
2263
}
2254
2264
2255
2265
QgsRectangle box;
2256
- if ( hasGeometry )
2266
+ if ( layer-> wkbType () != QgsWkbTypes::NoGeometry && hasGeometry )
2257
2267
{
2258
2268
box = mapRender->layerExtentToOutputExtent ( layer, feature.geometry ().boundingBox () );
2259
2269
if ( featureBBox ) // extend feature info bounding box if requested
@@ -2344,7 +2354,7 @@ int QgsWmsServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
2344
2354
}
2345
2355
2346
2356
// append feature bounding box to feature info xml
2347
- if ( hasGeometry && mapRender && mConfigParser )
2357
+ if ( layer-> wkbType () != QgsWkbTypes::NoGeometry && hasGeometry && mapRender && mConfigParser )
2348
2358
{
2349
2359
QDomElement bBoxElem = infoDocument.createElement ( " BoundingBox" );
2350
2360
bBoxElem.setAttribute ( version == " 1.1.1" ? " SRS" : " CRS" , outputCrs.authid () );
@@ -2356,7 +2366,7 @@ int QgsWmsServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
2356
2366
}
2357
2367
2358
2368
// also append the wkt geometry as an attribute
2359
- if ( addWktGeometry && hasGeometry )
2369
+ if ( layer-> wkbType () != QgsWkbTypes::NoGeometry && addWktGeometry && hasGeometry )
2360
2370
{
2361
2371
QgsGeometry geom = feature.geometry ();
2362
2372
if ( !geom.isEmpty () )
@@ -2389,6 +2399,10 @@ int QgsWmsServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
2389
2399
}
2390
2400
}
2391
2401
}
2402
+ if ( r2 )
2403
+ {
2404
+ r2->stopRender ( renderContext );
2405
+ }
2392
2406
2393
2407
return 0 ;
2394
2408
}
0 commit comments