Quantum GIS API Documentation  master-ce49b66
src/core/raster/qgsrasterfilewriter.h
Go to the documentation of this file.
00001 /***************************************************************************
00002     qgsrasterfilewriter.h
00003     ---------------------
00004     begin                : July 2012
00005     copyright            : (C) 2012 by Marco Hugentobler
00006     email                : marco dot hugentobler at sourcepole dot ch
00007  ***************************************************************************
00008  *                                                                         *
00009  *   This program is free software; you can redistribute it and/or modify  *
00010  *   it under the terms of the GNU General Public License as published by  *
00011  *   the Free Software Foundation; either version 2 of the License, or     *
00012  *   (at your option) any later version.                                   *
00013  *                                                                         *
00014  ***************************************************************************/
00015 #ifndef QGSRASTERFILEWRITER_H
00016 #define QGSRASTERFILEWRITER_H
00017 
00018 #include "qgscoordinatereferencesystem.h"
00019 #include "qgsrasterdataprovider.h"
00020 #include "qgsrasterpipe.h"
00021 #include "qgsrectangle.h"
00022 #include <QDomDocument>
00023 #include <QDomElement>
00024 #include <QString>
00025 
00026 class QProgressDialog;
00027 class QgsRasterIterator;
00028 
00032 class CORE_EXPORT QgsRasterFileWriter
00033 {
00034   public:
00035     enum Mode
00036     {
00037       Raw = 0, // Raw data
00038       Image = 1 // Rendered image
00039     };
00040     enum WriterError
00041     {
00042       NoError = 0,
00043       SourceProviderError = 1,
00044       DestProviderError = 2,
00045       CreateDatasourceError = 3,
00046       WriteError = 4,
00047       // Internal error if a value used for 'no data' was found in input
00048       NoDataConflict = 5
00049     };
00050 
00051     QgsRasterFileWriter( const QString& outputUrl );
00052     ~QgsRasterFileWriter();
00053 
00061     WriterError writeRaster( const QgsRasterPipe* pipe, int nCols, int nRows, QgsRectangle outputExtent,
00062                              const QgsCoordinateReferenceSystem& crs, QProgressDialog* p = 0 );
00063 
00064     void setOutputFormat( const QString& format ) { mOutputFormat = format; }
00065     QString outputFormat() const { return mOutputFormat; }
00066 
00067     void setOutputProviderKey( const QString& key ) { mOutputProviderKey = key; }
00068     QString outputProviderKey() const { return mOutputProviderKey; }
00069 
00070     void setTiledMode( bool t ) { mTiledMode = t; }
00071     bool tiledMode() const { return mTiledMode; }
00072 
00073     void setMaxTileWidth( int w ) { mMaxTileWidth = w; }
00074     int maxTileWidth() const { return mMaxTileWidth; }
00075 
00076     QgsRaster::RasterBuildPyramids buildPyramidsFlag() const { return mBuildPyramidsFlag; }
00077     void setBuildPyramidsFlag( QgsRaster::RasterBuildPyramids f ) { mBuildPyramidsFlag = f; }
00078 
00079     QList< int > pyramidsList() const { return mPyramidsList; }
00080     void setPyramidsList( const QList< int > & list ) { mPyramidsList = list; }
00081 
00082     QString pyramidsResampling() const { return mPyramidsResampling; }
00083     void setPyramidsResampling( const QString & str ) { mPyramidsResampling = str; }
00084 
00085     QgsRaster::RasterPyramidsFormat pyramidsFormat() const { return mPyramidsFormat; }
00086     void setPyramidsFormat( QgsRaster::RasterPyramidsFormat f ) { mPyramidsFormat = f; }
00087 
00088     void setMaxTileHeight( int h ) { mMaxTileHeight = h; }
00089     int maxTileHeight() const { return mMaxTileHeight; }
00090 
00091     void setCreateOptions( const QStringList& list ) { mCreateOptions = list; }
00092     QStringList createOptions() const { return mCreateOptions; }
00093 
00094     void setPyramidsConfigOptions( const QStringList& list ) { mPyramidsConfigOptions = list; }
00095     QStringList pyramidsConfigOptions() const { return mPyramidsConfigOptions; }
00096 
00097   private:
00098     QgsRasterFileWriter(); //forbidden
00099     WriterError writeDataRaster( const QgsRasterPipe* pipe, QgsRasterIterator* iter, int nCols, int nRows, const QgsRectangle& outputExtent,
00100                                  const QgsCoordinateReferenceSystem& crs, QProgressDialog* progressDialog = 0 );
00101 
00102     // Helper method used by previous one
00103     WriterError writeDataRaster( const QgsRasterPipe* pipe,
00104                                  QgsRasterIterator* iter,
00105                                  int nCols, int nRows,
00106                                  const QgsRectangle& outputExtent,
00107                                  const QgsCoordinateReferenceSystem& crs,
00108                                  QGis::DataType destDataType,
00109                                  QList<bool> destHasNoDataValueList,
00110                                  QList<double> destNoDataValueList,
00111                                  QgsRasterDataProvider* destProvider,
00112                                  QProgressDialog* progressDialog );
00113 
00114     WriterError writeImageRaster( QgsRasterIterator* iter, int nCols, int nRows, const QgsRectangle& outputExtent,
00115                                   const QgsCoordinateReferenceSystem& crs, QProgressDialog* progressDialog = 0 );
00116 
00126     void createVRT( int xSize, int ySize, const QgsCoordinateReferenceSystem& crs, double* geoTransform, QGis::DataType type, QList<bool> destHasNoDataValueList, QList<double> destNoDataValueList );
00127     //write vrt document to disk
00128     bool writeVRT( const QString& file );
00129     //add file entry to vrt
00130     void addToVRT( const QString& filename, int band, int xSize, int ySize, int xOffset, int yOffset );
00131     void buildPyramids( const QString& filename );
00132 
00134     QgsRasterDataProvider* createPartProvider( const QgsRectangle& extent, int nCols, int iterCols, int iterRows,
00135         int iterLeft, int iterTop,
00136         const QString& outputUrl, int fileIndex, int nBands, QGis::DataType type,
00137         const QgsCoordinateReferenceSystem& crs );
00138 
00149     QgsRasterDataProvider* initOutput( int nCols, int nRows,
00150                                        const QgsCoordinateReferenceSystem& crs, double* geoTransform, int nBands,
00151                                        QGis::DataType type,
00152                                        QList<bool> destHasNoDataValueList = QList<bool>(), QList<double> destNoDataValueList = QList<double>() );
00153 
00155     void globalOutputParameters( const QgsRectangle& extent, int nCols, int& nRows, double* geoTransform, double& pixelSize );
00156 
00157     QString partFileName( int fileIndex );
00158     QString vrtFileName();
00159 
00160     Mode mMode;
00161     QString mOutputUrl;
00162     QString mOutputProviderKey;
00163     QString mOutputFormat;
00164     QStringList mCreateOptions;
00165     QgsCoordinateReferenceSystem mOutputCRS;
00166 
00168     bool mTiledMode;
00169     double mMaxTileWidth;
00170     double mMaxTileHeight;
00171 
00172     QList< int > mPyramidsList;
00173     QString mPyramidsResampling;
00174     QgsRaster::RasterBuildPyramids mBuildPyramidsFlag;
00175     QgsRaster::RasterPyramidsFormat mPyramidsFormat;
00176     QStringList mPyramidsConfigOptions;
00177 
00178     QDomDocument mVRTDocument;
00179     QList<QDomElement> mVRTBands;
00180 
00181     QProgressDialog* mProgressDialog;
00182 
00183     const QgsRasterPipe* mPipe;
00184     const QgsRasterInterface* mInput;
00185 };
00186 
00187 #endif // QGSRASTERFILEWRITER_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines