24 QString QgsVectorizeAlgorithmBase::group()
const 26 return QObject::tr(
"Vector creation" );
29 QString QgsVectorizeAlgorithmBase::groupId()
const 31 return QStringLiteral(
"vectorcreation" );
34 void QgsVectorizeAlgorithmBase::initAlgorithm(
const QVariantMap & )
37 QObject::tr(
"Raster layer" ) ) );
39 QObject::tr(
"Band number" ), 1, QStringLiteral(
"INPUT_RASTER" ) ) );
41 QObject::tr(
"Field name" ), QStringLiteral(
"VALUE" ) ) );
48 QgsRasterLayer *layer = parameterAsRasterLayer( parameters, QStringLiteral(
"INPUT_RASTER" ), context );
53 mBand = parameterAsInt( parameters, QStringLiteral(
"RASTER_BAND" ), context );
54 if ( mBand < 1 || mBand > layer->
bandCount() )
55 throw QgsProcessingException( QObject::tr(
"Invalid band number for RASTER_BAND (%1): Valid values for input raster are 1 to %2" ).arg( mBand )
63 mNbCellsXProvider = mInterface->xSize();
64 mNbCellsYProvider = mInterface->ySize();
70 const QString fieldName = parameterAsString( parameters, QStringLiteral(
"FIELD_NAME" ), context );
72 fields.
append(
QgsField( fieldName, QVariant::Double, QString(), 20, 8 ) );
75 std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral(
"OUTPUT" ), context, dest, fields, sinkType(), mCrs ) );
84 iter.
startRasterRead( mBand, mNbCellsXProvider, mNbCellsYProvider, mExtent );
86 int nbBlocksWidth =
static_cast< int >( std::ceil( 1.0 * mNbCellsXProvider / maxWidth ) );
87 int nbBlocksHeight =
static_cast< int >( std::ceil( 1.0 * mNbCellsYProvider / maxHeight ) );
88 int nbBlocks = nbBlocksWidth * nbBlocksHeight;
94 std::unique_ptr< QgsRasterBlock > rasterBlock;
96 while ( iter.readNextRasterPart( mBand, iterCols, iterRows, rasterBlock, iterLeft, iterTop, &blockExtent ) )
99 feedback->
setProgress( 100 * ( ( iterTop / maxHeight * nbBlocksWidth ) + iterLeft / maxWidth ) / nbBlocks );
103 double currentY = blockExtent.
yMaximum() - 0.5 * mRasterUnitsPerPixelY;
105 for (
int row = 0; row < iterRows; row++ )
110 double currentX = blockExtent.
xMinimum() + 0.5 * mRasterUnitsPerPixelX;
112 for (
int column = 0; column < iterCols; column++ )
114 if ( !rasterBlock->isNoData( row, column ) )
116 QgsGeometry pixelRectGeometry = createGeometryForPixel( currentX, currentY, mRasterUnitsPerPixelX, mRasterUnitsPerPixelY );
117 double value = rasterBlock->value( row, column );
124 currentX += mRasterUnitsPerPixelX;
126 currentY -= mRasterUnitsPerPixelY;
131 outputs.insert( QStringLiteral(
"OUTPUT" ), dest );
139 QString QgsRasterPixelsToPolygonsAlgorithm::name()
const 141 return QStringLiteral(
"pixelstopolygons" );
144 QString QgsRasterPixelsToPolygonsAlgorithm::displayName()
const 146 return QObject::tr(
"Raster pixels to polygons" );
149 QStringList QgsRasterPixelsToPolygonsAlgorithm::tags()
const 151 return QObject::tr(
"vectorize,polygonize,raster,convert,pixels" ).split(
',' );
154 QString QgsRasterPixelsToPolygonsAlgorithm::shortHelpString()
const 156 return QObject::tr(
"This algorithm converts a raster layer to a vector layer, by creating polygon features " 157 "for each individual pixel's extent in the raster layer.\n\n" 158 "Any nodata pixels are skipped in the output." );
161 QString QgsRasterPixelsToPolygonsAlgorithm::shortDescription()
const 163 return QObject::tr(
"Creates a vector layer of polygons corresponding to each pixel in a raster layer." );
166 QgsRasterPixelsToPolygonsAlgorithm *QgsRasterPixelsToPolygonsAlgorithm::createInstance()
const 168 return new QgsRasterPixelsToPolygonsAlgorithm();
171 QString QgsRasterPixelsToPolygonsAlgorithm::outputName()
const 173 return QObject::tr(
"Vector polygons" );
186 QgsGeometry QgsRasterPixelsToPolygonsAlgorithm::createGeometryForPixel(
double centerX,
double centerY,
double pixelWidthX,
double pixelWidthY )
const 188 const double hCellSizeX = pixelWidthX / 2.0;
189 const double hCellSizeY = pixelWidthY / 2.0;
198 QString QgsRasterPixelsToPointsAlgorithm::name()
const 200 return QStringLiteral(
"pixelstopoints" );
203 QString QgsRasterPixelsToPointsAlgorithm::displayName()
const 205 return QObject::tr(
"Raster pixels to points" );
208 QStringList QgsRasterPixelsToPointsAlgorithm::tags()
const 210 return QObject::tr(
"vectorize,polygonize,raster,convert,pixels,centers" ).split(
',' );
213 QString QgsRasterPixelsToPointsAlgorithm::shortHelpString()
const 215 return QObject::tr(
"This algorithm converts a raster layer to a vector layer, by creating point features " 216 "for each individual pixel's center in the raster layer.\n\n" 217 "Any nodata pixels are skipped in the output." );
220 QString QgsRasterPixelsToPointsAlgorithm::shortDescription()
const 222 return QObject::tr(
"Creates a vector layer of points corresponding to each pixel in a raster layer." );
225 QgsRasterPixelsToPointsAlgorithm *QgsRasterPixelsToPointsAlgorithm::createInstance()
const 227 return new QgsRasterPixelsToPointsAlgorithm();
230 QString QgsRasterPixelsToPointsAlgorithm::outputName()
const 232 return QObject::tr(
"Vector points" );
245 QgsGeometry QgsRasterPixelsToPointsAlgorithm::createGeometryForPixel(
double centerX,
double centerY,
double,
double )
const
bool isCanceled() const
Tells whether the operation has been canceled already.
Use faster inserts, at the cost of updating the passed features to reflect changes made at the provid...
A rectangle specified with double values.
double rasterUnitsPerPixelY() const
Returns the number of raster units per each raster pixel in Y axis.
Base class for providing feedback from a processing algorithm.
Iterator for sequentially processing raster cells.
double yMaximum() const
Returns the y maximum value (top side of rectangle).
This class provides qgis with the ability to render raster datasets onto the mapcanvas.
double rasterUnitsPerPixelX() const
Returns the number of raster units per each raster pixel in X axis.
QgsRasterInterface * clone() const override=0
Clone itself, create deep copy.
void setProgress(double progress)
Sets the current progress for the feedback object.
Container of fields for a vector layer.
A geometry is the spatial representation of a feature.
void setAttributes(const QgsAttributes &attrs)
Sets the feature's attributes.
A raster band parameter for Processing algorithms.
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
A feature sink output for processing algorithms.
static QgsGeometry fromRect(const QgsRectangle &rect)
Creates a new geometry from a QgsRectangle.
QgsRasterDataProvider * dataProvider() override
Returns the layer's data provider.
A raster layer parameter for processing algorithms.
Type
The WKB type describes the number of dimensions a geometry has.
int bandCount() const
Returns the number of bands in this layer.
virtual QgsRectangle extent() const
Returns the extent of the layer.
static const int DEFAULT_MAXIMUM_TILE_HEIGHT
Default maximum tile height.
Custom exception class for processing related exceptions.
bool append(const QgsField &field, FieldOrigin origin=OriginProvider, int originIndex=-1)
Appends a field. The field must have unique name, otherwise it is rejected (returns false) ...
Encapsulate a field in an attribute table or data source.
Point geometry type, with support for z-dimension and m-values.
void setGeometry(const QgsGeometry &geometry)
Set the feature's geometry.
SourceType
Data source types enum.
Contains information about the context in which a processing algorithm is executed.
static const int DEFAULT_MAXIMUM_TILE_WIDTH
Default maximum tile width.
double xMinimum() const
Returns the x minimum value (left side of rectangle).
A string parameter for processing algorithms.
void startRasterRead(int bandNumber, int nCols, int nRows, const QgsRectangle &extent, QgsRasterBlockFeedback *feedback=nullptr)
Start reading of raster band.
QgsCoordinateReferenceSystem crs