QGIS API Documentation  3.20.0-Odense (decaadbb31)
qgsalignraster.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsalignraster.h
3  --------------------------------------
4  Date : June 2015
5  Copyright : (C) 2015 by Martin Dobias
6  Email : wonder dot sk at gmail dot com
7  ***************************************************************************
8  * *
9  * This program is free software; you can redistribute it and/or modify *
10  * it under the terms of the GNU General Public License as published by *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  ***************************************************************************/
15 
16 #ifndef QGSALIGNRASTER_H
17 #define QGSALIGNRASTER_H
18 
19 #include <QList>
20 #include <QPointF>
21 #include <QSizeF>
22 #include <QString>
23 #include <gdal_version.h>
24 #include "qgis_analysis.h"
25 #include "qgis_sip.h"
26 #include "qgsogrutils.h"
27 
28 class QgsRectangle;
29 
30 typedef void *GDALDatasetH SIP_SKIP;
31 
32 
44 class ANALYSIS_EXPORT QgsAlignRaster
45 {
46 #ifdef SIP_RUN
47 #include <gdal_version.h>
48 #endif
49 
50  public:
52 
54  struct ANALYSIS_EXPORT RasterInfo
55  {
56  public:
58  RasterInfo( const QString &layerpath );
59 
60  RasterInfo( const RasterInfo &rh ) = delete;
61  RasterInfo &operator=( const RasterInfo &rh ) = delete;
62 
64  bool isValid() const { return nullptr != mDataset; }
65 
67  QString crs() const { return mCrsWkt; }
69  QSize rasterSize() const { return QSize( mXSize, mYSize ); }
71  int bandCount() const { return mBandCnt; }
73  QSizeF cellSize() const;
75  QPointF gridOffset() const;
77  QgsRectangle extent() const;
79  QPointF origin() const;
80 
82  void dump() const;
83 
85  double identify( double mx, double my );
86 
87  protected:
91  QString mCrsWkt;
93  double mGeoTransform[6];
95  int mXSize = 0;
97  int mYSize = 0;
99  int mBandCnt = 0;
100 
101  private:
102 #ifdef SIP_RUN
104 #endif
105 
106  friend class QgsAlignRaster;
107  };
108 
109 
115  {
118  RA_Cubic = 2,
122  RA_Mode = 6,
123  RA_Max = 8,
124  RA_Min = 9,
125  RA_Median = 10,
126  RA_Q1 = 11,
127  RA_Q3 = 12,
128  };
129 
131  struct Item
132  {
133  Item( const QString &input, const QString &output )
134  : inputFilename( input )
135  , outputFilename( output )
136  , resampleMethod( RA_NearestNeighbour )
137  , rescaleValues( false )
138  , srcCellSizeInDestCRS( 0.0 )
139  {}
140 
142  QString inputFilename;
144  QString outputFilename;
149 
150  // private part
151 
154  };
155  typedef QList<QgsAlignRaster::Item> List;
156 
159  {
160 
166  virtual bool progress( double complete ) = 0;
167 
168  virtual ~ProgressHandler() = default;
169  };
170 
172  void setProgressHandler( ProgressHandler *progressHandler ) { mProgressHandler = progressHandler; }
174  ProgressHandler *progressHandler() const { return mProgressHandler; }
175 
177  void setRasters( const List &list ) { mRasters = list; }
179  List rasters() const { return mRasters; }
180 
181  void setGridOffset( QPointF offset ) { mGridOffsetX = offset.x(); mGridOffsetY = offset.y(); }
182  QPointF gridOffset() const { return QPointF( mGridOffsetX, mGridOffsetY ); }
183 
185  void setCellSize( double x, double y ) { setCellSize( QSizeF( x, y ) ); }
187  void setCellSize( QSizeF size ) { mCellSizeX = size.width(); mCellSizeY = size.height(); }
189  QSizeF cellSize() const { return QSizeF( mCellSizeX, mCellSizeY ); }
190 
192  void setDestinationCrs( const QString &crsWkt ) { mCrsWkt = crsWkt; }
194  QString destinationCrs() const { return mCrsWkt; }
195 
200  void setClipExtent( double xmin, double ymin, double xmax, double ymax );
201 
206  void setClipExtent( const QgsRectangle &extent );
207 
212  QgsRectangle clipExtent() const;
213 
225  bool setParametersFromRaster( const RasterInfo &rasterInfo, const QString &customCRSWkt = QString(), QSizeF customCellSize = QSizeF(), QPointF customGridOffset = QPointF( -1, -1 ) );
226 
231  bool setParametersFromRaster( const QString &filename, const QString &customCRSWkt = QString(), QSizeF customCellSize = QSizeF(), QPointF customGridOffset = QPointF( -1, -1 ) );
232 
237  bool checkInputParameters();
238 
243  QSize alignedRasterSize() const;
244 
249  QgsRectangle alignedRasterExtent() const;
250 
255  bool run();
256 
261  QString errorMessage() const { return mErrorMessage; }
262 
264  void dump() const;
265 
267  int suggestedReferenceLayer() const;
268 
269  protected:
270 
272  bool createAndWarp( const Item &raster );
273 
275  static bool suggestedWarpOutput( const RasterInfo &info, const QString &destWkt, QSizeF *cellSize = nullptr, QPointF *gridOffset = nullptr, QgsRectangle *rect = nullptr );
276 
277  protected:
278 
279  // set by the client
280 
282  ProgressHandler *mProgressHandler = nullptr;
283 
285  QString mErrorMessage;
286 
289 
291  QString mCrsWkt;
293  double mCellSizeX, mCellSizeY;
295  double mGridOffsetX, mGridOffsetY;
296 
301  double mClipExtent[4];
302 
303  // derived data from other members
304 
306  double mGeoTransform[6];
308  int mXSize;
309 
311  int mYSize;
312 
313 };
314 
315 
316 #endif // QGSALIGNRASTER_H
QgsAlignRaster takes one or more raster layers and warps (resamples) them so they have the same:
int mYSize
Computed raster grid height.
QSizeF cellSize() const
Gets output cell size.
QPointF gridOffset() const
double mGridOffsetX
Destination grid offset - expected to be in interval <0,cellsize)
QList< QgsAlignRaster::Item > List
void setCellSize(QSizeF size)
Sets output cell size.
List mRasters
List of rasters to be aligned (with their output files and other options)
void setDestinationCrs(const QString &crsWkt)
Sets the output CRS in WKT format.
void setGridOffset(QPointF offset)
List rasters() const
Gets list of rasters that will be aligned.
QString mCrsWkt
Destination CRS - stored in well-known text (WKT) format.
int mXSize
Computed raster grid width.
QString destinationCrs() const
Gets the output CRS in WKT format.
ProgressHandler * progressHandler() const
Gets associated progress handler. May be nullptr (default)
double mCellSizeX
Destination cell size.
void setProgressHandler(ProgressHandler *progressHandler)
Assign a progress handler instance. Does not take ownership. nullptr can be passed.
QString errorMessage() const
Returns the error from a previous run() call.
void setRasters(const List &list)
Sets list of rasters that will be aligned.
void setCellSize(double x, double y)
Sets output cell size.
QString mErrorMessage
Last error message from run()
ResampleAlg
Resampling algorithm to be used (equivalent to GDAL's enum GDALResampleAlg)
@ RA_NearestNeighbour
Nearest neighbour (select on one input pixel)
@ RA_CubicSpline
Cubic B-Spline Approximation (4x4 kernel)
@ RA_Cubic
Cubic Convolution Approximation (4x4 kernel)
@ RA_Q1
First quartile (selects the first quartile of all non-NODATA contributing pixels)
@ RA_Mode
Mode (selects the value which appears most often of all the sampled points)
@ RA_Average
Average (computes the average of all non-NODATA contributing pixels)
@ RA_Max
Maximum (selects the maximum of all non-NODATA contributing pixels)
@ RA_Q3
Third quartile (selects the third quartile of all non-NODATA contributing pixels)
@ RA_Median
Median (selects the median of all non-NODATA contributing pixels)
@ RA_Min
Minimum (selects the minimum of all non-NODATA contributing pixels)
@ RA_Bilinear
Bilinear (2x2 kernel)
@ RA_Lanczos
Lanczos windowed sinc interpolation (6x6 kernel)
A rectangle specified with double values.
Definition: qgsrectangle.h:42
std::unique_ptr< std::remove_pointer< GDALDatasetH >::type, GDALDatasetCloser > dataset_unique_ptr
Scoped GDAL dataset.
Definition: qgsogrutils.h:136
#define SIP_SKIP
Definition: qgis_sip.h:126
void * GDALDatasetH
Definition of one raster layer for alignment.
bool rescaleValues
rescaling of values according to the change of pixel size
QgsAlignRaster::ResampleAlg resampleMethod
resampling method to be used
double srcCellSizeInDestCRS
used for rescaling of values (if necessary)
Item(const QString &input, const QString &output)
QString inputFilename
filename of the source raster
QString outputFilename
filename of the newly created aligned raster (will be overwritten if exists already)
Helper struct to be sub-classed for progress reporting.
virtual ~ProgressHandler()=default
virtual bool progress(double complete)=0
Method to be overridden for progress reporting.
Utility class for gathering information about rasters.
QString crs() const
Returns the CRS in WKT format.
RasterInfo & operator=(const RasterInfo &rh)=delete
gdal::dataset_unique_ptr mDataset
handle to open GDAL dataset
int bandCount() const
Returns the number of raster bands in the file.
QSize rasterSize() const
Returns the size of the raster grid in pixels.
RasterInfo(const RasterInfo &rh)=delete
bool isValid() const
Check whether the given path is a valid raster.
QString mCrsWkt
CRS stored in WKT format.