QGIS API Documentation
3.26.3-Buenos Aires (65e4edfdad)
|
Go to the documentation of this file.
25 QString QgsCalculateVectorOverlapsAlgorithm::name()
const
27 return QStringLiteral(
"calculatevectoroverlaps" );
30 QString QgsCalculateVectorOverlapsAlgorithm::displayName()
const
32 return QObject::tr(
"Overlap analysis" );
35 QStringList QgsCalculateVectorOverlapsAlgorithm::tags()
const
37 return QObject::tr(
"vector,overlay,area,percentage,intersection" ).split(
',' );
40 QString QgsCalculateVectorOverlapsAlgorithm::group()
const
42 return QObject::tr(
"Vector analysis" );
45 QString QgsCalculateVectorOverlapsAlgorithm::groupId()
const
47 return QStringLiteral(
"vectoranalysis" );
50 void QgsCalculateVectorOverlapsAlgorithm::initAlgorithm(
const QVariantMap & )
57 QIcon QgsCalculateVectorOverlapsAlgorithm::icon()
const
62 QString QgsCalculateVectorOverlapsAlgorithm::svgIconPath()
const
67 QString QgsCalculateVectorOverlapsAlgorithm::shortHelpString()
const
69 return QObject::tr(
"This algorithm calculates the area and percentage cover by which features from an input layer "
70 "are overlapped by features from a selection of overlay layers.\n\n"
71 "New attributes are added to the output layer reporting the total area of overlap and percentage of the input feature overlapped "
72 "by each of the selected overlay layers." );
75 QgsCalculateVectorOverlapsAlgorithm *QgsCalculateVectorOverlapsAlgorithm::createInstance()
const
77 return new QgsCalculateVectorOverlapsAlgorithm();
82 mSource.reset( parameterAsSource( parameters, QStringLiteral(
"INPUT" ), context ) );
86 mOutputFields = mSource->fields();
88 const QList< QgsMapLayer * > layers = parameterAsLayerList( parameters, QStringLiteral(
"LAYERS" ), context );
89 mOverlayerSources.reserve( layers.size() );
90 mLayerNames.reserve( layers.size() );
93 if (
QgsVectorLayer *vl = qobject_cast< QgsVectorLayer * >( layer ) )
95 mLayerNames << layer->name();
96 mOverlayerSources.emplace_back( std::make_unique< QgsVectorLayerFeatureSource >( vl ) );
97 mOutputFields.append(
QgsField( QStringLiteral(
"%1_area" ).arg( vl->name() ), QVariant::Double ) );
98 mOutputFields.append(
QgsField( QStringLiteral(
"%1_pc" ).arg( vl->name() ), QVariant::Double ) );
102 mOutputType = mSource->wkbType();
103 mCrs = mSource->sourceCrs();
104 mInputCount = mSource->featureCount();
105 mInputFeatures = mSource->getFeatures();
112 std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral(
"OUTPUT" ), context, destId, mOutputFields,
113 mOutputType, mCrs ) );
119 QList< QgsSpatialIndex > spatialIndices;
120 spatialIndices.reserve( mLayerNames.size() );
121 auto nameIt = mLayerNames.constBegin();
122 for (
auto sourceIt = mOverlayerSources.begin(); sourceIt != mOverlayerSources.end(); ++sourceIt, ++nameIt )
124 feedback->
pushInfo( QObject::tr(
"Preparing %1" ).arg( *nameIt ) );
134 const double step = mInputCount > 0 ? 100.0 / mInputCount : 0;
137 while ( mInputFeatures.nextFeature( feature ) )
146 const double inputArea = da.
measureArea( inputGeom );
150 bufferGeomEngine->prepareGeometry();
153 auto spatialIteratorIt = spatialIndices.begin();
154 for (
auto it = mOverlayerSources.begin(); it != mOverlayerSources.end(); ++ it, ++spatialIteratorIt )
161 QVector< QgsGeometry > intersectingGeoms;
162 intersectingGeoms.reserve( matches.count() );
169 if ( bufferGeomEngine->intersects( overlayGeometry.
constGet() ) )
171 intersectingGeoms.append( overlayGeometry );
186 const double overlayArea = da.
measureArea( overlayIntersection );
187 outAttributes.append( overlayArea );
188 outAttributes.append( 100 * overlayArea / inputArea );
194 for (
auto it = mOverlayerSources.begin(); it != mOverlayerSources.end(); ++ it )
196 outAttributes.append( QVariant() );
197 outAttributes.append( QVariant() );
210 outputs.insert( QStringLiteral(
"OUTPUT" ), destId );
void setProgress(double progress)
Sets the current progress for the feedback object.
QgsFeatureRequest & setInvalidGeometryCheck(InvalidGeometryCheck check)
Sets invalid geometry checking behavior.
Base class for providing feedback from a processing algorithm.
virtual void pushInfo(const QString &info)
Pushes a general informational message from the algorithm.
@ TypeVectorPolygon
Vector polygon layers.
bool isCanceled() const SIP_HOLDGIL
Tells whether the operation has been canceled already.
double measureArea(const QgsGeometry &geometry) const
Measures the area of a geometry.
QgsFeatureRequest & setInvalidGeometryCallback(const std::function< void(const QgsFeature &)> &callback)
Sets a callback function to use when encountering an invalid geometry and invalidGeometryCheck() is s...
An input feature source (such as vector layers) parameter for processing algorithms.
static QString iconPath(const QString &iconFile)
Returns path to the desired icon file.
QgsGeometry geometry(QgsFeatureId id) const
Returns the stored geometry for the indexed feature with matching id.
QList< int > QgsAttributeList
A parameter for processing algorithms which accepts multiple map layers.
QgsGeometry intersection(const QgsGeometry &geometry) const
Returns a geometry representing the points shared by this geometry and other.
A feature sink output for processing algorithms.
bool setEllipsoid(const QString &ellipsoid)
Sets the ellipsoid by its acronym.
This class wraps a request for features to a vector layer (or directly its vector data provider).
QgsFeatureRequest::InvalidGeometryCheck invalidGeometryCheck() const
Returns the behavior used for checking invalid geometries in input layers.
Contains information about the context in which a processing algorithm is executed.
std::function< void(const QgsFeature &) > invalidGeometryCallback(QgsFeatureSource *source=nullptr) const
Returns the callback function to use when encountering an invalid geometry and invalidGeometryCheck()...
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
QString ellipsoid() const
Returns the ellipsoid to use for distance and area calculations.
A spatial index for QgsFeature objects.
QgsCoordinateTransformContext transformContext() const
Returns the coordinate transform context.
void setSourceCrs(const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &context)
Sets source spatial reference system crs.
const QgsAbstractGeometry * constGet() const SIP_HOLDGIL
Returns a non-modifiable (const) reference to the underlying abstract geometry primitive.
@ FlagStoreFeatureGeometries
Indicates that the spatial index should also store feature geometries. This requires more memory,...
static QgsGeometryEngine * createGeometryEngine(const QgsAbstractGeometry *geometry)
Creates and returns a new geometry engine representing the specified geometry.
A geometry is the spatial representation of a feature.
Represents a vector layer which manages a vector based data sets.
bool hasGeometry() const
Returns true if the feature has an associated geometry.
Base class for all map layer types. This is the base class for all map layer types (vector,...
QList< QgsFeatureId > intersects(const QgsRectangle &rectangle) const
Returns a list of features with a bounding box which intersects the specified rectangle.
QgsRectangle boundingBox() const
Returns the bounding box of the geometry.
A general purpose distance and area calculator, capable of performing ellipsoid based calculations.
A vector of attributes. Mostly equal to QVector<QVariant>.
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
static QIcon getThemeIcon(const QString &name, const QColor &fillColor=QColor(), const QColor &strokeColor=QColor())
Helper to get a theme icon.
void setAttributes(const QgsAttributes &attrs)
Sets the feature's attributes.
Wrapper for iterator of features from vector data provider or vector layer.
double area() const
Returns the planar, 2-dimensional area of the geometry.
Custom exception class for processing related exceptions.
static QgsGeometry unaryUnion(const QVector< QgsGeometry > &geometries)
Compute the unary union on a list of geometries.
@ FastInsert
Use faster inserts, at the cost of updating the passed features to reflect changes made at the provid...
qint64 QgsFeatureId
64 bit feature ids negative numbers are used for uncommitted/newly added features
Encapsulate a field in an attribute table or data source.