@@ -2756,6 +2756,45 @@ def testFeatureRequestWithReprojectionAndVirtualFields(self):
2756
2756
self .assertAlmostEqual (features [4 ]['virtual' ], - 65.32 , 2 )
2757
2757
self .assertAlmostEqual (features [4 ].geometry ().constGet ().x (), - 7271389 , - 5 )
2758
2758
2759
+ def testPrecision (self ):
2760
+ layer = QgsVectorLayer ("Polygon?crs=epsg:2056&field=pk:int" , "vl" , "memory" )
2761
+ layer .setGeometryPrecision (10 )
2762
+ geom = QgsGeometry .fromWkt ('Polygon ((2596411 1224654, 2596400 1224652, 2596405 1224640, 2596410 1224641, 2596411 1224654))' )
2763
+ feature = QgsFeature (layer .fields ())
2764
+ feature .setGeometry (geom )
2765
+ layer .startEditing ()
2766
+ layer .addFeature (feature )
2767
+ self .assertGeometriesEqual (QgsGeometry .fromWkt ('Polygon ((2596410 1224650, 2596400 1224650, 2596410 1224640, 2596410 1224650))' ), feature .geometry (), 'geometry with unsnapped nodes' , 'fixed geometry' )
2768
+ layer .setGeometryPrecision (0.0 )
2769
+ feature .setGeometry (QgsGeometry .fromWkt ('Polygon ((2596411 1224654, 2596400 1224652, 2596405 1224640, 2596410 1224641, 2596411 1224654))' ))
2770
+ layer .addFeature (feature )
2771
+ self .assertGeometriesEqual (QgsGeometry .fromWkt ('Polygon ((2596411 1224654, 2596400 1224652, 2596405 1224640, 2596410 1224641, 2596411 1224654))' ), feature .geometry (), 'geometry with duplicates' , 'unchanged geometry' )
2772
+
2773
+ def testRemoveDuplicateNodes (self ):
2774
+ layer = QgsVectorLayer ("Polygon?crs=epsg:2056&field=pk:int" , "vl" , "memory" )
2775
+ layer .setRemoveDuplicateNodes (True )
2776
+ geom = QgsGeometry .fromWkt ('Polygon ((70 80, 80 90, 80 90, 60 50, 70 80))' )
2777
+ feature = QgsFeature (layer .fields ())
2778
+ feature .setGeometry (geom )
2779
+ layer .startEditing ()
2780
+ layer .addFeature (feature )
2781
+ self .assertGeometriesEqual (feature .geometry (), QgsGeometry .fromWkt ('Polygon ((70 80, 80 90, 60 50, 70 80))' ), 'fixed geometry' , 'geometry with duplicates' )
2782
+ layer .setRemoveDuplicateNodes (False )
2783
+ feature .setGeometry (QgsGeometry .fromWkt ('Polygon ((70 80, 80 90, 80 90, 60 50, 70 80))' ))
2784
+ layer .addFeature (feature )
2785
+ self .assertGeometriesEqual (feature .geometry (), QgsGeometry .fromWkt ('Polygon ((70 80, 80 90, 80 90, 60 50, 70 80))' ), 'unchanged geometry' , 'geometry with duplicates' )
2786
+
2787
+ def testPrecisionAndDuplicateNodes (self ):
2788
+ layer = QgsVectorLayer ("Polygon?crs=epsg:2056&field=pk:int" , "vl" , "memory" )
2789
+ layer .setGeometryPrecision (10 )
2790
+ layer .setRemoveDuplicateNodes (True )
2791
+ geom = QgsGeometry .fromWkt ('Polygon ((2596411 1224654, 2596400 1224652, 2596402 1224653, 2596405 1224640, 2596410 1224641, 2596411 1224654))' )
2792
+ feature = QgsFeature (layer .fields ())
2793
+ feature .setGeometry (geom )
2794
+ layer .startEditing ()
2795
+ layer .addFeature (feature )
2796
+ self .assertGeometriesEqual (QgsGeometry .fromWkt ('Polygon ((2596410 1224650, 2596400 1224650, 2596410 1224640, 2596410 1224650))' ), feature .geometry (), 'geometry with unsnapped nodes' , 'fixed geometry' )
2797
+
2759
2798
2760
2799
class TestQgsVectorLayerSourceAddedFeaturesInBuffer (unittest .TestCase , FeatureSourceTestCase ):
2761
2800
0 commit comments