Skip to content

Commit 697cd1b

Browse files
committedOct 17, 2016
[BUGFIX][QGIS Server] GetFeatureInfo: Feature with no geometry is not returned even if FILTER param is set
1 parent 52a0082 commit 697cd1b

File tree

1 file changed

+29
-15
lines changed

1 file changed

+29
-15
lines changed
 

‎src/server/qgswmsserver.cpp

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)
Please sign in to comment.