@@ -24,7 +24,7 @@ QgsRasterFileWriter::~QgsRasterFileWriter()
24
24
25
25
}
26
26
27
- QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeRaster ( QgsRasterIterator* iter, int nCols, QgsRectangle outputExtent,
27
+ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeRaster ( QgsRasterIterator* iter, int nCols, int nRows, QgsRectangle outputExtent,
28
28
const QgsCoordinateReferenceSystem& crs, QProgressDialog* p )
29
29
{
30
30
if ( !iter )
@@ -42,19 +42,19 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeRaster( QgsRasterIter
42
42
43
43
if ( iface->dataType ( 1 ) == QgsRasterInterface::ARGB32 )
44
44
{
45
- WriterError e = writeImageRaster ( iter, nCols, outputExtent, crs );
45
+ WriterError e = writeImageRaster ( iter, nCols, nRows, outputExtent, crs );
46
46
mProgressDialog = 0 ;
47
47
return e;
48
48
}
49
49
else
50
50
{
51
51
mProgressDialog = 0 ;
52
- WriterError e = writeDataRaster ( iter, nCols, outputExtent, crs );
52
+ WriterError e = writeDataRaster ( iter, nCols, nRows, outputExtent, crs );
53
53
return e;
54
54
}
55
55
}
56
56
57
- QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeDataRaster ( QgsRasterIterator* iter, int nCols, const QgsRectangle& outputExtent,
57
+ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeDataRaster ( QgsRasterIterator* iter, int nCols, int nRows, const QgsRectangle& outputExtent,
58
58
const QgsCoordinateReferenceSystem& crs )
59
59
{
60
60
if ( !iter )
@@ -76,7 +76,6 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeDataRaster( QgsRaster
76
76
}
77
77
78
78
// Get output map units per pixel
79
- double outputMapUnitsPerPixel = outputExtent.width () / nCols;
80
79
int iterLeft, iterTop, iterCols, iterRows;
81
80
82
81
iter->setMaximumTileWidth ( mMaxTileWidth );
@@ -90,7 +89,6 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeDataRaster( QgsRaster
90
89
91
90
// create destProvider for whole dataset here
92
91
QgsRasterDataProvider* destProvider = 0 ;
93
- int nRows;
94
92
double pixelSize;
95
93
double geoTransform[6 ];
96
94
globalOutputParameters ( outputExtent, nCols, nRows, geoTransform, pixelSize );
@@ -160,7 +158,7 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeDataRaster( QgsRaster
160
158
}
161
159
}
162
160
163
- QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeImageRaster ( QgsRasterIterator* iter, int nCols, const QgsRectangle& outputExtent,
161
+ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeImageRaster ( QgsRasterIterator* iter, int nCols, int nRows, const QgsRectangle& outputExtent,
164
162
const QgsCoordinateReferenceSystem& crs )
165
163
{
166
164
if ( !iter )
@@ -181,10 +179,6 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeImageRaster( QgsRaste
181
179
destDir.mkdir ( mOutputUrl );
182
180
}
183
181
184
- // Get output map units per pixel
185
- double outputMapUnitsPerPixel = outputExtent.width () / nCols;
186
-
187
-
188
182
iter->setMaximumTileWidth ( mMaxTileWidth );
189
183
iter->setMaximumTileHeight ( mMaxTileHeight );
190
184
@@ -195,12 +189,10 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeImageRaster( QgsRaste
195
189
void * alphaData = VSIMalloc ( mMaxTileWidth * mMaxTileHeight );
196
190
QgsRectangle mapRect;
197
191
int iterLeft, iterTop, iterCols, iterRows;
198
- double progress = 0 ;
199
192
int fileIndex = 0 ;
200
193
201
194
// create destProvider for whole dataset here
202
195
QgsRasterDataProvider* destProvider = 0 ;
203
- int nRows;
204
196
double pixelSize;
205
197
double geoTransform[6 ];
206
198
globalOutputParameters ( outputExtent, nCols, nRows, geoTransform, pixelSize );
@@ -531,13 +523,18 @@ void QgsRasterFileWriter::globalOutputParameters( const QgsRectangle& extent, in
531
523
double * geoTransform, double & pixelSize )
532
524
{
533
525
pixelSize = extent.width () / nCols;
534
- nRows = ( double )nCols / extent.width () * extent.height () + 0.5 ;
526
+
527
+ // calculate nRows automatically for providers without exact resolution
528
+ if ( nRows < 0 )
529
+ {
530
+ nRows = ( double )nCols / extent.width () * extent.height () + 0.5 ;
531
+ }
535
532
geoTransform[0 ] = extent.xMinimum ();
536
533
geoTransform[1 ] = pixelSize;
537
534
geoTransform[2 ] = 0.0 ;
538
535
geoTransform[3 ] = extent.yMaximum ();
539
536
geoTransform[4 ] = 0.0 ;
540
- geoTransform[5 ] = -pixelSize ;
537
+ geoTransform[5 ] = -( extent. height () / nRows ) ;
541
538
}
542
539
543
540
0 commit comments