Skip to content

Commit 6af1f60

Browse files
committedJul 13, 2012
Code cleanup
1 parent 560523d commit 6af1f60

File tree

2 files changed

+55
-56
lines changed

2 files changed

+55
-56
lines changed
 

‎src/core/raster/qgsrasterfilewriter.cpp

Lines changed: 48 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -90,15 +90,10 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeDataRaster( QgsRaster
9090

9191
//create destProvider for whole dataset here
9292
QgsRasterDataProvider* destProvider = 0;
93-
double pixelSize = outputExtent.width() / nCols;
94-
int nRows = ( double )nCols / outputExtent.width() * outputExtent.height() + 0.5;
93+
int nRows;
94+
double pixelSize;
9595
double geoTransform[6];
96-
geoTransform[0] = outputExtent.xMinimum();
97-
geoTransform[1] = pixelSize;
98-
geoTransform[2] = 0.0;
99-
geoTransform[3] = outputExtent.yMaximum();
100-
geoTransform[4] = 0.0;
101-
geoTransform[5] = -pixelSize;
96+
globalOutputParameters( outputExtent, nCols, nRows, geoTransform, pixelSize );
10297

10398
//check if all the bands have the same data type size, otherwise we cannot write it to the provider
10499
//(at least not with the current interface)
@@ -118,25 +113,7 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeDataRaster( QgsRaster
118113
dataList.push_back( VSIMalloc( dataTypeSize * mMaxTileWidth * mMaxTileHeight ) );
119114
}
120115

121-
if ( mTiledMode )
122-
{
123-
createVRT( nCols, nRows, crs, geoTransform );
124-
}
125-
else
126-
{
127-
destProvider = QgsRasterLayer::loadProvider( mOutputProviderKey, mOutputUrl );
128-
if ( !destProvider )
129-
{
130-
return DestProviderError;
131-
}
132-
133-
if ( !destProvider->create( mOutputFormat, nBands, iface->dataType( 1 ), nCols, nRows, geoTransform,
134-
crs ) )
135-
{
136-
delete destProvider;
137-
return CreateDatasourceError;
138-
}
139-
}
116+
destProvider = initOutput( nCols, nRows, crs, geoTransform, nBands, iface->dataType( 1 ) );
140117

141118
int fileIndex = 0;
142119
while ( true )
@@ -221,38 +198,14 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeImageRaster( QgsRaste
221198
double progress = 0;
222199
int fileIndex = 0;
223200

224-
QgsRasterDataProvider* destProvider = 0;
225-
226201
//create destProvider for whole dataset here
227-
double pixelSize = outputExtent.width() / nCols;
228-
int nRows = ( double )nCols / outputExtent.width() * outputExtent.height() + 0.5;
202+
QgsRasterDataProvider* destProvider = 0;
203+
int nRows;
204+
double pixelSize;
229205
double geoTransform[6];
230-
geoTransform[0] = outputExtent.xMinimum();
231-
geoTransform[1] = pixelSize;
232-
geoTransform[2] = 0.0;
233-
geoTransform[3] = outputExtent.yMaximum();
234-
geoTransform[4] = 0.0;
235-
geoTransform[5] = -pixelSize;
206+
globalOutputParameters( outputExtent, nCols, nRows, geoTransform, pixelSize );
236207

237-
if ( mTiledMode )
238-
{
239-
createVRT( nCols, nRows, crs, geoTransform );
240-
}
241-
else
242-
{
243-
destProvider = QgsRasterLayer::loadProvider( mOutputProviderKey, mOutputUrl );
244-
if ( !destProvider )
245-
{
246-
return DestProviderError;
247-
}
248-
249-
if ( !destProvider->create( mOutputFormat, 4, QgsRasterInterface::Byte, nCols, nRows, geoTransform,
250-
crs ) )
251-
{
252-
delete destProvider;
253-
return CreateDatasourceError;
254-
}
255-
}
208+
destProvider = initOutput( nCols, nRows, crs, geoTransform, 4, QgsRasterInterface::Byte );
256209

257210
//iter->select( outputExtent, outputMapUnitsPerPixel );
258211
iter->startRasterRead( 1, nCols, nRows, outputExtent );
@@ -548,6 +501,45 @@ QgsRasterDataProvider* QgsRasterFileWriter::createPartProvider( const QgsRectang
548501
return destProvider;
549502
}
550503

504+
QgsRasterDataProvider* QgsRasterFileWriter::initOutput( int nCols, int nRows, const QgsCoordinateReferenceSystem& crs,
505+
double* geoTransform, int nBands, QgsRasterInterface::DataType type )
506+
{
507+
if ( mTiledMode )
508+
{
509+
createVRT( nCols, nRows, crs, geoTransform );
510+
return 0;
511+
}
512+
else
513+
{
514+
QgsRasterDataProvider* destProvider = QgsRasterLayer::loadProvider( mOutputProviderKey, mOutputUrl );
515+
if ( !destProvider )
516+
{
517+
return 0;
518+
}
519+
520+
if ( !destProvider->create( mOutputFormat, nBands, type, nCols, nRows, geoTransform,
521+
crs ) )
522+
{
523+
delete destProvider;
524+
return 0;
525+
}
526+
return destProvider;
527+
}
528+
}
529+
530+
void QgsRasterFileWriter::globalOutputParameters( const QgsRectangle& extent, int nCols, int& nRows,
531+
double* geoTransform, double& pixelSize )
532+
{
533+
pixelSize = extent.width() / nCols;
534+
nRows = ( double )nCols / extent.width() * extent.height() + 0.5;
535+
geoTransform[0] = extent.xMinimum();
536+
geoTransform[1] = pixelSize;
537+
geoTransform[2] = 0.0;
538+
geoTransform[3] = extent.yMaximum();
539+
geoTransform[4] = 0.0;
540+
geoTransform[5] = -pixelSize;
541+
}
542+
551543

552544

553545

‎src/core/raster/qgsrasterfilewriter.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,13 @@ class CORE_EXPORT QgsRasterFileWriter
6767
const QString& outputUrl, int fileIndex, int nBands, QgsRasterInterface::DataType type,
6868
const QgsCoordinateReferenceSystem& crs );
6969

70+
/**Init VRT (for tiled mode) or create global output provider (single-file mode)*/
71+
QgsRasterDataProvider* initOutput( int nCols, int nRows, const QgsCoordinateReferenceSystem& crs, double* geoTransform, int nBands,
72+
QgsRasterInterface::DataType type );
73+
74+
/**Calculate nRows, geotransform and pixel size for output*/
75+
void globalOutputParameters( const QgsRectangle& extent, int nCols, int& nRows, double* geoTransform, double& pixelSize );
76+
7077
QString mOutputUrl;
7178
QString mOutputProviderKey;
7279
QString mOutputFormat;

0 commit comments

Comments
 (0)
Please sign in to comment.