27 , mOutputFilePath( outputPath )
28 , mInterpolationExtent( extent )
29 , mNumColumns( nCols )
31 , mCellSizeX( extent.width() / nCols )
32 , mCellSizeY( extent.height() / nRows )
37 QFile outputFile( mOutputFilePath );
39 if ( !outputFile.open( QFile::WriteOnly | QIODevice::Truncate ) )
50 QTextStream outStream( &outputFile );
51#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 )
52 outStream.setCodec(
"UTF-8" );
54 outStream.setRealNumberPrecision( 8 );
55 writeHeader( outStream );
57 double currentYValue = mInterpolationExtent.
yMaximum() - mCellSizeY / 2.0;
59 double interpolatedValue;
61 for (
int i = 0; i < mNumRows; ++i )
63 currentXValue = mInterpolationExtent.
xMinimum() + mCellSizeX / 2.0;
64 for (
int j = 0; j < mNumColumns; ++j )
66 if ( mInterpolator->
interpolatePoint( currentXValue, currentYValue, interpolatedValue, feedback ) == 0 )
68 outStream << interpolatedValue <<
' ';
72 outStream <<
"-9999 ";
74 currentXValue += mCellSizeX;
77 outStream << Qt::endl;
78 currentYValue -= mCellSizeY;
87 feedback->
setProgress( 100.0 * i /
static_cast<double>( mNumRows ) );
96 const QFileInfo fi( mOutputFilePath );
97 const QString fileName = fi.absolutePath() +
'/' + fi.completeBaseName() +
".prj";
98 QFile prjFile( fileName );
99 if ( !prjFile.open( QFile::WriteOnly | QIODevice::Truncate ) )
103 QTextStream prjStream( &prjFile );
105 prjStream << Qt::endl;
111int QgsGridFileWriter::writeHeader( QTextStream &outStream )
113 outStream <<
"NCOLS " << mNumColumns << Qt::endl;
114 outStream <<
"NROWS " << mNumRows << Qt::endl;
115 outStream <<
"XLLCORNER " << mInterpolationExtent.
xMinimum() << Qt::endl;
116 outStream <<
"YLLCORNER " << mInterpolationExtent.
yMinimum() << Qt::endl;
117 if ( mCellSizeX == mCellSizeY )
119 outStream <<
"CELLSIZE " << mCellSizeX << Qt::endl;
123 outStream <<
"DX " << mCellSizeX << Qt::endl;
124 outStream <<
"DY " << mCellSizeY << Qt::endl;
126 outStream <<
"NODATA_VALUE -9999" << Qt::endl;
QString toWkt(Qgis::CrsWktVariant variant=Qgis::CrsWktVariant::Wkt1Gdal, bool multiline=false, int indentationWidth=4) const
Returns a WKT representation of this CRS.
An interface for objects which provide features via a getFeatures method.
virtual QgsCoordinateReferenceSystem sourceCrs() const =0
Returns the coordinate reference system for features in the source.
Base class for feedback objects to be used for cancellation of something running in a worker thread.
bool isCanceled() const
Tells whether the operation has been canceled already.
void setProgress(double progress)
Sets the current progress for the feedback object.
QgsGridFileWriter(QgsInterpolator *interpolator, const QString &outputPath, const QgsRectangle &extent, int nCols, int nRows)
Constructor for QgsGridFileWriter, for the specified interpolator.
int writeFile(QgsFeedback *feedback=nullptr)
Writes the grid file.
Interface class for interpolations.
virtual int interpolatePoint(double x, double y, double &result, QgsFeedback *feedback=nullptr)=0
Calculates interpolation value for map coordinates x, y.
QList< LayerData > layerData() const
A rectangle specified with double values.
const QgsCoordinateReferenceSystem & crs
A source together with the information about interpolation attribute / z-coordinate interpolation and...
QgsFeatureSource * source
Feature source.