[processing][gdal] Fix parsing of creation options

Creation options must be specified one at a time - the
current approach causes them to be specified once embedded
in quotation marks, which is not valid input for gdal
This commit is contained in:
Nyall Dawson 2018-03-21 15:02:39 +10:00
parent 51ce2fb79e
commit 00bb177f3d
22 changed files with 29 additions and 41 deletions

View File

@ -132,8 +132,7 @@ class ClipRasterByExtent(GdalAlgorithm):
arguments.append(QgsRasterFileWriter.driverForExtension(os.path.splitext(out)[1]))
if options:
arguments.append('-co')
arguments.append(options)
arguments.extend(GdalUtils.parseCreationOptions(options))
arguments.append(inLayer.source())
arguments.append(out)

View File

@ -154,8 +154,7 @@ class ClipRasterByMask(GdalAlgorithm):
arguments.append('-dstnodata {}'.format(nodata))
if options:
arguments.append('-co')
arguments.append(options)
arguments.extend(GdalUtils.parseCreationOptions(options))
arguments.append(inLayer.source())
arguments.append(out)

View File

@ -389,3 +389,11 @@ class GdalUtils:
name = ly.GetName()
ds = None
return name
@staticmethod
def parseCreationOptions(value):
parts = value.split('|')
options = []
for p in parts:
options.extend(['-co', p])
return options

View File

@ -167,8 +167,7 @@ class GridAverage(GdalAlgorithm):
options = self.parameterAsString(parameters, self.OPTIONS, context)
if options:
arguments.append('-co')
arguments.append(options)
arguments.extend(GdalUtils.parseCreationOptions(options))
arguments.append(ogrLayer)
arguments.append(out)

View File

@ -181,8 +181,7 @@ class GridDataMetrics(GdalAlgorithm):
options = self.parameterAsString(parameters, self.OPTIONS, context)
if options:
arguments.append('-co')
arguments.append(options)
arguments.extend(GdalUtils.parseCreationOptions(options))
arguments.append(ogrLayer)
arguments.append(out)

View File

@ -190,8 +190,7 @@ class GridInverseDistance(GdalAlgorithm):
options = self.parameterAsString(parameters, self.OPTIONS, context)
if options:
arguments.append('-co')
arguments.append(options)
arguments.extend(GdalUtils.parseCreationOptions(options))
arguments.append(ogrLayer)
arguments.append(out)

View File

@ -175,8 +175,7 @@ class GridInverseDistanceNearestNeighbor(GdalAlgorithm):
options = self.parameterAsString(parameters, self.OPTIONS, context)
if options:
arguments.append('-co')
arguments.append(options)
arguments.extend(GdalUtils.parseCreationOptions(options))
arguments.append(ogrLayer)
arguments.append(out)

View File

@ -146,8 +146,7 @@ class GridLinear(GdalAlgorithm):
options = self.parameterAsString(parameters, self.OPTIONS, context)
if options:
arguments.append('-co')
arguments.append(options)
arguments.extend(GdalUtils.parseCreationOptions(options))
arguments.append(ogrLayer)
arguments.append(out)

View File

@ -161,8 +161,7 @@ class GridNearestNeighbor(GdalAlgorithm):
options = self.parameterAsString(parameters, self.OPTIONS, context)
if options:
arguments.append('-co')
arguments.append(options)
arguments.extend(GdalUtils.parseCreationOptions(options))
arguments.append(ogrLayer)
arguments.append(out)

View File

@ -125,7 +125,6 @@ class aspect(GdalAlgorithm):
options = self.parameterAsString(parameters, self.OPTIONS, context)
if options:
arguments.append('-co')
arguments.append(options)
arguments.extend(GdalUtils.parseCreationOptions(options))
return ['gdaldem', GdalUtils.escapeAndJoin(arguments)]

View File

@ -160,7 +160,6 @@ class hillshade(GdalAlgorithm):
options = self.parameterAsString(parameters, self.OPTIONS, context)
if options:
arguments.append('-co')
arguments.append(options)
arguments.extend(GdalUtils.parseCreationOptions(options))
return ['gdaldem', GdalUtils.escapeAndJoin(arguments)]

View File

@ -123,8 +123,7 @@ class merge(GdalAlgorithm):
options = self.parameterAsString(parameters, self.OPTIONS, context)
if options:
arguments.append('-co')
arguments.append(options)
arguments.extend(GdalUtils.parseCreationOptions(options))
arguments.append('-o')
arguments.append(out)

View File

@ -112,7 +112,6 @@ class nearblack(GdalAlgorithm):
options = self.parameterAsString(parameters, self.OPTIONS, context)
if options:
arguments.append('-co')
arguments.append(options)
arguments.extend(GdalUtils.parseCreationOptions(options))
return ['nearblack', GdalUtils.escapeAndJoin(arguments)]

View File

@ -170,8 +170,7 @@ class proximity(GdalAlgorithm):
arguments.append(QgsRasterFileWriter.driverForExtension(os.path.splitext(out)[1]))
if options:
arguments.append('-co')
arguments.append(options)
arguments.extend(GdalUtils.parseCreationOptions(options))
arguments.append(inLayer.source())
arguments.append(out)

View File

@ -214,8 +214,7 @@ class rasterize(GdalAlgorithm):
options = self.parameterAsString(parameters, self.OPTIONS, context)
if options:
arguments.append('-co')
arguments.append(options)
arguments.extend(GdalUtils.parseCreationOptions(options))
arguments.append(ogrLayer)
arguments.append(out)

View File

@ -187,8 +187,7 @@ class retile(GdalAlgorithm):
options = self.parameterAsString(parameters, self.OPTIONS, context)
if options:
arguments.append('-co')
arguments.append(options)
arguments.extend(GdalUtils.parseCreationOptions(options))
if self.parameterAsBool(parameters, self.DIR_FOR_ROW, context):
arguments.append('-pyramidOnly')

View File

@ -129,7 +129,6 @@ class slope(GdalAlgorithm):
options = self.parameterAsString(parameters, self.OPTIONS, context)
if options:
arguments.append('-co')
arguments.append(options)
arguments.extend(GdalUtils.parseCreationOptions(options))
return ['gdaldem', GdalUtils.escapeAndJoin(arguments)]

View File

@ -99,7 +99,6 @@ class tpi(GdalAlgorithm):
options = self.parameterAsString(parameters, self.OPTIONS, context)
if options:
arguments.append('-co')
arguments.append(options)
arguments.extend(GdalUtils.parseCreationOptions(options))
return ['gdaldem', GdalUtils.escapeAndJoin(arguments)]

View File

@ -137,8 +137,7 @@ class translate(GdalAlgorithm):
options = self.parameterAsString(parameters, self.OPTIONS, context)
if options:
arguments.append('-co')
arguments.append(options)
arguments.extend(GdalUtils.parseCreationOptions(options))
arguments.append(inLayer.source())
arguments.append(out)

View File

@ -98,7 +98,6 @@ class tri(GdalAlgorithm):
options = self.parameterAsString(parameters, self.OPTIONS, context)
if options:
arguments.append('-co')
arguments.append(options)
arguments.extend(GdalUtils.parseCreationOptions(options))
return ['gdaldem', GdalUtils.escapeAndJoin(arguments)]

View File

@ -70,4 +70,4 @@ class RasterOptionsWidgetWrapper(WidgetWrapper):
elif self.dialogType == DIALOG_BATCH:
return self.widget.text()
else:
return ' '.join(self.widget.options())
return '|'.join(self.widget.options())

View File

@ -212,8 +212,7 @@ class warp(GdalAlgorithm):
options = self.parameterAsString(parameters, self.OPTIONS, context)
if options:
arguments.append('-co')
arguments.append(options)
arguments.extend(GdalUtils.parseCreationOptions(options))
arguments.append(inLayer.source())
arguments.append(out)