Adds geometry methods to create variable width buffers, including
tapered buffers (with a specified start and end diameter) and
variable width buffers from line string m values.
Also adds processing algorithms which expose these methods
to processing.
Include descriptive text with the specified parameter value
in error, and always check that sources were loaded to avoid
raw Python exceptions when they are not
This is a subclass of QgsProcessingParameterNumber, but specifically
for numeric parameters which represent distances. It is linked
to a parent parameter, from which the distance unit will
be determined, and is shown using a dedicated distance widget
within the processing parameters panel. This widget shows
the distance unit.
This avoids the confusion when running algorithms which
use distances where the unit depends on a layer or CRS parameter -
e.g. the distance parameter in the buffer algorithm gives
the distance in layer units... so now we can show those units
directly within the dialog. Hopefully this leads to less
user confusion and accidental "1000 degree buffers"!
Additionally - if the unit is in degrees, a small warning
icon is shown next to the parameter. The tooltip for this
icon advises users to reproject data into a suitable
projected local coordinate system.
Initially implemented for the native buffer and single
sided buffer algorithm only - but more will be added.
Fixes#16290
This allows users to optionally set a sort order to use when
assigning values in the Add Incremental Field algorithm.
Previously values were always added using the original feature
order. With this change users can control the order in which
features are assigned values.
Finally starting a suite of unit tests for overlay algorithms:
- overlay1 - layers that cover various basic overlay situations
- overlay2 - layers where one input has self-intersecting polygons
- overlay3 - layers where intersections return different geometry types
Relying on the iface messagebar feedback as a fallback is not
safe for standalone scripts. If callers want to use a message
bar feedback they should specify this feedback object specifically
when calling processing.run