@@ -2213,35 +2213,46 @@ int QgsWMSServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
2213
2213
#endif
2214
2214
2215
2215
QgsFeatureIterator fit = layer->getFeatures ( fReq );
2216
+ QgsFeatureRendererV2* r2 = layer->rendererV2 ();
2217
+ if ( r2 )
2218
+ {
2219
+ r2->startRender ( renderContext, layer->pendingFields () );
2220
+ }
2216
2221
2217
2222
bool featureBBoxInitialized = false ;
2218
2223
while ( fit.nextFeature ( feature ) )
2219
2224
{
2225
+ if ( layer->wkbType () == QGis::WKBNoGeometry && ! searchRect.isEmpty () )
2226
+ {
2227
+ break ;
2228
+ }
2229
+
2220
2230
++featureCounter;
2221
2231
if ( featureCounter > nFeatures )
2222
2232
{
2223
2233
break ;
2224
2234
}
2225
2235
2226
- QgsFeatureRendererV2* r2 = layer->rendererV2 ();
2227
- if ( !r2 )
2236
+ if ( layer->wkbType () != QGis::WKBNoGeometry && ! searchRect.isEmpty () )
2228
2237
{
2229
- continue ;
2230
- }
2238
+ if ( !r2 )
2239
+ {
2240
+ continue ;
2241
+ }
2231
2242
2232
- renderContext.expressionContext ().setFeature ( feature );
2243
+ renderContext.expressionContext ().setFeature ( feature );
2233
2244
2234
- // check if feature is rendered at all
2235
- r2-> startRender ( renderContext, layer-> pendingFields () );
2236
- bool renderV2 = r2->willRenderFeature ( feature, renderContext );
2237
- r2-> stopRender ( renderContext );
2238
- if ( !renderV2 )
2239
- {
2240
- continue ;
2245
+
2246
+ // check if feature is rendered at all
2247
+ bool render = r2->willRenderFeature ( feature, renderContext );
2248
+ if ( !render )
2249
+ {
2250
+ continue ;
2251
+ }
2241
2252
}
2242
2253
2243
2254
QgsRectangle box;
2244
- if ( hasGeometry )
2255
+ if ( layer-> wkbType () != QGis::WKBNoGeometry && hasGeometry )
2245
2256
{
2246
2257
box = mapRender->layerExtentToOutputExtent ( layer, feature.constGeometry ()->boundingBox () );
2247
2258
if ( featureBBox ) // extend feature info bounding box if requested
@@ -2335,7 +2346,7 @@ int QgsWMSServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
2335
2346
}
2336
2347
2337
2348
// append feature bounding box to feature info xml
2338
- if ( hasGeometry && mapRender && mConfigParser )
2349
+ if ( layer-> wkbType () != QGis::WKBNoGeometry && hasGeometry && mapRender && mConfigParser )
2339
2350
{
2340
2351
QDomElement bBoxElem = infoDocument.createElement ( " BoundingBox" );
2341
2352
bBoxElem.setAttribute ( version == " 1.1.1" ? " SRS" : " CRS" , outputCrs.authid () );
@@ -2347,7 +2358,7 @@ int QgsWMSServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
2347
2358
}
2348
2359
2349
2360
// also append the wkt geometry as an attribute
2350
- if ( addWktGeometry && hasGeometry )
2361
+ if ( layer-> wkbType () != QGis::WKBNoGeometry && addWktGeometry && hasGeometry )
2351
2362
{
2352
2363
QgsGeometry *geom = feature.geometry ();
2353
2364
if ( geom )
@@ -2367,6 +2378,10 @@ int QgsWMSServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
2367
2378
}
2368
2379
}
2369
2380
}
2381
+ if ( r2 )
2382
+ {
2383
+ r2->stopRender ( renderContext );
2384
+ }
2370
2385
2371
2386
return 0 ;
2372
2387
}
0 commit comments