@@ -58,6 +58,7 @@ class TestQgsGdalProvider : public QObject
58
58
void bandNameWithDescription (); // test band name for when description available (#16047)
59
59
void interactionBetweenRasterChangeAndCache (); // test that updading a raster invalidates the GDAL dataset cache (#20104)
60
60
void scale0 (); // test when data has scale 0 (#20493)
61
+ void transformCoordinates ();
61
62
62
63
private:
63
64
QString mTestDataDir ;
@@ -369,5 +370,34 @@ void TestQgsGdalProvider::scale0()
369
370
delete provider;
370
371
}
371
372
373
+ void TestQgsGdalProvider::transformCoordinates ()
374
+ {
375
+ // Test implementation of QgsRasterDataProvider::transformCoordinates()
376
+ QString raster = QStringLiteral ( TEST_DATA_DIR ) + " /float1-16.tif" ;
377
+ QgsDataProvider *provider = QgsProviderRegistry::instance ()->createProvider ( QStringLiteral ( " gdal" ), raster, QgsDataProvider::ProviderOptions () );
378
+ QgsRasterDataProvider *rp = dynamic_cast < QgsRasterDataProvider * >( provider );
379
+ QVERIFY ( rp );
380
+ QVERIFY ( rp->isValid () );
381
+
382
+ // forward transform - image coordinates to georeferenced coordinates
383
+ QgsPoint pt1Layer = rp->transformCoordinates ( QgsPoint ( 0 , 0 ), QgsRasterDataProvider::TransformImageToLayer ); // bottom-left corner
384
+ QgsPoint pt2Layer = rp->transformCoordinates ( QgsPoint ( 4 , 0 ), QgsRasterDataProvider::TransformImageToLayer );
385
+ QgsPoint pt3Layer = rp->transformCoordinates ( QgsPoint ( 4 , 4 ), QgsRasterDataProvider::TransformImageToLayer ); // top-right corner
386
+
387
+ QCOMPARE ( pt1Layer, QgsPoint ( 106.0 , -7.0 , 0 ) );
388
+ QCOMPARE ( pt2Layer, QgsPoint ( 106.8 , -7.0 , 0 ) );
389
+ QCOMPARE ( pt3Layer, QgsPoint ( 106.8 , -6.2 , 0 ) );
390
+
391
+ // inverse transform - georeferenced coordinates to image coordinates
392
+ QgsPoint pt1Image = rp->transformCoordinates ( QgsPoint ( 106.0 , -7.0 ), QgsRasterDataProvider::TransformLayerToImage ); // bottom-left corner
393
+ QgsPoint pt2Image = rp->transformCoordinates ( QgsPoint ( 106.8 , -7.0 ), QgsRasterDataProvider::TransformLayerToImage );
394
+ QgsPoint pt3Image = rp->transformCoordinates ( QgsPoint ( 106.8 , -6.2 ), QgsRasterDataProvider::TransformLayerToImage ); // top-right corner
395
+
396
+ QCOMPARE ( pt1Image, QgsPoint ( 0 , 0 , 0 ) );
397
+ QCOMPARE ( pt2Image, QgsPoint ( 4 , 0 , 0 ) );
398
+ QCOMPARE ( pt3Image, QgsPoint ( 4 , 4 , 0 ) );
399
+
400
+ }
401
+
372
402
QGSTEST_MAIN ( TestQgsGdalProvider )
373
403
#include " testqgsgdalprovider.moc"
0 commit comments