Skip to content

Commit ba2dd71

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

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
@@ -2220,35 +2220,46 @@ int QgsWMSServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
22202220
#endif
22212221

22222222
QgsFeatureIterator fit = layer->getFeatures( fReq );
2223+
QgsFeatureRendererV2* r2 = layer->rendererV2();
2224+
if ( r2 )
2225+
{
2226+
r2->startRender( renderContext, layer->pendingFields() );
2227+
}
22232228

22242229
bool featureBBoxInitialized = false;
22252230
while ( fit.nextFeature( feature ) )
22262231
{
2232+
if ( layer->wkbType() == QGis::WKBNoGeometry && ! searchRect.isEmpty() )
2233+
{
2234+
break;
2235+
}
2236+
22272237
++featureCounter;
22282238
if ( featureCounter > nFeatures )
22292239
{
22302240
break;
22312241
}
22322242

2233-
QgsFeatureRendererV2* r2 = layer->rendererV2();
2234-
if ( !r2 )
2243+
if ( layer->wkbType() != QGis::WKBNoGeometry && ! searchRect.isEmpty() )
22352244
{
2236-
continue;
2237-
}
2245+
if ( !r2 )
2246+
{
2247+
continue;
2248+
}
22382249

2239-
renderContext.expressionContext().setFeature( feature );
2250+
renderContext.expressionContext().setFeature( feature );
22402251

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+
}
22482259
}
22492260

22502261
QgsRectangle box;
2251-
if ( hasGeometry )
2262+
if ( layer->wkbType() != QGis::WKBNoGeometry && hasGeometry )
22522263
{
22532264
box = mapRender->layerExtentToOutputExtent( layer, feature.constGeometry()->boundingBox() );
22542265
if ( featureBBox ) //extend feature info bounding box if requested
@@ -2342,7 +2353,7 @@ int QgsWMSServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
23422353
}
23432354

23442355
//append feature bounding box to feature info xml
2345-
if ( hasGeometry && mapRender && mConfigParser )
2356+
if ( layer->wkbType() != QGis::WKBNoGeometry && hasGeometry && mapRender && mConfigParser )
23462357
{
23472358
QDomElement bBoxElem = infoDocument.createElement( "BoundingBox" );
23482359
bBoxElem.setAttribute( version == "1.1.1" ? "SRS" : "CRS", outputCrs.authid() );
@@ -2354,7 +2365,7 @@ int QgsWMSServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
23542365
}
23552366

23562367
//also append the wkt geometry as an attribute
2357-
if ( addWktGeometry && hasGeometry )
2368+
if ( layer->wkbType() != QGis::WKBNoGeometry && addWktGeometry && hasGeometry )
23582369
{
23592370
QgsGeometry *geom = feature.geometry();
23602371
if ( geom )
@@ -2374,6 +2385,10 @@ int QgsWMSServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
23742385
}
23752386
}
23762387
}
2388+
if ( r2 )
2389+
{
2390+
r2->stopRender( renderContext );
2391+
}
23772392

23782393
return 0;
23792394
}

0 commit comments

Comments
 (0)