34 , mOutputFilePath( outputPath )
35 , mInterpolationExtent( extent )
36 , mNumColumns( nCols )
38 , mCellSizeX( extent.width() / nCols )
39 , mCellSizeY( extent.height() / nRows )
40 , mOutputFormat( outputFormat.isEmpty() ?
QgsRasterFileWriter::driverForExtension( QFileInfo( mOutputFilePath ).suffix() ) : outputFormat )
48 auto writer = std::make_unique<QgsRasterFileWriter>( mOutputFilePath );
49 writer->setOutputProviderKey( u
"gdal"_s );
50 writer->setOutputFormat( mOutputFormat );
51 writer->setCreationOptions( mCreationOptions );
53 std::unique_ptr<QgsRasterDataProvider> provider( writer->createOneBandRaster(
Qgis::DataType::Float32, mNumColumns, mNumRows, mInterpolationExtent, crs ) );
56 QgsDebugMsgLevel( u
"Could not create raster output: %1"_s.arg( mOutputFilePath ), 2 );
59 if ( !provider->isValid() )
65 provider->setNoDataValue( 1, mNoDataValue );
67 double currentYValue = mInterpolationExtent.yMaximum() - mCellSizeY / 2.0;
69 double interpolatedValue;
71 std::vector<float> float32Row( mNumColumns );
72 const double step = mNumRows > 0 ? 100.0 / mNumRows : 1;
73 for (
int row = 0; row < mNumRows; row++ )
80 currentXValue = mInterpolationExtent.xMinimum() + mCellSizeX / 2.0;
83 for (
int col = 0; col < mNumColumns; col++ )
85 if ( mInterpolator->interpolatePoint( currentXValue, currentYValue, interpolatedValue, feedback ) == 0 )
87 float32Row[col] = interpolatedValue;
91 float32Row[col] = mNoDataValue;
93 currentXValue += mCellSizeX;
96 if ( !provider->writeBlock( &block, 1, 0, row ) )
98 throw QgsProcessingException( QObject::tr(
"Could not write raster block: %1" ).arg( provider->error().summary() ) );
100 currentYValue -= mCellSizeY;
QgsGridFileWriter(QgsInterpolator *interpolator, const QString &outputPath, const QgsRectangle &extent, int nCols, int nRows, const QString &outputFormat=QString())
Constructor for QgsGridFileWriter, for the specified interpolator.