26QString QgsSplitWithLinesAlgorithm::name()
const
28 return QStringLiteral(
"splitwithlines" );
31QString QgsSplitWithLinesAlgorithm::displayName()
const
33 return QObject::tr(
"Split with lines" );
36QStringList QgsSplitWithLinesAlgorithm::tags()
const
38 return QObject::tr(
"split,cut,lines" ).split(
',' );
41QString QgsSplitWithLinesAlgorithm::group()
const
43 return QObject::tr(
"Vector overlay" );
46QString QgsSplitWithLinesAlgorithm::groupId()
const
48 return QStringLiteral(
"vectoroverlay" );
51void QgsSplitWithLinesAlgorithm::initAlgorithm(
const QVariantMap & )
58QString QgsSplitWithLinesAlgorithm::shortHelpString()
const
60 return QObject::tr(
"This algorithm splits the lines or polygons in one layer using the lines or polygon rings in another layer to define the breaking points. "
61 "Intersection between geometries in both layers are considered as split points." );
64QString QgsSplitWithLinesAlgorithm::shortDescription()
const
66 return QObject::tr(
"Splits the lines or polygons in one layer using the lines or polygon rings in another layer to define the breaking points." );
74QgsSplitWithLinesAlgorithm *QgsSplitWithLinesAlgorithm::createInstance()
const
76 return new QgsSplitWithLinesAlgorithm();
86bool QgsSplitWithLinesAlgorithm::supportInPlaceEdit(
const QgsMapLayer *l )
const
88 const QgsVectorLayer *layer = qobject_cast<const QgsVectorLayer *>( l );
100 std::unique_ptr<QgsFeatureSource> source( parameterAsSource( parameters, QStringLiteral(
"INPUT" ), context ) );
104 std::unique_ptr<QgsFeatureSource> linesSource( parameterAsSource( parameters, QStringLiteral(
"LINES" ), context ) );
108 bool sameLayer = parameters.value( QStringLiteral(
"INPUT" ) ) == parameters.value( QStringLiteral(
"LINES" ) );
127 double step = source->featureCount() > 0 ? 100.0 / source->featureCount() : 1;
150 const QgsFeatureIds splitFeatureCandidates = qgis::listToSet( splitFeaturesIndex.intersects( originalGeometry.
boundingBox() ) );
151 if ( !splitFeatureCandidates.empty() )
153 QVector<QgsGeometry> splittingLines;
156 std::unique_ptr<QgsGeometryEngine> originalGeometryEngine;
158 for (
QgsFeatureId splitFeatureCandidateId : splitFeatureCandidates )
161 if ( sameLayer && inFeatureA.
id() == splitFeatureCandidateId )
164 const QgsGeometry splitFeatureCandidate = splitFeaturesIndex.geometry( splitFeatureCandidateId );
165 if ( !originalGeometryEngine )
168 originalGeometryEngine->prepareGeometry();
171 if ( originalGeometryEngine->intersects( splitFeatureCandidate.
constGet() ) )
174 splittingLines.append( splitGeomParts );
178 if ( !splittingLines.empty() )
180 for (
const QgsGeometry &splitGeom : std::as_const( splittingLines ) )
183 QVector<QgsGeometry> outGeoms;
187 splitGeomEngine->prepareGeometry();
188 while ( !inGeoms.empty() )
199 if ( splitGeomEngine->intersects( inGeom.
constGet() ) )
202 if ( splitterPList.empty() )
217 QVector<QgsGeometry> newGeometries;
231 outGeoms.append( inGeom );
235 outGeoms.append( inGeom );
236 outGeoms.append( newGeometries );
241 outGeoms.append( inGeom );
246 outGeoms.append( inGeom );
254 QVector<QgsGeometry> parts;
255 for (
const QgsGeometry &aGeom : std::as_const( inGeoms ) )
265 int numPoints = aGeom.constGet()->nCoordinates();
267 if ( numPoints <= 2 )
269 if ( numPoints == 2 )
277 parts.append( aGeom );
293 outputs.insert( QStringLiteral(
"OUTPUT" ), dest );
@ VectorPolygon
Vector polygon layers.
@ VectorLine
Vector line layers.
GeometryOperationResult
Success or failure of a geometry operation.
@ Success
Operation succeeded.
@ RegeneratesPrimaryKey
Algorithm always drops any existing primary keys or FID values and regenerates them in outputs.
QFlags< ProcessingAlgorithmFlag > ProcessingAlgorithmFlags
Flags indicating how and when an algorithm operates and should be exposed to users.
QFlags< ProcessingAlgorithmDocumentationFlag > ProcessingAlgorithmDocumentationFlags
Flags describing algorithm behavior for documentation purposes.
@ SupportsInPlaceEdits
Algorithm supports in-place editing.
Abstract base class for curved geometry type.
virtual bool isClosed() const
Returns true if the curve is closed.
Wrapper for iterator of features from vector data provider or vector layer.
bool nextFeature(QgsFeature &f)
Fetch next feature and stores in f, returns true on success.
Wraps a request for features to a vector layer (or directly its vector data provider).
QgsFeatureRequest & setDestinationCrs(const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &context)
Sets the destination crs for feature's geometries.
QgsFeatureRequest & setNoAttributes()
Set that no attributes will be fetched.
@ FastInsert
Use faster inserts, at the cost of updating the passed features to reflect changes made at the provid...
@ 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.
bool hasGeometry() const
Returns true if the feature has an associated geometry.
void setGeometry(const QgsGeometry &geometry)
Set the feature's geometry.
bool isCanceled() const
Tells whether the operation has been canceled already.
void setProgress(double progress)
Sets the current progress for the feedback object.
A geometry is the spatial representation of a feature.
QgsGeometry convertToType(Qgis::GeometryType destType, bool destMultipart=false) const
Try to convert the geometry to the requested type.
QVector< QgsGeometry > asGeometryCollection() const
Returns contents of the geometry as a list of geometries.
const QgsAbstractGeometry * constGet() const
Returns a non-modifiable (const) reference to the underlying abstract geometry primitive.
double hausdorffDistance(const QgsGeometry &geom) const
Returns the Hausdorff distance between this geometry and geom.
QgsRectangle boundingBox() const
Returns the bounding box of the geometry.
Q_DECL_DEPRECATED Qgis::GeometryOperationResult splitGeometry(const QVector< QgsPointXY > &splitLine, QVector< QgsGeometry > &newGeometries, bool topological, QVector< QgsPointXY > &topologyTestPoints, bool splitFeature=true)
Splits this geometry according to a given line.
static QgsGeometryEngine * createGeometryEngine(const QgsAbstractGeometry *geometry, double precision=0.0, Qgis::GeosCreationFlags flags=Qgis::GeosCreationFlag::SkipEmptyInteriorRings)
Creates and returns a new geometry engine representing the specified geometry using precision on a gr...
Base class for all map layer types.
Point geometry type, with support for z-dimension and m-values.
virtual Qgis::ProcessingAlgorithmFlags flags() const
Returns the flags indicating how and when the algorithm operates and should be exposed to users.
Contains information about the context in which a processing algorithm is executed.
QgsCoordinateTransformContext transformContext() const
Returns the coordinate transform context.
Custom exception class for processing related exceptions.
Base class for providing feedback from a processing algorithm.
A feature sink output for processing algorithms.
An input feature source (such as vector layers) parameter for processing algorithms.
A spatial index for QgsFeature objects.
@ FlagStoreFeatureGeometries
Indicates that the spatial index should also store feature geometries. This requires more memory,...
Represents a vector layer which manages a vector based dataset.
Q_INVOKABLE Qgis::GeometryType geometryType() const
Returns point, line or polygon.
static Qgis::GeometryType geometryType(Qgis::WkbType type)
Returns the geometry type for a WKB type, e.g., both MultiPolygon and CurvePolygon would have a Polyg...
static Qgis::WkbType multiType(Qgis::WkbType type)
Returns the multi type for a WKB type.
QVector< QgsRingSequence > QgsCoordinateSequence
QVector< QgsPointSequence > QgsRingSequence
QVector< QgsPoint > QgsPointSequence
QSet< QgsFeatureId > QgsFeatureIds
qint64 QgsFeatureId
64 bit feature ids negative numbers are used for uncommitted/newly added features