Use Even's code suggestions + add tests

This commit is contained in:
Martin Dobias 2022-01-12 14:41:38 +01:00
parent 49f0059a9d
commit dda53897a2
8 changed files with 41 additions and 6 deletions

View File

@ -2999,20 +2999,23 @@ void QgsGdalProvider::initBaseDataset()
{
QgsLogger::warning( QStringLiteral( "Creating Warped VRT." ) );
// Add alpha band to the output VRT dataset if it does not exist already
// so that pixels in empty regions (e.g. when the raster is rotated) will be transparent
gdal::warp_options_unique_ptr psWarpOptions( GDALCreateWarpOptions() );
if ( GDALGetRasterColorInterpretation( GDALGetRasterBand( mGdalBaseDataset, GDALGetRasterCount( mGdalBaseDataset ) ) ) != GCI_AlphaBand )
{
psWarpOptions->nDstAlphaBand = GDALGetRasterCount( mGdalBaseDataset ) + 1;
}
if ( GDALGetMetadata( mGdalBaseDataset, "RPC" ) )
{
mGdalDataset =
QgsGdalUtils::rpcAwareAutoCreateWarpedVrt( mGdalBaseDataset, nullptr, nullptr,
GRA_NearestNeighbour, 0.2, nullptr );
GRA_NearestNeighbour, 0.2, psWarpOptions.get() );
mGdalTransformerArg = QgsGdalUtils::rpcAwareCreateTransformer( mGdalBaseDataset );
}
else
{
// Add alpha band to the output VRT dataset so that pixels in empty regions
// (e.g. when the raster is rotated) will be transparent
gdal::warp_options_unique_ptr psWarpOptions( GDALCreateWarpOptions() );
psWarpOptions->nDstAlphaBand = GDALGetRasterCount( mGdalBaseDataset ) + 1;
mGdalDataset =
GDALAutoCreateWarpedVRT( mGdalBaseDataset, nullptr, nullptr,
GRA_NearestNeighbour, 0.2, psWarpOptions.get() );

View File

@ -100,6 +100,7 @@ class TestQgsRasterLayer : public QObject
void testRefreshRendererIfNeeded();
void sample();
void testTemporalProperties();
void rotatedRaster();
private:
@ -1040,5 +1041,24 @@ void TestQgsRasterLayer::testTemporalProperties()
QCOMPARE( temporalProperties->fixedTemporalRange().end(), dateTimeRange.end() );
}
void TestQgsRasterLayer::rotatedRaster()
{
mMapSettings->setExtent( QgsRectangle( 994, 922, 1174, 1102 ) );
std::unique_ptr< QgsRasterLayer> rgb = std::make_unique< QgsRasterLayer >( mTestDataDir + "raster/rotated_rgb.png",
QStringLiteral( "rgb" ) );
QVERIFY( rgb->isValid() );
mMapSettings->setLayers( QList<QgsMapLayer *>() << rgb.get() );
QVERIFY( render( QStringLiteral( "raster_rotated_rgb" ) ) );
std::unique_ptr< QgsRasterLayer> rgba = std::make_unique< QgsRasterLayer >( mTestDataDir + "raster/rotated_rgba.png",
QStringLiteral( "rgba" ) );
QVERIFY( rgba->isValid() );
mMapSettings->setLayers( QList<QgsMapLayer *>() << rgba.get() );
QVERIFY( render( QStringLiteral( "raster_rotated_rgba" ) ) );
}
QGSTEST_MAIN( TestQgsRasterLayer )
#include "testqgsrasterlayer.moc"

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

BIN
tests/testdata/raster/rotated_rgb.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 321 B

View File

@ -0,0 +1,6 @@
0.72744
0.97092
0.97092
-0.7274
1000
1000

BIN
tests/testdata/raster/rotated_rgba.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 722 B

View File

@ -0,0 +1,6 @@
0.72744
0.97092
0.97092
-0.7274
1000
1000