[QGIS-Developer] Processing Feature Sink Questions
Nyall Dawson
nyall.dawson at gmail.com
Tue Aug 28 21:19:31 PDT 2018
On Wed, 29 Aug 2018 at 06:03, C Hamilton <adenaculture at gmail.com> wrote:
>
> I am working on a processing routine that can take a source that potentially has points, lines and polygons. I define 3 feature sinks for the 3 geometries and they are optional. This example is for the points.
>
> self.addParameter(
> QgsProcessingParameterFeatureSink(
> self.PrmPointOutputLayer,
> tr('Output point layer'),
> optional=True)
> )
>
> 1) How doe I know in the processAlgorithm whether the user has this set a feature sink to "Skip Output"?
Check if the result of your call to self.parameterAsSink is None. If
so, the parameter has been skipped.
> 2) I really don't know whether I have points, lines, and/or polygons until I process the file and from the 3 feature sinks I just add the data to the appropriate feature sink as I receive it . How do a get a count of the number of features once I have processed the file from sinkPt or dest_id_pt?
>
> (sinkPt, dest_id_pt) = self.parameterAsSink(parameters,
> self.PrmPointOutputLayer, context, fields,
> QgsWkbTypes.Point, epsg4326)
>
> "sinkPt" seems to only have the ability to add features and not count them.
That's correct - sinks don't maintain a count of features. You'll need
to record the counts manually yourself, as you add each feature to the
sink.
> 3) I see to reason to return a layer to QGIS if it has no data which is the reason to check the feature count. In the processAlgorithm return statement do I only return those layers that have data?
>
> return {
> self.PrmPointOutputLayer: dest_id_pt,
> self.PrmLineOutputLayer: dest_id_line,
> self.PrmPolygonOutputLayer: dest_id_poly
> }
You can omit these from the returned dictionary in this case - so if
you're recording the counts of features added to each sink, only add
entries to the results dictionary where the count is > 0.
Nyall
More information about the QGIS-Developer
mailing list