From e2c79910b5a0afa71b588ae923498891c3831e24 Mon Sep 17 00:00:00 2001 From: Alexander Bruy Date: Wed, 14 Sep 2016 16:38:35 +0300 Subject: [PATCH] [processing] refactor offset curve GDAL algorithm (fix #15478) (cherry picked from commit cac3b2ddfa7c43239f1c9abc84c965340a5b74b5) --- .../algs/gdal/ogr2ogronesidebuffer.py | 76 +++++++------------ 1 file changed, 28 insertions(+), 48 deletions(-) diff --git a/python/plugins/processing/algs/gdal/ogr2ogronesidebuffer.py b/python/plugins/processing/algs/gdal/ogr2ogronesidebuffer.py index a16cb51698e4..d399cffb4ac4 100644 --- a/python/plugins/processing/algs/gdal/ogr2ogronesidebuffer.py +++ b/python/plugins/processing/algs/gdal/ogr2ogronesidebuffer.py @@ -83,69 +83,49 @@ def defineCharacteristics(self): def getConsoleCommands(self): inLayer = self.getParameterValue(self.INPUT_LAYER) - 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)] + geometry = self.getParameterValue(self.GEOMETRY) + distance = self.getParameterValue(self.RADIUS) + leftright = self.getParameterValue(self.LEFTRIGHT) dissolveall = self.getParameterValue(self.DISSOLVEALL) - field = unicode(self.getParameterValue(self.FIELD)) + field = self.getParameterValue(self.FIELD) multi = self.getParameterValue(self.MULTI) + options = self.getParameterValue(self.OPTIONS) + + ogrLayer = ogrConnectionString(inLayer)[1:-1] + layername = "'" + ogrLayerName(inLayer) + "'" 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': + arguments.append(layername) + arguments.append('-dialect') + arguments.append('sqlite') + arguments.append('-sql') + + if dissolveall or field is not None: if operation == 0: - arguments.append('-dialect sqlite -sql "SELECT ST_Union(ST_SingleSidedBuffer(') + sql = "SELECT ST_Union(ST_SingleSidedBuffer({}, {}, {})), * FROM '{}'".format(geometry, distance, leftright, layername) else: - arguments.append('-dialect sqlite -sql "SELECT ST_Union(ST_OffsetCurve(') + sql = "SELECT ST_Union(ST_OffsetCurve({}, {}, {})) * FROM '{}'".format(geometry, distance, leftright, layername) 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('),*') + sql = "SELECT ST_SingleSidedBuffer({},{},{}), * FROM '{}'".format(geometry, distance, leftright, layername) 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: + 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: @@ -161,4 +141,4 @@ def getConsoleCommands(self): return commands def commandName(self): - return "ogr2ogr" + return 'ogr2ogr'