QGIS API Documentation  3.37.0-Master (a5b4d9743e8)
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 #include "qgsalignrasterdata.h"
28 
29 class QgsRectangle;
30 
31 typedef void *GDALDatasetH SIP_SKIP;
32 
33 
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 
111  typedef QList<QgsAlignRasterData::RasterItem> List;
112 
115  {
116 
122  virtual bool progress( double complete ) = 0;
123 
124  virtual ~ProgressHandler() = default;
125  };
126 
128  void setProgressHandler( ProgressHandler *progressHandler ) { mProgressHandler = progressHandler; }
130  ProgressHandler *progressHandler() const { return mProgressHandler; }
131 
133  void setRasters( const List &list ) { mRasters = list; }
135  List rasters() const { return mRasters; }
136 
137  void setGridOffset( QPointF offset ) { mGridOffsetX = offset.x(); mGridOffsetY = offset.y(); }
138  QPointF gridOffset() const { return QPointF( mGridOffsetX, mGridOffsetY ); }
139 
141  void setCellSize( double x, double y ) { setCellSize( QSizeF( x, y ) ); }
143  void setCellSize( QSizeF size ) { mCellSizeX = size.width(); mCellSizeY = size.height(); }
145  QSizeF cellSize() const { return QSizeF( mCellSizeX, mCellSizeY ); }
146 
148  void setDestinationCrs( const QString &crsWkt ) { mCrsWkt = crsWkt; }
150  QString destinationCrs() const { return mCrsWkt; }
151 
156  void setClipExtent( double xmin, double ymin, double xmax, double ymax );
157 
162  void setClipExtent( const QgsRectangle &extent );
163 
168  QgsRectangle clipExtent() const;
169 
181  bool setParametersFromRaster( const RasterInfo &rasterInfo, const QString &customCRSWkt = QString(), QSizeF customCellSize = QSizeF(), QPointF customGridOffset = QPointF( -1, -1 ) );
182 
187  bool setParametersFromRaster( const QString &filename, const QString &customCRSWkt = QString(), QSizeF customCellSize = QSizeF(), QPointF customGridOffset = QPointF( -1, -1 ) );
188 
193  bool checkInputParameters();
194 
199  QSize alignedRasterSize() const;
200 
205  QgsRectangle alignedRasterExtent() const;
206 
211  bool run();
212 
217  QString errorMessage() const { return mErrorMessage; }
218 
220  void dump() const;
221 
223  int suggestedReferenceLayer() const;
224 
225  protected:
226 
228  bool createAndWarp( const Item &raster );
229 
231  static bool suggestedWarpOutput( const RasterInfo &info, const QString &destWkt, QSizeF *cellSize = nullptr, QPointF *gridOffset = nullptr, QgsRectangle *rect = nullptr );
232 
233  protected:
234 
235  // set by the client
236 
238  ProgressHandler *mProgressHandler = nullptr;
239 
241  QString mErrorMessage;
242 
245 
247  QString mCrsWkt;
249  double mCellSizeX, mCellSizeY;
251  double mGridOffsetX, mGridOffsetY;
252 
257  double mClipExtent[4];
258 
259  // derived data from other members
260 
262  double mGeoTransform[6];
264  int mXSize;
265 
267  int mYSize;
268 };
269 
270 #endif // QGSALIGNRASTER_H
GdalResampleAlgorithm
Resampling algorithm to be used (equivalent to GDAL's enum GDALResampleAlg)
Definition: qgis.h:4608
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)
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.
QList< QgsAlignRasterData::RasterItem > List
QString errorMessage() const
Returns the error from a previous run() call.
QgsAlignRasterData::RasterItem Item
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()
Qgis::GdalResampleAlgorithm ResampleAlg
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:157
#define SIP_SKIP
Definition: qgis_sip.h:126
void * GDALDatasetH
Definition of one raster layer for alignment.
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.