[Qgis-user] QGIS 3 Processing question

Jean-Baptiste Desbas jb.desbas at gmail.com
Fri Jun 29 07:02:47 PDT 2018


Hi,

I had the same issue. I had to loop over the output vector layer (child
alg) to feed the sink (main alg). Maybe is not the
simpliest/shortest/fastest, but it works.
Something like that :

o = processing.run(
            'qgis:pointsalonglines',
            params, context=context, feedback=feedback
        )['OUTPUT']

 (sink, dest_id) = self.parameterAsSink(
                    parameters,
                    self.OUTPUT,
                    context,
                    o.fields,
                    o.wkbType(),
                    o.sourceCrs()
)

for f in o.getFeatures()
    sink.addFeature(f)


return {'OUTPUT':dest_id}


2018-06-29 9:35 GMT+02:00 Frank Broniewski <hallo at frankbroniewski.com>:

> Hi Nyall,
>
> thanks a ton for your response. I am well know for making things tricky
> for myself 😃
> Anyway, my testing-algorithm-script is still not working. It runs through,
> but I do not get the expected result loaded into the layer tree. I suppose
> it runs through - the  output from the 'qgis:pointsalonglines' is a
> QgsVectorLayer - but after finishing I get nuthink back.
>
> Here's my complete script: You'll need a temporary polygon layer in a
> projected CRS (I use EPSG:31466) for it to work nicely. Copy & Paste it
> into a new script window and run it. I simply don't find the reason why the
> point result layer isn't loaded into my layer tree ...
>
>
> from qgis.PyQt.QtCore import QCoreApplication
> from qgis.core import (QgsApplication,
>                        QgsProcessing,
>                        QgsFeatureSink,
>                        QgsProcessingAlgorithm,
>                        QgsProcessingParameterFeatureSource,
>                        QgsProcessingParameterNumber,
>                        QgsProcessingParameterFeatureSink)
>
> import processing
>
>
> class PolygonCenterline(QgsProcessingAlgorithm):
>
>     INPUT = 'INPUT'
>     DISTANCE = 'DISTANCE'
>     OUTPUT = 'OUTPUT'
>
>     def tr(self, text):
>         return QCoreApplication.translate('Processing', text)
>
>     def createInstance(self):
>         return PolygonCenterline()
>
>     def group(self):
>         return self.tr('Cartography')
>
>     def groupId(self):
>         return 'cartography'
>
>     def name(self):
>         return 'polygoncenterline'
>
>     def displayName(self):
>         return self.tr('Calculate a polygon centerline')
>
>     def initAlgorithm(self, config=None):
>         self.addParameter(
>             QgsProcessingParameterFeatureSource(
>                 self.INPUT,
>                 self.tr('Vector Polygon Layer'),
>                 [QgsProcessing.TypeVectorPolygon]
>             )
>         )
>
>         self.addParameter(
>             QgsProcessingParameterNumber(
>                 self.DISTANCE,
>                 self.tr('Point distance value'),
>                 type=QgsProcessingParameterNumber.Double,
>                 minValue=10.0
>             )
>         )
>
>         self.addParameter(
>             QgsProcessingParameterFeatureSink(
>                 self.OUTPUT,
>                 self.tr('Center line')
>             )
>         )
>
>     def processAlgorithm(self, parameters, context, feedback):
>         # qgis:pointsalonglines
>         params = {
>             'INPUT': parameters[self.INPUT],
>             'DISTANCE': parameters[self.DISTANCE],
>             'START_OFFSET': 0,
>             'END_OFFSET': 0,
>             'OUTPUT': 'memory:'
>         }
>         points = processing.run(
>             'qgis:pointsalonglines',
>             params, context=context, feedback=feedback
>         )['OUTPUT']
>
>         return {self.OUTPUT: points}
>
>
>
>
> -----Ursprüngliche Nachricht-----
> Von: Nyall Dawson <nyall.dawson at gmail.com>
> Gesendet: Freitag, 29. Juni 2018 01:04
> An: Frank Broniewski <hallo at frankbroniewski.com>
> Cc: qgis-user <qgis-user at lists.osgeo.org>
> Betreff: Re: [Qgis-user] QGIS 3 Processing question
>
> On Fri, 29 Jun 2018 at 07:14, Frank Broniewski <hallo at frankbroniewski.com>
> wrote:
> >
> >     def processAlgorithm(self, parameters, context, feedback):
>
>
> You're making this tricky for yourself! Cut out everything in
> processAlgorithm related to self.INPUT, and just pass the parameter value
> direct to the child algorithm to handle:
>
> >         params = {
> >
> >             'INPUT': parameters[self.INPUT],
> >
> >             'DISTANCE': pt_value,
> >
> >             'START_OFFSET': 0,
> >
> >             'END_OFFSET': 0,
> >
> >             'OUTPUT': 'memory:'
> >
> >         }
>
>
> Nyall
>
> _______________________________________________
> Qgis-user mailing list
> Qgis-user at lists.osgeo.org
> List info: https://lists.osgeo.org/mailman/listinfo/qgis-user
> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-user
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-user/attachments/20180629/1967a064/attachment.html>


More information about the Qgis-user mailing list