Skip to content

Commit acc108a

Browse files
committed
[processing] refactor offset curve GDAL algorithm (fix #15478)
(cherry picked from commit cac3b2d)
1 parent 5719fec commit acc108a

File tree

1 file changed

+28
-48
lines changed

1 file changed

+28
-48
lines changed

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

+28-48
Original file line numberDiff line numberDiff line change
@@ -83,69 +83,49 @@ def defineCharacteristics(self):
8383

8484
def getConsoleCommands(self):
8585
inLayer = self.getParameterValue(self.INPUT_LAYER)
86-
ogrLayer = ogrConnectionString(inLayer)[1:-1]
87-
layername = "'" + ogrLayerName(inLayer) + "'"
8886
operation = self.getParameterValue(self.OPERATION)
89-
geometry = unicode(self.getParameterValue(self.GEOMETRY))
90-
distance = unicode(self.getParameterValue(self.RADIUS))
91-
leftright = self.LEFTRIGHTLIST[self.getParameterValue(self.LEFTRIGHT)]
87+
geometry = self.getParameterValue(self.GEOMETRY)
88+
distance = self.getParameterValue(self.RADIUS)
89+
leftright = self.getParameterValue(self.LEFTRIGHT)
9290
dissolveall = self.getParameterValue(self.DISSOLVEALL)
93-
field = unicode(self.getParameterValue(self.FIELD))
91+
field = self.getParameterValue(self.FIELD)
9492
multi = self.getParameterValue(self.MULTI)
93+
options = self.getParameterValue(self.OPTIONS)
94+
95+
ogrLayer = ogrConnectionString(inLayer)[1:-1]
96+
layername = "'" + ogrLayerName(inLayer) + "'"
9597

9698
output = self.getOutputFromName(self.OUTPUT_LAYER)
9799
outFile = output.value
98-
99100
output = ogrConnectionString(outFile)
100-
options = unicode(self.getParameterValue(self.OPTIONS))
101+
102+
layername = ogrLayerName(inLayer)
101103

102104
arguments = []
103105
arguments.append(output)
104106
arguments.append(ogrLayer)
105-
arguments.append(ogrLayerName(inLayer))
106-
if dissolveall or field != 'None':
107+
arguments.append(layername)
108+
arguments.append('-dialect')
109+
arguments.append('sqlite')
110+
arguments.append('-sql')
111+
112+
if dissolveall or field is not None:
107113
if operation == 0:
108-
arguments.append('-dialect sqlite -sql "SELECT ST_Union(ST_SingleSidedBuffer(')
114+
sql = "SELECT ST_Union(ST_SingleSidedBuffer({}, {}, {})), * FROM '{}'".format(geometry, distance, leftright, layername)
109115
else:
110-
arguments.append('-dialect sqlite -sql "SELECT ST_Union(ST_OffsetCurve(')
116+
sql = "SELECT ST_Union(ST_OffsetCurve({}, {}, {})) * FROM '{}'".format(geometry, distance, leftright, layername)
111117
else:
112118
if operation == 0:
113-
arguments.append('-dialect sqlite -sql "SELECT ST_SingleSidedBuffer(')
114-
else:
115-
arguments.append('-dialect sqlite -sql "SELECT ST_OffsetCurve(')
116-
arguments.append(geometry)
117-
arguments.append(',')
118-
arguments.append(distance)
119-
if dissolveall or field != 'None':
120-
if leftright == 'Left':
121-
if operation == 0:
122-
arguments.append(',0)),*')
123-
else:
124-
arguments.append(')),*')
125-
else:
126-
if operation == 0:
127-
arguments.append(',1)),*')
128-
else:
129-
arguments.append(')),*')
130-
else:
131-
if leftright == 'Left':
132-
if operation == 0:
133-
arguments.append(',0),*')
134-
else:
135-
arguments.append('),*')
119+
sql = "SELECT ST_SingleSidedBuffer({},{},{}), * FROM '{}'".format(geometry, distance, leftright, layername)
136120
else:
137-
if operation == 0:
138-
arguments.append(',1),*')
139-
else:
140-
arguments.append('),*')
141-
arguments.append('FROM')
142-
arguments.append(layername)
143-
if field != 'None':
144-
arguments.append('GROUP')
145-
arguments.append('BY')
146-
arguments.append(field)
147-
arguments.append('"')
148-
if field != 'None' and multi:
121+
sql = "SELECT ST_OffsetCurve({}, {}, {}), * FROM '{}'".format(geometry, distance, leftright, layername)
122+
123+
if field is not None:
124+
sql = '"{} GROUP BY {}"'.format(sql, field)
125+
126+
arguments.append(sql)
127+
128+
if field is not None and multi:
149129
arguments.append('-explodecollections')
150130

151131
if len(options) > 0:
@@ -161,4 +141,4 @@ def getConsoleCommands(self):
161141
return commands
162142

163143
def commandName(self):
164-
return "ogr2ogr"
144+
return 'ogr2ogr'

0 commit comments

Comments
 (0)