Exemplo n.º 1
0
    def testProxyFeatureSink(self):
        fields = QgsFields()
        fields.append(QgsField('fldtxt', QVariant.String))
        fields.append(QgsField('fldint', QVariant.Int))

        store = QgsFeatureStore(fields, QgsCoordinateReferenceSystem())
        proxy = QgsProxyFeatureSink(store)
        self.assertEqual(proxy.destinationSink(), store)

        self.assertEqual(len(store), 0)

        f = QgsFeature()
        f.setAttributes(["test", 123])
        f.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(100, 200)))
        proxy.addFeature(f)
        self.assertEqual(len(store), 1)
        self.assertEqual(store.features()[0]['fldtxt'], 'test')

        f2 = QgsFeature()
        f2.setAttributes(["test2", 457])
        f2.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(200, 200)))
        f3 = QgsFeature()
        f3.setAttributes(["test3", 888])
        f3.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(300, 200)))
        proxy.addFeatures([f2, f3])
        self.assertEqual(len(store), 3)
        self.assertEqual(store.features()[1]['fldtxt'], 'test2')
        self.assertEqual(store.features()[2]['fldtxt'], 'test3')
Exemplo n.º 2
0
    def testFromIterator(self):
        """
        Test adding features from an iterator
        :return:
        """
        layer = createLayerWithFivePoints()
        store = QgsFeatureStore(layer.fields(), layer.crs())

        self.assertTrue(store.addFeatures(layer.getFeatures()))
        vals = [f['fldint'] for f in store.features()]
        self.assertEqual(vals, [123, 457, 888, -1, 0])
Exemplo n.º 3
0
    def testFromIterator(self):
        """
        Test adding features from an iterator
        :return:
        """
        layer = createLayerWithFivePoints()
        store = QgsFeatureStore(layer.fields(), layer.crs())

        self.assertTrue(store.addFeatures(layer.getFeatures()))
        vals = [f['fldint'] for f in store.features()]
        self.assertEqual(vals, [123, 457, 888, -1, 0])
Exemplo n.º 4
0
    def testRemappingSink(self):
        """
        Test remapping features
        """
        fields = QgsFields()
        fields.append(QgsField('fldtxt', QVariant.String))
        fields.append(QgsField('fldint', QVariant.Int))
        fields.append(QgsField('fldtxt2', QVariant.String))

        store = QgsFeatureStore(fields,
                                QgsCoordinateReferenceSystem('EPSG:3857'))

        mapping_def = QgsRemappingSinkDefinition()
        mapping_def.setDestinationWkbType(QgsWkbTypes.Point)
        mapping_def.setSourceCrs(QgsCoordinateReferenceSystem('EPSG:4326'))
        mapping_def.setDestinationCrs(
            QgsCoordinateReferenceSystem('EPSG:3857'))
        mapping_def.setDestinationFields(fields)
        mapping_def.addMappedField('fldtxt2', QgsProperty.fromField('fld1'))
        mapping_def.addMappedField(
            'fldint', QgsProperty.fromExpression('@myval * fldint'))

        proxy = QgsRemappingProxyFeatureSink(mapping_def, store)
        self.assertEqual(proxy.destinationSink(), store)

        self.assertEqual(len(store), 0)

        incoming_fields = QgsFields()
        incoming_fields.append(QgsField('fld1', QVariant.String))
        incoming_fields.append(QgsField('fldint', QVariant.Int))

        context = QgsExpressionContext()
        scope = QgsExpressionContextScope()
        scope.setVariable('myval', 2)
        context.appendScope(scope)
        context.setFields(incoming_fields)
        proxy.setExpressionContext(context)
        proxy.setTransformContext(QgsProject.instance().transformContext())

        f = QgsFeature()
        f.setFields(incoming_fields)
        f.setAttributes(["test", 123])
        f.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(1, 2)))
        self.assertTrue(proxy.addFeature(f))
        self.assertEqual(len(store), 1)
        self.assertEqual(store.features()[0].geometry().asWkt(1),
                         'Point (111319.5 222684.2)')
        self.assertEqual(store.features()[0].attributes(), [None, 246, 'test'])

        f2 = QgsFeature()
        f2.setAttributes(["test2", 457])
        f2.setGeometry(QgsGeometry.fromWkt('LineString( 1 1, 2 2)'))
        f3 = QgsFeature()
        f3.setAttributes(["test3", 888])
        f3.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(3, 4)))
        self.assertTrue(proxy.addFeatures([f2, f3]))
        self.assertEqual(len(store), 4)
        self.assertEqual(store.features()[1].attributes(),
                         [None, 914, 'test2'])
        self.assertEqual(store.features()[2].attributes(),
                         [None, 914, 'test2'])
        self.assertEqual(store.features()[3].attributes(),
                         [None, 1776, 'test3'])
        self.assertEqual(store.features()[1].geometry().asWkt(1),
                         'Point (111319.5 111325.1)')
        self.assertEqual(store.features()[2].geometry().asWkt(1),
                         'Point (222639 222684.2)')
        self.assertEqual(store.features()[3].geometry().asWkt(1),
                         'Point (333958.5 445640.1)')