diff --git a/src/app/qgisapp.cpp b/src/app/qgisapp.cpp index 57b43c754882..a38b293f788c 100644 --- a/src/app/qgisapp.cpp +++ b/src/app/qgisapp.cpp @@ -3924,7 +3924,7 @@ void QgisApp::saveAsRasterFile() return; } - QgsRasterLayerSaveAsDialog d( rasterLayer->dataProvider(), mMapCanvas->extent(), mMapCanvas->mapRenderer()->destinationCrs() ); + QgsRasterLayerSaveAsDialog d( rasterLayer->dataProvider(), mMapCanvas->extent(), rasterLayer->crs(), mMapCanvas->mapRenderer()->destinationCrs() ); if ( d.exec() == QDialog::Accepted ) { QgsRasterFileWriter fileWriter( d.outputFileName() ); diff --git a/src/gui/qgsrasterlayersaveasdialog.cpp b/src/gui/qgsrasterlayersaveasdialog.cpp index 70a9e34eb658..520ec5fc5809 100644 --- a/src/gui/qgsrasterlayersaveasdialog.cpp +++ b/src/gui/qgsrasterlayersaveasdialog.cpp @@ -9,11 +9,13 @@ #include QgsRasterLayerSaveAsDialog::QgsRasterLayerSaveAsDialog( QgsRasterDataProvider* sourceProvider, const QgsRectangle& currentExtent, + const QgsCoordinateReferenceSystem& layerCrs, const QgsCoordinateReferenceSystem& currentCrs, QWidget* parent, Qt::WindowFlags f ): QDialog( parent, f ) , mDataProvider( sourceProvider ) , mCurrentExtent( currentExtent ) + , mLayerCrs( layerCrs ) , mCurrentCrs( currentCrs ) , mExtentState( OriginalExtent ) , mResolutionState( OriginalResolution ) @@ -40,7 +42,7 @@ QgsRasterLayerSaveAsDialog::QgsRasterLayerSaveAsDialog( QgsRasterDataProvider* s if ( mDataProvider ) { //extent - setOutputExtent( mDataProvider->extent(), mDataProvider->crs(), OriginalExtent ); + setOutputExtent( mDataProvider->extent(), mLayerCrs, OriginalExtent ); if ( mDataProvider->capabilities() & QgsRasterDataProvider::ExactResolution ) { @@ -130,7 +132,7 @@ void QgsRasterLayerSaveAsDialog::on_mOriginalExtentButton_clicked() { if ( mDataProvider ) { - setOutputExtent( mDataProvider->extent(), mDataProvider->crs(), OriginalExtent ); + setOutputExtent( mDataProvider->extent(), mLayerCrs, OriginalExtent ); } } @@ -266,7 +268,7 @@ void QgsRasterLayerSaveAsDialog::setOriginalResolution() // Init to something if no original resolution is available xRes = yRes = mDataProvider->extent().width() / 100; } - setResolution( xRes, yRes, mDataProvider->crs() ); + setResolution( xRes, yRes, mLayerCrs ); mResolutionState = OriginalResolution; recalcSize(); } @@ -414,7 +416,7 @@ void QgsRasterLayerSaveAsDialog::crsChanged() if ( mExtentState == OriginalExtent ) { previousExtent = mDataProvider->extent(); - previousCrs = mDataProvider->crs(); + previousCrs = mLayerCrs; } else if ( mExtentState == CurrentExtent ) { @@ -456,7 +458,7 @@ void QgsRasterLayerSaveAsDialog::updateCrsGroup() QgsDebugMsg( "Entered" ); mCrsComboBox->setItemText( mCrsComboBox->findData( OriginalCrs ), - tr( "Layer" ) + " (" + mDataProvider->crs().description() + ", " + mDataProvider->crs().authid() + ")" ); + tr( "Layer" ) + " (" + mLayerCrs.description() + ", " + mLayerCrs.authid() + ")" ); mCrsComboBox->setItemText( mCrsComboBox->findData( CurrentCrs ), tr( "Project" ) + " (" + mCurrentCrs.description() + ", " + mCurrentCrs.authid() + ")" ); @@ -470,7 +472,7 @@ QgsCoordinateReferenceSystem QgsRasterLayerSaveAsDialog::outputCrs() int state = mCrsComboBox->itemData( mCrsComboBox->currentIndex() ).toInt(); if ( state == OriginalCrs ) { - return mDataProvider->crs(); + return mLayerCrs; } else if ( state == CurrentCrs ) { diff --git a/src/gui/qgsrasterlayersaveasdialog.h b/src/gui/qgsrasterlayersaveasdialog.h index e874242fb9c6..17037257d00b 100644 --- a/src/gui/qgsrasterlayersaveasdialog.h +++ b/src/gui/qgsrasterlayersaveasdialog.h @@ -35,7 +35,7 @@ class GUI_EXPORT QgsRasterLayerSaveAsDialog: public QDialog, private Ui::QgsRast UserResolution }; - QgsRasterLayerSaveAsDialog( QgsRasterDataProvider* sourceProvider, const QgsRectangle& currentExtent, const QgsCoordinateReferenceSystem& currentCrs, QWidget* parent = 0, Qt::WindowFlags f = 0 ); + QgsRasterLayerSaveAsDialog( QgsRasterDataProvider* sourceProvider, const QgsRectangle& currentExtent, const QgsCoordinateReferenceSystem& layerCrs, const QgsCoordinateReferenceSystem& currentCrs, QWidget* parent = 0, Qt::WindowFlags f = 0 ); ~QgsRasterLayerSaveAsDialog(); Mode mode() const; @@ -82,6 +82,7 @@ class GUI_EXPORT QgsRasterLayerSaveAsDialog: public QDialog, private Ui::QgsRast private: QgsRasterDataProvider* mDataProvider; QgsRectangle mCurrentExtent; + QgsCoordinateReferenceSystem mLayerCrs; // may differ from provider CRS QgsCoordinateReferenceSystem mCurrentCrs; QgsCoordinateReferenceSystem mUserCrs; QgsCoordinateReferenceSystem mPreviousCrs;