Example #1
0
 def test_SplitTruToCreateCutEdge(self):
     """Try to creat a cut edge"""
     layer = QgsVectorLayer("dbname=test.sqlite table=test_pg (geometry)", "test_pg", "spatialite")
     assert(layer.isValid())
     assert(layer.hasGeometryType())
     layer.featureCount() == 1 or die("wrong number of features")
     layer.startEditing()
     layer.splitFeatures([QgsPoint(1.5, -0.5), QgsPoint(1.5, 1.5)], 0) == 0 or die("error when trying to create an invalid polygon in split")
     layer.commitChanges() or die("this commit should work")
     layer.featureCount() == 1 or die("wrong number of features, polygon should be unafected by cut")
Example #2
0
 def test_SplitMultipolygon(self):
     """Split multipolygon"""
     layer = QgsVectorLayer("dbname=test.sqlite table=test_mpg (geometry)", "test_mpg", "spatialite")
     assert(layer.isValid())
     assert(layer.hasGeometryType())
     layer.featureCount() == 1 or die("wrong number of features")
     layer.startEditing()
     layer.splitFeatures([QgsPoint(0.5, -0.5), QgsPoint(0.5, 1.5)], 0) == 0 or die("error in split of one polygon of multipolygon")
     layer.splitFeatures([QgsPoint(2.5, -0.5), QgsPoint(2.5, 4)], 0) == 0 or die("error in split of two polygons of multipolygon at a time")
     layer.commitChanges() or die("this commit should work")
     layer.featureCount() == 7 or die("wrong number of features after 2 split")
 def test_SplitFeature(self):
     """Create spatialite database"""
     layer = QgsVectorLayer("dbname=%s table=test_pg (geometry)" % self.dbname, "test_pg", "spatialite")
     assert(layer.isValid())
     assert(layer.hasGeometryType())
     layer.startEditing()
     layer.splitFeatures([QgsPoint(0.5, -0.5), QgsPoint(0.5, 1.5)], 0) == 0 or die("error in split")
     layer.splitFeatures([QgsPoint(-0.5, 0.5), QgsPoint(1.5, 0.5)], 0) == 0 or die("error in split")
     if not layer.commitChanges():
         die("this commit should work")
     layer.featureCount() == 4 or die("we should have 4 features after 2 split")
Example #4
0
    def test_SplitFeature(self):
        """Test sqlite feature can be split"""
        tmpfile = os.path.join(self.basetestpath, 'testGeopackageSplitFeatures.sqlite')
        ds = ogr.GetDriverByName('SQlite').CreateDataSource(tmpfile)
        lyr = ds.CreateLayer('test', geom_type=ogr.wkbPolygon)
        lyr.CreateField(ogr.FieldDefn('str_field', ogr.OFTString))
        f = ogr.Feature(lyr.GetLayerDefn())
        f.SetGeometry(ogr.CreateGeometryFromWkt('POLYGON ((0 0,0 1,1 1,1 0,0 0))'))
        lyr.CreateFeature(f)
        f = None
        ds = None

        layer = QgsVectorLayer(u'{}'.format(tmpfile) + "|layername=" + "test", 'test', u'ogr')

        # Check that pk field has unique constraint
        fields = layer.fields()
        pkfield = fields.at(0)
        self.assertTrue(pkfield.constraints().constraints() & QgsFieldConstraints.ConstraintUnique)

        self.assertTrue(layer.isValid())
        self.assertTrue(layer.isSpatial())
        self.assertEqual([f for f in layer.getFeatures()][0].geometry().asWkt(), 'Polygon ((0 0, 0 1, 1 1, 1 0, 0 0))')
        layer.startEditing()
        self.assertEqual(layer.splitFeatures([QgsPointXY(0.5, 0), QgsPointXY(0.5, 1)], 0), 0)
        self.assertTrue(layer.commitChanges())
        self.assertEqual(layer.featureCount(), 2)

        layer = QgsVectorLayer(u'{}'.format(tmpfile) + "|layername=" + "test", 'test', u'ogr')
        self.assertEqual(layer.featureCount(), 2)
        self.assertEqual([f for f in layer.getFeatures()][0].geometry().asWkt(), 'Polygon ((0.5 0, 0.5 1, 1 1, 1 0, 0.5 0))')
        self.assertEqual([f for f in layer.getFeatures()][1].geometry().asWkt(), 'Polygon ((0.5 1, 0.5 0, 0 0, 0 1, 0.5 1))')
Example #5
0
    def test_SplitFeature(self):
        """Test sqlite feature can be split"""
        tmpfile = os.path.join(self.basetestpath, 'testGeopackageSplitFeatures.sqlite')
        ds = ogr.GetDriverByName('SQlite').CreateDataSource(tmpfile)
        lyr = ds.CreateLayer('test', geom_type=ogr.wkbPolygon)
        lyr.CreateField(ogr.FieldDefn('str_field', ogr.OFTString))
        f = ogr.Feature(lyr.GetLayerDefn())
        f.SetGeometry(ogr.CreateGeometryFromWkt('POLYGON ((0 0,0 1,1 1,1 0,0 0))'))
        lyr.CreateFeature(f)
        f = None
        ds = None

        layer = QgsVectorLayer(u'{}'.format(tmpfile) + "|layername=" + "test", 'test', u'ogr')

        # Check that pk field has unique constraint
        fields = layer.fields()
        pkfield = fields.at(0)
        self.assertTrue(pkfield.constraints().constraints() & QgsFieldConstraints.ConstraintUnique)

        self.assertTrue(layer.isValid())
        self.assertTrue(layer.isSpatial())
        self.assertEqual([f for f in layer.getFeatures()][0].geometry().asWkt(), 'Polygon ((0 0, 0 1, 1 1, 1 0, 0 0))')
        layer.startEditing()
        self.assertEqual(layer.splitFeatures([QgsPointXY(0.5, 0), QgsPointXY(0.5, 1)], 0), 0)
        self.assertTrue(layer.commitChanges())
        self.assertEqual(layer.featureCount(), 2)

        layer = QgsVectorLayer(u'{}'.format(tmpfile) + "|layername=" + "test", 'test', u'ogr')
        self.assertEqual(layer.featureCount(), 2)
        self.assertEqual([f for f in layer.getFeatures()][0].geometry().asWkt(), 'Polygon ((0.5 0, 0.5 1, 1 1, 1 0, 0.5 0))')
        self.assertEqual([f for f in layer.getFeatures()][1].geometry().asWkt(), 'Polygon ((0.5 1, 0.5 0, 0 0, 0 1, 0.5 1))')
Example #6
0
 def test_SplitFeature(self):
     """Create spatialite database"""
     layer = QgsVectorLayer(
         "dbname=%s table=test_pg (geometry)" % self.dbname, "test_pg",
         "spatialite")
     self.assertTrue(layer.isValid())
     self.assertTrue(layer.hasGeometryType())
     layer.startEditing()
     self.assertEqual(
         layer.splitFeatures([QgsPoint(0.75, -0.5),
                              QgsPoint(0.75, 1.5)], 0), 0)
     self.assertEqual(
         layer.splitFeatures([QgsPoint(-0.5, 0.25),
                              QgsPoint(1.5, 0.25)], 0), 0)
     self.assertTrue(layer.commitChanges())
     self.assertEqual(layer.featureCount(), 4)
Example #7
0
 def test_SplitMultipolygon(self):
     """Split multipolygon"""
     layer = QgsVectorLayer("dbname=test.sqlite table=test_mpg (geometry)",
                            "test_mpg", "spatialite")
     assert (layer.isValid())
     assert (layer.hasGeometryType())
     layer.featureCount() == 1 or die("wrong number of features")
     layer.startEditing()
     layer.splitFeatures(
         [QgsPoint(0.5, -0.5), QgsPoint(0.5, 1.5)],
         0) == 0 or die("error in split of one polygon of multipolygon")
     layer.splitFeatures(
         [QgsPoint(2.5, -0.5), QgsPoint(2.5, 4)], 0) == 0 or die(
             "error in split of two polygons of multipolygon at a time")
     layer.commitChanges() or die("this commit should work")
     layer.featureCount() == 7 or die(
         "wrong number of features after 2 split")
Example #8
0
 def test_SplitFeatureWithMultiKey(self):
     """Create SpatiaLite database"""
     layer = QgsVectorLayer("dbname=%s table=test_pg_mk (geometry)" % self.dbname, "test_pg_mk", "spatialite")
     self.assertTrue(layer.isValid())
     self.assertTrue(layer.isSpatial())
     layer.startEditing()
     self.assertEqual(layer.splitFeatures([QgsPointXY(0.5, -0.5), QgsPointXY(0.5, 1.5)], 0), 0)
     self.assertEqual(layer.splitFeatures([QgsPointXY(-0.5, 0.5), QgsPointXY(1.5, 0.5)], 0), 0)
     self.assertTrue(layer.commitChanges())
 def test_SplitFeatureWithMultiKey(self):
     """Create SpatiaLite database"""
     layer = QgsVectorLayer("dbname=%s table=test_pg_mk (geometry)" % self.dbname, "test_pg_mk", "spatialite")
     self.assertTrue(layer.isValid())
     self.assertTrue(layer.isSpatial())
     layer.startEditing()
     self.assertEqual(layer.splitFeatures([QgsPointXY(0.5, -0.5), QgsPointXY(0.5, 1.5)], 0), 0)
     self.assertEqual(layer.splitFeatures([QgsPointXY(-0.5, 0.5), QgsPointXY(1.5, 0.5)], 0), 0)
     self.assertTrue(layer.commitChanges())
Example #10
0
 def test_SplitFeature(self):
     """Create spatialite database"""
     layer = QgsVectorLayer("dbname=%s table=test_pg (geometry)" % self.dbname, "test_pg", "spatialite")
     self.assertTrue(layer.isValid())
     self.assertTrue(layer.hasGeometryType())
     layer.startEditing()
     self.assertEqual(layer.splitFeatures([QgsPoint(0.5, -0.5), QgsPoint(0.5, 1.5)], 0), 0)
     self.assertEqual(layer.splitFeatures([QgsPoint(-0.5, 0.5), QgsPoint(1.5, 0.5)], 0), 0)
     self.assertTrue(layer.commitChanges())
     self.assertEqual(layer.featureCount(), 4)
Example #11
0
 def xtest_SplitFeatureWithFailedCommit(self):
     """Create spatialite database"""
     layer = QgsVectorLayer("dbname=%s table=test_pg_mk (geometry)" % self.dbname, "test_pg_mk", "spatialite")
     assert(layer.isValid())
     assert(layer.hasGeometryType())
     layer.startEditing()
     layer.splitFeatures([QgsPoint(0.5, -0.5), QgsPoint(0.5, 1.5)], 0) == 0 or die("error in split")
     layer.splitFeatures([QgsPoint(-0.5, 0.5), QgsPoint(1.5, 0.5)], 0) == 0 or die("error in split")
     if layer.commitChanges():
         die("this commit should fail")
     layer.rollBack()
     feat = QgsFeature()
     it = layer.getFeatures()
     it.nextFeature(feat)
     ref = [[(0, 0), (1, 0), (1, 1), (0, 1), (0, 0)]]
     res = feat.geometry().asPolygon()
     for ring1, ring2 in zip(ref, res):
         for p1, p2 in zip(ring1, ring2):
             for c1, c2 in zip(p1, p2):
                 c1 == c2 or die("polygon has been altered by failed edition")
Example #12
0
 def xtest_SplitFeatureWithFailedCommit(self):
     """Create spatialite database"""
     layer = QgsVectorLayer("dbname=%s table=test_pg_mk (geometry)" % self.dbname, "test_pg_mk", "spatialite")
     assert(layer.isValid())
     assert(layer.hasGeometryType())
     layer.startEditing()
     layer.splitFeatures([QgsPoint(0.5, -0.5), QgsPoint(0.5, 1.5)], 0)==0 or die("error in split")
     layer.splitFeatures([QgsPoint(-0.5, 0.5), QgsPoint(1.5, 0.5)], 0)==0 or die("error in split")
     if layer.commitChanges():
         die("this commit should fail")
     layer.rollBack()
     feat = QgsFeature()
     it=layer.getFeatures()
     it.nextFeature(feat)
     ref = [[(0,0), (1,0), (1,1), (0,1), (0,0)]]
     res = feat.geometry().asPolygon()
     for ring1, ring2 in zip(ref, res):
         for p1, p2 in zip(ring1, ring2):
             for c1, c2 in zip(p1, p2):
                 c1 == c2 or die("polygon has been altered by failed edition")
Example #13
0
 def xtest_SplitFeatureWithFailedCommit(self):
     """Create spatialite database"""
     layer = QgsVectorLayer(
         "dbname=%s table=test_pg_mk (geometry)" % self.dbname,
         "test_pg_mk", "spatialite")
     self.assertTrue(layer.isValid())
     self.assertTrue(layer.hasGeometryType())
     layer.startEditing()
     self.asserEqual(
         layer.splitFeatures(
             [QgsPoint(0.5, -0.5), QgsPoint(0.5, 1.5)], 0), 0)
     self.asserEqual(
         layer.splitFeatures(
             [QgsPoint(-0.5, 0.5), QgsPoint(1.5, 0.5)], 0), 0)
     self.assertFalse(layer.commitChanges())
     layer.rollBack()
     feat = next(layer.getFeatures())
     ref = [[(0, 0), (1, 0), (1, 1), (0, 1), (0, 0)]]
     res = feat.geometry().asPolygon()
     for ring1, ring2 in zip(ref, res):
         for p1, p2 in zip(ring1, ring2):
             for c1, c2 in zip(p1, p2):
                 self.asserEqual(c1, c2)
Example #14
0
 def xtest_SplitFeatureWithFailedCommit(self):
     """Create spatialite database"""
     layer = QgsVectorLayer("dbname=%s table=test_pg_mk (geometry)" % self.dbname, "test_pg_mk", "spatialite")
     self.assertTrue(layer.isValid())
     self.assertTrue(layer.hasGeometryType())
     layer.startEditing()
     self.asserEqual(layer.splitFeatures([QgsPoint(0.5, -0.5), QgsPoint(0.5, 1.5)], 0), 0)
     self.asserEqual(layer.splitFeatures([QgsPoint(-0.5, 0.5), QgsPoint(1.5, 0.5)], 0), 0)
     self.assertFalse(layer.commitChanges())
     layer.rollBack()
     feat = next(layer.getFeatures())
     ref = [[(0, 0), (1, 0), (1, 1), (0, 1), (0, 0)]]
     res = feat.geometry().asPolygon()
     for ring1, ring2 in zip(ref, res):
         for p1, p2 in zip(ring1, ring2):
             for c1, c2 in zip(p1, p2):
                 self.asserEqual(c1, c2)