Skip to content

Commit eec208c

Browse files
committed
Option to choose output extent for save as raster
1 parent 55ec17a commit eec208c

5 files changed

+135
-10
lines changed

src/app/qgisapp.cpp

+5-2
Original file line numberDiff line numberDiff line change
@@ -3771,7 +3771,7 @@ void QgisApp::saveAsRasterFile()
37713771
return;
37723772
}
37733773

3774-
QgsRasterLayerSaveAsDialog d( rasterLayer->dataProvider() );
3774+
QgsRasterLayerSaveAsDialog d( rasterLayer->dataProvider(), mMapCanvas->extent() );
37753775
if ( d.exec() == QDialog::Accepted )
37763776
{
37773777
QgsRasterFileWriter fileWriter( d.outputFileName() );
@@ -3781,7 +3781,10 @@ void QgisApp::saveAsRasterFile()
37813781
//fileWriter.setMaxTileWidth( d.maximumTileSizeX() );
37823782
//fileWriter.setMaxTileHeight( d.maximumTileSizeY() );
37833783
}
3784-
fileWriter.writeRaster( rasterLayer->dataProvider(), d.nColumns() );
3784+
3785+
QProgressDialog pd( 0, tr( "Abort..." ), 0, 0 );
3786+
pd.setWindowModality( Qt::WindowModal );
3787+
fileWriter.writeRaster( rasterLayer->dataProvider(), d.nColumns(), d.outputRectangle(), &pd );
37853788
}
37863789
}
37873790

src/core/raster/qgsrasterfilewriter.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,6 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeARGBRaster( QgsRaster
260260
{
261261
break;
262262
}
263-
264263
}
265264

266265
//fill into red/green/blue/alpha channels

src/gui/qgsrasterlayersaveasdialog.cpp

+35-2
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
#include "qgsrasterdataprovider.h"
33
#include <QFileDialog>
44

5-
QgsRasterLayerSaveAsDialog::QgsRasterLayerSaveAsDialog( QgsRasterDataProvider* sourceProvider,
5+
QgsRasterLayerSaveAsDialog::QgsRasterLayerSaveAsDialog( QgsRasterDataProvider* sourceProvider, const QgsRectangle& currentExtent,
66
QWidget* parent, Qt::WindowFlags f ): QDialog( parent, f ),
7-
mDataProvider( sourceProvider )
7+
mDataProvider( sourceProvider ), mCurrentExtent( currentExtent )
88

99
{
1010
setupUi( this );
@@ -30,6 +30,9 @@ QgsRasterLayerSaveAsDialog::QgsRasterLayerSaveAsDialog( QgsRasterDataProvider* s
3030
mMaximumSizeXLineEdit->setText( QString::number( 2000 ) );
3131
mMaximumSizeYLineEdit->setText( QString::number( 2000 ) );
3232
}
33+
34+
//extent
35+
setOutputExtent( mCurrentExtent );
3336
}
3437

3538
QPushButton* okButton = mButtonBox->button( QDialogButtonBox::Ok );
@@ -45,6 +48,10 @@ void QgsRasterLayerSaveAsDialog::setValidators()
4548
mRowsLineEdit->setValidator( new QIntValidator( this ) );
4649
mMaximumSizeXLineEdit->setValidator( new QIntValidator( this ) );
4750
mMaximumSizeYLineEdit->setValidator( new QIntValidator( this ) );
51+
mXMinLineEdit->setValidator( new QDoubleValidator( this ) );
52+
mXMaxLineEdit->setValidator( new QDoubleValidator( this ) );
53+
mYMinLineEdit->setValidator( new QDoubleValidator( this ) );
54+
mYMaxLineEdit->setValidator( new QDoubleValidator( this ) );
4855
}
4956

5057
QgsRasterLayerSaveAsDialog::~QgsRasterLayerSaveAsDialog()
@@ -80,6 +87,19 @@ void QgsRasterLayerSaveAsDialog::on_mSaveAsLineEdit_textChanged( const QString&
8087
okButton->setEnabled( QFileInfo( text ).absoluteDir().exists() );
8188
}
8289

90+
void QgsRasterLayerSaveAsDialog::on_mCurrentExtentButton_clicked()
91+
{
92+
setOutputExtent( mCurrentExtent );
93+
}
94+
95+
void QgsRasterLayerSaveAsDialog::on_mProviderExtentButton_clicked()
96+
{
97+
if ( mDataProvider )
98+
{
99+
setOutputExtent( mDataProvider->extent() );
100+
}
101+
}
102+
83103
int QgsRasterLayerSaveAsDialog::nColumns() const
84104
{
85105
return mColumnsLineEdit->text().toInt();
@@ -114,3 +134,16 @@ QString QgsRasterLayerSaveAsDialog::outputFormat() const
114134
{
115135
return ""; //soon...
116136
}
137+
138+
QgsRectangle QgsRasterLayerSaveAsDialog::outputRectangle() const
139+
{
140+
return QgsRectangle( mXMinLineEdit->text().toDouble(), mYMinLineEdit->text().toDouble(), mXMaxLineEdit->text().toDouble(), mYMaxLineEdit->text().toDouble() );
141+
}
142+
143+
void QgsRasterLayerSaveAsDialog::setOutputExtent( const QgsRectangle& r )
144+
{
145+
mXMinLineEdit->setText( QString::number( r.xMinimum() ) );
146+
mXMaxLineEdit->setText( QString::number( r.xMaximum() ) );
147+
mYMinLineEdit->setText( QString::number( r.yMinimum() ) );
148+
mYMaxLineEdit->setText( QString::number( r.yMaximum() ) );
149+
}

src/gui/qgsrasterlayersaveasdialog.h

+7-1
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@
22
#define QGSRASTERLAYERSAVEASDIALOG_H
33

44
#include "ui_qgsrasterlayersaveasdialogbase.h"
5+
#include "qgsrectangle.h"
56

67
class QgsRasterDataProvider;
78

89
class QgsRasterLayerSaveAsDialog: public QDialog, private Ui::QgsRasterLayerSaveAsDialogBase
910
{
1011
Q_OBJECT
1112
public:
12-
QgsRasterLayerSaveAsDialog( QgsRasterDataProvider* sourceProvider, QWidget* parent = 0, Qt::WindowFlags f = 0 );
13+
QgsRasterLayerSaveAsDialog( QgsRasterDataProvider* sourceProvider, const QgsRectangle& currentExtent, QWidget* parent = 0, Qt::WindowFlags f = 0 );
1314
~QgsRasterLayerSaveAsDialog();
1415

1516
int nColumns() const;
@@ -19,15 +20,20 @@ class QgsRasterLayerSaveAsDialog: public QDialog, private Ui::QgsRasterLayerSave
1920
bool tileMode() const;
2021
QString outputFileName() const;
2122
QString outputFormat() const;
23+
QgsRectangle outputRectangle() const;
2224

2325
private slots:
2426
void on_mBrowseButton_clicked();
2527
void on_mSaveAsLineEdit_textChanged( const QString& text );
28+
void on_mCurrentExtentButton_clicked();
29+
void on_mProviderExtentButton_clicked();
2630

2731
private:
2832
QgsRasterDataProvider* mDataProvider;
33+
QgsRectangle mCurrentExtent;
2934

3035
void setValidators();
36+
void setOutputExtent( const QgsRectangle& r );
3137
};
3238

3339
#endif // QGSRASTERLAYERSAVEASDIALOG_H

src/ui/qgsrasterlayersaveasdialogbase.ui

+88-4
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@
77
<x>0</x>
88
<y>0</y>
99
<width>415</width>
10-
<height>248</height>
10+
<height>383</height>
1111
</rect>
1212
</property>
1313
<property name="windowTitle">
1414
<string>Save raster layer as...</string>
1515
</property>
16-
<layout class="QGridLayout" name="gridLayout_2">
16+
<layout class="QGridLayout" name="gridLayout_3">
1717
<item row="0" column="0">
1818
<widget class="QLabel" name="mFormatLabel">
1919
<property name="text">
@@ -79,6 +79,90 @@
7979
</layout>
8080
</item>
8181
<item row="3" column="0" colspan="3">
82+
<widget class="QGroupBox" name="mExtentGroupBox">
83+
<property name="title">
84+
<string>Extent</string>
85+
</property>
86+
<layout class="QGridLayout" name="gridLayout_2">
87+
<item row="0" column="0" colspan="4">
88+
<layout class="QHBoxLayout" name="horizontalLayout_2">
89+
<item>
90+
<widget class="QPushButton" name="mCurrentExtentButton">
91+
<property name="text">
92+
<string>Current Extent</string>
93+
</property>
94+
</widget>
95+
</item>
96+
<item>
97+
<widget class="QPushButton" name="mProviderExtentButton">
98+
<property name="text">
99+
<string>Provider extent</string>
100+
</property>
101+
</widget>
102+
</item>
103+
<item>
104+
<spacer name="horizontalSpacer">
105+
<property name="orientation">
106+
<enum>Qt::Horizontal</enum>
107+
</property>
108+
<property name="sizeHint" stdset="0">
109+
<size>
110+
<width>40</width>
111+
<height>20</height>
112+
</size>
113+
</property>
114+
</spacer>
115+
</item>
116+
</layout>
117+
</item>
118+
<item row="1" column="0">
119+
<widget class="QLabel" name="mXMinLabel">
120+
<property name="text">
121+
<string>X min</string>
122+
</property>
123+
</widget>
124+
</item>
125+
<item row="1" column="1">
126+
<widget class="QLineEdit" name="mXMinLineEdit"/>
127+
</item>
128+
<item row="1" column="2">
129+
<widget class="QLabel" name="mXMaxLabel">
130+
<property name="text">
131+
<string>X max</string>
132+
</property>
133+
</widget>
134+
</item>
135+
<item row="1" column="3">
136+
<widget class="QLineEdit" name="mXMaxLineEdit"/>
137+
</item>
138+
<item row="2" column="0">
139+
<widget class="QLabel" name="mYMinLabel">
140+
<property name="text">
141+
<string>Y min</string>
142+
</property>
143+
</widget>
144+
</item>
145+
<item row="2" column="1">
146+
<widget class="QLineEdit" name="mYMinLineEdit"/>
147+
</item>
148+
<item row="2" column="2">
149+
<widget class="QLabel" name="mYMaxLabel">
150+
<property name="text">
151+
<string>Y max</string>
152+
</property>
153+
</widget>
154+
</item>
155+
<item row="2" column="3">
156+
<widget class="QLineEdit" name="mYMaxLineEdit">
157+
<property name="text">
158+
<string/>
159+
</property>
160+
</widget>
161+
</item>
162+
</layout>
163+
</widget>
164+
</item>
165+
<item row="4" column="0" colspan="3">
82166
<widget class="QGroupBox" name="mTilesGroupBox">
83167
<property name="title">
84168
<string>Tiles</string>
@@ -107,14 +191,14 @@
107191
<item row="2" column="0" colspan="2">
108192
<widget class="QCheckBox" name="mTileModeCheckBox">
109193
<property name="text">
110-
<string>One output file per tile</string>
194+
<string>Create VRT</string>
111195
</property>
112196
</widget>
113197
</item>
114198
</layout>
115199
</widget>
116200
</item>
117-
<item row="4" column="0" colspan="2">
201+
<item row="5" column="0" colspan="2">
118202
<widget class="QDialogButtonBox" name="mButtonBox">
119203
<property name="orientation">
120204
<enum>Qt::Horizontal</enum>

0 commit comments

Comments
 (0)