Skip to content

Commit c4538b7

Browse files
committed
[BUGFIX][QGIS Server] GetFeatureInfo: Feature with no geometry is not returned even if FILTER param is set
1 parent 003f10e commit c4538b7

File tree

1 file changed

+30
-15
lines changed

1 file changed

+30
-15
lines changed

src/server/qgswmsserver.cpp

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2213,35 +2213,46 @@ int QgsWMSServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
22132213
#endif
22142214

22152215
QgsFeatureIterator fit = layer->getFeatures( fReq );
2216+
QgsFeatureRendererV2* r2 = layer->rendererV2();
2217+
if ( r2 )
2218+
{
2219+
r2->startRender( renderContext, layer->pendingFields() );
2220+
}
22162221

22172222
bool featureBBoxInitialized = false;
22182223
while ( fit.nextFeature( feature ) )
22192224
{
2225+
if ( layer->wkbType() == QGis::WKBNoGeometry && ! searchRect.isEmpty() )
2226+
{
2227+
break;
2228+
}
2229+
22202230
++featureCounter;
22212231
if ( featureCounter > nFeatures )
22222232
{
22232233
break;
22242234
}
22252235

2226-
QgsFeatureRendererV2* r2 = layer->rendererV2();
2227-
if ( !r2 )
2236+
if ( layer->wkbType() != QGis::WKBNoGeometry && ! searchRect.isEmpty() )
22282237
{
2229-
continue;
2230-
}
2238+
if ( !r2 )
2239+
{
2240+
continue;
2241+
}
22312242

2232-
renderContext.expressionContext().setFeature( feature );
2243+
renderContext.expressionContext().setFeature( feature );
22332244

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+
}
22412252
}
22422253

22432254
QgsRectangle box;
2244-
if ( hasGeometry )
2255+
if ( layer->wkbType() != QGis::WKBNoGeometry && hasGeometry )
22452256
{
22462257
box = mapRender->layerExtentToOutputExtent( layer, feature.constGeometry()->boundingBox() );
22472258
if ( featureBBox ) //extend feature info bounding box if requested
@@ -2335,7 +2346,7 @@ int QgsWMSServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
23352346
}
23362347

23372348
//append feature bounding box to feature info xml
2338-
if ( hasGeometry && mapRender && mConfigParser )
2349+
if ( layer->wkbType() != QGis::WKBNoGeometry && hasGeometry && mapRender && mConfigParser )
23392350
{
23402351
QDomElement bBoxElem = infoDocument.createElement( "BoundingBox" );
23412352
bBoxElem.setAttribute( version == "1.1.1" ? "SRS" : "CRS", outputCrs.authid() );
@@ -2347,7 +2358,7 @@ int QgsWMSServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
23472358
}
23482359

23492360
//also append the wkt geometry as an attribute
2350-
if ( addWktGeometry && hasGeometry )
2361+
if ( layer->wkbType() != QGis::WKBNoGeometry && addWktGeometry && hasGeometry )
23512362
{
23522363
QgsGeometry *geom = feature.geometry();
23532364
if ( geom )
@@ -2367,6 +2378,10 @@ int QgsWMSServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
23672378
}
23682379
}
23692380
}
2381+
if ( r2 )
2382+
{
2383+
r2->stopRender( renderContext );
2384+
}
23702385

23712386
return 0;
23722387
}

0 commit comments

Comments
 (0)