[processing] refactor offset curve GDAL algorithm (fix #15478)

This commit is contained in:
Alexander Bruy 2016-09-14 16:38:35 +03:00
parent 89774abed3
commit cac3b2ddfa

View File

@ -84,69 +84,49 @@ class Ogr2OgrOneSideBuffer(GdalAlgorithm):
def getConsoleCommands(self):
inLayer = self.getParameterValue(self.INPUT_LAYER)
operation = self.getParameterValue(self.OPERATION)
geometry = self.getParameterValue(self.GEOMETRY)
distance = self.getParameterValue(self.RADIUS)
leftright = self.getParameterValue(self.LEFTRIGHT)
dissolveall = self.getParameterValue(self.DISSOLVEALL)
field = self.getParameterValue(self.FIELD)
multi = self.getParameterValue(self.MULTI)
options = self.getParameterValue(self.OPTIONS)
ogrLayer = ogrConnectionString(inLayer)[1:-1]
layername = "'" + ogrLayerName(inLayer) + "'"
operation = self.getParameterValue(self.OPERATION)
geometry = unicode(self.getParameterValue(self.GEOMETRY))
distance = unicode(self.getParameterValue(self.RADIUS))
leftright = self.LEFTRIGHTLIST[self.getParameterValue(self.LEFTRIGHT)]
dissolveall = self.getParameterValue(self.DISSOLVEALL)
field = unicode(self.getParameterValue(self.FIELD))
multi = self.getParameterValue(self.MULTI)
output = self.getOutputFromName(self.OUTPUT_LAYER)
outFile = output.value
output = ogrConnectionString(outFile)
options = unicode(self.getParameterValue(self.OPTIONS))
layername = ogrLayerName(inLayer)
arguments = []
arguments.append(output)
arguments.append(ogrLayer)
arguments.append(ogrLayerName(inLayer))
if dissolveall or field != 'None':
if operation == 0:
arguments.append('-dialect sqlite -sql "SELECT ST_Union(ST_SingleSidedBuffer(')
else:
arguments.append('-dialect sqlite -sql "SELECT ST_Union(ST_OffsetCurve(')
else:
if operation == 0:
arguments.append('-dialect sqlite -sql "SELECT ST_SingleSidedBuffer(')
else:
arguments.append('-dialect sqlite -sql "SELECT ST_OffsetCurve(')
arguments.append(geometry)
arguments.append(',')
arguments.append(distance)
if dissolveall or field != 'None':
if leftright == 'Left':
if operation == 0:
arguments.append(',0)),*')
else:
arguments.append(')),*')
else:
if operation == 0:
arguments.append(',1)),*')
else:
arguments.append(')),*')
else:
if leftright == 'Left':
if operation == 0:
arguments.append(',0),*')
else:
arguments.append('),*')
else:
if operation == 0:
arguments.append(',1),*')
else:
arguments.append('),*')
arguments.append('FROM')
arguments.append(layername)
if field != 'None':
arguments.append('GROUP')
arguments.append('BY')
arguments.append(field)
arguments.append('"')
if field != 'None' and multi:
arguments.append('-dialect')
arguments.append('sqlite')
arguments.append('-sql')
if dissolveall or field is not None:
if operation == 0:
sql = "SELECT ST_Union(ST_SingleSidedBuffer({}, {}, {})), * FROM '{}'".format(geometry, distance, leftright, layername)
else:
sql = "SELECT ST_Union(ST_OffsetCurve({}, {}, {})) * FROM '{}'".format(geometry, distance, leftright, layername)
else:
if operation == 0:
sql = "SELECT ST_SingleSidedBuffer({},{},{}), * FROM '{}'".format(geometry, distance, leftright, layername)
else:
sql = "SELECT ST_OffsetCurve({}, {}, {}), * FROM '{}'".format(geometry, distance, leftright, layername)
if field is not None:
sql = '"{} GROUP BY {}"'.format(sql, field)
arguments.append(sql)
if field is not None and multi:
arguments.append('-explodecollections')
if len(options) > 0:
@ -162,4 +142,4 @@ class Ogr2OgrOneSideBuffer(GdalAlgorithm):
return commands
def commandName(self):
return "ogr2ogr"
return 'ogr2ogr'