QGIS API Documentation 3.43.0-Master (32433f7016e)
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
29class QgsRectangle;
30
31typedef void *GDALDatasetH SIP_SKIP;
32
33
45class ANALYSIS_EXPORT QgsAlignRaster
46{
47 //SIP_TYPEHEADER_INCLUDE( "gdal_version.h" );
48
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 {
121 virtual bool progress( double complete ) = 0;
122
123 virtual ~ProgressHandler() = default;
124 };
125
127 void setProgressHandler( ProgressHandler *progressHandler ) { mProgressHandler = progressHandler; }
129 ProgressHandler *progressHandler() const { return mProgressHandler; }
130
132 void setRasters( const List &list ) { mRasters = list; }
134 List rasters() const { return mRasters; }
135
136 void setGridOffset( QPointF offset )
137 {
138 mGridOffsetX = offset.x();
139 mGridOffsetY = offset.y();
140 }
141 QPointF gridOffset() const { return QPointF( mGridOffsetX, mGridOffsetY ); }
142
144 void setCellSize( double x, double y ) { setCellSize( QSizeF( x, y ) ); }
146 void setCellSize( QSizeF size )
147 {
148 mCellSizeX = size.width();
149 mCellSizeY = size.height();
150 }
152 QSizeF cellSize() const { return QSizeF( mCellSizeX, mCellSizeY ); }
153
155 void setDestinationCrs( const QString &crsWkt ) { mCrsWkt = crsWkt; }
157 QString destinationCrs() const { return mCrsWkt; }
158
163 void setClipExtent( double xmin, double ymin, double xmax, double ymax );
164
169 void setClipExtent( const QgsRectangle &extent );
170
175 QgsRectangle clipExtent() const;
176
188 bool setParametersFromRaster( const RasterInfo &rasterInfo, const QString &customCRSWkt = QString(), QSizeF customCellSize = QSizeF(), QPointF customGridOffset = QPointF( -1, -1 ) );
189
194 bool setParametersFromRaster( const QString &filename, const QString &customCRSWkt = QString(), QSizeF customCellSize = QSizeF(), QPointF customGridOffset = QPointF( -1, -1 ) );
195
200 bool checkInputParameters();
201
206 QSize alignedRasterSize() const;
207
212 QgsRectangle alignedRasterExtent() const;
213
218 bool run();
219
224 QString errorMessage() const { return mErrorMessage; }
225
227 void dump() const;
228
230 int suggestedReferenceLayer() const;
231
232 protected:
234 bool createAndWarp( const Item &raster );
235
237 static bool suggestedWarpOutput( const RasterInfo &info, const QString &destWkt, QSizeF *cellSize = nullptr, QPointF *gridOffset = nullptr, QgsRectangle *rect = nullptr );
238
239 protected:
240 // set by the client
241
243 ProgressHandler *mProgressHandler = nullptr;
244
247
250
252 QString mCrsWkt;
254 double mCellSizeX, mCellSizeY;
256 double mGridOffsetX, mGridOffsetY;
257
262 double mClipExtent[4];
263
264 // derived data from other members
265
267 double mGeoTransform[6];
270
273};
274
275#endif // QGSALIGNRASTER_H
GdalResampleAlgorithm
Resampling algorithm to be used (equivalent to GDAL's enum GDALResampleAlg)
Definition qgis.h:5502
Takes one or more raster layers and warps (resamples) them to a common grid.
ProgressHandler * progressHandler() const
Gets associated progress handler. May be nullptr (default)
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.
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.
std::unique_ptr< std::remove_pointer< GDALDatasetH >::type, GDALDatasetCloser > dataset_unique_ptr
Scoped GDAL dataset.
#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.
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
RasterInfo & operator=(const RasterInfo &rh)=delete
bool isValid() const
Check whether the given path is a valid raster.
QString mCrsWkt
CRS stored in WKT format.