Skip to content

Commit d463178

Browse files
committed
Port gdal translate alg to new api
1 parent a29e378 commit d463178

File tree

3 files changed

+62
-59
lines changed

3 files changed

+62
-59
lines changed

python/plugins/processing/algs/gdal/GdalAlgorithmProvider.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,11 @@
3939
from .ColorRelief import ColorRelief
4040
from .information import information
4141
from .rgb2pct import rgb2pct
42+
from .translate import translate
4243
from .tri import tri
4344
from .warp import warp
4445
from .nearblack import nearblack
4546

46-
# from .translate import translate
4747
# from .pct2rgb import pct2rgb
4848
# from .merge import merge
4949
# from .polygonize import polygonize
@@ -148,10 +148,9 @@ def loadAlgorithms(self):
148148
information(),
149149
nearblack(),
150150
rgb2pct(),
151+
translate(),
151152
tri(),
152153
warp(),
153-
# translate(),
154-
#
155154
# pct2rgb(),
156155
# merge(),
157156
# polygonize(),

python/plugins/processing/algs/gdal/GdalUtils.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,8 @@ def getFormatShortNameFromFilename(filename):
193193
def escapeAndJoin(strList):
194194
joined = ''
195195
for s in strList:
196+
if not isinstance(s, str):
197+
s = str(s)
196198
if s and s[0] != '-' and ' ' in s:
197199
escaped = '"' + s.replace('\\', '\\\\').replace('"', '\\"') \
198200
+ '"'

python/plugins/processing/algs/gdal/translate.py

Lines changed: 58 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,16 @@
3030

3131
from qgis.PyQt.QtGui import QIcon
3232

33+
from qgis.core import (QgsProcessingParameterRasterLayer,
34+
QgsProcessingParameterNumber,
35+
QgsProcessingParameterBoolean,
36+
QgsProcessingParameterString,
37+
QgsProcessingParameterEnum,
38+
QgsProcessingParameterCrs,
39+
QgsProcessingParameterExtent,
40+
QgsProcessingParameterRasterDestination,
41+
QgsProcessingUtils)
3342
from processing.algs.gdal.GdalAlgorithm import GdalAlgorithm
34-
from processing.core.parameters import (ParameterRaster,
35-
ParameterString,
36-
ParameterNumber,
37-
ParameterBoolean,
38-
ParameterSelection,
39-
ParameterExtent,
40-
ParameterCrs)
41-
from processing.core.outputs import OutputRaster
4243

4344
from processing.algs.gdal.GdalUtils import GdalUtils
4445

@@ -67,34 +68,35 @@ def __init__(self):
6768
super().__init__()
6869

6970
def initAlgorithm(self, config=None):
70-
self.addParameter(ParameterRaster(self.INPUT, self.tr('Input layer')))
71-
self.addParameter(ParameterNumber(self.OUTSIZE,
72-
self.tr('Set the size of the output file (In pixels or %)'),
73-
1, None, 100))
74-
self.addParameter(ParameterBoolean(self.OUTSIZE_PERC,
75-
self.tr('Output size is a percentage of input size'), True))
76-
self.addParameter(ParameterString(self.NO_DATA,
77-
self.tr("Nodata value, leave blank to take the nodata value from input"),
78-
'', optional=True))
79-
self.addParameter(ParameterSelection(self.EXPAND,
80-
self.tr('Expand'), ['none', 'gray', 'rgb', 'rgba'], default=0))
81-
self.addParameter(ParameterCrs(self.SRS,
82-
self.tr('Output projection for output file [leave blank to use input projection]'), None, optional=True))
83-
self.addParameter(ParameterExtent(self.PROJWIN,
84-
self.tr('Subset based on georeferenced coordinates'), optional=True))
85-
self.addParameter(ParameterBoolean(self.SDS,
86-
self.tr('Copy all subdatasets of this file to individual output files'),
87-
False))
88-
89-
self.addParameter(ParameterString(self.OPTIONS,
90-
self.tr('Additional creation options'),
91-
optional=True,
92-
metadata={'widget_wrapper': 'processing.algs.gdal.ui.RasterOptionsWidget.RasterOptionsWidgetWrapper'}))
93-
self.addParameter(ParameterSelection(self.RTYPE,
94-
self.tr('Output raster type'),
95-
self.TYPE, 5))
96-
97-
self.addOutput(OutputRaster(self.OUTPUT, self.tr('Converted')))
71+
self.addParameter(QgsProcessingParameterRasterLayer(self.INPUT, self.tr('Input layer')))
72+
self.addParameter(QgsProcessingParameterNumber(self.OUTSIZE,
73+
self.tr('Set the size of the output file (In pixels or %)'),
74+
minValue=1, defaultValue=100))
75+
self.addParameter(QgsProcessingParameterBoolean(self.OUTSIZE_PERC,
76+
self.tr('Output size is a percentage of input size'), defaultValue=True))
77+
self.addParameter(QgsProcessingParameterString(self.NO_DATA,
78+
self.tr("Nodata value, leave blank to take the nodata value from input"),
79+
defaultValue='', optional=True))
80+
self.addParameter(QgsProcessingParameterEnum(self.EXPAND,
81+
self.tr('Expand'), options=['none', 'gray', 'rgb', 'rgba'], defaultValue=0))
82+
self.addParameter(QgsProcessingParameterCrs(self.SRS,
83+
self.tr('Output projection for output file [leave blank to use input projection]'), defaultValue=None, optional=True))
84+
self.addParameter(QgsProcessingParameterExtent(self.PROJWIN,
85+
self.tr('Subset based on georeferenced coordinates'), optional=True))
86+
self.addParameter(QgsProcessingParameterBoolean(self.SDS,
87+
self.tr('Copy all subdatasets of this file to individual output files'),
88+
defaultValue=False))
89+
90+
create_options_param = QgsProcessingParameterString(self.OPTIONS,
91+
self.tr('Additional creation options'),
92+
optional=True)
93+
create_options_param.setMetadata({'widget_wrapper': 'processing.algs.gdal.ui.RasterOptionsWidget.RasterOptionsWidgetWrapper'})
94+
self.addParameter(create_options_param)
95+
self.addParameter(QgsProcessingParameterEnum(self.RTYPE,
96+
self.tr('Output raster type'),
97+
options=self.TYPE, defaultValue=5))
98+
99+
self.addParameter(QgsProcessingParameterRasterDestination(self.OUTPUT, self.tr('Converted')))
98100

99101
def name(self):
100102
return 'translate'
@@ -106,18 +108,19 @@ def group(self):
106108
return self.tr('Raster conversion')
107109

108110
def getConsoleCommands(self, parameters, context, feedback):
109-
inLayer = self.getParameterValue(self.INPUT)
110-
out = self.getOutputValue(translate.OUTPUT)
111-
outsize = str(self.getParameterValue(self.OUTSIZE))
112-
outsizePerc = str(self.getParameterValue(self.OUTSIZE_PERC))
113-
noData = self.getParameterValue(self.NO_DATA)
114-
expand = parameters[self.EXPAND].options[self.getParameterValue(self.EXPAND)][1]
115-
projwin = str(self.getParameterValue(self.PROJWIN))
116-
if not projwin:
117-
projwin = QgsProcessingUtils.combineLayerExtents([inLayer])
118-
crsId = self.getParameterValue(self.SRS)
119-
sds = self.getParameterValue(self.SDS)
120-
opts = self.getParameterValue(self.OPTIONS)
111+
inLayer = self.parameterAsRasterLayer(parameters, self.INPUT, context)
112+
out = self.parameterAsOutputLayer(parameters, self.OUTPUT, context)
113+
outsize = str(self.parameterAsInt(parameters, self.OUTSIZE, context))
114+
outsizePerc = self.parameterAsBool(parameters, self.OUTSIZE_PERC, context)
115+
noData = self.parameterAsString(parameters, self.NO_DATA, context)
116+
expand = self.parameterDefinition(self.EXPAND).options()[self.parameterAsEnum(parameters, self.EXPAND, context)]
117+
118+
proj_extent = self.parameterAsExtent(parameters, self.PROJWIN, context)
119+
if proj_extent.isNull():
120+
proj_extent = QgsProcessingUtils.combineLayerExtents([inLayer])
121+
crsId = self.parameterAsCrs(parameters, self.SRS, context).authid()
122+
sds = self.parameterAsBool(parameters, self.SDS, context)
123+
opts = self.parameterAsString(parameters, self.OPTIONS, context)
121124

122125
if noData is not None:
123126
noData = str(noData)
@@ -126,8 +129,8 @@ def getConsoleCommands(self, parameters, context, feedback):
126129
arguments.append('-of')
127130
arguments.append(GdalUtils.getFormatShortNameFromFilename(out))
128131
arguments.append('-ot')
129-
arguments.append(self.TYPE[self.getParameterValue(self.RTYPE)])
130-
if outsizePerc == 'True':
132+
arguments.append(self.TYPE[self.parameterAsEnum(parameters, self.RTYPE, context)])
133+
if outsizePerc:
131134
arguments.append('-outsize')
132135
arguments.append(outsize + '%')
133136
arguments.append(outsize + '%')
@@ -141,14 +144,13 @@ def getConsoleCommands(self, parameters, context, feedback):
141144
if expand != 'none':
142145
arguments.append('-expand')
143146
arguments.append(expand)
144-
regionCoords = projwin.split(',')
145147
try:
146148
projwin = []
147149
projwin.append('-projwin')
148-
projwin.append(regionCoords[0])
149-
projwin.append(regionCoords[3])
150-
projwin.append(regionCoords[1])
151-
projwin.append(regionCoords[2])
150+
projwin.append(proj_extent.xMinimum())
151+
projwin.append(proj_extent.yMaximum())
152+
projwin.append(proj_extent.xMaximum())
153+
projwin.append(proj_extent.yMinimum())
152154
except IndexError:
153155
projwin = []
154156
if projwin:
@@ -163,7 +165,7 @@ def getConsoleCommands(self, parameters, context, feedback):
163165
arguments.append('-co')
164166
arguments.append(opts)
165167

166-
arguments.append(self.getParameterValue(self.INPUT))
168+
arguments.append(inLayer.source())
167169
arguments.append(out)
168170

169171
return ['gdal_translate', GdalUtils.escapeAndJoin(arguments)]

0 commit comments

Comments
 (0)