Skip to content

Commit

Permalink
Merge pull request #5243 from alexbruy/processing-gdal
Browse files Browse the repository at this point in the history
[processing] restore GDAL algorithms
  • Loading branch information
alexbruy authored Oct 12, 2017
2 parents 0028486 + ea7ca58 commit d97a51b
Show file tree
Hide file tree
Showing 113 changed files with 409,295 additions and 3,626 deletions.
29 changes: 29 additions & 0 deletions python/core/processing/qgsprocessingoutputs.sip
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ class QgsProcessingOutputDefinition
sipType = sipType_QgsProcessingOutputString;
else if ( sipCpp->type() == QgsProcessingOutputFolder::typeName() )
sipType = sipType_QgsProcessingOutputFolder;
else if ( sipCpp->type() == QgsProcessingOutputFile::typeName() )
sipType = sipType_QgsProcessingOutputFile;
else
sipType = nullptr;
%End
Expand Down Expand Up @@ -265,6 +267,33 @@ class QgsProcessingOutputFolder : QgsProcessingOutputDefinition

};

class QgsProcessingOutputFile : QgsProcessingOutputDefinition
{
%Docstring
A file output for processing algorithms.
.. versionadded:: 3.0
%End

%TypeHeaderCode
#include "qgsprocessingoutputs.h"
%End
public:

QgsProcessingOutputFile( const QString &name, const QString &description = QString() );
%Docstring
Constructor for QgsProcessingOutputFile.
%End

static QString typeName();
%Docstring
Returns the type name for the output class.
:rtype: str
%End
virtual QString type() const;

};




/************************************************************************
Expand Down
Empty file modified python/plugins/processing/ProcessingPlugin.py
100755 → 100644
Empty file.
7 changes: 5 additions & 2 deletions python/plugins/processing/algs/gdal/AssignProjection.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@


class AssignProjection(GdalAlgorithm):

INPUT = 'INPUT'
CRS = 'CRS'
OUTPUT = 'OUTPUT'
Expand All @@ -49,11 +50,13 @@ def __init__(self):
super().__init__()

def initAlgorithm(self, config=None):
self.addParameter(QgsProcessingParameterRasterLayer(self.INPUT, self.tr('Input layer'), optional=False))
self.addParameter(QgsProcessingParameterRasterLayer(self.INPUT,
self.tr('Input layer')))
self.addParameter(QgsProcessingParameterCrs(self.CRS,
self.tr('Desired CRS')))

self.addOutput(QgsProcessingOutputRasterLayer(self.OUTPUT, self.tr('Layer with projection')))
self.addOutput(QgsProcessingOutputRasterLayer(self.OUTPUT,
self.tr('Layer with projection')))

def name(self):
return 'assignprojection'
Expand Down
145 changes: 145 additions & 0 deletions python/plugins/processing/algs/gdal/Buffer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
# -*- coding: utf-8 -*-

"""
***************************************************************************
Buffer.py
---------------------
Date : Janaury 2015
Copyright : (C) 2015 by Giovanni Manghi
Email : giovanni dot manghi at naturalgis dot pt
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************
"""

__author__ = 'Giovanni Manghi'
__date__ = 'January 2015'
__copyright__ = '(C) 2015, Giovanni Manghi'

# This will get replaced with a git SHA1 when you do a git archive

__revision__ = '$Format:%H$'

from qgis.core import (QgsProcessing,
QgsProcessingParameterDefinition,
QgsProcessingParameterFeatureSource,
QgsProcessingParameterField,
QgsProcessingParameterString,
QgsProcessingParameterNumber,
QgsProcessingParameterBoolean,
QgsProcessingParameterVectorDestination)
from processing.algs.gdal.GdalAlgorithm import GdalAlgorithm
from processing.algs.gdal.GdalUtils import GdalUtils


class Buffer(GdalAlgorithm):

INPUT = 'INPUT'
FIELD = 'FIELD'
GEOMETRY = 'GEOMETRY'
DISTANCE = 'DISTANCE'
DISSOLVE = 'DISSOLVE'
EXPLODE_COLLECTIONS = 'EXPLODE_COLLECTIONS'
OPTIONS = 'OPTIONS'
OUTPUT = 'OUTPUT'

def __init__(self):
super().__init__()

def initAlgorithm(self, config=None):
self.addParameter(QgsProcessingParameterFeatureSource(self.INPUT,
self.tr('Input layer')))
self.addParameter(QgsProcessingParameterString(self.GEOMETRY,
self.tr('Geometry column name'),
defaultValue='geometry'))
self.addParameter(QgsProcessingParameterNumber(self.DISTANCE,
self.tr('Buffer distance'),
type=QgsProcessingParameterNumber.Double,
minValue=0.0,
defaultValue=10.0))
self.addParameter(QgsProcessingParameterField(self.FIELD,
self.tr('Dissolve by attribute'),
None,
self.INPUT,
QgsProcessingParameterField.Any,
optional=True))
self.addParameter(QgsProcessingParameterBoolean(self.DISSOLVE,
self.tr('Dissolve all results'),
defaultValue=False))
self.addParameter(QgsProcessingParameterBoolean(self.EXPLODE_COLLECTIONS,
self.tr('Produce one feature for each geometry in any kind of geometry collection in the source file'),
defaultValue=False))

options_param = QgsProcessingParameterString(self.OPTIONS,
self.tr('Additional creation options'),
defaultValue='',
optional=True)
options_param.setFlags(options_param.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
self.addParameter(options_param)

self.addParameter(QgsProcessingParameterVectorDestination(self.OUTPUT,
self.tr('Buffer'),
QgsProcessing.TypeVectorPolygon))

def name(self):
return 'buffervectors'

def displayName(self):
return self.tr('Buffer vectors')

def group(self):
return self.tr('Vector geoprocessing')

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)
fieldName = self.parameterAsString(parameters, self.FIELD, context)
dissolve = self.parameterAsString(parameters, self.DISSOLVE, context)
options = self.parameterAsString(parameters, self.OPTIONS, context)
outFile = self.parameterAsOutputLayer(parameters, self.OUTPUT, context)

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')

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

if fieldName:
sql = '{} GROUP BY {}'.format(sql, fieldName)

arguments.append(sql)

if self.parameterAsBool(parameters, self.EXPLODE_COLLECTIONS, context):
arguments.append('-explodecollections')

if options:
arguments.append(options)

if outputFormat:
arguments.append('-f {}'.format(outputFormat))

return ['ogr2ogr', GdalUtils.escapeAndJoin(arguments)]
126 changes: 0 additions & 126 deletions python/plugins/processing/algs/gdal/ClipByExtent.py

This file was deleted.

Loading

0 comments on commit d97a51b

Please sign in to comment.