Skip to content

Commit

Permalink
[processing] fix SQL-based geoprocessing tools and tests
Browse files Browse the repository at this point in the history
  • Loading branch information
alexbruy committed Oct 11, 2017
1 parent e165d45 commit 97238fd
Show file tree
Hide file tree
Showing 26 changed files with 214 additions and 311 deletions.
11 changes: 9 additions & 2 deletions python/plugins/processing/algs/gdal/Buffer.py
Expand Up @@ -99,6 +99,7 @@ def commandName(self):
return 'ogr2ogr'

def getConsoleCommands(self, parameters, context, feedback):
fields = self.parameterAsSource(parameters, self.INPUT, context).fields()
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback)
geometry = self.parameterAsString(parameters, self.GEOMETRY, context)
distance = self.parameterAsDouble(parameters, self.DISTANCE, context)
Expand All @@ -109,6 +110,12 @@ def getConsoleCommands(self, parameters, context, feedback):

output, outputFormat = GdalUtils.ogrConnectionStringAndFormat(outFile, context)

other_fields = []
for f in fields:
if f.name() == geometry:
continue
other_fields.append(f.name())

arguments = []
arguments.append(output)
arguments.append(ogrLayer)
Expand All @@ -117,9 +124,9 @@ def getConsoleCommands(self, parameters, context, feedback):
arguments.append('-sql')

if dissolve or fieldName:
sql = "SELECT ST_Union(ST_Buffer({}, {})), * FROM '{}'".format(geometry, distance, layerName)
sql = "SELECT ST_Union(ST_Buffer({}, {})) AS {}, {} FROM '{}'".format(geometry, distance, geometry, ','.join(other_fields), layerName)
else:
sql = "SELECT ST_Buffer({}, {}), * FROM '{}'".format(geometry, distance, layerName)
sql = "SELECT ST_Buffer({}, {}) AS {}, {} FROM '{}'".format(geometry, distance, geometry, ','.join(other_fields), layerName)

if fieldName:
sql = '{} GROUP BY {}'.format(sql, fieldName)
Expand Down
16 changes: 12 additions & 4 deletions python/plugins/processing/algs/gdal/Dissolve.py
Expand Up @@ -110,6 +110,7 @@ def commandName(self):
return 'ogr2ogr'

def getConsoleCommands(self, parameters, context, feedback):
fields = self.parameterAsSource(parameters, self.INPUT, context).fields()
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback)
geometry = self.parameterAsString(parameters, self.GEOMETRY, context)
fieldName = self.parameterAsString(parameters, self.FIELD, context)
Expand All @@ -119,6 +120,13 @@ def getConsoleCommands(self, parameters, context, feedback):

output, outputFormat = GdalUtils.ogrConnectionStringAndFormat(outFile, context)

other_fields = []
for f in fields:
if f.name() == geometry:
continue

other_fields.append(f.name())

arguments = []
arguments.append(output)
arguments.append(ogrLayer)
Expand All @@ -140,14 +148,14 @@ def getConsoleCommands(self, parameters, context, feedback):
params = ','.join(tokens)
if params:
if self.parameterAsBool(parameters, self.KEEP_ATTRIBUTES, context):
sql = "SELECT ST_Union({}), *, {} FROM {} GROUP BY {}".format(geometry, params, layerName, fieldName)
sql = "SELECT ST_Union({}) AS {}, {}, {} FROM {} GROUP BY {}".format(geometry, geometry, ','.join(other_fields), params, layerName, fieldName)
else:
sql = "SELECT ST_Union({}), {}, {} FROM {} GROUP BY {}".format(geometry, fieldName, params, layerName, fieldName)
sql = "SELECT ST_Union({}) AS {}, {}, {} FROM {} GROUP BY {}".format(geometry, geometry, fieldName, params, layerName, fieldName)
else:
if self.parameterAsBool(parameters, self.KEEP_ATTRIBUTES, context):
sql = "SELECT ST_Union({}), * FROM {} GROUP BY {}".format(geometry, layerName, fieldName)
sql = "SELECT ST_Union({}) AS {}, {} FROM {} GROUP BY {}".format(geometry, geometry, ','.join(other_fields), layerName, fieldName)
else:
sql = "SELECT ST_Union({}), {} FROM {} GROUP BY {}".format(geometry, fieldName, layerName, fieldName)
sql = "SELECT ST_Union({}) AS {}, {} FROM {} GROUP BY {}".format(geometry, geometry, fieldName, layerName, fieldName)

arguments.append(sql)

Expand Down
9 changes: 8 additions & 1 deletion python/plugins/processing/algs/gdal/OffsetCurve.py
Expand Up @@ -82,6 +82,7 @@ def commandName(self):
return 'ogr2ogr'

def getConsoleCommands(self, parameters, context, feedback):
fields = self.parameterAsSource(parameters, self.INPUT, context).fields()
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback)
geometry = self.parameterAsString(parameters, self.GEOMETRY, context)
distance = self.parameterAsDouble(parameters, self.DISTANCE, context)
Expand All @@ -90,14 +91,20 @@ def getConsoleCommands(self, parameters, context, feedback):

output, outputFormat = GdalUtils.ogrConnectionStringAndFormat(outFile, context)

other_fields = []
for f in fields:
if f.name() == geometry:
continue
other_fields.append(f.name())

arguments = []
arguments.append(output)
arguments.append(ogrLayer)
arguments.append('-dialect')
arguments.append('sqlite')
arguments.append('-sql')

sql = "SELECT ST_OffsetCurve({}, {}), * FROM '{}'".format(geometry, distance, layerName)
sql = "SELECT ST_OffsetCurve({}, {}) AS {}, {} FROM '{}'".format(geometry, distance, geometry, ','.join(other_fields), layerName)
arguments.append(sql)

if options:
Expand Down
11 changes: 9 additions & 2 deletions python/plugins/processing/algs/gdal/OneSideBuffer.py
Expand Up @@ -108,6 +108,7 @@ def commandName(self):
return 'ogr2ogr'

def getConsoleCommands(self, parameters, context, feedback):
fields = self.parameterAsSource(parameters, self.INPUT, context).fields()
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback)
geometry = self.parameterAsString(parameters, self.GEOMETRY, context)
distance = self.parameterAsDouble(parameters, self.DISTANCE, context)
Expand All @@ -119,6 +120,12 @@ def getConsoleCommands(self, parameters, context, feedback):

output, outputFormat = GdalUtils.ogrConnectionStringAndFormat(outFile, context)

other_fields = []
for f in fields:
if f.name() == geometry:
continue
other_fields.append(f.name())

arguments = []
arguments.append(output)
arguments.append(ogrLayer)
Expand All @@ -127,9 +134,9 @@ def getConsoleCommands(self, parameters, context, feedback):
arguments.append('-sql')

if dissolve or fieldName:
sql = "SELECT ST_Union(ST_SingleSidedBuffer({}, {}, {})), * FROM '{}'".format(geometry, distance, side, layerName)
sql = "SELECT ST_Union(ST_SingleSidedBuffer({}, {}, {})) AS {}, {} FROM '{}'".format(geometry, distance, side, geometry, ','.join(other_fields), layerName)
else:
sql = "SELECT ST_SingleSidedBuffer({}, {}, {}), * FROM '{}'".format(geometry, distance, side, layerName)
sql = "SELECT ST_SingleSidedBuffer({}, {}, {}) AS {}, {} FROM '{}'".format(geometry, distance, side, geometry, ','.join(other_fields), layerName)

if fieldName:
sql = '"{} GROUP BY {}"'.format(sql, fieldName)
Expand Down
9 changes: 8 additions & 1 deletion python/plugins/processing/algs/gdal/PointsAlongLines.py
Expand Up @@ -87,6 +87,7 @@ def commandName(self):
return 'ogr2ogr'

def getConsoleCommands(self, parameters, context, feedback):
fields = self.parameterAsSource(parameters, self.INPUT, context).fields()
ogrLayer, layerName = self.getOgrCompatibleSource(self.INPUT, parameters, context, feedback)
distance = self.parameterAsDouble(parameters, self.DISTANCE, context)
geometry = self.parameterAsString(parameters, self.GEOMETRY, context)
Expand All @@ -95,14 +96,20 @@ def getConsoleCommands(self, parameters, context, feedback):

output, outputFormat = GdalUtils.ogrConnectionStringAndFormat(outFile, context)

other_fields = []
for f in fields:
if f.name() == geometry:
continue
other_fields.append(f.name())

arguments = []
arguments.append(output)
arguments.append(ogrLayer)
arguments.append('-dialect')
arguments.append('sqlite')
arguments.append('-sql')

sql = "SELECT ST_Line_Interpolate_Point({}, {}), * FROM '{}'".format(geometry, distance, layerName)
sql = "SELECT ST_Line_Interpolate_Point({}, {}) AS {}, {} FROM '{}'".format(geometry, distance, geometry, ','.join(other_fields), layerName)
arguments.append(sql)

if options:
Expand Down
31 changes: 0 additions & 31 deletions python/plugins/processing/tests/testdata/expected/buffer_polys.gfs

This file was deleted.

This file was deleted.

Large diffs are not rendered by default.

Expand Up @@ -10,12 +10,12 @@
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="buffer_lines" type="ogr:buffer_lines_Type" substitutionGroup="gml:_Feature"/>
<xs:complexType name="buffer_lines_Type">
<xs:element name="SELECT" type="ogr:SELECT_Type" substitutionGroup="gml:_Feature"/>
<xs:complexType name="SELECT_Type">
<xs:complexContent>
<xs:extension base="gml:AbstractFeatureType">
<xs:sequence>
<xs:element name="geometryProperty" type="gml:MultiPolygonPropertyType" nillable="true" minOccurs="0" maxOccurs="1"/>
<xs:element name="geometryProperty" type="gml:GeometryPropertyType" nillable="true" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
Expand Down

Large diffs are not rendered by default.

Expand Up @@ -10,12 +10,12 @@
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="buffer_lines_dissolve" type="ogr:buffer_lines_dissolve_Type" substitutionGroup="gml:_Feature"/>
<xs:complexType name="buffer_lines_dissolve_Type">
<xs:element name="SELECT" type="ogr:SELECT_Type" substitutionGroup="gml:_Feature"/>
<xs:complexType name="SELECT_Type">
<xs:complexContent>
<xs:extension base="gml:AbstractFeatureType">
<xs:sequence>
<xs:element name="geometryProperty" type="gml:MultiPolygonPropertyType" nillable="true" minOccurs="0" maxOccurs="1"/>
<xs:element name="geometryProperty" type="gml:GeometryPropertyType" nillable="true" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
Expand Down

This file was deleted.

0 comments on commit 97238fd

Please sign in to comment.