Skip to content

Commit 401b637

Browse files
committed
wfs feature iterator: support ExactIntersect (fixes #8310)
1 parent 745fcbf commit 401b637

File tree

1 file changed

+17
-4
lines changed

1 file changed

+17
-4
lines changed

src/providers/wfs/qgswfsfeatureiterator.cpp

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "qgsspatialindex.h"
1717
#include "qgswfsprovider.h"
1818
#include "qgsmessagelog.h"
19+
#include "qgsgeometry.h"
1920

2021
QgsWFSFeatureIterator::QgsWFSFeatureIterator( QgsWFSProvider* provider, const QgsFeatureRequest& request )
2122
: QgsAbstractFeatureIterator( request )
@@ -67,12 +68,24 @@ bool QgsWFSFeatureIterator::nextFeature( QgsFeature& f )
6768
return false;
6869
}
6970

70-
QMap<QgsFeatureId, QgsFeature* >::iterator it = mProvider->mFeatures.find( *mFeatureIterator );
71-
if ( it == mProvider->mFeatures.end() )
71+
QgsFeature *fet = 0;
72+
73+
for ( ;; )
7274
{
73-
return false;
75+
QMap<QgsFeatureId, QgsFeature* >::iterator it = mProvider->mFeatures.find( *mFeatureIterator );
76+
if ( it == mProvider->mFeatures.end() )
77+
return false;
78+
79+
fet = it.value();
80+
if (( mRequest.flags() & QgsFeatureRequest::ExactIntersect ) == 0 )
81+
break;
82+
83+
if ( fet->geometry() && fet->geometry()->intersects( mRequest.filterRect() ) )
84+
break;
85+
86+
++mFeatureIterator;
7487
}
75-
QgsFeature* fet = it.value();
88+
7689

7790
mProvider->copyFeature( fet, f, !( mRequest.flags() & QgsFeatureRequest::NoGeometry ) );
7891
++mFeatureIterator;

0 commit comments

Comments
 (0)