@@ -50,6 +50,7 @@ class TestQgsRasterFileWriter: public QObject
50
50
void writeTest ();
51
51
void testCreateOneBandRaster ();
52
52
void testCreateMultiBandRaster ();
53
+ void testVrtCreation ();
53
54
private:
54
55
bool writeTest ( const QString &rasterName );
55
56
void log ( const QString &msg );
@@ -271,6 +272,52 @@ void TestQgsRasterFileWriter::testCreateMultiBandRaster()
271
272
delete rlayer;
272
273
}
273
274
275
+ void TestQgsRasterFileWriter::testVrtCreation ()
276
+ {
277
+ // create a raster layer that will be used in all tests...
278
+ QString srcFileName = mTestDataDir + QStringLiteral ( " ALLINGES_RGF93_CC46_1_1.tif" );
279
+ QFileInfo rasterFileInfo ( srcFileName );
280
+ std::unique_ptr< QgsRasterLayer > srcRasterLayer = qgis::make_unique< QgsRasterLayer >( rasterFileInfo.absoluteFilePath (), rasterFileInfo.completeBaseName () );
281
+
282
+ QTemporaryDir dir;
283
+ std::unique_ptr< QgsRasterFileWriter > rasterFileWriter = qgis::make_unique< QgsRasterFileWriter >( dir.path () + ' /' + rasterFileInfo.completeBaseName () );
284
+
285
+ // 2. Definition of the pyramid levels
286
+ QList<int > levelList;
287
+ levelList << 2 << 4 << 8 << 16 << 32 << 64 << 128 ;
288
+ rasterFileWriter->setPyramidsList ( levelList );
289
+ // 3. Pyramid format
290
+ rasterFileWriter->setPyramidsFormat ( QgsRaster::PyramidsGTiff );
291
+ // 4. Resampling method
292
+ rasterFileWriter->setPyramidsResampling ( QStringLiteral ( " NEAREST" ) );
293
+ // 5. Tiled mode => true for vrt creation
294
+ rasterFileWriter->setTiledMode ( true );
295
+ // 6. Tile size
296
+ rasterFileWriter->setMaxTileWidth ( 500 );
297
+ rasterFileWriter->setMaxTileHeight ( 500 );
298
+ // 7. Coordinate Reference System
299
+ QgsCoordinateReferenceSystem crs;
300
+ crs.createFromString ( " EPSG:3946" );
301
+ // 8. Prepare raster pipe
302
+ QgsRasterPipe pipe;
303
+ pipe.set ( srcRasterLayer->dataProvider ()->clone () );
304
+ // Let's do it !
305
+ QgsRasterFileWriter::WriterError res = rasterFileWriter->writeRaster ( &pipe, srcRasterLayer->width (), srcRasterLayer->height (), srcRasterLayer->extent (), crs );
306
+ QCOMPARE ( res, QgsRasterFileWriter::NoError );
307
+
308
+ // Now let's compare the georef of the original raster with the georef of the generated vrt file
309
+ std::unique_ptr< QgsRasterLayer > vrtRasterLayer = qgis::make_unique< QgsRasterLayer >( dir.path () + ' /' + rasterFileInfo.completeBaseName () + ' /' + rasterFileInfo.completeBaseName () + QStringLiteral ( " .vrt" ), rasterFileInfo.completeBaseName () );
310
+
311
+ double xminVrt = vrtRasterLayer->extent ().xMinimum ();
312
+ double yminVrt = vrtRasterLayer->extent ().yMaximum ();
313
+ double xminOriginal = srcRasterLayer->extent ().xMinimum ();
314
+ double yminOriginal = srcRasterLayer->extent ().yMaximum ();
315
+
316
+ // Let's check if the georef of the original raster with the georef of the generated vrt file
317
+ QGSCOMPARENEAR ( xminVrt, xminOriginal, srcRasterLayer->rasterUnitsPerPixelX () / 4 );
318
+ QGSCOMPARENEAR ( yminVrt, yminOriginal, srcRasterLayer->rasterUnitsPerPixelY () / 4 );
319
+ }
320
+
274
321
void TestQgsRasterFileWriter::log ( const QString &msg )
275
322
{
276
323
mReport += msg + " <br>" ;
0 commit comments