@@ -5538,110 +5538,118 @@ void QgisApp::saveAsRasterFile()
5538
5538
mMapCanvas ->extent (), rasterLayer->crs (),
5539
5539
mMapCanvas ->mapSettings ().destinationCrs (),
5540
5540
this );
5541
- if ( d.exec () == QDialog::Accepted )
5542
- {
5543
- QSettings settings;
5544
- settings.setValue ( " /UI/lastRasterFileDir" , QFileInfo ( d.outputFileName () ).absolutePath () );
5541
+ if ( d.exec () == QDialog::Rejected )
5542
+ return ;
5545
5543
5546
- QgsRasterFileWriter fileWriter ( d.outputFileName () );
5547
- if ( d.tileMode () )
5548
- {
5549
- fileWriter.setTiledMode ( true );
5550
- fileWriter.setMaxTileWidth ( d.maximumTileSizeX () );
5551
- fileWriter.setMaxTileHeight ( d.maximumTileSizeY () );
5552
- }
5544
+ QSettings settings;
5545
+ settings.setValue ( " /UI/lastRasterFileDir" , QFileInfo ( d.outputFileName () ).absolutePath () );
5553
5546
5554
- QProgressDialog pd ( nullptr , tr ( " Abort..." ), 0 , 0 );
5555
- // Show the dialo immediately because cloning pipe can take some time (WCS)
5556
- pd.setLabelText ( tr ( " Reading raster" ) );
5557
- pd.setWindowTitle ( tr ( " Saving raster" ) );
5558
- pd.show ();
5559
- pd.setWindowModality ( Qt::WindowModal );
5547
+ QgsRasterFileWriter fileWriter ( d.outputFileName () );
5548
+ if ( d.tileMode () )
5549
+ {
5550
+ fileWriter.setTiledMode ( true );
5551
+ fileWriter.setMaxTileWidth ( d.maximumTileSizeX () );
5552
+ fileWriter.setMaxTileHeight ( d.maximumTileSizeY () );
5553
+ }
5560
5554
5561
- // TODO: show error dialogs
5562
- // TODO: this code should go somewhere else, but probably not into QgsRasterFileWriter
5563
- // clone pipe/provider is not really necessary, ready for threads
5564
- QScopedPointer<QgsRasterPipe> pipe ( nullptr );
5555
+ QProgressDialog pd ( nullptr , tr ( " Abort..." ), 0 , 0 );
5556
+ // Show the dialo immediately because cloning pipe can take some time (WCS)
5557
+ pd.setLabelText ( tr ( " Reading raster" ) );
5558
+ pd.setWindowTitle ( tr ( " Saving raster" ) );
5559
+ pd.show ();
5560
+ pd.setWindowModality ( Qt::WindowModal );
5565
5561
5566
- if ( d.mode () == QgsRasterLayerSaveAsDialog::RawDataMode )
5567
- {
5568
- QgsDebugMsg ( " Writing raw data" );
5569
- // QgsDebugMsg( QString( "Writing raw data" ).arg( pos ) );
5570
- pipe.reset ( new QgsRasterPipe () );
5571
- if ( !pipe->set ( rasterLayer->dataProvider ()->clone () ) )
5572
- {
5573
- QgsDebugMsg ( " Cannot set pipe provider" );
5574
- return ;
5575
- }
5562
+ // TODO: show error dialogs
5563
+ // TODO: this code should go somewhere else, but probably not into QgsRasterFileWriter
5564
+ // clone pipe/provider is not really necessary, ready for threads
5565
+ QScopedPointer<QgsRasterPipe> pipe ( nullptr );
5576
5566
5577
- QgsRasterNuller *nuller = new QgsRasterNuller ();
5578
- for ( int band = 1 ; band <= rasterLayer-> dataProvider ()-> bandCount (); band ++ )
5579
- {
5580
- nuller-> setNoData ( band, d. noData ( ) );
5581
- }
5582
- if ( !pipe->insert ( 1 , nuller ) )
5583
- {
5584
- QgsDebugMsg ( " Cannot set pipe nuller " );
5585
- return ;
5586
- }
5567
+ if ( d. mode () == QgsRasterLayerSaveAsDialog::RawDataMode )
5568
+ {
5569
+ QgsDebugMsg ( " Writing raw data " );
5570
+ // QgsDebugMsg( QString( "Writing raw data" ).arg( pos ) );
5571
+ pipe. reset ( new QgsRasterPipe () );
5572
+ if ( !pipe->set ( rasterLayer-> dataProvider ()-> clone () ) )
5573
+ {
5574
+ QgsDebugMsg ( " Cannot set pipe provider " );
5575
+ return ;
5576
+ }
5587
5577
5588
- // add projector if necessary
5589
- if ( d.outputCrs () != rasterLayer->crs () )
5590
- {
5591
- QgsRasterProjector * projector = new QgsRasterProjector;
5592
- projector->setCRS ( rasterLayer->crs (), d.outputCrs () );
5593
- if ( !pipe->insert ( 2 , projector ) )
5594
- {
5595
- QgsDebugMsg ( " Cannot set pipe projector" );
5596
- return ;
5597
- }
5598
- }
5578
+ QgsRasterNuller *nuller = new QgsRasterNuller ();
5579
+ for ( int band = 1 ; band <= rasterLayer->dataProvider ()->bandCount (); band ++ )
5580
+ {
5581
+ nuller->setNoData ( band, d.noData () );
5599
5582
}
5600
- else // RenderedImageMode
5583
+ if ( !pipe-> insert ( 1 , nuller ) )
5601
5584
{
5602
- // clone the whole pipe
5603
- QgsDebugMsg ( " Writing rendered image" );
5604
- pipe.reset ( new QgsRasterPipe ( *rasterLayer->pipe () ) );
5605
- QgsRasterProjector *projector = pipe->projector ();
5606
- if ( !projector )
5585
+ QgsDebugMsg ( " Cannot set pipe nuller" );
5586
+ return ;
5587
+ }
5588
+
5589
+ // add projector if necessary
5590
+ if ( d.outputCrs () != rasterLayer->crs () )
5591
+ {
5592
+ QgsRasterProjector * projector = new QgsRasterProjector;
5593
+ projector->setCRS ( rasterLayer->crs (), d.outputCrs () );
5594
+ if ( !pipe->insert ( 2 , projector ) )
5607
5595
{
5608
- QgsDebugMsg ( " Cannot get pipe projector" );
5596
+ QgsDebugMsg ( " Cannot set pipe projector" );
5609
5597
return ;
5610
5598
}
5611
- projector->setCRS ( rasterLayer->crs (), d.outputCrs () );
5612
5599
}
5613
-
5614
- if ( !pipe->last () )
5600
+ }
5601
+ else // RenderedImageMode
5602
+ {
5603
+ // clone the whole pipe
5604
+ QgsDebugMsg ( " Writing rendered image" );
5605
+ pipe.reset ( new QgsRasterPipe ( *rasterLayer->pipe () ) );
5606
+ QgsRasterProjector *projector = pipe->projector ();
5607
+ if ( !projector )
5615
5608
{
5609
+ QgsDebugMsg ( " Cannot get pipe projector" );
5616
5610
return ;
5617
5611
}
5618
- fileWriter.setCreateOptions ( d.createOptions () );
5612
+ projector->setCRS ( rasterLayer->crs (), d.outputCrs () );
5613
+ }
5619
5614
5620
- fileWriter. setBuildPyramidsFlag ( d. buildPyramidsFlag () );
5621
- fileWriter. setPyramidsList ( d. pyramidsList () );
5622
- fileWriter. setPyramidsResampling ( d. pyramidsResamplingMethod () ) ;
5623
- fileWriter. setPyramidsFormat ( d. pyramidsFormat () );
5624
- fileWriter.setPyramidsConfigOptions ( d.pyramidsConfigOptions () );
5615
+ if ( !pipe-> last () )
5616
+ {
5617
+ return ;
5618
+ }
5619
+ fileWriter.setCreateOptions ( d.createOptions () );
5625
5620
5626
- QgsRasterFileWriter::WriterError err = fileWriter.writeRaster ( pipe.data (), d.nColumns (), d.nRows (), d.outputRectangle (), d.outputCrs (), &pd );
5627
- if ( err != QgsRasterFileWriter::NoError )
5628
- {
5629
- QMessageBox::warning ( this , tr ( " Error" ),
5630
- tr ( " Cannot write raster error code: %1" ).arg ( err ),
5631
- QMessageBox::Ok );
5621
+ fileWriter.setBuildPyramidsFlag ( d.buildPyramidsFlag () );
5622
+ fileWriter.setPyramidsList ( d.pyramidsList () );
5623
+ fileWriter.setPyramidsResampling ( d.pyramidsResamplingMethod () );
5624
+ fileWriter.setPyramidsFormat ( d.pyramidsFormat () );
5625
+ fileWriter.setPyramidsConfigOptions ( d.pyramidsConfigOptions () );
5632
5626
5627
+ QgsRasterFileWriter::WriterError err = fileWriter.writeRaster ( pipe.data (), d.nColumns (), d.nRows (), d.outputRectangle (), d.outputCrs (), &pd );
5628
+ if ( err != QgsRasterFileWriter::NoError )
5629
+ {
5630
+ QMessageBox::warning ( this , tr ( " Error" ),
5631
+ tr ( " Cannot write raster error code: %1" ).arg ( err ),
5632
+ QMessageBox::Ok );
5633
+
5634
+ }
5635
+ else
5636
+ {
5637
+ QString fileName ( d.outputFileName () );
5638
+ if ( d.tileMode () )
5639
+ {
5640
+ QFileInfo outputInfo ( fileName );
5641
+ fileName = QString ( " %1/%2.vrt" ).arg ( fileName, outputInfo.fileName () );
5633
5642
}
5634
- else
5643
+
5644
+ if ( d.addToCanvas () )
5635
5645
{
5636
- if ( d.addToCanvas () )
5637
- {
5638
- addRasterLayers ( QStringList ( d.outputFileName () ) );
5639
- }
5640
- emit layerSavedAs ( rasterLayer, d.outputFileName () );
5641
- messageBar ()->pushMessage ( tr ( " Saving done" ),
5642
- tr ( " Export to raster file has been completed" ),
5643
- QgsMessageBar::INFO, messageTimeout () );
5646
+ addRasterLayers ( QStringList ( fileName ) );
5644
5647
}
5648
+
5649
+ emit layerSavedAs ( rasterLayer, fileName );
5650
+ messageBar ()->pushMessage ( tr ( " Saving done" ),
5651
+ tr ( " Export to raster file has been completed" ),
5652
+ QgsMessageBar::INFO, messageTimeout () );
5645
5653
}
5646
5654
}
5647
5655
0 commit comments