@@ -20,6 +20,17 @@ QgsCachedFeatureIterator::QgsCachedFeatureIterator( QgsVectorLayerCache *vlCache
2020 : QgsAbstractFeatureIterator( featureRequest )
2121 , mVectorLayerCache( vlCache )
2222{
23+ if ( mRequest .destinationCrs ().isValid () && mRequest .destinationCrs () != mVectorLayerCache ->sourceCrs () )
24+ {
25+ mTransform = QgsCoordinateTransform ( mVectorLayerCache ->sourceCrs (), mRequest .destinationCrs () );
26+ }
27+ mFilterRect = transformedFilterRect ( mTransform );
28+ if ( !mFilterRect .isNull () )
29+ {
30+ // update request to be the unprojected filter rect
31+ mRequest .setFilterRect ( mFilterRect );
32+ }
33+
2334 switch ( featureRequest.filterType () )
2435 {
2536 case QgsFeatureRequest::FilterFids:
@@ -61,6 +72,7 @@ bool QgsCachedFeatureIterator::fetchFeature( QgsFeature &f )
6172 if ( mRequest .acceptFeature ( f ) )
6273 {
6374 f.setValid ( true );
75+ transformFeatureGeometry ( f, mTransform );
6476 return true ;
6577 }
6678 }
@@ -85,7 +97,18 @@ QgsCachedFeatureWriterIterator::QgsCachedFeatureWriterIterator( QgsVectorLayerCa
8597 : QgsAbstractFeatureIterator( featureRequest )
8698 , mVectorLayerCache( vlCache )
8799{
88- mFeatIt = vlCache->layer ()->getFeatures ( featureRequest );
100+ if ( mRequest .destinationCrs ().isValid () && mRequest .destinationCrs () != mVectorLayerCache ->sourceCrs () )
101+ {
102+ mTransform = QgsCoordinateTransform ( mVectorLayerCache ->sourceCrs (), mRequest .destinationCrs () );
103+ }
104+ mFilterRect = transformedFilterRect ( mTransform );
105+ if ( !mFilterRect .isNull () )
106+ {
107+ // update request to be the unprojected filter rect
108+ mRequest .setFilterRect ( mFilterRect );
109+ }
110+
111+ mFeatIt = vlCache->layer ()->getFeatures ( mRequest );
89112}
90113
91114bool QgsCachedFeatureWriterIterator::fetchFeature ( QgsFeature &f )
@@ -100,6 +123,7 @@ bool QgsCachedFeatureWriterIterator::fetchFeature( QgsFeature &f )
100123 // As long as features can be fetched from the provider: Write them to cache
101124 mVectorLayerCache ->cacheFeature ( f );
102125 mFids .insert ( f.id () );
126+ transformFeatureGeometry ( f, mTransform );
103127 return true ;
104128 }
105129 else
0 commit comments