@@ -65,6 +65,8 @@ class TestQgsRasterCalculator : public QObject
65
65
void testRasterEntries ();
66
66
void calcFormulasWithReprojectedLayers ();
67
67
68
+ void testStatistics ();
69
+
68
70
private:
69
71
70
72
QgsRasterLayer *mpLandsatRasterLayer = nullptr ;
@@ -799,13 +801,13 @@ void TestQgsRasterCalculator::calcFormulasWithReprojectedLayers()
799
801
QgsRasterBlock *block = result->dataProvider ()->block ( 1 , extent, 2 , 3 );
800
802
qDebug () << " Actual:" << block->value ( 0 , 0 ) << block->value ( 0 , 1 ) << block->value ( 1 , 0 ) << block->value ( 1 , 1 ) << block->value ( 2 , 0 ) << block->value ( 2 , 1 );
801
803
qDebug () << " Expected:" << values[0 ] << values[1 ] << values[2 ] << values[3 ] << values[4 ] << values[5 ];
802
- const double epsilon { 0.0001 };
803
- QVERIFY ( qgsDoubleNear ( block->value ( 0 , 0 ), static_cast <double >( values[0 ] ), epsilon ) );
804
- QVERIFY ( qgsDoubleNear ( block->value ( 0 , 1 ), static_cast <double >( values[1 ] ), epsilon ) );
805
- QVERIFY ( qgsDoubleNear ( block->value ( 1 , 0 ), static_cast <double >( values[2 ] ), epsilon ) );
806
- QVERIFY ( qgsDoubleNear ( block->value ( 1 , 1 ), static_cast <double >( values[3 ] ), epsilon ) );
807
- QVERIFY ( qgsDoubleNear ( block->value ( 2 , 0 ), static_cast <double >( values[4 ] ), epsilon ) );
808
- QVERIFY ( qgsDoubleNear ( block->value ( 2 , 1 ), static_cast <double >( values[5 ] ), epsilon ) );
804
+ const double epsilon { 0.001 };
805
+ QVERIFY2 ( qgsDoubleNear ( block->value ( 0 , 0 ), static_cast <double >( values[0 ] ), epsilon ), formula. toUtf8 (). constData ( ) );
806
+ QVERIFY2 ( qgsDoubleNear ( block->value ( 0 , 1 ), static_cast <double >( values[1 ] ), epsilon ), formula. toUtf8 (). constData ( ) );
807
+ QVERIFY2 ( qgsDoubleNear ( block->value ( 1 , 0 ), static_cast <double >( values[2 ] ), epsilon ), formula. toUtf8 (). constData ( ) );
808
+ QVERIFY2 ( qgsDoubleNear ( block->value ( 1 , 1 ), static_cast <double >( values[3 ] ), epsilon ), formula. toUtf8 (). constData ( ) );
809
+ QVERIFY2 ( qgsDoubleNear ( block->value ( 2 , 0 ), static_cast <double >( values[4 ] ), epsilon ), formula. toUtf8 (). constData ( ) );
810
+ QVERIFY2 ( qgsDoubleNear ( block->value ( 2 , 1 ), static_cast <double >( values[5 ] ), epsilon ), formula. toUtf8 (). constData ( ) );
809
811
delete result;
810
812
delete block;
811
813
};
@@ -842,6 +844,38 @@ void TestQgsRasterCalculator::calcFormulasWithReprojectedLayers()
842
844
843
845
}
844
846
847
+ void TestQgsRasterCalculator::testStatistics ()
848
+ {
849
+ QgsRasterCalculatorEntry entry1;
850
+ entry1.bandNumber = 1 ;
851
+ entry1.raster = mpLandsatRasterLayer;
852
+ entry1.ref = QStringLiteral ( " landsat@1" );
853
+
854
+ QTemporaryFile tmpFile;
855
+ tmpFile.open (); // fileName is not available until open
856
+ QString tmpName = tmpFile.fileName ();
857
+ tmpFile.close ();
858
+
859
+ QgsCoordinateReferenceSystem crs ( QStringLiteral ( " EPSG:32633" ) );
860
+ QgsRectangle extent ( 783235 , 3348110 , 783350 , 3347960 );
861
+
862
+ QgsRasterCalculator rc ( QStringLiteral ( " \" landsat@1\" * 2" ),
863
+ tmpName,
864
+ QStringLiteral ( " GTiff" ),
865
+ extent, crs, 2 , 3 , { entry1 },
866
+ QgsProject::instance ()->transformContext () );
867
+ QCOMPARE ( static_cast < int >( rc.processCalculation () ), 0 );
868
+
869
+ // open output file and check stats are there
870
+ auto ds = GDALOpenEx ( tmpName.toUtf8 ().constData (), GDAL_OF_RASTER | GDAL_OF_READONLY, nullptr , nullptr , nullptr );
871
+ auto band = GDALGetRasterBand ( ds, 1 );
872
+ double sMin , sMax , sMean , sStdDev ;
873
+ QCOMPARE ( GDALGetRasterStatistics ( band, true , false , &sMin , &sMax , &sMean , &sStdDev ), CE_None );
874
+ QCOMPARE ( sMin , 248.0 );
875
+ QCOMPARE ( sMax , 250.0 );
876
+
877
+ }
878
+
845
879
846
880
QGSTEST_MAIN ( TestQgsRasterCalculator )
847
881
#include " testqgsrastercalculator.moc"
0 commit comments