@@ -488,8 +488,18 @@ def testWFS10(self):
488488
489489 extent = QgsRectangle (400000.0 , 5400000.0 , 450000.0 , 5500000.0 )
490490 request = QgsFeatureRequest ().setFilterRect (extent )
491- values = [f ['INTFIELD' ] for f in vl .getFeatures (request )]
492- self .assertEqual (values , [100 ])
491+ values = [(f .id (), f ['INTFIELD' ]) for f in vl .getFeatures (request )]
492+ self .assertEqual (values [0 ][1 ], 100 )
493+
494+ # Issue a request by id on a cached feature
495+ request = QgsFeatureRequest (values [0 ][0 ])
496+ values = [(f .id (), f ['INTFIELD' ]) for f in vl .getFeatures (request )]
497+ self .assertEqual (values [0 ][1 ], 100 )
498+
499+ # Check behavior with setLimit(1)
500+ request = QgsFeatureRequest ().setLimit (1 )
501+ values = [(f .id (), f ['INTFIELD' ]) for f in vl .getFeatures (request )]
502+ self .assertEqual (values [0 ][1 ], 100 )
493503
494504 def testWFS10_outputformat_GML3 (self ):
495505 """Test WFS 1.0 with OUTPUTFORMAT=GML3"""
@@ -1182,6 +1192,30 @@ def testWFSGetOnlyFeaturesInViewExtent(self):
11821192 values = [f ['ogc_fid' ] for f in vl .getFeatures (request )]
11831193 self .assertEqual (values , [101 ])
11841194
1195+ # Check behavior with setLimit(1)
1196+ with open (sanitize (endpoint , "?SERVICE=WFS&REQUEST=GetFeature&VERSION=1.1.0&TYPENAME=my:typename&MAXFEATURES=1&SRSNAME=urn:ogc:def:crs:EPSG::4326" ), 'wb' ) as f :
1197+ f .write ("""
1198+ <wfs:FeatureCollection xmlns:wfs="http://www.opengis.net/wfs"
1199+ xmlns:gml="http://www.opengis.net/gml"
1200+ xmlns:my="http://my"
1201+ numberOfFeatures="1" timeStamp="2016-03-25T14:51:48.998Z">
1202+ <gml:featureMembers>
1203+ <my:typename gml:id="typename.12345">
1204+ <my:geometryProperty><gml:Point srsName="urn:ogc:def:crs:EPSG::4326"><gml:pos>70 -65</gml:pos></gml:Point></my:geometryProperty>
1205+ <my:ogc_fid>12345</my:ogc_fid>
1206+ </my:typename>
1207+ </gml:featureMembers>
1208+ </wfs:FeatureCollection>""" .encode ('UTF-8' ))
1209+ vl = QgsVectorLayer ("url='http://" + endpoint + "' typename='my:typename' restrictToRequestBBOX=1" , 'test' , 'WFS' )
1210+ request = QgsFeatureRequest ().setLimit (1 )
1211+ values = [f ['ogc_fid' ] for f in vl .getFeatures (request )]
1212+ self .assertEqual (values , [12345 ])
1213+
1214+ # Check that the layer extent is not built from this single feature
1215+ reference = QgsGeometry .fromRect (QgsRectangle (- 80 , 60 , - 50 , 80 ))
1216+ vl_extent = QgsGeometry .fromRect (vl .extent ())
1217+ assert QgsGeometry .compare (vl_extent .asPolygon ()[0 ], reference .asPolygon ()[0 ], 0.00001 ), 'Expected {}, got {}' .format (reference .asWkt (), vl_extent .asWkt ())
1218+
11851219 def testWFS20TruncatedResponse (self ):
11861220 """Test WFS 2.0 truncatedResponse"""
11871221
@@ -2161,15 +2195,15 @@ def testGeomedia(self):
21612195 # Extent before downloading features
21622196 reference = QgsGeometry .fromRect (QgsRectangle (243900.3520259926444851 , 4427769.1559739429503679 , 1525592.3040170343592763 , 5607994.6020106188952923 ))
21632197 vl_extent = QgsGeometry .fromRect (vl .extent ())
2164- assert QgsGeometry .compare (vl_extent .asPolygon ()[0 ], reference .asPolygon ()[0 ], 0.00001 ), 'Expected {}, got {}' .format (reference .exportToWkt (), vl_extent .exportToWkt ())
2198+ assert QgsGeometry .compare (vl_extent .asPolygon ()[0 ], reference .asPolygon ()[0 ], 0.1 ), 'Expected {}, got {}' .format (reference .exportToWkt (), vl_extent .exportToWkt ())
21652199
21662200 # Download all features
21672201 features = [f for f in vl .getFeatures ()]
21682202 self .assertEqual (len (features ), 2 )
21692203
21702204 reference = QgsGeometry .fromRect (QgsRectangle (500000 , 4500000 , 510000 , 4510000 ))
21712205 vl_extent = QgsGeometry .fromRect (vl .extent ())
2172- assert QgsGeometry .compare (vl_extent .asPolygon ()[0 ], reference .asPolygon ()[0 ], 0.00001 ), 'Expected {}, got {}' .format (reference .exportToWkt (), vl_extent .exportToWkt ())
2206+ assert QgsGeometry .compare (vl_extent .asPolygon ()[0 ], reference .asPolygon ()[0 ], 0.1 ), 'Expected {}, got {}' .format (reference .exportToWkt (), vl_extent .exportToWkt ())
21732207 self .assertEqual (features [0 ]['intfield' ], 1 )
21742208 self .assertEqual (features [1 ]['intfield' ], 2 )
21752209
0 commit comments