24 QString QgsRandomExtractAlgorithm::name()
 const 
   26   return QStringLiteral( 
"randomextract" );
 
   29 QString QgsRandomExtractAlgorithm::displayName()
 const 
   31   return QObject::tr( 
"Random extract" );
 
   34 QStringList QgsRandomExtractAlgorithm::tags()
 const 
   36   return QObject::tr( 
"extract,filter,random,number,percentage" ).split( 
',' );
 
   39 QString QgsRandomExtractAlgorithm::group()
 const 
   41   return QObject::tr( 
"Vector selection" );
 
   44 QString QgsRandomExtractAlgorithm::groupId()
 const 
   46   return QStringLiteral( 
"vectorselection" );
 
   49 QString QgsRandomExtractAlgorithm::shortHelpString()
 const 
   51   return QObject::tr( 
"This algorithm takes a vector layer and generates a new one that contains only a subset " 
   52                       "of the features in the input layer.\n\n" 
   53                       "The subset is defined randomly, using a percentage or count value to define the total number " 
   54                       "of features in the subset." );
 
   57 QgsRandomExtractAlgorithm *QgsRandomExtractAlgorithm::createInstance()
 const 
   59   return new QgsRandomExtractAlgorithm();
 
   62 void QgsRandomExtractAlgorithm::initAlgorithm( 
const QVariantMap & )
 
   66   addParameter( 
new QgsProcessingParameterEnum( QStringLiteral( 
"METHOD" ), QObject::tr( 
"Method" ), QStringList() << QObject::tr( 
"Number of features" ) << QObject::tr( 
"Percentage of features" ), 
false, 0 ) );
 
   75   std::unique_ptr< QgsProcessingFeatureSource > source( parameterAsSource( parameters, QStringLiteral( 
"INPUT" ), context ) );
 
   80   std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( 
"OUTPUT" ), context, dest, source->fields(),
 
   85   int method = parameterAsEnum( parameters, QStringLiteral( 
"METHOD" ), context );
 
   86   int number = parameterAsInt( parameters, QStringLiteral( 
"NUMBER" ), context );
 
   88   long count = source->featureCount();
 
   94       throw QgsProcessingException( QObject::tr( 
"Selected number is greater than feature count. Choose a lower value and try again." ) );
 
  100       throw QgsProcessingException( QObject::tr( 
"Percentage can't be greater than 100. Choose a lower value and try again." ) );
 
  102     number = 
static_cast< int >( std::ceil( number * count / 100 ) );
 
  106   std::random_device randomDevice;
 
  107   std::mt19937 mersenneTwister( randomDevice() );
 
  108   std::uniform_int_distribution<int> fidsDistribution( 0, count );
 
  110   QVector< QgsFeatureId > fids( number );
 
  111   std::generate( fids.begin(), fids.end(), bind( fidsDistribution, mersenneTwister ) );
 
  113   QHash< QgsFeatureId, int > idsCount;
 
  135     const int count = idsCount.value( f.
id() );
 
  136     for ( 
int i = 0; i < count; ++i )
 
  143   outputs.insert( QStringLiteral( 
"OUTPUT" ), dest );
 
Wrapper for iterator of features from vector data provider or vector layer.
bool nextFeature(QgsFeature &f)
This class wraps a request for features to a vector layer (or directly its vector data provider).
@ 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...
bool isCanceled() const SIP_HOLDGIL
Tells whether the operation has been canceled already.
Contains information about the context in which a processing algorithm is executed.
Custom exception class for processing related exceptions.
@ 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.
An enum based parameter for processing algorithms, allowing for selection from predefined values.
A feature sink output for processing algorithms.
An input feature source (such as vector layers) parameter for processing algorithms.
A numeric parameter for processing algorithms.
@ TypeVector
Tables (i.e. vector layers with or without geometry). When used for a sink this indicates the sink ha...
QSet< QgsFeatureId > QgsFeatureIds
qint64 QgsFeatureId
64 bit feature ids negative numbers are used for uncommitted/newly added features