コード例 #1
0
 def testQgsRendererRange_1(self):
     """Test QgsRendererRange getter/setter functions"""
     range = QgsRendererRange()
     self.assertTrue(range)
     lower = 123.45
     upper = 234.56
     label = "Test label"
     symbol = createMarkerSymbol()
     range.setLowerValue(lower)
     self.assertEqual(range.lowerValue(), lower, "Lower value getter/setter failed")
     range.setUpperValue(upper)
     self.assertEqual(range.upperValue(), upper, "Upper value getter/setter failed")
     range.setLabel(label)
     self.assertEqual(range.label(), label, "Label getter/setter failed")
     range.setRenderState(True)
     self.assertTrue(range.renderState(), "Render state getter/setter failed")
     range.setRenderState(False)
     self.assertFalse(range.renderState(), "Render state getter/setter failed")
     range.setSymbol(symbol.clone())
     self.assertEqual(symbol.dump(), range.symbol().dump(), "Symbol getter/setter failed")
     range2 = QgsRendererRange(lower, upper, symbol.clone(), label, False)
     self.assertEqual(range2.lowerValue(), lower, "Lower value from constructor failed")
     self.assertEqual(range2.upperValue(), upper, "Upper value from constructor failed")
     self.assertEqual(range2.label(), label, "Label from constructor failed")
     self.assertEqual(range2.symbol().dump(), symbol.dump(), "Symbol from constructor failed")
     self.assertFalse(range2.renderState(), "Render state getter/setter failed")
コード例 #2
0
    def testQgsRendererRangeLabelFormat_2(self):
        """Test QgsRendererRangeLabelFormat number format"""
        format = QgsRendererRangeLabelFormat()
        # Tests have precision, trim, value, expected
        # (Note: Not sure what impact of locale is on these tests)
        tests = (
            (2, False, 1.0, '1.00'),
            (2, True, 1.0, '1'),
            (2, False, 1.234, '1.23'),
            (2, True, 1.234, '1.23'),
            (2, False, 1.236, '1.24'),
            (2, False, -1.236, '-1.24'),
            (2, False, -0.004, '0.00'),
            (2, True, 1.002, '1'),
            (2, True, 1.006, '1.01'),
            (2, True, 1.096, '1.1'),
            (3, True, 1.096, '1.096'),
            (-2, True, 1496.45, '1500'),
            (-2, True, 149.45, '100'),
            (-2, True, 79.45, '100'),
            (-2, True, 49.45, '0'),
            (-2, True, -49.45, '0'),
            (-2, True, -149.45, '-100'),
        )
        for f in tests:
            precision, trim, value, expected = f
            format.setPrecision(precision)
            format.setTrimTrailingZeroes(trim)
            result = format.formatNumber(value)
            self.assertEqual(result, expected,
                             "Number format error {0}:{1}:{2} => {3}".format(
                                 precision, trim, value, result))

        # Label tests - label format, expected result.
        # Labels will be evaluated with lower=1.23 upper=2.34, precision=2
        ltests = (
            ("%1 - %2", "1.23 - 2.34"),
            ("%1", "1.23"),
            ("%2", "2.34"),
            ("%2%", "2.34%"),
            ("%1%1", "1.231.23"),
            ("from %1 to %2 meters", "from 1.23 to 2.34 meters"),
            ("from %2 to %1 meters", "from 2.34 to 1.23 meters"),
        )
        format.setPrecision(2)
        format.setTrimTrailingZeroes(False)
        lower = 1.232
        upper = 2.339
        for t in ltests:
            label, expected = t
            format.setFormat(label)
            result = format.labelForLowerUpper(lower, upper)
            self.assertEqual(result, expected, "Label format error {0} => {1}".format(
                label, result))

        range = QgsRendererRange()
        range.setLowerValue(lower)
        range.setUpperValue(upper)
        label = ltests[0][0]
        format.setFormat(label)
        result = format.labelForRange(range)
        self.assertEqual(result, ltests[0][1], "Label for range error {0} => {1}".format(
                         label, result))
コード例 #3
0
    def testQgsGraduatedSymbolRenderer_2(self):
        """Test QgsGraduatedSymbolRenderer: Adding /removing/editing classes """
        # Create a renderer
        renderer = QgsGraduatedSymbolRenderer()
        symbol = createMarkerSymbol()
        renderer.setSourceSymbol(symbol.clone())
        symbol.setColor(QColor(255, 0, 0))

        # Add class without start and end ranges

        renderer.addClass(symbol.clone())
        renderer.addClass(symbol.clone())
        renderer.updateRangeLabel(1, 'Second range')
        renderer.updateRangeLowerValue(1, 10.0)
        renderer.updateRangeUpperValue(1, 25.0)
        renderer.updateRangeRenderState(1, False)
        symbol.setColor(QColor(0, 0, 255))
        renderer.updateRangeSymbol(1, symbol.clone())

        # Add as a rangeobject
        symbol.setColor(QColor(0, 255, 0))
        range = QgsRendererRange(20.0, 25.5, symbol.clone(), 'Third range',
                                 False)
        renderer.addClassRange(range)

        # Add class by lower and upper
        renderer.addClassLowerUpper(25.5, 30.5)
        # (Update label for sorting tests)
        renderer.updateRangeLabel(3, 'Another range')

        self.assertEqual(
            dumpRangeLabels(renderer.ranges()),
            '(0.0 - 0.0,Second range,Third range,Another range,)',
            'Added ranges labels not correct')
        self.assertEqual(
            dumpRangeBreaks(renderer.ranges()),
            '(0.0000-0.0000,10.0000-25.0000,20.0000-25.5000,25.5000-30.5000,)',
            'Added ranges lower/upper values not correct')

        # Check that clone function works

        renderer2 = renderer.clone()
        self.assertEqual(dumpGraduatedRenderer(renderer),
                         dumpGraduatedRenderer(renderer2),
                         "clone function doesn't replicate renderer properly")

        # Check save and reload from Dom works

        doc = QDomDocument()
        element = renderer.save(doc, QgsReadWriteContext())
        renderer2 = QgsGraduatedSymbolRenderer.create(element,
                                                      QgsReadWriteContext())
        self.assertEqual(
            dumpGraduatedRenderer(renderer), dumpGraduatedRenderer(renderer2),
            "Save/create from DOM doesn't replicate renderer properly")

        # Check sorting

        renderer.sortByLabel()
        self.assertEqual(
            dumpRangeList(renderer.ranges(), labelsOnly=True),
            '(0.0 - 0.0,Another range,Second range,Third range,)',
            'sortByLabel not correct')
        renderer.sortByValue()
        self.assertEqual(
            dumpRangeBreaks(renderer.ranges()),
            '(0.0000-0.0000,10.0000-25.0000,20.0000-25.5000,25.5000-30.5000,)',
            'sortByValue not correct')
        renderer.sortByValue(Qt.DescendingOrder)
        self.assertEqual(
            dumpRangeBreaks(renderer.ranges()),
            '(25.5000-30.5000,20.0000-25.5000,10.0000-25.0000,0.0000-0.0000,)',
            'sortByValue descending not correct')

        # Check deleting

        renderer.deleteClass(2)
        self.assertEqual(dumpRangeBreaks(renderer.ranges()),
                         '(25.5000-30.5000,20.0000-25.5000,0.0000-0.0000,)',
                         'deleteClass not correct')

        renderer.deleteAllClasses()
        self.assertEqual(len(renderer.ranges()), 0,
                         "deleteAllClasses didn't delete all")
コード例 #4
0
    def testQgsRendererRangeLabelFormat_2(self):
        """Test QgsRendererRangeLabelFormat number format"""
        format = QgsRendererRangeLabelFormat()
        # Tests have precision, trim, value, expected
        # (Note: Not sure what impact of locale is on these tests)
        tests = (
            (2, False, 1.0, '1.00'),
            (2, True, 1.0, '1'),
            (2, False, 1.234, '1.23'),
            (2, True, 1.234, '1.23'),
            (2, False, 1.236, '1.24'),
            (2, False, -1.236, '-1.24'),
            (2, False, -0.004, '0.00'),
            (2, True, 1.002, '1'),
            (2, True, 1.006, '1.01'),
            (2, True, 1.096, '1.1'),
            (3, True, 1.096, '1.096'),
            (-2, True, 1496.45, '1500'),
            (-2, True, 149.45, '100'),
            (-2, True, 79.45, '100'),
            (-2, True, 49.45, '0'),
            (-2, True, -49.45, '0'),
            (-2, True, -149.45, '-100'),
        )
        for f in tests:
            precision, trim, value, expected = f
            format.setPrecision(precision)
            format.setTrimTrailingZeroes(trim)
            result = format.formatNumber(value)
            self.assertEqual(
                result, expected,
                "Number format error {0}:{1}:{2} => {3}".format(
                    precision, trim, value, result))

        # Label tests - label format, expected result.
        # Labels will be evaluated with lower=1.23 upper=2.34, precision=2
        ltests = (
            ("%1 - %2", "1.23 - 2.34"),
            ("%1", "1.23"),
            ("%2", "2.34"),
            ("%2%", "2.34%"),
            ("%1%1", "1.231.23"),
            ("from %1 to %2 meters", "from 1.23 to 2.34 meters"),
            ("from %2 to %1 meters", "from 2.34 to 1.23 meters"),
        )
        format.setPrecision(2)
        format.setTrimTrailingZeroes(False)
        lower = 1.232
        upper = 2.339
        for t in ltests:
            label, expected = t
            format.setFormat(label)
            result = format.labelForLowerUpper(lower, upper)
            self.assertEqual(
                result, expected,
                "Label format error {0} => {1}".format(label, result))

        range = QgsRendererRange()
        range.setLowerValue(lower)
        range.setUpperValue(upper)
        label = ltests[0][0]
        format.setFormat(label)
        result = format.labelForRange(range)
        self.assertEqual(
            result, ltests[0][1],
            "Label for range error {0} => {1}".format(label, result))
コード例 #5
0
 def testQgsRendererRange_1(self):
     """Test QgsRendererRange getter/setter functions"""
     range = QgsRendererRange()
     self.assertTrue(range)
     lower = 123.45
     upper = 234.56
     label = "Test label"
     symbol = createMarkerSymbol()
     range.setLowerValue(lower)
     self.assertEqual(range.lowerValue(), lower,
                      "Lower value getter/setter failed")
     range.setUpperValue(upper)
     self.assertEqual(range.upperValue(), upper,
                      "Upper value getter/setter failed")
     range.setLabel(label)
     self.assertEqual(range.label(), label, "Label getter/setter failed")
     range.setRenderState(True)
     self.assertTrue(range.renderState(),
                     "Render state getter/setter failed")
     range.setRenderState(False)
     self.assertFalse(range.renderState(),
                      "Render state getter/setter failed")
     range.setSymbol(symbol.clone())
     self.assertEqual(symbol.dump(),
                      range.symbol().dump(), "Symbol getter/setter failed")
     range2 = QgsRendererRange(lower, upper, symbol.clone(), label, False)
     self.assertEqual(range2.lowerValue(), lower,
                      "Lower value from constructor failed")
     self.assertEqual(range2.upperValue(), upper,
                      "Upper value from constructor failed")
     self.assertEqual(range2.label(), label,
                      "Label from constructor failed")
     self.assertEqual(range2.symbol().dump(), symbol.dump(),
                      "Symbol from constructor failed")
     self.assertFalse(range2.renderState(),
                      "Render state getter/setter failed")
コード例 #6
0
    def processAlgorithm(self, parameters, context, feedback):

        # Couche buffer :
        input_featuresource = self.parameterAsSource(parameters, 'INPUT',
                                                     context)

        # Buffer distance :
        bufferdist = self.parameterAsDouble(parameters, 'BUFFERDIST', context)

        # Check for cancelation
        if feedback.isCanceled():
            return {}

        buffer_result = processing.run(
            'native:buffer',
            {
                # Here we pass on the original parameter values of INPUT
                # and BUFFER_OUTPUT to the buffer algorithm.
                'INPUT': parameters['INPUT'],
                'OUTPUT': parameters['BUFFER_OUTPUT'],
                'DISTANCE': bufferdist,
                'SEGMENTS': 10,
                'DISSOLVE': True,
                'END_CAP_STYLE': 0,
                'JOIN_STYLE': 0,
                'MITER_LIMIT': 10
            },
            # Because the buffer algorithm is being run as a step in
            # another larger algorithm, the is_child_algorithm option
            # should be set to True
            is_child_algorithm=True,
            #
            # It's important to pass on the context and feedback objects to
            # child algorithms, so that they can properly give feedback to
            # users and handle cancelation requests.
            context=context,
            feedback=feedback)

        # Check for cancelation
        if feedback.isCanceled():
            return {}

        # Selection de la couche cable :
        cables = QgsVectorLayer(
            "/Users/pierre-loupgarrigues/Python JupyterLab/M2/pyqgis/Evaluation_pyqgis/data/cables.shp",
            "cables", "ogr")
        cables = iface.activeLayer()

        # Séléction des cables en fonction des paramètres choisis :
        cables.selectByExpression(
            " \"capacite\" > '{}' AND \"mode_pose\" = '{}' ".format(
                parameters[self.CAPACITE], parameters[self.MODE_DE_POSE]))

        # Vérification :
        selectionCapacite = self.parameterAsDouble(parameters, 'CAPACITE',
                                                   context)
        print(selectionCapacite)
        # Vérification :
        selectionModeDePose = self.parameterAsString(parameters,
                                                     'MODE_DE_POSE', context)
        print(selectionModeDePose)

        # Sauvegarde de la séléction des cables :
        cables_selection = processing.run(
            'qgis:saveselectedfeatures',
            {
                'INPUT': cables,
                #'OUTPUT':'memory:'
                'OUTPUT': parameters['CABLES_OUTPUT']
            },
            context=context,
            feedback=feedback,
            is_child_algorithm=True)

        mes_cables = cables_selection['OUTPUT']

        ### SYMBOLOGIE GRADUEE
        nb_prises = (
            ('Faible', 0, 9, 'green'),
            ('Moyen_1', 10, 25, 'yellow'),
            ('Moyen_2', 26, 100, 'orange'),
            ('Eleve', 101, 1000000, 'red'),
        )

        # creation
        ranges = []
        for label, lower, upper, color in nb_prises:
            symbol = QgsSymbol.defaultSymbol(cables.geometryType())
            symbol.setColor(QColor(color))
            rng = QgsRendererRange(lower, upper, symbol, label)
            ranges.append(rng)

        # create the renderer and assign it to a layer
        expression = 'nb_prises'  # field name
        renderer = QgsGraduatedSymbolRenderer(expression, ranges)
        cables.setRenderer(renderer)

        # Return the results
        return {
            'BUFFER_OUTPUT': buffer_result['OUTPUT'],
            'CABLES_OUTPUT': cables_selection['OUTPUT']
        }
コード例 #7
0
ファイル: test_python_repr.py プロジェクト: rldhont/QGIS
 def testRendererRange(self):
     self.assertEqual(QgsRendererRange().__repr__(), '<QgsRendererRange: 0 - 0>')
     self.assertEqual(QgsRendererRange(1.0, 2.0, None, None).__repr__(), '<QgsRendererRange: 1 - 2>')
     self.assertEqual(QgsRendererRange(1.0, 2.0, None, 'my class').__repr__(), '<QgsRendererRange: 1 - 2 (my class)>')