@@ -410,8 +410,8 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
410
410
mErrors = QStringList ();
411
411
mTypeNames = QStringList ();
412
412
413
- long maxFeat = 0 ;
414
- long maxFeatures = - 1 ;
413
+ long maxFeatures = 0 ;
414
+ bool hasFeatureLimit = false ;
415
415
long startIndex = 0 ;
416
416
long featureCounter = 0 ;
417
417
int layerPrec = 8 ;
@@ -432,9 +432,14 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
432
432
{
433
433
QDomElement docElem = doc.documentElement ();
434
434
if ( docElem.hasAttribute ( " maxFeatures" ) )
435
+ {
436
+ hasFeatureLimit = true ;
435
437
maxFeatures = docElem.attribute ( " maxFeatures" ).toLong ();
438
+ }
436
439
if ( docElem.hasAttribute ( " startIndex" ) )
440
+ {
437
441
startIndex = docElem.attribute ( " startIndex" ).toLong ();
442
+ }
438
443
439
444
QDomNodeList queryNodes = docElem.elementsByTagName ( " Query" );
440
445
QDomElement queryElem;
@@ -630,7 +635,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
630
635
req.setSubsetOfAttributes ( attrIndexes );
631
636
632
637
QgsFeatureIterator fit = layer->getFeatures ( req );
633
- while ( fit.nextFeature ( feature ) && ( maxFeatures == - 1 || featureCounter < maxFeat + startIndex ) )
638
+ while ( fit.nextFeature ( feature ) && ( !hasFeatureLimit || featureCounter < maxFeatures + startIndex ) )
634
639
{
635
640
if ( featureCounter == startIndex )
636
641
startGetFeature ( request, format, layerPrec, layerCrs, &searchRect );
@@ -652,7 +657,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
652
657
{
653
658
throw QgsMapServiceException ( " RequestNotWellFormed" , filter->parserErrorString () );
654
659
}
655
- while ( fit.nextFeature ( feature ) && ( maxFeatures == - 1 || featureCounter < maxFeat + startIndex ) )
660
+ while ( fit.nextFeature ( feature ) && ( !hasFeatureLimit || featureCounter < maxFeatures + startIndex ) )
656
661
{
657
662
expressionContext.setFeature ( feature );
658
663
@@ -679,7 +684,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
679
684
}
680
685
else
681
686
{
682
- while ( fit.nextFeature ( feature ) && ( maxFeatures == - 1 || featureCounter < maxFeat + startIndex ) )
687
+ while ( fit.nextFeature ( feature ) && ( !hasFeatureLimit || featureCounter < maxFeatures + startIndex ) )
683
688
{
684
689
if ( featureCounter == startIndex )
685
690
startGetFeature ( request, format, layerPrec, layerCrs, &searchRect );
@@ -819,8 +824,8 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
819
824
{
820
825
QString mfString = mfIt.value ();
821
826
bool mfOk;
827
+ hasFeatureLimit = true ;
822
828
maxFeatures = mfString.toLong ( &mfOk, 10 );
823
- maxFeat = mfString.toLong ( &mfOk, 10 );
824
829
}
825
830
826
831
// read STARTINDEX
@@ -983,7 +988,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
983
988
{
984
989
throw QgsMapServiceException ( " RequestNotWellFormed" , QString ( " Expression filter error message: %1." ).arg ( filter->parserErrorString () ) );
985
990
}
986
- while ( fit.nextFeature ( feature ) && ( maxFeatures == - 1 || featureCounter < maxFeat + startIndex ) )
991
+ while ( fit.nextFeature ( feature ) && ( !hasFeatureLimit || featureCounter < maxFeatures + startIndex ) )
987
992
{
988
993
expressionContext.setFeature ( feature );
989
994
QVariant res = filter->evaluate ( &expressionContext );
@@ -1067,7 +1072,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
1067
1072
req.setSubsetOfAttributes ( attrIndexes );
1068
1073
1069
1074
QgsFeatureIterator fit = layer->getFeatures ( req );
1070
- while ( fit.nextFeature ( feature ) && ( maxFeatures == - 1 || featureCounter < maxFeat + startIndex ) )
1075
+ while ( fit.nextFeature ( feature ) && ( !hasFeatureLimit || featureCounter < maxFeatures + startIndex ) )
1071
1076
{
1072
1077
if ( featureCounter == startIndex )
1073
1078
startGetFeature ( request, format, layerPrec, layerCrs, &searchRect );
@@ -1108,7 +1113,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
1108
1113
}
1109
1114
req.setSubsetOfAttributes ( attrIndexes );
1110
1115
QgsFeatureIterator fit = layer->getFeatures ( req );
1111
- while ( fit.nextFeature ( feature ) && ( maxFeatures == - 1 || featureCounter < maxFeat + startIndex ) )
1116
+ while ( fit.nextFeature ( feature ) && ( !hasFeatureLimit || featureCounter < maxFeatures + startIndex ) )
1112
1117
{
1113
1118
expressionContext.setFeature ( feature );
1114
1119
QVariant res = filter->evaluate ( &expressionContext );
@@ -1154,7 +1159,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
1154
1159
}
1155
1160
req.setSubsetOfAttributes ( attrIndexes );
1156
1161
QgsFeatureIterator fit = layer->getFeatures ( req );
1157
- while ( fit.nextFeature ( feature ) && ( maxFeatures == - 1 || featureCounter < maxFeat + startIndex ) )
1162
+ while ( fit.nextFeature ( feature ) && ( !hasFeatureLimit || featureCounter < maxFeatures + startIndex ) )
1158
1163
{
1159
1164
mErrors << QString ( " The feature %2 of layer for the TypeName '%1'" ).arg ( tnStr ).arg ( featureCounter );
1160
1165
if ( featureCounter == startIndex )
@@ -1375,7 +1380,7 @@ void QgsWFSServer::endGetFeature( QgsRequestHandler& request, const QString& for
1375
1380
}
1376
1381
else
1377
1382
{
1378
- fcString = " </wfs:FeatureCollection>" ;
1383
+ fcString = " </wfs:FeatureCollection>\n " ;
1379
1384
result = fcString.toUtf8 ();
1380
1385
request.endGetFeatureResponse ( &result );
1381
1386
fcString = " " ;
0 commit comments