|
Quantum GIS API Documentation
master-ce49b66
|
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