@@ -90,15 +90,10 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeDataRaster( QgsRaster
90
90
91
91
// create destProvider for whole dataset here
92
92
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 ;
95
95
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 );
102
97
103
98
// check if all the bands have the same data type size, otherwise we cannot write it to the provider
104
99
// (at least not with the current interface)
@@ -118,25 +113,7 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeDataRaster( QgsRaster
118
113
dataList.push_back ( VSIMalloc ( dataTypeSize * mMaxTileWidth * mMaxTileHeight ) );
119
114
}
120
115
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 ) );
140
117
141
118
int fileIndex = 0 ;
142
119
while ( true )
@@ -221,38 +198,14 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeImageRaster( QgsRaste
221
198
double progress = 0 ;
222
199
int fileIndex = 0 ;
223
200
224
- QgsRasterDataProvider* destProvider = 0 ;
225
-
226
201
// 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;
229
205
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 );
236
207
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 );
256
209
257
210
// iter->select( outputExtent, outputMapUnitsPerPixel );
258
211
iter->startRasterRead ( 1 , nCols, nRows, outputExtent );
@@ -548,6 +501,45 @@ QgsRasterDataProvider* QgsRasterFileWriter::createPartProvider( const QgsRectang
548
501
return destProvider;
549
502
}
550
503
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
+
551
543
552
544
553
545
0 commit comments