26 changes: 13 additions & 13 deletions src/core/qgsgeometry.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -554,35 +554,35 @@ QgsGeometry* QgsGeometry::fromGML2( const QDomNode& geometryNode )
if ( !( geomType == "Point" || geomType == "LineString" || geomType == "Polygon" || geomType == "MultiPoint" || geomType == "MultiLineString" || geomType == "MultiPolygon" ) )
return 0;

if ( geomType == "Point" )
if ( geomType == "Point" && g->setFromGML2Point( geometryTypeElement ) )
{
g->setFromGML2Point( geometryTypeElement );
return g;
}
else if ( geomType == "LineString" )
else if ( geomType == "LineString" && g->setFromGML2LineString( geometryTypeElement ) )
{
g->setFromGML2LineString( geometryTypeElement );
return g;
}
else if ( geomType == "Polygon" )
else if ( geomType == "Polygon" && g->setFromGML2Polygon( geometryTypeElement ) )
{
g->setFromGML2Polygon( geometryTypeElement );
return g;
}
else if ( geomType == "MultiPoint" )
else if ( geomType == "MultiPoint" && g->setFromGML2MultiPoint( geometryTypeElement ) )
{
g->setFromGML2MultiPoint( geometryTypeElement );
return g;
}
else if ( geomType == "MultiLineString" )
else if ( geomType == "MultiLineString" && g->setFromGML2MultiLineString( geometryTypeElement ) )
{
g->setFromGML2MultiLineString( geometryTypeElement );
return g;
}
else if ( geomType == "MultiPolygon" )
else if ( geomType == "MultiPolygon" && g->setFromGML2MultiPolygon( geometryTypeElement ) )
{
g->setFromGML2MultiPolygon( geometryTypeElement );
return g;
}
else //unknown type
{
return 0;
}
return g;
return 0;
}

bool QgsGeometry::setFromGML2Point( const QDomElement& geometryElement )
Expand Down
44 changes: 39 additions & 5 deletions src/mapserver/qgswfsserver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#include "qgsconfigparser.h"
#include "qgscrscache.h"
#include "qgsfield.h"
#include "qgsexpression.h"
#include "qgsgeometry.h"
#include "qgsmaplayer.h"
#include "qgsmaplayerregistry.h"
Expand Down Expand Up @@ -430,18 +431,41 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
}
else
{
QgsFilter* mFilter = QgsFilter::createFilterFromXml( filterElem.firstChild().toElement(), layer );
QgsExpression *mFilter = QgsExpression::createFromOgcFilter( filterElem );
if (mFilter->hasParserError())
{
throw QgsMapServiceException( "RequestNotWellFormed", mFilter->parserErrorString() );
}
if ( mFilter )
{
while ( provider->nextFeature( feature ) && featureCounter < maxFeat )
{
if ( mFilter->evaluate( feature ) )
QVariant res = mFilter->evaluate( &feature, fields );
if (mFilter->hasEvalError())
{
throw QgsMapServiceException( "RequestNotWellFormed", mFilter->evalErrorString() );
}
if ( res.toInt() != 0 )
{
sendGetFeature( request, format, &feature, featCounter, layerCrs, fields, layerExcludedAttributes );
sendGetFeature( request, format, &feature, featureCounter, layerCrs, fields, layerExcludedAttributes );
++featureCounter;
++featCounter;
}
}
/*
QgsFilter* mFilter = QgsFilter::createFilterFromXml( filterElem.firstChild().toElement(), layer );
if ( mFilter )
{
while ( provider->nextFeature( feature ) && featureCounter < maxFeat )
{
if ( mFilter->evaluate( feature ) )
{
sendGetFeature( request, format, &feature, featCounter, layerCrs, fields, layerExcludedAttributes );
++featCounter;
++featureCounter;
}
}
*/
}
}
}
Expand Down Expand Up @@ -635,12 +659,22 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
provider->select( attrIndexes, searchRect, mWithGeom, true );
try
{
QgsFilter* mFilter = QgsFilter::createFilterFromXml( filter.firstChild().toElement().firstChild().toElement(), layer );
QDomElement filterElem = filter.firstChildElement();
QgsExpression *mFilter = QgsExpression::createFromOgcFilter( filterElem );
if (mFilter->hasParserError())
{
throw QgsMapServiceException( "RequestNotWellFormed", mFilter->parserErrorString() );
}
while ( provider->nextFeature( feature ) && featureCounter < maxFeat )
{
if ( mFilter )
{
if ( mFilter->evaluate( feature ) )
QVariant res = mFilter->evaluate( &feature, fields );
if (mFilter->hasEvalError())
{
throw QgsMapServiceException( "RequestNotWellFormed", mFilter->evalErrorString() );
}
if ( res.toInt() != 0 )
{
sendGetFeature( request, format, &feature, featureCounter, layerCrs, fields, layerExcludedAttributes );
++featureCounter;
Expand Down