mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-27 00:03:38 -04:00
[ogr] Fix ExactIntersection flag should be ignored if filter rect
is not set And add provider test case to ensure no other providers have this issue
This commit is contained in:
parent
e678bfa042
commit
13a888d2f8
@ -363,7 +363,7 @@ bool QgsOgrFeatureIterator::readFeature( gdal::ogr_feature_unique_ptr fet, QgsFe
|
|||||||
feature.initAttributes( mSource->mFields.count() );
|
feature.initAttributes( mSource->mFields.count() );
|
||||||
feature.setFields( mSource->mFields ); // allow name-based attribute lookups
|
feature.setFields( mSource->mFields ); // allow name-based attribute lookups
|
||||||
|
|
||||||
bool useIntersect = mRequest.flags() & QgsFeatureRequest::ExactIntersect;
|
bool useIntersect = !mRequest.filterRect().isNull() && mRequest.flags() & QgsFeatureRequest::ExactIntersect;
|
||||||
bool geometryTypeFilter = mSource->mOgrGeometryTypeFilter != wkbUnknown;
|
bool geometryTypeFilter = mSource->mOgrGeometryTypeFilter != wkbUnknown;
|
||||||
if ( mFetchGeometry || useIntersect || geometryTypeFilter )
|
if ( mFetchGeometry || useIntersect || geometryTypeFilter )
|
||||||
{
|
{
|
||||||
|
@ -485,6 +485,14 @@ class FeatureSourceTestCase(object):
|
|||||||
assert set(features) == set([1, 2, 3, 4, 5]), 'Got {} instead'.format(features)
|
assert set(features) == set([1, 2, 3, 4, 5]), 'Got {} instead'.format(features)
|
||||||
self.assertTrue(all_valid)
|
self.assertTrue(all_valid)
|
||||||
|
|
||||||
|
# ExactIntersection flag set, but no filter rect set. Should be ignored.
|
||||||
|
request = QgsFeatureRequest()
|
||||||
|
request.setFlags(QgsFeatureRequest.ExactIntersect)
|
||||||
|
features = [f['pk'] for f in self.source.getFeatures(request)]
|
||||||
|
all_valid = (all(f.isValid() for f in self.source.getFeatures(request)))
|
||||||
|
assert set(features) == set([1, 2, 3, 4, 5]), 'Got {} instead'.format(features)
|
||||||
|
self.assertTrue(all_valid)
|
||||||
|
|
||||||
def testRectAndExpression(self):
|
def testRectAndExpression(self):
|
||||||
extent = QgsRectangle(-70, 67, -60, 80)
|
extent = QgsRectangle(-70, 67, -60, 80)
|
||||||
request = QgsFeatureRequest().setFilterExpression('"cnt">200').setFilterRect(extent)
|
request = QgsFeatureRequest().setFilterExpression('"cnt">200').setFilterRect(extent)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user