23 QString QgsMultiRingConstantBufferAlgorithm::name()
const
25 return QStringLiteral(
"multiringconstantbuffer" );
28 QString QgsMultiRingConstantBufferAlgorithm::displayName()
const
30 return QObject::tr(
"Multi-ring buffer (constant distance)" );
33 QStringList QgsMultiRingConstantBufferAlgorithm::tags()
const
35 return QObject::tr(
"buffer,grow,multiple,rings,distance,donut" ).split(
',' );
38 QString QgsMultiRingConstantBufferAlgorithm::group()
const
40 return QObject::tr(
"Vector geometry" );
43 QString QgsMultiRingConstantBufferAlgorithm::groupId()
const
45 return QStringLiteral(
"vectorgeometry" );
48 QString QgsMultiRingConstantBufferAlgorithm::outputName()
const
50 return QObject::tr(
"Multi-ring buffer (constant distance)" );
53 QString QgsMultiRingConstantBufferAlgorithm::shortHelpString()
const
55 return QObject::tr(
"This algorithm computes multi-ring ('donuts') buffer for all the features in an input layer, using a fixed or dynamic distance and rings number." );
58 QgsMultiRingConstantBufferAlgorithm *QgsMultiRingConstantBufferAlgorithm::createInstance()
const
60 return new QgsMultiRingConstantBufferAlgorithm();
63 void QgsMultiRingConstantBufferAlgorithm::initParameters(
const QVariantMap & )
65 std::unique_ptr< QgsProcessingParameterNumber> rings = std::make_unique< QgsProcessingParameterNumber >( QStringLiteral(
"RINGS" ),
68 rings->setIsDynamic(
true );
70 rings->setDynamicLayerParameterName( QStringLiteral(
"INPUT" ) );
71 addParameter( rings.release() );
73 std::unique_ptr< QgsProcessingParameterDistance > distance = std::make_unique< QgsProcessingParameterDistance >( QStringLiteral(
"DISTANCE" ),
74 QObject::tr(
"Distance between rings" ), 1, QStringLiteral(
"INPUT" ),
false );
75 distance->setIsDynamic(
true );
77 distance->setDynamicLayerParameterName( QStringLiteral(
"INPUT" ) );
78 addParameter( distance.release() );
81 bool QgsMultiRingConstantBufferAlgorithm::supportInPlaceEdit(
const QgsMapLayer *l )
const
83 const QgsVectorLayer *layer = qobject_cast< const QgsVectorLayer * >( l );
90 return layer->
wkbType() == QgsWkbTypes::Type::Polygon || layer->
wkbType() == QgsWkbTypes::Type::MultiPolygon;
95 mRingsNumber = parameterAsInt( parameters, QStringLiteral(
"RINGS" ), context );
97 if ( mDynamicRingsNumber )
98 mRingsNumberProperty = parameters.value( QStringLiteral(
"RINGS" ) ).value<
QgsProperty >();
100 mDistance = parameterAsDouble( parameters, QStringLiteral(
"DISTANCE" ), context );
102 if ( mDynamicDistance )
103 mDistanceProperty = parameters.value( QStringLiteral(
"DISTANCE" ) ).value<
QgsProperty >();
108 QgsFields QgsMultiRingConstantBufferAlgorithm::outputFields(
const QgsFields &inputFields )
const
111 fields.
append(
QgsField( QStringLiteral(
"ringId" ), QVariant::Int, QString(), 10, 0 ) );
112 fields.
append(
QgsField( QStringLiteral(
"distance" ), QVariant::Double, QString(), 20, 6 ) );
121 QgsFeatureSink::SinkFlags QgsMultiRingConstantBufferAlgorithm::sinkFlags()
const
128 double currentDistance = 0;
131 int rings = mRingsNumber;
132 if ( mDynamicRingsNumber )
135 double distance = mDistance;
136 if ( mDynamicDistance )
146 for (
int i = 1; i <= rings; ++i )
149 currentDistance = i * distance;
150 outputGeometry = feature.
geometry().
buffer( currentDistance, 40 );
152 if ( outputGeometry.
isNull() )
154 feedback->
reportError( QObject::tr(
"Error calculating buffer for feature %1" ).arg( feature.
id() ) );
158 if ( distance < 0.0 )
170 previousGeometry = outputGeometry;
172 attrs << i << currentDistance;
174 outputs.append( out );
178 if ( distance < 0.0 )
185 outputs.append( out );
@ RegeneratePrimaryKey
This flag indicates, that a primary key field cannot be guaranteed to be unique and the sink should i...
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
void setAttributes(const QgsAttributes &attrs)
Sets the feature's attributes.
void setGeometry(const QgsGeometry &geometry)
Set the feature's geometry.
Encapsulate a field in an attribute table or data source.
Container of fields for a vector layer.
bool append(const QgsField &field, FieldOrigin origin=OriginProvider, int originIndex=-1)
Appends a field. The field must have unique name, otherwise it is rejected (returns false)
A geometry is the spatial representation of a feature.
QgsGeometry buffer(double distance, int segments) const
Returns a buffer region around this geometry having the given width and with a specified number of se...
QgsGeometry symDifference(const QgsGeometry &geometry) const
Returns a geometry representing the points making up this geometry that do not make up other.
bool convertToMultiType()
Converts single type geometry into multitype geometry e.g.
Base class for all map layer types.
Contains information about the context in which a processing algorithm is executed.
QgsExpressionContext & expressionContext()
Returns the expression context.
bool supportInPlaceEdit(const QgsMapLayer *layer) const override
Checks whether this algorithm supports in-place editing on the given layer Default implementation for...
Flag
Flags controlling how QgsProcessingFeatureSource fetches features.
@ FlagSkipGeometryValidityChecks
Invalid geometry checks should always be skipped. This flag can be useful for algorithms which always...
Base class for providing feedback from a processing algorithm.
virtual void reportError(const QString &error, bool fatalError=false)
Reports that the algorithm encountered an error while executing.
static bool isDynamic(const QVariantMap ¶meters, const QString &name)
Returns true if the parameter with matching name is a dynamic parameter, and must be evaluated once f...
Definition for a property.
@ IntegerPositive
Positive integer values (including 0)
@ DoublePositive
Positive double value (including 0)
A store for object properties.
double valueAsDouble(const QgsExpressionContext &context, double defaultValue=0.0, bool *ok=nullptr) const
Calculates the current value of the property and interprets it as a double.
Represents a vector layer which manages a vector based data sets.
Q_INVOKABLE QgsWkbTypes::Type wkbType() const FINAL
Returns the WKBType or WKBUnknown in case of error.
QList< QgsFeature > QgsFeatureList