26void QgsPointsInPolygonAlgorithm::initParameters( 
const QVariantMap &configuration )
 
   28  mIsInPlace = configuration.value( QStringLiteral( 
"IN_PLACE" ) ).toBool();
 
   35    addParameter( 
new QgsProcessingParameterField( QStringLiteral( 
"FIELD" ), QObject::tr( 
"Count field" ), QStringLiteral( 
"NUMPOINTS" ), inputParameterName() ) );
 
   39    addParameter( 
new QgsProcessingParameterString( QStringLiteral( 
"FIELD" ), QObject::tr( 
"Count field name" ), QStringLiteral( 
"NUMPOINTS" ) ) );
 
   43QString QgsPointsInPolygonAlgorithm::name()
 const 
   45  return QStringLiteral( 
"countpointsinpolygon" );
 
   48QString QgsPointsInPolygonAlgorithm::displayName()
 const 
   50  return QObject::tr( 
"Count points in polygon" );
 
   53QStringList QgsPointsInPolygonAlgorithm::tags()
 const 
   55  return QObject::tr( 
"extract,filter,intersects,intersecting,disjoint,touching,within,contains,overlaps,relation" ).split( 
',' );
 
   58QString QgsPointsInPolygonAlgorithm::svgIconPath()
 const 
   63QIcon QgsPointsInPolygonAlgorithm::icon()
 const 
   68QString QgsPointsInPolygonAlgorithm::group()
 const 
   70  return QObject::tr( 
"Vector analysis" );
 
   73QString QgsPointsInPolygonAlgorithm::groupId()
 const 
   75  return QStringLiteral( 
"vectoranalysis" );
 
   78QString QgsPointsInPolygonAlgorithm::shortHelpString()
 const 
   80  return QObject::tr( 
"This algorithm takes a points layer and a polygon layer and counts the number of points from " 
   81                      "the first one in each polygons of the second one.\n\n" 
   82                      "A new polygons layer is generated, with the exact same content as the input polygons layer, but " 
   83                      "containing an additional field with the points count corresponding to each polygon.\n\n" 
   84                      "An optional weight field can be used to assign weights to each point. If set, the count generated " 
   85                      "will be the sum of the weight field for each point contained by the polygon.\n\n" 
   86                      "Alternatively, a unique class field can be specified. If set, points are classified based on " 
   87                      "the selected attribute, and if several points with the same attribute value are within the polygon, " 
   88                      "only one of them is counted. The final count of the point in a polygon is, therefore, the count of " 
   89                      "different classes that are found in it.\n\n" 
   90                      "Both the weight field and unique class field cannot be specified. If they are, the weight field will " 
   91                      "take precedence and the unique class field will be ignored." );
 
   94QString QgsPointsInPolygonAlgorithm::shortDescription()
 const 
   96  return QObject::tr( 
"Counts point features located within polygon features." );
 
   99QgsPointsInPolygonAlgorithm *QgsPointsInPolygonAlgorithm::createInstance()
 const 
  101  return new QgsPointsInPolygonAlgorithm();
 
  104QList<int> QgsPointsInPolygonAlgorithm::inputLayerTypes()
 const 
  120QString QgsPointsInPolygonAlgorithm::inputParameterName()
 const 
  122  return QStringLiteral( 
"POLYGONS" );
 
  125QString QgsPointsInPolygonAlgorithm::inputParameterDescription()
 const 
  127  return QObject::tr( 
"Polygons" );
 
  130QString QgsPointsInPolygonAlgorithm::outputName()
 const 
  132  return QObject::tr( 
"Count" );
 
  137  mFieldName = parameterAsString( parameters, QStringLiteral( 
"FIELD" ), context );
 
  138  mWeightFieldName = parameterAsString( parameters, QStringLiteral( 
"WEIGHT" ), context );
 
  139  mClassFieldName = parameterAsString( parameters, QStringLiteral( 
"CLASSFIELD" ), context );
 
  140  mPointSource.reset( parameterAsSource( parameters, QStringLiteral( 
"POINTS" ), context ) );
 
  144  if ( !mWeightFieldName.isEmpty() )
 
  146    mWeightFieldIndex = mPointSource->fields().lookupField( mWeightFieldName );
 
  147    if ( mWeightFieldIndex == -1 )
 
  149    mPointAttributes.append( mWeightFieldIndex );
 
  152  if ( !mClassFieldName.isEmpty() )
 
  154    mClassFieldIndex = mPointSource->fields().lookupField( mClassFieldName );
 
  155    if ( mClassFieldIndex == -1 )
 
  157    mPointAttributes.append( mClassFieldIndex );
 
  161    feedback->
pushWarning( QObject::tr( 
"No spatial index exists for points layer, performance will be severely degraded" ) );
 
  172    if ( mDestFieldIndex < 0 )
 
  175      attrs[mDestFieldIndex] = 0;
 
  177    return QList<QgsFeature>() << outputFeature;
 
  183    engine->prepareGeometry();
 
  186    QSet<QVariant> classes;
 
  201        if ( mWeightFieldIndex >= 0 )
 
  203          const QVariant weight = pointFeature.
attribute( mWeightFieldIndex );
 
  204          const double pointWeight = weight.toDouble( &ok );
 
  207            count += pointWeight;
 
  209            feedback->
reportError( QObject::tr( 
"Weight field value “%1” is not a numeric value" ).arg( weight.toString() ) );
 
  211        else if ( mClassFieldIndex >= 0 )
 
  213          const QVariant pointClass = pointFeature.
attribute( mClassFieldIndex );
 
  214          classes.insert( pointClass );
 
  226    if ( mClassFieldIndex >= 0 )
 
  227      score = classes.size();
 
  231    if ( mDestFieldIndex < 0 )
 
  232      attrs.append( score );
 
  234      attrs[mDestFieldIndex] = score;
 
  237    return QList<QgsFeature>() << outputFeature;
 
  241QgsFields QgsPointsInPolygonAlgorithm::outputFields( 
const QgsFields &inputFields )
 const 
  245    mDestFieldIndex = inputFields.
lookupField( mFieldName );
 
  251    mDestFieldIndex = inputFields.
lookupField( mFieldName );
 
  252    if ( mDestFieldIndex < 0 )
 
  253      outFields.
append( 
QgsField( mFieldName, QMetaType::Type::Double ) );
 
  260bool QgsPointsInPolygonAlgorithm::supportInPlaceEdit( 
const QgsMapLayer *layer )
 const 
  262  if ( 
const QgsVectorLayer *vl = qobject_cast<const QgsVectorLayer *>( layer ) )
 
ProcessingSourceType
Processing data source types.
 
@ VectorPoint
Vector point layers.
 
@ VectorPolygon
Vector polygon layers.
 
@ NotPresent
No spatial index exists for the source.
 
static QIcon getThemeIcon(const QString &name, const QColor &fillColor=QColor(), const QColor &strokeColor=QColor())
Helper to get a theme icon.
 
static QString iconPath(const QString &iconFile)
Returns path to the desired icon file.
 
Represents a coordinate reference system (CRS).
 
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 & setSubsetOfAttributes(const QgsAttributeList &attrs)
Set a subset of attributes that will be fetched.
 
QgsFeatureRequest & setDestinationCrs(const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &context)
Sets the destination crs for feature's geometries.
 
QgsFeatureRequest & setFilterRect(const QgsRectangle &rectangle)
Sets the rectangle from which features will be taken.
 
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.
 
Q_INVOKABLE QVariant attribute(const QString &name) const
Lookup attribute value by attribute name.
 
bool isCanceled() const
Tells whether the operation has been canceled already.
 
Encapsulate a field in an attribute table or data source.
 
Container of fields for a vector layer.
 
bool append(const QgsField &field, Qgis::FieldOrigin origin=Qgis::FieldOrigin::Provider, int originIndex=-1)
Appends a field.
 
Q_INVOKABLE int lookupField(const QString &fieldName) const
Looks up field's index from the field name.
 
A geometry is the spatial representation of a feature.
 
const QgsAbstractGeometry * constGet() const
Returns a non-modifiable (const) reference to the underlying abstract geometry primitive.
 
QgsRectangle boundingBox() const
Returns the bounding box of the geometry.
 
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.
 
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.
 
virtual void pushWarning(const QString &warning)
Pushes a warning informational message from the algorithm.
 
virtual void reportError(const QString &error, bool fatalError=false)
Reports that the algorithm encountered an error while executing.
 
An input feature source (such as vector layers) parameter for processing algorithms.
 
A vector layer or feature source field parameter for processing algorithms.
 
A string parameter for processing algorithms.
 
Represents a vector layer which manages a vector based dataset.
 
QList< QgsFeature > QgsFeatureList