23 QString QgsLineIntersectionAlgorithm::name()
const 25 return QStringLiteral(
"lineintersections" );
28 QString QgsLineIntersectionAlgorithm::displayName()
const 30 return QObject::tr(
"Line intersections" );
33 QStringList QgsLineIntersectionAlgorithm::tags()
const 35 return QObject::tr(
"line,intersection" ).split(
',' );
38 QString QgsLineIntersectionAlgorithm::group()
const 40 return QObject::tr(
"Vector overlay" );
43 QString QgsLineIntersectionAlgorithm::groupId()
const 45 return QStringLiteral(
"vectoroverlay" );
48 void QgsLineIntersectionAlgorithm::initAlgorithm(
const QVariantMap & )
56 QStringLiteral(
"INPUT_FIELDS" ),
57 QObject::tr(
"Input fields to keep (leave empty to keep all fields)" ), QVariant(),
61 QStringLiteral(
"INTERSECT_FIELDS" ),
62 QObject::tr(
"Intersect fields to keep (leave empty to keep all fields)" ), QVariant(),
66 std::unique_ptr< QgsProcessingParameterString > prefix = qgis::make_unique< QgsProcessingParameterString >( QStringLiteral(
"INTERSECT_FIELDS_PREFIX" ), QObject::tr(
"Intersect fields prefix" ), QString(),
false, true );
68 addParameter( prefix.release() );
73 QString QgsLineIntersectionAlgorithm::shortHelpString()
const 75 return QObject::tr(
"This algorithm creates point features where the lines in the Intersect layer intersect the lines in the Input layer." );
78 QgsLineIntersectionAlgorithm *QgsLineIntersectionAlgorithm::createInstance()
const 80 return new QgsLineIntersectionAlgorithm();
85 std::unique_ptr< QgsFeatureSource > sourceA( parameterAsSource( parameters, QStringLiteral(
"INPUT" ), context ) );
89 std::unique_ptr< QgsFeatureSource > sourceB( parameterAsSource( parameters, QStringLiteral(
"INTERSECT" ), context ) );
93 const QStringList fieldsA = parameterAsFields( parameters, QStringLiteral(
"INPUT_FIELDS" ), context );
94 const QStringList fieldsB = parameterAsFields( parameters, QStringLiteral(
"INTERSECT_FIELDS" ), context );
99 QString intersectFieldsPrefix = parameterAsString( parameters, QStringLiteral(
"INTERSECT_FIELDS_PREFIX" ), context );
103 intersectFieldsPrefix );
113 double step = sourceA->featureCount() > 0 ? 100.0 / sourceA->featureCount() : 1;
129 if ( !lines.empty() )
133 engine->prepareGeometry();
149 if ( engine->intersects( tmpGeom.
constGet() ) )
154 for (
int a : qgis::as_const( fieldIndicesA ) )
156 outAttributes.append( inFeatureA.
attribute( a ) );
158 for (
int b : qgis::as_const( fieldIndicesB ) )
160 outAttributes.append( inFeatureB.
attribute( b ) );
169 if ( part.isMultipart() )
171 points = part.asMultiPoint();
175 points.append( part.asPoint() );
188 points.append( intersectGeom.
asPoint() );
191 for (
const QgsPointXY &j : qgis::as_const( points ) )
194 outFeature.setAttributes( outAttributes );
206 outputs.insert( QStringLiteral(
"OUTPUT" ), dest );
QgsFeatureRequest & setDestinationCrs(const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &context)
Sets the destination crs for feature's geometries.
Wrapper for iterator of features from vector data provider or vector layer.
Use faster inserts, at the cost of updating the passed features to reflect changes made at the provid...
QSet< QgsFeatureId > QgsFeatureIds
Base class for providing feedback from a processing algorithm.
Parameter is an advanced parameter which should be hidden from users by default.
bool isMultipart() const
Returns true if WKB of the geometry is of WKBMulti* type.
A vector layer or feature source field parameter for processing algorithms.
QgsWkbTypes::Type wkbType() const
Returns type of the geometry as a WKB type (point / linestring / polygon etc.)
A class to represent a 2D point.
void setProgress(double progress)
Sets the current progress for the feedback object.
QgsFeatureRequest & setSubsetOfAttributes(const QgsAttributeList &attrs)
Set a subset of attributes that will be fetched.
Container of fields for a vector layer.
A geometry is the spatial representation of a feature.
QVector< QgsPointXY > QgsMultiPointXY
A collection of QgsPoints that share a common collection of attributes.
QgsGeometry intersection(const QgsGeometry &geometry) const
Returns a geometry representing the points shared by this geometry and other.
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
bool hasGeometry() const
Returns true if the feature has an associated geometry.
A feature sink output for processing algorithms.
This flag indicates, that a primary key field cannot be guaranteed to be unique and the sink should i...
bool intersects(const QgsRectangle &rectangle) const
Returns true if this geometry exactly intersects with a rectangle.
QVector< QgsGeometry > asGeometryCollection() const
Returns contents of the geometry as a list of geometries.
static QList< int > fieldNamesToIndices(const QStringList &fieldNames, const QgsFields &fields)
Returns a list of field indices parsed from the given list of field names.
This class wraps a request for features to a vector layer (or directly its vector data provider)...
Custom exception class for processing related exceptions.
QgsCoordinateTransformContext transformContext() const
Returns the coordinate transform context.
static QgsGeometryEngine * createGeometryEngine(const QgsAbstractGeometry *geometry)
Creates and returns a new geometry engine.
const QgsAbstractGeometry * constGet() const
Returns a non-modifiable (const) reference to the underlying abstract geometry primitive.
static QgsFields indicesToFields(const QList< int > &indices, const QgsFields &fields)
Returns a subset of fields based on the indices of desired fields.
A spatial index for QgsFeature objects.
QgsFeatureRequest & setFilterFids(const QgsFeatureIds &fids)
Sets feature IDs that should be fetched.
QgsPointXY asPoint() const
Returns the contents of the geometry as a 2-dimensional point.
bool isCanceled() const
Tells whether the operation has been canceled already.
An input feature source (such as vector layers) parameter for processing algorithms.
QgsRectangle boundingBox() const
Returns the bounding box of the geometry.
QgsMultiPointXY asMultiPoint() const
Returns the contents of the geometry as a multi-point.
QgsWkbTypes::GeometryType type
QList< int > QgsAttributeList
bool nextFeature(QgsFeature &f)
static QgsFields combineFields(const QgsFields &fieldsA, const QgsFields &fieldsB, const QString &fieldsBPrefix=QString())
Combines two field lists, avoiding duplicate field names (in a case-insensitive manner).
QVariant attribute(const QString &name) const
Lookup attribute value from attribute name.
static Type flatType(Type type)
Returns the flat type for a WKB type.
Contains information about the context in which a processing algorithm is executed.
static QgsGeometry fromPointXY(const QgsPointXY &point)
Creates a new geometry from a QgsPointXY object.