23 , mMaximumTileWidth( DEFAULT_MAXIMUM_TILE_WIDTH )
24 , mMaximumTileHeight( DEFAULT_MAXIMUM_TILE_HEIGHT )
49 removePartInfo( bandNumber );
58 mRasterPartInfos.insert( bandNumber, pInfo );
62 int &nCols,
int &nRows,
64 int &topLeftCol,
int &topLeftRow )
69 QMap<int, RasterPartInfo>::iterator partIt = mRasterPartInfos.find( bandNumber );
70 if ( partIt == mRasterPartInfos.end() )
75 RasterPartInfo &pInfo = partIt.value();
78 if ( 0 == pInfo.nCols || 0 == pInfo.nRows )
88 if ( pInfo.currentCol == pInfo.nCols && pInfo.currentRow == pInfo.nRows )
94 nCols = std::min( mMaximumTileWidth, pInfo.nCols - pInfo.currentCol );
95 nRows = std::min( mMaximumTileHeight, pInfo.nRows - pInfo.currentRow );
96 QgsDebugMsgLevel( QString(
"nCols = %1 nRows = %2" ).arg( nCols ).arg( nRows ), 4 );
100 double xmin = viewPortExtent.
xMinimum() + pInfo.currentCol /
static_cast< double >( pInfo.nCols ) * viewPortExtent.
width();
101 double xmax = pInfo.currentCol + nCols == pInfo.nCols ? viewPortExtent.
xMaximum() :
102 viewPortExtent.
xMinimum() + ( pInfo.currentCol + nCols ) / static_cast< double >( pInfo.nCols ) * viewPortExtent.
width();
103 double ymin = pInfo.currentRow + nRows == pInfo.nRows ? viewPortExtent.
yMinimum() :
104 viewPortExtent.
yMaximum() - ( pInfo.currentRow + nRows ) / static_cast< double >( pInfo.nRows ) * viewPortExtent.
height();
105 double ymax = viewPortExtent.
yMaximum() - pInfo.currentRow /
static_cast< double >( pInfo.nRows ) * viewPortExtent.
height();
108 *block = mInput->
block( bandNumber, blockRect, nCols, nRows, mFeedback );
109 topLeftCol = pInfo.currentCol;
110 topLeftRow = pInfo.currentRow;
112 pInfo.currentCol += nCols;
113 if ( pInfo.currentCol == pInfo.nCols && pInfo.currentRow + nRows == pInfo.nRows )
115 pInfo.currentRow = pInfo.nRows;
117 else if ( pInfo.currentCol == pInfo.nCols )
119 pInfo.currentCol = 0;
120 pInfo.currentRow += nRows;
128 removePartInfo( bandNumber );
131 void QgsRasterIterator::removePartInfo(
int bandNumber )
133 QMap<int, RasterPartInfo>::iterator partIt = mRasterPartInfos.find( bandNumber );
134 if ( partIt != mRasterPartInfos.end() )
136 RasterPartInfo &pInfo = partIt.value();
138 mRasterPartInfos.remove( bandNumber );
A rectangle specified with double values.
QgsRasterIterator(QgsRasterInterface *input)
virtual QgsRasterInterface * input() const
Current input.
#define QgsDebugMsgLevel(str, level)
virtual QgsRasterBlock * block(int bandNo, const QgsRectangle &extent, int width, int height, QgsRasterBlockFeedback *feedback=nullptr)=0
Read block of data using given extent and size.
double width() const
Returns the width of the rectangle.
bool readNextRasterPart(int bandNumber, int &nCols, int &nRows, QgsRasterBlock **block, int &topLeftCol, int &topLeftRow)
Fetches next part of raster data, caller takes ownership of the block and caller should delete the bl...
Base class for processing filters like renderers, reprojector, resampler etc.
void stopRasterRead(int bandNumber)
double yMinimum() const
Returns the y minimum value (bottom side of rectangle).
double xMaximum() const
Returns the x maximum value (right side of rectangle).
virtual int stepHeight() const
Step height for raster iterations.
double xMinimum() const
Returns the x minimum value (left side of rectangle).
virtual int stepWidth() const
Step width for raster iterations.
double yMaximum() const
Returns the y maximum value (top side of rectangle).
Feedback object tailored for raster block reading.
void startRasterRead(int bandNumber, int nCols, int nRows, const QgsRectangle &extent, QgsRasterBlockFeedback *feedback=nullptr)
Start reading of raster band.
double height() const
Returns the height of the rectangle.
Base class for raster data providers.