diff --git a/src/analysis/raster/qgsrastercalculator.cpp b/src/analysis/raster/qgsrastercalculator.cpp index 0769c82e7695..1203d3608574 100644 --- a/src/analysis/raster/qgsrastercalculator.cpp +++ b/src/analysis/raster/qgsrastercalculator.cpp @@ -79,6 +79,11 @@ QgsRasterCalculator::QgsRasterCalculator( const QString &formulaString, const QS , mRasterEntries( rasterEntries ) , mTransformContext( transformContext ) { + //default to first layer's crs + if ( !mRasterEntries.isEmpty() ) + { + mOutputCrs = mRasterEntries.at( 0 ).raster->crs(); + } } QgsRasterCalculator::QgsRasterCalculator( const QString &formulaString, const QString &outputFile, const QString &outputFormat, const QgsRectangle &outputExtent, const QgsCoordinateReferenceSystem &outputCrs, int nOutputColumns, int nOutputRows, const QVector &rasterEntries, const QgsCoordinateTransformContext &transformContext ) @@ -105,7 +110,10 @@ QgsRasterCalculator::QgsRasterCalculator( const QString &formulaString, const QS , mRasterEntries( rasterEntries ) { //default to first layer's crs - mOutputCrs = mRasterEntries.at( 0 ).raster->crs(); + if ( !mRasterEntries.isEmpty() ) + { + mOutputCrs = mRasterEntries.at( 0 ).raster->crs(); + } mTransformContext = QgsProject::instance()->transformContext(); } diff --git a/tests/src/analysis/testqgsrastercalculator.cpp b/tests/src/analysis/testqgsrastercalculator.cpp index 6cfc959da153..1dee37ea0922 100644 --- a/tests/src/analysis/testqgsrastercalculator.cpp +++ b/tests/src/analysis/testqgsrastercalculator.cpp @@ -67,6 +67,7 @@ class TestQgsRasterCalculator : public QgsTest void findNodes(); void testRasterEntries(); + void testOutputCrsFromRasterEntries(); void calcFormulasWithReprojectedLayers(); void testStatistics(); @@ -717,6 +718,30 @@ void TestQgsRasterCalculator::toString() QVERIFY( calcNode == nullptr ); } +void TestQgsRasterCalculator::testOutputCrsFromRasterEntries() +{ + QgsRasterCalculatorEntry entry1; + entry1.bandNumber = 1; + entry1.raster = mpLandsatRasterLayer; + entry1.ref = QStringLiteral( "landsat@0" ); + + QVector entries; + entries << entry1; + + QgsRectangle extent( 783235, 3348110, 783350, 3347960 ); + + QTemporaryFile tmpFile; + tmpFile.open(); // fileName is not available until open + QString tmpName = tmpFile.fileName(); + tmpFile.close(); + + QgsRasterCalculator rc( QStringLiteral( "\"landsat@0\"" ), tmpName, QStringLiteral( "GTiff" ), extent, 2, 3, entries, QgsProject::instance()->transformContext() ); + QCOMPARE( static_cast( rc.processCalculation() ), 0 ); + //open output file and check results + QgsRasterLayer *result = new QgsRasterLayer( tmpName, QStringLiteral( "result" ) ); + QCOMPARE( result->crs(), mpLandsatRasterLayer->crs() ); +} + void TestQgsRasterCalculator::calcFormulasWithReprojectedLayers() { QgsRasterCalculatorEntry entry1;