25 QString QgsConstantRasterAlgorithm::name()
 const 
   27   return QStringLiteral( 
"createconstantrasterlayer" );
 
   30 QString QgsConstantRasterAlgorithm::displayName()
 const 
   32   return QObject::tr( 
"Create constant raster layer" );
 
   35 QStringList QgsConstantRasterAlgorithm::tags()
 const 
   37   return QObject::tr( 
"raster,create,constant" ).split( 
',' );
 
   40 QString QgsConstantRasterAlgorithm::group()
 const 
   42   return QObject::tr( 
"Raster creation" );
 
   45 QString QgsConstantRasterAlgorithm::groupId()
 const 
   47   return QStringLiteral( 
"rastercreation" );
 
   50 QString QgsConstantRasterAlgorithm::shortHelpString()
 const 
   52   return QObject::tr( 
"Generates raster layer for given extent and cell " 
   53                       "size filled with the specified value.\n" 
   54                       "Additionally an output data type can be specified. " 
   55                       "The algorithm will abort if a value has been entered that " 
   56                       "cannot be represented by the selected output raster data type." );
 
   59 QgsConstantRasterAlgorithm *QgsConstantRasterAlgorithm::createInstance()
 const 
   61   return new QgsConstantRasterAlgorithm();
 
   64 void QgsConstantRasterAlgorithm::initAlgorithm( 
const QVariantMap & )
 
   67   addParameter( 
new QgsProcessingParameterCrs( QStringLiteral( 
"TARGET_CRS" ), QObject::tr( 
"Target CRS" ), QStringLiteral( 
"ProjectCrs" ) ) );
 
   73   QStringList rasterDataTypes; 
 
   74   rasterDataTypes << QStringLiteral( 
"Byte" )
 
   75                   << QStringLiteral( 
"Integer16" )
 
   76                   << QStringLiteral( 
"Unsigned Integer16" )
 
   77                   << QStringLiteral( 
"Integer32" )
 
   78                   << QStringLiteral( 
"Unsigned Integer32" )
 
   79                   << QStringLiteral( 
"Float32" )
 
   80                   << QStringLiteral( 
"Float64" );
 
   83   std::unique_ptr< QgsProcessingParameterDefinition > rasterTypeParameter = std::make_unique< QgsProcessingParameterEnum >( QStringLiteral( 
"OUTPUT_TYPE" ), QObject::tr( 
"Output raster data type" ),  rasterDataTypes, 
false, 5, 
false );
 
   85   addParameter( rasterTypeParameter.release() );
 
   93   QgsRectangle extent = parameterAsExtent( parameters, QStringLiteral( 
"EXTENT" ), context, 
crs );
 
   94   double pixelSize = parameterAsDouble( parameters, QStringLiteral( 
"PIXEL_SIZE" ), context );
 
   95   double value = parameterAsDouble( parameters, QStringLiteral( 
"NUMBER" ), context );
 
   96   int typeId = parameterAsInt( parameters, QStringLiteral( 
"OUTPUT_TYPE" ), context );
 
  101   fractpart = abs( std::modf( value, &intpart ) ); 
 
  108       if ( value < std::numeric_limits<quint8>::min() || value > std::numeric_limits<quint8>::max() )
 
  109         throw QgsProcessingException( QObject::tr( 
"Raster datasets of type %3 only accept positive values between %1 and %2" ).arg( std::numeric_limits<quint8>::min() ).arg( std::numeric_limits<quint8>::max() ).arg( QLatin1String( 
"Byte" ) ) );
 
  111         feedback->
reportError( QObject::tr( 
"The entered constant value has decimals but will be written to a raster dataset of type %1. The decimals of the constant value will be omitted." ).arg( QLatin1String( 
"Byte" ) ) );
 
  115       if ( value < std::numeric_limits<qint16>::min() || value > std::numeric_limits<qint16>::max() )
 
  116         throw QgsProcessingException( QObject::tr( 
"Raster datasets of type %3 only accept values between %1 and %2" ).arg( std::numeric_limits<qint16>::min() ).arg( std::numeric_limits<qint16>::max() ).arg( QLatin1String( 
"Integer16" ) ) );
 
  118         feedback->
reportError( QObject::tr( 
"The entered constant value has decimals but will be written to a raster dataset of type %1. The decimals of the constant value will be omitted." ).arg( QLatin1String( 
"Integer16" ) ) );
 
  122       if ( value < std::numeric_limits<quint16>::min() || value > std::numeric_limits<quint16>::max() )
 
  123         throw QgsProcessingException( QObject::tr( 
"Raster datasets of type %3 only accept positive values between %1 and %2" ).arg( std::numeric_limits<quint16>::min() ).arg( std::numeric_limits<quint16>::max() ).arg( 
"Unsigned Integer16" ) );
 
  125         feedback->
reportError( QObject::tr( 
"The entered constant value has decimals but will be written to a raster dataset of type %1. The decimals of the constant value will be omitted." ).arg( QLatin1String( 
"Unsigned Integer16" ) ) );
 
  129       if ( value < std::numeric_limits<qint32>::min() || value > std::numeric_limits<qint32>::max() )
 
  130         throw QgsProcessingException( QObject::tr( 
"Raster datasets of type %3 only accept values between %1 and %2" ).arg( std::numeric_limits<qint32>::min() ).arg( std::numeric_limits<qint32>::max() ).arg( QLatin1String( 
"Integer32" ) ) );
 
  132         feedback->
reportError( QObject::tr( 
"The entered constant value has decimals but will be written to a raster dataset of type %1. The decimals of the constant value will be omitted." ).arg( QLatin1String( 
"Integer32" ) ) );
 
  136       if ( value < std::numeric_limits<quint32>::min() || value > std::numeric_limits<quint32>::max() )
 
  137         throw QgsProcessingException( QObject::tr( 
"Raster datasets of type %3 only accept positive values between %1 and %2" ).arg( std::numeric_limits<quint32>::min() ).arg( std::numeric_limits<quint32>::max() ).arg( QLatin1String( 
"Unsigned Integer32" ) ) );
 
  139         feedback->
reportError( QObject::tr( 
"The entered constant value has decimals but will be written to a raster dataset of type %1. The decimals of the constant value will be omitted." ).arg( QLatin1String( 
"Unsigned Integer32" ) ) );
 
  150   const QString outputFile = parameterAsOutputLayer( parameters, QStringLiteral( 
"OUTPUT" ), context );
 
  151   QFileInfo fi( outputFile );
 
  154   int rows = std::max( std::ceil( extent.
height() / pixelSize ), 1.0 );
 
  155   int cols = std::max( std::ceil( extent.
width() / pixelSize ), 1.0 );
 
  161   std::unique_ptr< QgsRasterFileWriter > writer = std::make_unique< QgsRasterFileWriter >( outputFile );
 
  162   writer->setOutputProviderKey( QStringLiteral( 
"gdal" ) );
 
  163   writer->setOutputFormat( outputFormat );
 
  164   std::unique_ptr<QgsRasterDataProvider > provider( writer->createOneBandRaster( rasterDataType, cols, rows, rasterExtent, 
crs ) );
 
  167   if ( !provider->isValid() )
 
  180       std::vector<quint8> byteRow( cols );
 
  181       std::fill( byteRow.begin(), byteRow.end(), value );
 
  187       std::vector<qint16> int16Row( cols );
 
  188       std::fill( int16Row.begin(), int16Row.end(), value );
 
  194       std::vector<quint16> uInt16Row( cols );
 
  195       std::fill( uInt16Row.begin(), uInt16Row.end(), value );
 
  201       std::vector<qint32> int32Row( cols );
 
  202       std::fill( int32Row.begin(), int32Row.end(), value );
 
  208       std::vector<quint32> uInt32Row( cols );
 
  209       std::fill( uInt32Row.begin(), uInt32Row.end(), value );
 
  215       std::vector<float> float32Row( cols );
 
  216       std::fill( float32Row.begin(), float32Row.end(), value );
 
  222       std::vector<double> float64Row( cols );
 
  223       std::fill( float64Row.begin(), float64Row.end(), value );
 
  229       std::vector<float> float32Row( cols );
 
  230       std::fill( float32Row.begin(), float32Row.end(), value );
 
  236   double step = rows > 0 ? 100.0 / rows : 1;
 
  238   for ( 
int i = 0; i < rows ; i++ )
 
  245     provider->writeBlock( &block, 1, 0, i );
 
  250   outputs.insert( QStringLiteral( 
"OUTPUT" ), outputFile );
 
DataType
Raster data types.
@ Float32
Thirty two bit floating point (float)
@ Int16
Sixteen bit signed integer (qint16)
@ UInt16
Sixteen bit unsigned integer (quint16)
@ Byte
Eight bit unsigned integer (quint8)
@ Int32
Thirty two bit signed integer (qint32)
@ Float64
Sixty four bit floating point (double)
@ UInt32
Thirty two bit unsigned integer (quint32)
This class represents a coordinate reference system (CRS).
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.
Contains information about the context in which a processing algorithm is executed.
Custom exception class for processing related exceptions.
Base class for providing feedback from a processing algorithm.
virtual void reportError(const QString &error, bool fatalError=false)
Reports that the algorithm encountered an error while executing.
A coordinate reference system parameter for processing algorithms.
@ FlagAdvanced
Parameter is an advanced parameter which should be hidden from users by default.
A rectangular map extent parameter for processing algorithms.
A numeric parameter for processing algorithms.
@ Double
Double/float values.
A raster layer destination parameter, for specifying the destination path for a raster layer created ...
static int typeSize(Qgis::DataType dataType) SIP_HOLDGIL
Returns the size in bytes for the specified dataType.
static QString driverForExtension(const QString &extension)
Returns the GDAL driver name for a specified file extension.
A rectangle specified with double values.
double yMaximum() const SIP_HOLDGIL
Returns the y maximum value (top side of rectangle).
double xMinimum() const SIP_HOLDGIL
Returns the x minimum value (left side of rectangle).
double height() const SIP_HOLDGIL
Returns the height of the rectangle.
double width() const SIP_HOLDGIL
Returns the width of the rectangle.
const QgsCoordinateReferenceSystem & crs