Skip to content

Commit ad45f32

Browse files
committed
Merge pull request #2394 from PedroVenancio
2 parents 3d93237 + 22aea32 commit ad45f32

File tree

4 files changed

+300
-64
lines changed

4 files changed

+300
-64
lines changed

python/plugins/GdalTools/tools/GdalTools_utils.py

+16
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,22 @@ def getRasterExtent(parent, fileName):
364364
return QgsRectangle(xUL, yLR, xLR, yUL)
365365

366366

367+
# get raster resolution
368+
369+
def getRasterResolution(fileName):
370+
ds = gdal.Open(fileName)
371+
if ds is None:
372+
return
373+
374+
gt = ds.GetGeoTransform()
375+
376+
if gt is None:
377+
return
378+
else:
379+
xRes = abs(gt[1])
380+
yRes = abs(gt[5])
381+
return (xRes, yRes)
382+
367383
# This class is used to replace the QFileDialog class.
368384
# Its static methods are used in place of the respective QFileDialog ones to:
369385
# 1. set the last used directory

python/plugins/GdalTools/tools/doClipper.py

+36-10
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
from widgetPluginBase import GdalToolsBasePluginWidget as BasePluginWidget
3232
import GdalTools_utils as Utils
3333

34-
3534
class GdalToolsDialog(QWidget, Ui_Widget, BasePluginWidget):
3635

3736
def __init__(self, iface):
@@ -46,12 +45,18 @@ def __init__(self, iface):
4645
self.extentSelector.setCanvas(self.canvas)
4746
self.outputFormat = Utils.fillRasterOutputFormat()
4847

48+
# set the default QDoubleSpinBoxes
49+
self.xRes.setValue(12.5)
50+
self.yRes.setValue(12.5)
51+
4952
self.setParamsStatus([
5053
(self.inSelector, SIGNAL("filenameChanged()")),
5154
(self.outSelector, SIGNAL("filenameChanged()")),
5255
(self.noDataSpin, SIGNAL("valueChanged(int)"), self.noDataCheck, 1700),
5356
(self.maskSelector, SIGNAL("filenameChanged()"), self.maskModeRadio, 1600),
54-
(self.alphaBandCheck, SIGNAL("stateChanged( int )")),
57+
(self.alphaBandCheck, SIGNAL("stateChanged(int)")),
58+
(self.cropToCutlineCheck, SIGNAL("stateChanged(int)")),
59+
([self.xRes, self.yRes], SIGNAL("valueChanged(double)"), self.setResolutionRadio),
5560
(self.extentSelector, [SIGNAL("selectionStarted()"), SIGNAL("newExtentDefined()")], self.extentModeRadio),
5661
(self.modeStackedWidget, SIGNAL("currentIndexChanged(int)"))
5762
])
@@ -63,9 +68,11 @@ def __init__(self, iface):
6368
self.connect(self.extentSelector, SIGNAL("selectionStarted()"), self.checkRun)
6469

6570
self.connect(self.extentModeRadio, SIGNAL("toggled(bool)"), self.switchClippingMode)
71+
self.connect(self.keepResolutionRadio, SIGNAL("toggled(bool)"), self.switchResolutionMode)
6672

6773
def show_(self):
6874
self.switchClippingMode()
75+
self.switchResolutionMode()
6976
BasePluginWidget.show_(self)
7077

7178
def onClosing(self):
@@ -82,6 +89,12 @@ def switchClippingMode(self):
8289
self.modeStackedWidget.setCurrentIndex(index)
8390
self.checkRun()
8491

92+
def switchResolutionMode(self):
93+
if self.keepResolutionRadio.isChecked():
94+
self.resolutionWidget.hide()
95+
else:
96+
self.resolutionWidget.show()
97+
8598
def checkRun(self):
8699
if self.extentModeRadio.isChecked():
87100
enabler = self.extentSelector.isCoordsValid()
@@ -135,47 +148,60 @@ def getArguments(self):
135148

136149
def getArgsModeExtent(self):
137150
self.base.setPluginCommand("gdal_translate")
151+
inputFn = self.getInputFileName()
138152
arguments = []
139153
if self.noDataCheck.isChecked():
140154
arguments.append("-a_nodata")
141155
arguments.append(unicode(self.noDataSpin.value()))
142156
if self.extentModeRadio.isChecked() and self.extentSelector.isCoordsValid():
143157
rect = self.extentSelector.getExtent()
144-
if rect is not None:
158+
if rect is not None and not inputFn == '':
145159
arguments.append("-projwin")
146160
arguments.append(unicode(rect.xMinimum()))
147161
arguments.append(unicode(rect.yMaximum()))
148162
arguments.append(unicode(rect.xMaximum()))
149163
arguments.append(unicode(rect.yMinimum()))
150-
if not self.getOutputFileName() == '':
164+
outputFn = self.getOutputFileName()
165+
if not outputFn == '':
151166
arguments.append("-of")
152167
arguments.append(self.outputFormat)
153-
arguments.append(self.getInputFileName())
154-
arguments.append(self.getOutputFileName())
168+
arguments.append(inputFn)
169+
arguments.append(outputFn)
155170
return arguments
156171

157172
def getArgsModeMask(self):
158173
self.base.setPluginCommand("gdalwarp")
174+
inputFn = self.getInputFileName()
159175
arguments = []
160176
if self.noDataCheck.isChecked():
161177
arguments.append("-dstnodata")
162178
arguments.append(unicode(self.noDataSpin.value()))
163179
if self.maskModeRadio.isChecked():
164180
mask = self.maskSelector.filename()
165-
if not mask == '':
181+
if not mask == '' and not inputFn == '':
166182
arguments.append("-q")
167183
arguments.append("-cutline")
168184
arguments.append(mask)
169185
if Utils.GdalConfig.versionNum() >= 1800:
170-
arguments.append("-crop_to_cutline")
186+
if self.cropToCutlineCheck.isChecked():
187+
arguments.append("-crop_to_cutline")
171188
if self.alphaBandCheck.isChecked():
172189
arguments.append("-dstalpha")
173-
190+
if self.keepResolutionRadio.isChecked():
191+
resolution = Utils.getRasterResolution(inputFn)
192+
if resolution is not None:
193+
arguments.append("-tr")
194+
arguments.append(resolution[0])
195+
arguments.append(resolution[1])
196+
else:
197+
arguments.append("-tr")
198+
arguments.append(unicode(self.xRes.value()))
199+
arguments.append(unicode(self.yRes.value()))
174200
outputFn = self.getOutputFileName()
175201
if not outputFn == '':
176202
arguments.append("-of")
177203
arguments.append(self.outputFormat)
178-
arguments.append(self.getInputFileName())
204+
arguments.append(inputFn)
179205
arguments.append(outputFn)
180206
return arguments
181207

0 commit comments

Comments
 (0)