29 void QgsReclassifyUtils::reportClasses( 
const QVector<QgsReclassifyUtils::RasterClass> &classes, 
QgsProcessingFeedback *feedback )
 
   32   feedback->
pushInfo( QObject::tr( 
"Using classes:" ) );
 
   33   for ( 
const RasterClass &
c : classes )
 
   35     feedback->
pushInfo( QStringLiteral( 
" %1) %2 %3 %4" ).arg( i )
 
   37                         .arg( QChar( 0x2192 ) )
 
   43 void QgsReclassifyUtils::checkForOverlaps( 
const QVector<QgsReclassifyUtils::RasterClass> &classes, 
QgsProcessingFeedback *feedback )
 
   46   for ( 
int i = 0; i < classes.count() - 1; i++ )
 
   48     for ( 
int j = i + 1; j < classes.count(); j++ )
 
   50       const QgsReclassifyUtils::RasterClass &class1 = classes.at( i );
 
   51       const QgsReclassifyUtils::RasterClass &class2 = classes.at( j );
 
   52       if ( class1.overlaps( class2 ) )
 
   54         feedback->
reportError( QObject::tr( 
"Warning: Class %1 (%2) overlaps with class %3 (%4)" ).arg( i + 1 )
 
   55                                .arg( class1.asText() )
 
   57                                .arg( class2.asText() ) );
 
   63 void QgsReclassifyUtils::reclassify( 
const QVector<QgsReclassifyUtils::RasterClass> &classes, 
QgsRasterInterface *sourceRaster, 
int band,
 
   64                                      const QgsRectangle &extent, 
int sourceWidthPixels, 
int sourceHeightPixels,
 
   72   iter.startRasterRead( band, sourceWidthPixels, sourceHeightPixels, extent );
 
   74   int nbBlocksWidth = 
static_cast< int >( std::ceil( 1.0 * sourceWidthPixels / maxWidth ) );
 
   75   int nbBlocksHeight = 
static_cast< int >( std::ceil( 1.0 * sourceHeightPixels / maxHeight ) );
 
   76   int nbBlocks = nbBlocksWidth * nbBlocksHeight;
 
   83   std::unique_ptr< QgsRasterBlock > rasterBlock;
 
   84   bool reclassed = 
false;
 
   85   bool isNoData = 
false;
 
   86   while ( iter.readNextRasterPart( band, iterCols, iterRows, rasterBlock, iterLeft, iterTop ) )
 
   89       feedback->
setProgress( 100 * ( ( iterTop / maxHeight * nbBlocksWidth ) + iterLeft / maxWidth ) / nbBlocks );
 
   92     std::unique_ptr< QgsRasterBlock > reclassifiedBlock = std::make_unique< QgsRasterBlock >( destinationRaster->
dataType( 1 ), iterCols, iterRows );
 
   94     for ( 
int row = 0; row < iterRows; row++ )
 
   98       for ( 
int column = 0; column < iterCols; column++ )
 
  100         const double value = rasterBlock->valueAndNoData( row, column, isNoData );
 
  102           reclassifiedBlock->setValue( row, column, destNoDataValue );
 
  105           double newValue = reclassifyValue( classes, value, reclassed );
 
  107             reclassifiedBlock->setValue( row, column, newValue );
 
  109             reclassifiedBlock->setValue( row, column, useNoDataForMissingValues ? destNoDataValue : value );
 
  113     destinationRaster->
writeBlock( reclassifiedBlock.get(), 1, iterLeft, iterTop );
 
bool isCanceled() const SIP_HOLDGIL
Tells whether the operation has been canceled already.
void setProgress(double progress)
Sets the current progress for the feedback object.
Base class for providing feedback from a processing algorithm.
virtual void pushInfo(const QString &info)
Pushes a general informational message from the algorithm.
virtual void reportError(const QString &error, bool fatalError=false)
Reports that the algorithm encountered an error while executing.
Base class for raster data providers.
bool writeBlock(QgsRasterBlock *block, int band, int xOffset=0, int yOffset=0)
Writes pixel data from a raster block into the provider data source.
Qgis::DataType dataType(int bandNo) const override=0
Returns data type for the band specified by number.
virtual bool setEditable(bool enabled)
Turns on/off editing mode of the provider.
Base class for processing filters like renderers, reprojector, resampler etc.
Iterator for sequentially processing raster cells.
static const int DEFAULT_MAXIMUM_TILE_WIDTH
Default maximum tile width.
static const int DEFAULT_MAXIMUM_TILE_HEIGHT
Default maximum tile height.
A rectangle specified with double values.
As part of the API refactoring and improvements which landed in the Processing API was substantially reworked from the x version This was done in order to allow much of the underlying Processing framework to be ported into c