@@ -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
0 commit comments