@@ -2220,35 +2220,46 @@ int QgsWMSServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
2220
2220
#endif
2221
2221
2222
2222
QgsFeatureIterator fit = layer->getFeatures ( fReq );
2223
+ QgsFeatureRendererV2* r2 = layer->rendererV2 ();
2224
+ if ( r2 )
2225
+ {
2226
+ r2->startRender ( renderContext, layer->pendingFields () );
2227
+ }
2223
2228
2224
2229
bool featureBBoxInitialized = false ;
2225
2230
while ( fit.nextFeature ( feature ) )
2226
2231
{
2232
+ if ( layer->wkbType () == QGis::WKBNoGeometry && ! searchRect.isEmpty () )
2233
+ {
2234
+ break ;
2235
+ }
2236
+
2227
2237
++featureCounter;
2228
2238
if ( featureCounter > nFeatures )
2229
2239
{
2230
2240
break ;
2231
2241
}
2232
2242
2233
- QgsFeatureRendererV2* r2 = layer->rendererV2 ();
2234
- if ( !r2 )
2243
+ if ( layer->wkbType () != QGis::WKBNoGeometry && ! searchRect.isEmpty () )
2235
2244
{
2236
- continue ;
2237
- }
2245
+ if ( !r2 )
2246
+ {
2247
+ continue ;
2248
+ }
2238
2249
2239
- renderContext.expressionContext ().setFeature ( feature );
2250
+ renderContext.expressionContext ().setFeature ( feature );
2240
2251
2241
- // check if feature is rendered at all
2242
- r2-> startRender ( renderContext, layer-> pendingFields () );
2243
- bool renderV2 = r2->willRenderFeature ( feature, renderContext );
2244
- r2-> stopRender ( renderContext );
2245
- if ( !renderV2 )
2246
- {
2247
- continue ;
2252
+
2253
+ // check if feature is rendered at all
2254
+ bool render = r2->willRenderFeature ( feature, renderContext );
2255
+ if ( !render )
2256
+ {
2257
+ continue ;
2258
+ }
2248
2259
}
2249
2260
2250
2261
QgsRectangle box;
2251
- if ( hasGeometry )
2262
+ if ( layer-> wkbType () != QGis::WKBNoGeometry && hasGeometry )
2252
2263
{
2253
2264
box = mapRender->layerExtentToOutputExtent ( layer, feature.constGeometry ()->boundingBox () );
2254
2265
if ( featureBBox ) // extend feature info bounding box if requested
@@ -2342,7 +2353,7 @@ int QgsWMSServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
2342
2353
}
2343
2354
2344
2355
// append feature bounding box to feature info xml
2345
- if ( hasGeometry && mapRender && mConfigParser )
2356
+ if ( layer-> wkbType () != QGis::WKBNoGeometry && hasGeometry && mapRender && mConfigParser )
2346
2357
{
2347
2358
QDomElement bBoxElem = infoDocument.createElement ( " BoundingBox" );
2348
2359
bBoxElem.setAttribute ( version == " 1.1.1" ? " SRS" : " CRS" , outputCrs.authid () );
@@ -2354,7 +2365,7 @@ int QgsWMSServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
2354
2365
}
2355
2366
2356
2367
// also append the wkt geometry as an attribute
2357
- if ( addWktGeometry && hasGeometry )
2368
+ if ( layer-> wkbType () != QGis::WKBNoGeometry && addWktGeometry && hasGeometry )
2358
2369
{
2359
2370
QgsGeometry *geom = feature.geometry ();
2360
2371
if ( geom )
@@ -2374,6 +2385,10 @@ int QgsWMSServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
2374
2385
}
2375
2386
}
2376
2387
}
2388
+ if ( r2 )
2389
+ {
2390
+ r2->stopRender ( renderContext );
2391
+ }
2377
2392
2378
2393
return 0 ;
2379
2394
}
0 commit comments