Skip to content

Commit 92d24fb

Browse files
committed
qgis wfs server cannot serve geometryless tables
http://hub.qgis.org/issues/7534 In a project where there are geometryless tables everything seems to allow publish them with qgis wfs server. In the project/layer properties all the proper panels (ex. OWS server) seems to allow this operation, but then when accessing the wfs service with the WFS client, the table is not added correctly in the project. In the TOC shows a strange icon (instead the expected table icon) and the table of attributes is empty. In the client the support for geometryless wfs tables should be available since http://hub.qgis.org/projects/quantum-gis/repository/revisions/aedddc22b11e26df900d1ff91d6d23c94d905c78 so it is a server issue.
1 parent 032b4ad commit 92d24fb

File tree

2 files changed

+32
-17
lines changed

2 files changed

+32
-17
lines changed

src/mapserver/qgsprojectparser.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,8 @@ void QgsProjectParser::describeFeatureType( const QString& aTypeName, QDomElemen
314314
QDomElement geomElem = doc.createElement( "element"/*xsd:element*/ );
315315
geomElem.setAttribute( "name", "geometry" );
316316
QGis::WkbType wkbType = layer->wkbType();
317+
if ( wkbType != QGis::WKBNoGeometry )
318+
{
317319
switch ( wkbType )
318320
{
319321
case QGis::WKBPoint25D:
@@ -347,6 +349,7 @@ void QgsProjectParser::describeFeatureType( const QString& aTypeName, QDomElemen
347349
geomElem.setAttribute( "minOccurs", "0" );
348350
geomElem.setAttribute( "maxOccurs", "1" );
349351
sequenceElem.appendChild( geomElem );
352+
}
350353

351354
const QgsFields& fields = provider->fields();
352355
for ( int idx = 0; idx < fields.count(); ++idx )

src/mapserver/qgswfsserver.cpp

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -815,14 +815,18 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
815815
}
816816
else if ( expFilterOk )
817817
{
818-
QgsFeatureIterator fit = layer->getFeatures( QgsFeatureRequest()
819-
.setFilterRect( searchRect )
820-
.setFlags( QgsFeatureRequest::ExactIntersect | ( mWithGeom ? QgsFeatureRequest::NoFlags : QgsFeatureRequest::NoGeometry ) )
821-
.setSubsetOfAttributes( attrIndexes ) );
818+
QgsFeatureRequest req;
819+
req.setSubsetOfAttributes( attrIndexes );
820+
if ( layer->wkbType() != QGis::WKBNoGeometry )
821+
{
822+
req.setFilterRect( searchRect )
823+
.setFlags( QgsFeatureRequest::ExactIntersect | ( mWithGeom ? QgsFeatureRequest::NoFlags : QgsFeatureRequest::NoGeometry ) );
824+
}
825+
QgsFeatureIterator fit = layer->getFeatures( req );
822826
QgsExpression *mFilter = new QgsExpression( expFilter );
823827
if ( mFilter->hasParserError() )
824828
{
825-
throw QgsMapServiceException( "RequestNotWellFormed", mFilter->parserErrorString() );
829+
throw QgsMapServiceException( "RequestNotWellFormed",QString( "Expression filter error message: %1." ).arg( mFilter->parserErrorString() ) );
826830
}
827831
if ( mFilter )
828832
{
@@ -831,7 +835,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
831835
QVariant res = mFilter->evaluate( &feature, fields );
832836
if ( mFilter->hasEvalError() )
833837
{
834-
throw QgsMapServiceException( "RequestNotWellFormed", mFilter->evalErrorString() );
838+
throw QgsMapServiceException( "RequestNotWellFormed", QString( "Expression filter eval error message: %1." ).arg( mFilter->evalErrorString() ) );
835839
}
836840
if ( res.toInt() != 0 )
837841
{
@@ -921,20 +925,24 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
921925
QgsExpression *mFilter = QgsOgcUtils::expressionFromOgcFilter( filterElem );
922926
if ( mFilter->hasParserError() )
923927
{
924-
throw QgsMapServiceException( "RequestNotWellFormed", mFilter->parserErrorString() );
928+
throw QgsMapServiceException( "RequestNotWellFormed", QString( "OGC expression filter error message: %1." ).arg( mFilter->parserErrorString() ) );
925929
}
926930
if ( mFilter )
927931
{
928-
QgsFeatureIterator fit = layer->getFeatures( QgsFeatureRequest()
929-
.setFilterRect( searchRect )
930-
.setFlags( QgsFeatureRequest::ExactIntersect | ( mWithGeom ? QgsFeatureRequest::NoFlags : QgsFeatureRequest::NoGeometry ) )
931-
.setSubsetOfAttributes( attrIndexes ) );
932+
QgsFeatureRequest req;
933+
req.setSubsetOfAttributes( attrIndexes );
934+
if ( layer->wkbType() != QGis::WKBNoGeometry )
935+
{
936+
req.setFilterRect( searchRect )
937+
.setFlags( QgsFeatureRequest::ExactIntersect | ( mWithGeom ? QgsFeatureRequest::NoFlags : QgsFeatureRequest::NoGeometry ) );
938+
}
939+
QgsFeatureIterator fit = layer->getFeatures( req );
932940
while ( fit.nextFeature( feature ) && featureCounter < maxFeat )
933941
{
934942
QVariant res = mFilter->evaluate( &feature, fields );
935943
if ( mFilter->hasEvalError() )
936944
{
937-
throw QgsMapServiceException( "RequestNotWellFormed", mFilter->evalErrorString() );
945+
throw QgsMapServiceException( "RequestNotWellFormed", QString( "OGC expression filter eval error message: %1." ).arg( mFilter->evalErrorString() ) );
938946
}
939947
if ( res.toInt() != 0 )
940948
{
@@ -952,10 +960,14 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
952960
}
953961
else
954962
{
955-
QgsFeatureIterator fit = layer->getFeatures( QgsFeatureRequest()
956-
.setFilterRect( searchRect )
957-
.setFlags( QgsFeatureRequest::ExactIntersect | ( mWithGeom ? QgsFeatureRequest::NoFlags : QgsFeatureRequest::NoGeometry ) )
958-
.setSubsetOfAttributes( attrIndexes ) );
963+
QgsFeatureRequest req;
964+
req.setSubsetOfAttributes( attrIndexes );
965+
if ( layer->wkbType() != QGis::WKBNoGeometry )
966+
{
967+
req.setFilterRect( searchRect )
968+
.setFlags( QgsFeatureRequest::ExactIntersect | ( mWithGeom ? QgsFeatureRequest::NoFlags : QgsFeatureRequest::NoGeometry ) );
969+
}
970+
QgsFeatureIterator fit = layer->getFeatures( req );
959971
while ( fit.nextFeature( feature ) && featureCounter < maxFeat )
960972
{
961973
if ( featureCounter == 0 )
@@ -975,7 +987,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
975987

976988
}
977989
if ( featureCounter == 0 )
978-
throw QgsMapServiceException( "RequestNotWellFormed", mErrors.join( ". " ) );
990+
throw QgsMapServiceException( "RequestNotWellFormed", QString( "No feature found error messages: %1." ).arg( mErrors.join( ". " ) ) );
979991
else
980992
endGetFeature( request, format );
981993

0 commit comments

Comments
 (0)