Example #1
0
    def processOutputParameterToken(self, token):
        out = None

        if token.lower().strip().startswith('raster'):
            out = OutputRaster()
        elif token.lower().strip().startswith('vector'):
            out = OutputVector()
        elif token.lower().strip().startswith('table'):
            out = OutputTable()
        elif token.lower().strip().startswith('html'):
            out = OutputHTML()
        elif token.lower().strip().startswith('file'):
            out = OutputFile()
            subtokens = token.split(' ')
            if len(subtokens) > 2:
                out.ext = subtokens[2]
        elif token.lower().strip().startswith('directory'):
            out = OutputDirectory()
        elif token.lower().strip().startswith('number'):
            out = OutputNumber()
        elif token.lower().strip().startswith('string'):
            out = OutputString()
        elif token.lower().strip().startswith('extent'):
            out = OutputExtent()

        return out
Example #2
0
    def processOutputParameterToken(self, token):
        out = None

        if token.lower().strip().startswith('raster'):
            out = OutputRaster()
        elif token.lower().strip().startswith('vector'):
            out = OutputVector()
        elif token.lower().strip().startswith('table'):
            out = OutputTable()
        else:
            if token.lower().strip().startswith('file'):
                out = OutputFile()
                ext = token.strip()[len('file') + 1:]
                if ext:
                    out.ext = ext
            elif token.lower().strip().startswith('directory'):
                out = OutputDirectory()
            elif token.lower().strip().startswith('number'):
                out = OutputNumber()
            elif token.lower().strip().startswith('string'):
                out = OutputString()

            if not self.saveOutputValues and out:
                outVal = OutputFile(RAlgorithm.R_OUTPUT_VALUES, self.tr('R Output values'), ext='txt')
                outVal.hidden = True
                self.addOutput(outVal)
                self.saveOutputValues = True

        return out
Example #3
0
    def processParameterLine(self, line):
        param = None
        out = None
        line = line.replace('#', '')

        # If the line is in the format of the text description files for
        # normal algorithms, then process it using parameter and output
        # factories
        if '|' in line:
            self.processDescriptionParameterLine(line)
            return
        if line == "nomodeler":
            self.showInModeler = False
            return
        tokens = line.split('=', 1)
        desc = self.createDescriptiveName(tokens[0])
        if tokens[1].lower().strip() == 'group':
            self.group = self.i18n_group = tokens[0]
            return
        if tokens[1].lower().strip() == 'name':
            self.name = self.i18n_name = tokens[0]
            return
        if tokens[1].lower().strip() == 'raster':
            param = ParameterRaster(tokens[0], desc, False)
        elif tokens[1].lower().strip() == 'vector':
            param = ParameterVector(tokens[0], desc,
                                    [ParameterVector.VECTOR_TYPE_ANY])
        elif tokens[1].lower().strip() == 'vector point':
            param = ParameterVector(tokens[0], desc,
                                    [ParameterVector.VECTOR_TYPE_POINT])
        elif tokens[1].lower().strip() == 'vector line':
            param = ParameterVector(tokens[0], desc,
                                    [ParameterVector.VECTOR_TYPE_LINE])
        elif tokens[1].lower().strip() == 'vector polygon':
            param = ParameterVector(tokens[0], desc,
                                    [ParameterVector.VECTOR_TYPE_POLYGON])
        elif tokens[1].lower().strip() == 'table':
            param = ParameterTable(tokens[0], desc, False)
        elif tokens[1].lower().strip() == 'multiple raster':
            param = ParameterMultipleInput(tokens[0], desc,
                    ParameterMultipleInput.TYPE_RASTER)
            param.optional = False
        elif tokens[1].lower().strip() == 'multiple vector':
            param = ParameterMultipleInput(tokens[0], desc,
                    ParameterMultipleInput.TYPE_VECTOR_ANY)
            param.optional = False
        elif tokens[1].lower().strip().startswith('selectionfromfile'):
            options = tokens[1].strip()[len('selectionfromfile '):].split(';')
            param = ParameterSelection(tokens[0], desc, options, isSource=True)
        elif tokens[1].lower().strip().startswith('selection'):
            options = tokens[1].strip()[len('selection '):].split(';')
            param = ParameterSelection(tokens[0], desc, options)
        elif tokens[1].lower().strip().startswith('boolean'):
            default = tokens[1].strip()[len('boolean') + 1:]
            param = ParameterBoolean(tokens[0], desc, default)
        elif tokens[1].lower().strip() == 'extent':
            param = ParameterExtent(tokens[0], desc)
        elif tokens[1].lower().strip() == 'file':
            param = ParameterFile(tokens[0], desc, False)
        elif tokens[1].lower().strip() == 'folder':
            param = ParameterFile(tokens[0], desc, True)
        elif tokens[1].lower().strip().startswith('number'):
            default = tokens[1].strip()[len('number') + 1:]
            param = ParameterNumber(tokens[0], desc, default=default)
        elif tokens[1].lower().strip().startswith('field'):
            field = tokens[1].strip()[len('field') + 1:]
            found = False
            for p in self.parameters:
                if p.name == field:
                    found = True
                    break
            if found:
                param = ParameterTableField(tokens[0], desc, field)
        elif tokens[1].lower().strip().startswith('string'):
            default = tokens[1].strip()[len('string') + 1:]
            param = ParameterString(tokens[0], desc, default)
        elif tokens[1].lower().strip().startswith('longstring'):
            default = tokens[1].strip()[len('longstring') + 1:]
            param = ParameterString(tokens[0], desc, default, multiline=True)
        elif tokens[1].lower().strip().startswith('crs'):
            default = tokens[1].strip()[len('crs') + 1:]
            if not default:
                default = 'EPSG:4326'
            param = ParameterCrs(tokens[0], desc, default)
        elif tokens[1].lower().strip().startswith('output raster'):
            out = OutputRaster()
        elif tokens[1].lower().strip().startswith('output vector'):
            out = OutputVector()
        elif tokens[1].lower().strip().startswith('output table'):
            out = OutputTable()
        elif tokens[1].lower().strip().startswith('output html'):
            out = OutputHTML()
        elif tokens[1].lower().strip().startswith('output file'):
            out = OutputFile()
            subtokens = tokens[1].split(' ')
            if len(subtokens) > 2:
                out.ext = subtokens[2]
        elif tokens[1].lower().strip().startswith('output directory'):
            out = OutputDirectory()
        elif tokens[1].lower().strip().startswith('output number'):
            out = OutputNumber()
        elif tokens[1].lower().strip().startswith('output string'):
            out = OutputString()

        if param is not None:
            self.addParameter(param)
        elif out is not None:
            out.name = tokens[0]
            out.description = desc
            self.addOutput(out)
        else:
            raise WrongScriptException(
                self.tr('Could not load script: %s.\n'
                        'Problem with line "%s"', 'ScriptAlgorithm') % (self.descriptionFile or '', line))
Example #4
0
 def defineCharacteristics(self):
     self.addParameter(ParameterRaster(rgb2pct.INPUT,
                                       self.tr('Input layer'), False))
     self.addParameter(ParameterNumber(rgb2pct.NCOLORS,
                                       self.tr('Number of colors'), 1, None, 2))
     self.addOutput(OutputRaster(rgb2pct.OUTPUT, self.tr('RGB to PCT')))
Example #5
0
    def initAlgorithm(self, config=None):
        class ParameterInterpolationData(Parameter):
            default_metadata = {
                'widget_wrapper':
                'processing.algs.qgis.ui.InterpolationDataWidget.InterpolationDataWidgetWrapper'
            }

            def __init__(self, name='', description=''):
                Parameter.__init__(self, name, description)

            def setValue(self, value):
                if value is None:
                    if not self.flags(
                    ) & QgsProcessingParameterDefinition.FlagOptional:
                        return False
                    self.value = None
                    return True

                if value == '':
                    if not self.flags(
                    ) & QgsProcessingParameterDefinition.FlagOptional:
                        return False

                if isinstance(value, str):
                    self.value = value if value != '' else None
                else:
                    self.value = ParameterInterpolationData.dataToString(value)
                return True

            def getValueAsCommandLineParameter(self):
                return '"{}"'.format(self.value)

            def getAsScriptCode(self):
                param_type = ''
                param_type += 'interpolation data '
                return '##' + self.name + '=' + param_type

            @classmethod
            def fromScriptCode(self, line):
                isOptional, name, definition = _splitParameterOptions(line)
                descName = QgsProcessingParameters.descriptionFromName(name)
                parent = definition.lower().strip()[len('interpolation data') +
                                                    1:]
                return ParameterInterpolationData(name, descName, parent)

            @staticmethod
            def dataToString(data):
                s = ''
                for c in data:
                    s += '{}, {}, {:d}, {:d};'.format(c[0], c[1], c[2], c[3])
                return s[:-1]

        self.addParameter(
            ParameterInterpolationData(self.INTERPOLATION_DATA,
                                       self.tr('Input layer(s)')))
        self.addParameter(
            ParameterNumber(self.DISTANCE_COEFFICIENT,
                            self.tr('Distance coefficient P'), 0.0, 99.99,
                            2.0))
        self.addParameter(
            ParameterNumber(self.COLUMNS, self.tr('Number of columns'), 0,
                            10000000, 300))
        self.addParameter(
            ParameterNumber(self.ROWS, self.tr('Number of rows'), 0, 10000000,
                            300))
        self.addParameter(
            ParameterNumber(self.CELLSIZE_X, self.tr('Cell Size X'), 0.0,
                            999999.000000, 0.0))
        self.addParameter(
            ParameterNumber(self.CELLSIZE_Y, self.tr('Cell Size Y'), 0.0,
                            999999.000000, 0.0))
        self.addParameter(
            ParameterExtent(self.EXTENT, self.tr('Extent'), optional=False))
        self.addOutput(OutputRaster(self.OUTPUT_LAYER,
                                    self.tr('Interpolated')))
Example #6
0
 def initAlgorithm(self, config=None):
     self.addParameter(
         ParameterRaster(self.INPUT_A, self.tr('Input layer A'), False))
     self.addParameter(
         ParameterString(self.BAND_A,
                         self.tr('Number of raster band for raster A'),
                         '1',
                         optional=True))
     self.addParameter(
         ParameterRaster(self.INPUT_B, self.tr('Input layer B'), True))
     self.addParameter(
         ParameterString(self.BAND_B,
                         self.tr('Number of raster band for raster B'),
                         '1',
                         optional=True))
     self.addParameter(
         ParameterRaster(self.INPUT_C, self.tr('Input layer C'), True))
     self.addParameter(
         ParameterString(self.BAND_C,
                         self.tr('Number of raster band for raster C'),
                         '1',
                         optional=True))
     self.addParameter(
         ParameterRaster(self.INPUT_D, self.tr('Input layer D'), True))
     self.addParameter(
         ParameterString(self.BAND_D,
                         self.tr('Number of raster band for raster D'),
                         '1',
                         optional=True))
     self.addParameter(
         ParameterRaster(self.INPUT_E, self.tr('Input layer E'), True))
     self.addParameter(
         ParameterString(self.BAND_E,
                         self.tr('Number of raster band for raster E'),
                         '1',
                         optional=True))
     self.addParameter(
         ParameterRaster(self.INPUT_F, self.tr('Input layer F'), True))
     self.addParameter(
         ParameterString(self.BAND_F,
                         self.tr('Number of raster band for raster F'),
                         '1',
                         optional=True))
     self.addParameter(
         ParameterString(
             self.FORMULA,
             self.
             tr('Calculation in gdalnumeric syntax using +-/* or any numpy array functions (i.e. logical_and())'
                ),
             'A*2',
             optional=False))
     self.addParameter(
         ParameterString(self.NO_DATA,
                         self.tr('Set output nodata value'),
                         '',
                         optional=True))
     self.addParameter(
         ParameterSelection(self.RTYPE, self.tr('Output raster type'),
                            self.TYPE, 5))
     #self.addParameter(ParameterBoolean(
     #    self.DEBUG, self.tr('Print debugging information'), False))
     self.addParameter(
         ParameterString(self.EXTRA,
                         self.tr('Additional creation parameters'),
                         '',
                         optional=True))
     self.addOutput(OutputRaster(self.OUTPUT, self.tr('Calculated')))
Example #7
0
    def processParameterLine(self, line):
        param = None
        out = None
        line = line.replace("#", "")

        # If the line is in the format of the text description files for
        # normal algorithms, then process it using parameter and output
        # factories
        if "|" in line:
            self.processDescriptionParameterLine(line)
            return
        if line == "nomodeler":
            self.showInModeler = False
            return
        tokens = line.split("=", 1)
        desc = self.createDescriptiveName(tokens[0])
        if tokens[1].lower().strip() == "group":
            self.group = tokens[0]
            return
        if tokens[1].lower().strip() == "name":
            self.name = tokens[0]
            return
        if tokens[1].lower().strip() == "raster":
            param = ParameterRaster(tokens[0], desc, False)
        elif tokens[1].lower().strip() == "vector":
            param = ParameterVector(tokens[0], desc, [ParameterVector.VECTOR_TYPE_ANY])
        elif tokens[1].lower().strip() == "vector point":
            param = ParameterVector(tokens[0], desc, [ParameterVector.VECTOR_TYPE_POINT])
        elif tokens[1].lower().strip() == "vector line":
            param = ParameterVector(tokens[0], desc, [ParameterVector.VECTOR_TYPE_LINE])
        elif tokens[1].lower().strip() == "vector polygon":
            param = ParameterVector(tokens[0], desc, [ParameterVector.VECTOR_TYPE_POLYGON])
        elif tokens[1].lower().strip() == "table":
            param = ParameterTable(tokens[0], desc, False)
        elif tokens[1].lower().strip() == "multiple raster":
            param = ParameterMultipleInput(tokens[0], desc, ParameterMultipleInput.TYPE_RASTER)
            param.optional = False
        elif tokens[1].lower().strip() == "multiple vector":
            param = ParameterMultipleInput(tokens[0], desc, ParameterMultipleInput.TYPE_VECTOR_ANY)
            param.optional = False
        elif tokens[1].lower().strip().startswith("selection"):
            options = tokens[1].strip()[len("selection ") :].split(";")
            param = ParameterSelection(tokens[0], desc, options)
        elif tokens[1].lower().strip().startswith("boolean"):
            default = tokens[1].strip()[len("boolean") + 1 :]
            param = ParameterBoolean(tokens[0], desc, default)
        elif tokens[1].lower().strip() == "extent":
            param = ParameterExtent(tokens[0], desc)
        elif tokens[1].lower().strip() == "file":
            param = ParameterFile(tokens[0], desc, False)
        elif tokens[1].lower().strip() == "folder":
            param = ParameterFile(tokens[0], desc, True)
        elif tokens[1].lower().strip().startswith("number"):
            default = tokens[1].strip()[len("number") + 1 :]
            param = ParameterNumber(tokens[0], desc, default=default)
        elif tokens[1].lower().strip().startswith("field"):
            field = tokens[1].strip()[len("field") + 1 :]
            found = False
            for p in self.parameters:
                if p.name == field:
                    found = True
                    break
            if found:
                param = ParameterTableField(tokens[0], desc, field)
        elif tokens[1].lower().strip().startswith("string"):
            default = tokens[1].strip()[len("string") + 1 :]
            param = ParameterString(tokens[0], desc, default)
        elif tokens[1].lower().strip().startswith("longstring"):
            default = tokens[1].strip()[len("longstring") + 1 :]
            param = ParameterString(tokens[0], desc, default, multiline=True)
        elif tokens[1].lower().strip().startswith("crs"):
            default = tokens[1].strip()[len("crs") + 1 :]
            if not default:
                default = "EPSG:4326"
            param = ParameterCrs(tokens[0], desc, default)
        elif tokens[1].lower().strip().startswith("output raster"):
            out = OutputRaster()
        elif tokens[1].lower().strip().startswith("output vector"):
            out = OutputVector()
        elif tokens[1].lower().strip().startswith("output table"):
            out = OutputTable()
        elif tokens[1].lower().strip().startswith("output html"):
            out = OutputHTML()
        elif tokens[1].lower().strip().startswith("output file"):
            out = OutputFile()
            subtokens = tokens[1].split(" ")
            if len(subtokens) > 2:
                out.ext = subtokens[2]
        elif tokens[1].lower().strip().startswith("output directory"):
            out = OutputDirectory()
        elif tokens[1].lower().strip().startswith("output number"):
            out = OutputNumber()
        elif tokens[1].lower().strip().startswith("output string"):
            out = OutputString()

        if param is not None:
            self.addParameter(param)
        elif out is not None:
            out.name = tokens[0]
            out.description = desc
            self.addOutput(out)
        else:
            raise WrongScriptException(
                self.tr("Could not load script: %s.\n" "Problem with line %d", "ScriptAlgorithm")
                % (self.descriptionFile or "", line)
            )
Example #8
0
    def defineCharacteristics(self):
        self.name, self.i18n_name = self.trAlgorithm('Clip raster by extent')
        self.group, self.i18n_group = self.trAlgorithm('[GDAL] Extraction')
        self.addParameter(
            ParameterRaster(self.INPUT, self.tr('Input layer'), False))
        self.addParameter(
            ParameterString(
                self.NO_DATA,
                self.
                tr("Nodata value, leave blank to take the nodata value from input"
                   ),
                '',
                optional=True))
        self.addParameter(
            ParameterExtent(self.PROJWIN, self.tr('Clipping extent')))

        params = []
        params.append(
            ParameterSelection(self.RTYPE, self.tr('Output raster type'),
                               self.TYPE, 5))
        params.append(
            ParameterSelection(self.COMPRESS,
                               self.tr('GeoTIFF options. Compression type:'),
                               self.COMPRESSTYPE, 4))
        params.append(
            ParameterNumber(self.JPEGCOMPRESSION,
                            self.tr('Set the JPEG compression level'), 1, 100,
                            75))
        params.append(
            ParameterNumber(self.ZLEVEL,
                            self.tr('Set the DEFLATE compression level'), 1, 9,
                            6))
        params.append(
            ParameterNumber(
                self.PREDICTOR,
                self.tr('Set the predictor for LZW or DEFLATE compression'), 1,
                3, 1))
        params.append(
            ParameterBoolean(
                self.TILED,
                self.tr(
                    'Create tiled output (only used for the GTiff format)'),
                False))
        params.append(
            ParameterSelection(
                self.BIGTIFF,
                self.
                tr('Control whether the created file is a BigTIFF or a classic TIFF'
                   ), self.BIGTIFFTYPE, 0))
        params.append(
            ParameterBoolean(
                self.TFW,
                self.
                tr('Force the generation of an associated ESRI world file (.tfw))'
                   ), False))
        params.append(
            ParameterString(self.EXTRA,
                            self.tr('Additional creation parameters'),
                            '',
                            optional=True))

        for param in params:
            param.isAdvanced = True
            self.addParameter(param)

        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Clipped (extent)')))
Example #9
0
    def processParameterLine(self, line):
        param = None
        out = None
        line = line.replace('#', '')
        if line.lower().strip().startswith('showplots'):
            self.showPlots = True
            self.addOutput(OutputHTML(RAlgorithm.RPLOTS, 'R Plots'))
            return
        if line.lower().strip().startswith('dontuserasterpackage'):
            self.useRasterPackage = False
            return
        if line.lower().strip().startswith('passfilenames'):
            self.passFileNames = True
            return
        tokens = line.split('=')
        desc = self.createDescriptiveName(tokens[0])
        if tokens[1].lower().strip() == 'group':
            self.group = tokens[0]
            return
        if tokens[1].lower().strip().startswith('raster'):
            param = ParameterRaster(tokens[0], desc, False)
        elif tokens[1].lower().strip() == 'vector':
            param = ParameterVector(tokens[0], desc,
                                    [ParameterVector.VECTOR_TYPE_ANY])
        elif tokens[1].lower().strip() == 'vector point':
            param = ParameterVector(tokens[0], desc,
                                    [ParameterVector.VECTOR_TYPE_POINT])
        elif tokens[1].lower().strip() == 'vector line':
            param = ParameterVector(tokens[0], desc,
                                    [ParameterVector.VECTOR_TYPE_LINE])
        elif tokens[1].lower().strip() == 'vector polygon':
            param = ParameterVector(tokens[0], desc,
                                    [ParameterVector.VECTOR_TYPE_POLYGON])
        elif tokens[1].lower().strip() == 'table':
            param = ParameterTable(tokens[0], desc, False)
        elif tokens[1].lower().strip().startswith('multiple raster'):
            param = ParameterMultipleInput(tokens[0], desc,
                                           ParameterMultipleInput.TYPE_RASTER)
            param.optional = False
        elif tokens[1].lower().strip() == 'multiple vector':
            param = ParameterMultipleInput(tokens[0], desc,
                                           ParameterMultipleInput.TYPE_VECTOR_ANY)
            param.optional = False
        elif tokens[1].lower().strip().startswith('selection'):
            options = tokens[1].strip()[len('selection'):].split(';')
            param = ParameterSelection(tokens[0], desc, options)
        elif tokens[1].lower().strip().startswith('boolean'):
            default = tokens[1].strip()[len('boolean') + 1:]
            param = ParameterBoolean(tokens[0], desc, default)
        elif tokens[1].lower().strip().startswith('number'):
            try:
                default = float(tokens[1].strip()[len('number') + 1:])
                param = ParameterNumber(tokens[0], desc, default=default)
            except:
                raise WrongScriptException(
                    self.tr('Could not load R script: %s.\n Problem with line %s' % (self.descriptionFile, line)))
        elif tokens[1].lower().strip().startswith('field'):
            field = tokens[1].strip()[len('field') + 1:]
            found = False
            for p in self.parameters:
                if p.name == field:
                    found = True
                    break
            if found:
                param = ParameterTableField(tokens[0], tokens[0], field)
        elif tokens[1].lower().strip() == 'extent':
            param = ParameterExtent(tokens[0], desc)
        elif tokens[1].lower().strip() == 'file':
            param = ParameterFile(tokens[0], desc, False)
        elif tokens[1].lower().strip() == 'folder':
            param = ParameterFile(tokens[0], desc, True)
        elif tokens[1].lower().strip().startswith('string'):
            default = tokens[1].strip()[len('string') + 1:]
            param = ParameterString(tokens[0], desc, default)
        elif tokens[1].lower().strip().startswith('longstring'):
            default = tokens[1].strip()[len('longstring') + 1:]
            param = ParameterString(tokens[0], desc, default, multiline=True)
        elif tokens[1].lower().strip().startswith('output raster'):
            out = OutputRaster()
        elif tokens[1].lower().strip().startswith('output vector'):
            out = OutputVector()
        elif tokens[1].lower().strip().startswith('output table'):
            out = OutputTable()
        elif tokens[1].lower().strip().startswith('output file'):
            out = OutputFile()

        if param is not None:
            self.addParameter(param)
        elif out is not None:
            out.name = tokens[0]
            out.description = tokens[0]
            self.addOutput(out)
        else:
            raise WrongScriptException(
                self.tr('Could not load R script: %s.\n Problem with line %s' % (self.descriptionFile, line)))
    def defineCharacteristics(self):
        # WPS Data Inputs
        for key, value in self.process.getDataInputs().iteritems():
            optionalBoolean = value.getMinOccurs() != 1
            required = u' (※)' if value.getMinOccurs() == 1 else u''
            paramIdentifier = value.getIdentifier()
            paramTitle = value.getTitle() + required

            if isinstance(value, WPSLiteralData):
                # string, double, int, boolean
                defaultValue = value.getDefaultValue()
                param = None
                if value.getType() == LiteralType.BOOLEAN:
                    param = ParameterBoolean(paramIdentifier, paramTitle)
                elif value.getType() == LiteralType.FLOAT:
                    param = ParameterNumber(paramIdentifier, paramTitle)
                    param.isInteger = False
                elif value.getType() == LiteralType.INT:
                    param = ParameterNumber(paramIdentifier, paramTitle)
                    param.isInteger = True
                else:
                    if value.getAllowedValues():
                        param = ParameterSelection2(paramIdentifier,
                                                    paramTitle,
                                                    value.getAllowedValues())
                    else:
                        param = ParameterString(paramIdentifier,
                                                paramTitle,
                                                optional=optionalBoolean)

                if defaultValue:
                    param.setValue(defaultValue)

                self.addParameter(param)
            elif isinstance(value, WPSComplexData):
                # geometry, featurecollection, gridcoverage, xml
                param = None
                if value.getType() == ComplexType.VECTOR:
                    # select vector layer
                    param = ParameterVector(paramIdentifier,
                                            paramTitle,
                                            optional=optionalBoolean)
                elif value.getType() == ComplexType.RASTER:
                    # select raster layer
                    param = ParameterRaster(paramIdentifier,
                                            paramTitle,
                                            optional=optionalBoolean)
                elif value.getType() == ComplexType.GEOMETRY:
                    # use WKT format
                    param = ParameterString(paramIdentifier,
                                            paramTitle,
                                            multiline=True,
                                            optional=optionalBoolean)
                elif value.getType() == ComplexType.FILTER:
                    # use ECQL expression
                    param = ParameterString(paramIdentifier,
                                            paramTitle,
                                            multiline=True,
                                            optional=optionalBoolean)
                elif value.getType() == ComplexType.XML:
                    # use XML Expression
                    param = ParameterString(paramIdentifier,
                                            paramTitle,
                                            multiline=True,
                                            optional=optionalBoolean)

                self.addParameter(param)
            elif isinstance(value, WPSBoundingBoxData):
                # default = current map layer's minimum extent & crs
                param = ParameterExtent(paramIdentifier, paramTitle)

                # The value is a string in the form "xmin, xmax, ymin, ymax"
                extent = iface.mapCanvas().extent()
                default_extent = str(extent.xMinimum()) + ',' + str(extent.xMaximum()) + ',' \
                    + str(extent.yMinimum()) + ',' + str(extent.yMaximum())
                param.setValue(default_extent)
                self.addParameter(param)

        # WPS Process Outputs
        # OutputString --> OutputHTML
        for key, value in self.process.getProcessOutputs().iteritems():
            if isinstance(value, WPSLiteralOutput):
                # string, float, int, boolean
                self.addOutput(
                    OutputHTML(value.getIdentifier(), value.getTitle()))
            elif isinstance(value, WPSComplexOutput):
                # geometry, featurecollection, gridcoverage, xml
                if value.getType() == ComplexType.VECTOR:
                    self.addOutput(
                        OutputVector(value.getIdentifier(), value.getTitle()))
                elif value.getType() == ComplexType.RASTER:
                    self.addOutput(
                        OutputRaster(value.getIdentifier(), value.getTitle()))
                elif value.getType() == ComplexType.XML:
                    self.addOutput(
                        OutputHTML(value.getIdentifier(), value.getTitle()))
                elif value.getType() == ComplexType.FILTER:
                    self.addOutput(
                        OutputHTML(value.getIdentifier(), value.getTitle()))
                elif value.getType() == ComplexType.GEOMETRY:
                    # return WKT and save shapefile
                    self.addOutput(
                        OutputVector(value.getIdentifier(), value.getTitle()))
Example #11
0
    def processParameterLine(self, line):
        param = None
        out = None
        line = line.replace('#', '')

        # If the line is in the format of the text description files for
        # normal algorithms, then process it using parameter and output
        # factories
        if '|' in line:
            self.processDescriptionParameterLine(line)
            return
        if line == "nomodeler":
            self.showInModeler = False
            return
        tokens = line.split('=', 1)
        desc = self.createDescriptiveName(tokens[0])
        if tokens[1].lower().strip() == 'group':
            self.group = tokens[0]
            return
        if tokens[1].lower().strip() == 'name':
            self.name = tokens[0]
            return
        if tokens[1].lower().strip() == 'raster':
            param = ParameterRaster(tokens[0], desc, False)
        elif tokens[1].lower().strip() == 'vector':
            param = ParameterVector(tokens[0], desc,
                                    [ParameterVector.VECTOR_TYPE_ANY])
        elif tokens[1].lower().strip() == 'vector point':
            param = ParameterVector(tokens[0], desc,
                                    [ParameterVector.VECTOR_TYPE_POINT])
        elif tokens[1].lower().strip() == 'vector line':
            param = ParameterVector(tokens[0], desc,
                                    [ParameterVector.VECTOR_TYPE_LINE])
        elif tokens[1].lower().strip() == 'vector polygon':
            param = ParameterVector(tokens[0], desc,
                                    [ParameterVector.VECTOR_TYPE_POLYGON])
        elif tokens[1].lower().strip() == 'table':
            param = ParameterTable(tokens[0], desc, False)
        elif tokens[1].lower().strip() == 'multiple raster':
            param = ParameterMultipleInput(tokens[0], desc,
                                           ParameterMultipleInput.TYPE_RASTER)
            param.optional = False
        elif tokens[1].lower().strip() == 'multiple vector':
            param = ParameterMultipleInput(
                tokens[0], desc, ParameterMultipleInput.TYPE_VECTOR_ANY)
            param.optional = False
        elif tokens[1].lower().strip().startswith('selection'):
            options = tokens[1].strip()[len('selection '):].split(';')
            param = ParameterSelection(tokens[0], desc, options)
        elif tokens[1].lower().strip().startswith('boolean'):
            default = tokens[1].strip()[len('boolean') + 1:]
            param = ParameterBoolean(tokens[0], desc, default)
        elif tokens[1].lower().strip() == 'extent':
            param = ParameterExtent(tokens[0], desc)
        elif tokens[1].lower().strip() == 'file':
            param = ParameterFile(tokens[0], desc, False)
        elif tokens[1].lower().strip() == 'folder':
            param = ParameterFile(tokens[0], desc, True)
        elif tokens[1].lower().strip().startswith('number'):
            default = tokens[1].strip()[len('number') + 1:]
            param = ParameterNumber(tokens[0], desc, default=default)
        elif tokens[1].lower().strip().startswith('field'):
            field = tokens[1].strip()[len('field') + 1:]
            found = False
            for p in self.parameters:
                if p.name == field:
                    found = True
                    break
            if found:
                param = ParameterTableField(tokens[0], desc, field)
        elif tokens[1].lower().strip().startswith('string'):
            default = tokens[1].strip()[len('string') + 1:]
            param = ParameterString(tokens[0], desc, default)
        elif tokens[1].lower().strip().startswith('longstring'):
            default = tokens[1].strip()[len('longstring') + 1:]
            param = ParameterString(tokens[0], desc, default, multiline=True)
        elif tokens[1].lower().strip().startswith('crs'):
            default = tokens[1].strip()[len('crs') + 1:]
            if not default:
                default = 'EPSG:4326'
            param = ParameterCrs(tokens[0], desc, default)
        elif tokens[1].lower().strip().startswith('output raster'):
            out = OutputRaster()
        elif tokens[1].lower().strip().startswith('output vector'):
            out = OutputVector()
        elif tokens[1].lower().strip().startswith('output table'):
            out = OutputTable()
        elif tokens[1].lower().strip().startswith('output html'):
            out = OutputHTML()
        elif tokens[1].lower().strip().startswith('output file'):
            out = OutputFile()
            subtokens = tokens[1].split(' ')
            if len(subtokens) > 2:
                out.ext = subtokens[2]
        elif tokens[1].lower().strip().startswith('output directory'):
            out = OutputDirectory()
        elif tokens[1].lower().strip().startswith('output number'):
            out = OutputNumber()
        elif tokens[1].lower().strip().startswith('output string'):
            out = OutputString()

        if param is not None:
            self.addParameter(param)
        elif out is not None:
            out.name = tokens[0]
            out.description = desc
            self.addOutput(out)
        else:
            raise WrongScriptException(
                self.tr('Could not load script: %s.\n'
                        'Problem with line %d', 'ScriptAlgorithm') %
                (self.descriptionFile or '', line))
Example #12
0
 def defineCharacteristics(self):
     self.name = "DTM to TIF"
     self.group = "Conversion"
     self.addParameter(ParameterFile(self.INPUT, "Input .dtm layer"))
     self.addOutput(OutputRaster(self.OUTPUT, 'Output file name'))
     self.addAdvancedModifiers()
Example #13
0
 def addOutputs(self):
     self.addOutput(
         OutputRaster(self.OUTPUT_DEPTHS_RASTER, self.tr('Depths')))
Example #14
0
    def defineCharacteristics(self):
        self.addParameter(ParameterRaster(self.INPUT, self.tr('Input layer'), False))
        self.addParameter(ParameterCrs(self.CRS,
                                       self.tr('Desired CRS'), ''))

        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Layer with projection'), True))
Example #15
0
    def processOutputParameterToken(self, token):
        out = None

        if token.lower().strip().startswith('raster'):
            out = OutputRaster()
        elif token.lower().strip().startswith('vector'):
            out = OutputVector()
        elif token.lower().strip().startswith('table'):
            out = OutputTable()
        elif token.lower().strip().startswith('html'):
            out = OutputHTML()
        elif token.lower().strip().startswith('file'):
            out = OutputFile()
            subtokens = token.split(' ')
            if len(subtokens) > 2:
                out.ext = subtokens[2]
        elif token.lower().strip().startswith('directory'):
            out = OutputDirectory()
        elif token.lower().strip().startswith('number'):
            out = OutputNumber()
        elif token.lower().strip().startswith('string'):
            out = OutputString()
        elif token.lower().strip().startswith('extent'):
            out = OutputExtent()

        return out
Example #16
0
 def initAlgorithm(self, config=None):
     self.addParameter(ParameterRaster(rgb2pct.INPUT,
                                       self.tr('Input layer'), False))
     self.addParameter(ParameterNumber(rgb2pct.NCOLORS,
                                       self.tr('Number of colors'), 1, None, 2))
     self.addOutput(OutputRaster(rgb2pct.OUTPUT, self.tr('RGB to PCT')))
Example #17
0
 def addOutputs(self):
     self.addOutput(
         OutputRaster(self.OUTPUT_ACCUMULATED_RASTER, self.tr('accum')))
Example #18
0
    def __init__(self):
        super().__init__()
        self.addParameter(
            ParameterVector(self.INPUT_LAYER, self.tr('Point layer'),
                            [dataobjects.TYPE_VECTOR_POINT]))
        self.addParameter(
            ParameterNumber(self.RADIUS, self.tr('Radius (layer units)'), 0.0,
                            9999999999, 100.0))

        radius_field_param = ParameterTableField(
            self.RADIUS_FIELD,
            self.tr('Radius from field'),
            self.INPUT_LAYER,
            optional=True,
            datatype=ParameterTableField.DATA_TYPE_NUMBER)
        radius_field_param.setFlags(
            radius_field_param.flags()
            | QgsProcessingParameterDefinition.FlagAdvanced)
        self.addParameter(radius_field_param)

        class ParameterHeatmapPixelSize(ParameterNumber):
            def __init__(self,
                         name='',
                         description='',
                         parent_layer=None,
                         radius_param=None,
                         radius_field_param=None,
                         minValue=None,
                         maxValue=None,
                         default=None,
                         optional=False,
                         metadata={}):
                ParameterNumber.__init__(self, name, description, minValue,
                                         maxValue, default, optional, metadata)
                self.parent_layer = parent_layer
                self.radius_param = radius_param
                self.radius_field_param = radius_field_param

        self.addParameter(
            ParameterHeatmapPixelSize(
                self.PIXEL_SIZE,
                self.tr('Output raster size'),
                parent_layer=self.INPUT_LAYER,
                radius_param=self.RADIUS,
                radius_field_param=self.RADIUS_FIELD,
                minValue=0.0,
                maxValue=9999999999,
                default=0.1,
                metadata={'widget_wrapper': HeatmapPixelSizeWidgetWrapper}))

        weight_field_param = ParameterTableField(
            self.WEIGHT_FIELD,
            self.tr('Weight from field'),
            self.INPUT_LAYER,
            optional=True,
            datatype=ParameterTableField.DATA_TYPE_NUMBER)
        weight_field_param.setFlags(
            weight_field_param.flags()
            | QgsProcessingParameterDefinition.FlagAdvanced)
        self.addParameter(weight_field_param)
        kernel_shape_param = ParameterSelection(self.KERNEL,
                                                self.tr('Kernel shape'),
                                                self.KERNELS)
        kernel_shape_param.setFlags(
            kernel_shape_param.flags()
            | QgsProcessingParameterDefinition.FlagAdvanced)
        self.addParameter(kernel_shape_param)
        decay_ratio = ParameterNumber(
            self.DECAY, self.tr('Decay ratio (Triangular kernels only)'),
            -100.0, 100.0, 0.0)
        decay_ratio.setFlags(decay_ratio.flags()
                             | QgsProcessingParameterDefinition.FlagAdvanced)
        self.addParameter(decay_ratio)
        output_scaling = ParameterSelection(self.OUTPUT_VALUE,
                                            self.tr('Output value scaling'),
                                            self.OUTPUT_VALUES)
        output_scaling.setFlags(
            output_scaling.flags()
            | QgsProcessingParameterDefinition.FlagAdvanced)
        self.addParameter(output_scaling)
        self.addOutput(OutputRaster(self.OUTPUT_LAYER, self.tr('Heatmap')))
Example #19
0
    def defineCharacteristics(self):
        self.name, self.i18n_name = self.trAlgorithm('Warp (reproject)')
        self.group, self.i18n_group = self.trAlgorithm('[GDAL] Projections')
        self.addParameter(
            ParameterRaster(self.INPUT, self.tr('Input layer'), False))
        self.addParameter(
            ParameterCrs(self.SOURCE_SRS,
                         self.tr('Source SRS'),
                         '',
                         optional=True))
        self.addParameter(
            ParameterCrs(self.DEST_SRS, self.tr('Destination SRS'), ''))
        self.addParameter(
            ParameterString(
                self.NO_DATA,
                self.
                tr("Nodata value, leave blank to take the nodata value from input"
                   ),
                '',
                optional=True))
        self.addParameter(
            ParameterNumber(
                self.TR,
                self.
                tr('Output file resolution in target georeferenced units (leave 0 for no change)'
                   ), 0.0, None, 0.0))
        self.addParameter(
            ParameterSelection(self.METHOD, self.tr('Resampling method'),
                               self.METHOD_OPTIONS))
        self.addParameter(
            ParameterExtent(self.RAST_EXT, self.tr('Raster extent')))

        params = []
        params.append(
            ParameterSelection(self.RTYPE, self.tr('Output raster type'),
                               self.TYPE, 5))
        params.append(
            ParameterSelection(self.COMPRESS,
                               self.tr('GeoTIFF options. Compression type:'),
                               self.COMPRESSTYPE, 4))
        params.append(
            ParameterNumber(self.JPEGCOMPRESSION,
                            self.tr('Set the JPEG compression level'), 1, 100,
                            75))
        params.append(
            ParameterNumber(self.ZLEVEL,
                            self.tr('Set the DEFLATE compression level'), 1, 9,
                            6))
        params.append(
            ParameterNumber(
                self.PREDICTOR,
                self.tr('Set the predictor for LZW or DEFLATE compression'), 1,
                3, 1))
        params.append(
            ParameterBoolean(
                self.TILED,
                self.tr(
                    'Create tiled output (only used for the GTiff format)'),
                False))
        params.append(
            ParameterSelection(
                self.BIGTIFF,
                self.
                tr('Control whether the created file is a BigTIFF or a classic TIFF'
                   ), self.BIGTIFFTYPE, 0))
        params.append(
            ParameterBoolean(
                self.TFW,
                self.
                tr('Force the generation of an associated ESRI world file (.tfw))'
                   ), False))
        params.append(
            ParameterString(self.EXTRA,
                            self.tr('Additional creation parameters'),
                            '',
                            optional=True))

        for param in params:
            param.isAdvanced = True
            self.addParameter(param)

        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Reprojected')))
Example #20
0
    def defineCharacteristics(self):
        self.name, self.i18n_name = self.trAlgorithm(
            'Rasterize (vector to raster)')
        self.group, self.i18n_group = self.trAlgorithm('[GDAL] Conversion')
        self.addParameter(ParameterVector(self.INPUT, self.tr('Input layer')))
        self.addParameter(
            ParameterTableField(self.FIELD, self.tr('Attribute field'),
                                self.INPUT))
        self.addParameter(
            ParameterSelection(
                self.DIMENSIONS,
                self.
                tr('Set output raster size (ignored if above option is checked)'
                   ), [
                       'Output size in pixels',
                       'Output resolution in map units per pixel'
                   ], 1))
        self.addParameter(
            ParameterNumber(self.WIDTH, self.tr('Horizontal'), 0.0,
                            99999999.999999, 100.0))
        self.addParameter(
            ParameterNumber(self.HEIGHT, self.tr('Vertical'), 0.0,
                            99999999.999999, 100.0))
        self.addParameter(
            ParameterExtent(self.RAST_EXT, self.tr('Raster extent')))

        params = []
        params.append(
            ParameterSelection(self.RTYPE, self.tr('Raster type'), self.TYPE,
                               5))
        params.append(
            ParameterString(self.NO_DATA,
                            self.tr("Nodata value"),
                            '',
                            optional=True))
        params.append(
            ParameterSelection(self.COMPRESS,
                               self.tr('GeoTIFF options. Compression type:'),
                               self.COMPRESSTYPE, 4))
        params.append(
            ParameterNumber(self.JPEGCOMPRESSION,
                            self.tr('Set the JPEG compression level'), 1, 100,
                            75))
        params.append(
            ParameterNumber(self.ZLEVEL,
                            self.tr('Set the DEFLATE compression level'), 1, 9,
                            6))
        params.append(
            ParameterNumber(
                self.PREDICTOR,
                self.tr('Set the predictor for LZW or DEFLATE compression'), 1,
                3, 1))
        params.append(
            ParameterBoolean(
                self.TILED,
                self.tr(
                    'Create tiled output (only used for the GTiff format)'),
                False))
        params.append(
            ParameterSelection(
                self.BIGTIFF,
                self.
                tr('Control whether the created file is a BigTIFF or a classic TIFF'
                   ), self.BIGTIFFTYPE, 0))
        self.addParameter(
            ParameterBoolean(
                self.TFW,
                self.
                tr('Force the generation of an associated ESRI world file (.tfw)'
                   ), False))
        params.append(
            ParameterString(self.EXTRA,
                            self.tr('Additional creation parameters'),
                            '',
                            optional=True))

        for param in params:
            param.isAdvanced = True
            self.addParameter(param)

        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Rasterized')))
Example #21
0
    def processOutputParameterToken(self, token):
        out = None

        if token.lower().strip().startswith('raster'):
            out = OutputRaster()
        elif token.lower().strip() == 'vector':
            out = OutputVector()
        elif token.lower().strip() == 'vector point':
            out = OutputVector(datatype=[dataobjects.TYPE_VECTOR_POINT])
        elif token.lower().strip() == 'vector line':
            out = OutputVector(datatype=[OutputVector.TYPE_VECTOR_LINE])
        elif token.lower().strip() == 'vector polygon':
            out = OutputVector(datatype=[OutputVector.TYPE_VECTOR_POLYGON])
        elif token.lower().strip().startswith('table'):
            out = OutputTable()
        elif token.lower().strip().startswith('html'):
            out = OutputHTML()
        elif token.lower().strip().startswith('file'):
            out = OutputFile()
            subtokens = token.split(' ')
            if len(subtokens) > 2:
                out.ext = subtokens[2]
        elif token.lower().strip().startswith('directory'):
            out = OutputDirectory()
        elif token.lower().strip().startswith('number'):
            out = OutputNumber()
        elif token.lower().strip().startswith('string'):
            out = OutputString()
        elif token.lower().strip().startswith('extent'):
            out = OutputExtent()

        return out
Example #22
0
 def initAlgorithm(self, config=None):
     self.addParameter(ParameterRaster(self.INPUT, self.tr('Raster layer')))
     self.addParameter(
         ParameterFile(self.STYLE, self.tr('Style file'), False, False,
                       'qml'))
     self.addOutput(OutputRaster(self.OUTPUT, self.tr('Styled'), True))
Example #23
0
    def defineCharacteristics(self):
        self.name, self.i18n_name = self.trAlgorithm(
            'Heatmap (Kernel Density Estimation)')
        self.group, self.i18n_group = self.trAlgorithm('Interpolation')
        self.tags = self.tr('heatmap,kde,hotspot')

        self.addParameter(
            ParameterVector(self.INPUT_LAYER, self.tr('Point layer'),
                            [dataobjects.TYPE_VECTOR_POINT]))
        self.addParameter(
            ParameterNumber(self.RADIUS, self.tr('Radius (layer units)'), 0.0,
                            9999999999, 100.0))

        radius_field_param = ParameterTableField(
            self.RADIUS_FIELD,
            self.tr('Radius from field'),
            self.INPUT_LAYER,
            optional=True,
            datatype=ParameterTableField.DATA_TYPE_NUMBER)
        radius_field_param.isAdvanced = True
        self.addParameter(radius_field_param)

        class ParameterHeatmapPixelSize(ParameterNumber):
            def __init__(self,
                         name='',
                         description='',
                         parent_layer=None,
                         radius_param=None,
                         radius_field_param=None,
                         minValue=None,
                         maxValue=None,
                         default=None,
                         optional=False,
                         metadata={}):
                ParameterNumber.__init__(self, name, description, minValue,
                                         maxValue, default, optional, metadata)
                self.parent_layer = parent_layer
                self.radius_param = radius_param
                self.radius_field_param = radius_field_param

        self.addParameter(
            ParameterHeatmapPixelSize(
                self.PIXEL_SIZE,
                self.tr('Output raster size'),
                parent_layer=self.INPUT_LAYER,
                radius_param=self.RADIUS,
                radius_field_param=self.RADIUS_FIELD,
                minValue=0.0,
                maxValue=9999999999,
                default=0.1,
                metadata={'widget_wrapper': HeatmapPixelSizeWidgetWrapper}))

        weight_field_param = ParameterTableField(
            self.WEIGHT_FIELD,
            self.tr('Weight from field'),
            self.INPUT_LAYER,
            optional=True,
            datatype=ParameterTableField.DATA_TYPE_NUMBER)
        weight_field_param.isAdvanced = True
        self.addParameter(weight_field_param)
        kernel_shape_param = ParameterSelection(self.KERNEL,
                                                self.tr('Kernel shape'),
                                                self.KERNELS)
        kernel_shape_param.isAdvanced = True
        self.addParameter(kernel_shape_param)
        decay_ratio = ParameterNumber(
            self.DECAY, self.tr('Decay ratio (Triangular kernels only)'),
            -100.0, 100.0, 0.0)
        decay_ratio.isAdvanced = True
        self.addParameter(decay_ratio)
        output_scaling = ParameterSelection(self.OUTPUT_VALUE,
                                            self.tr('Output value scaling'),
                                            self.OUTPUT_VALUES)
        output_scaling.isAdvanced = True
        self.addParameter(output_scaling)
        self.addOutput(OutputRaster(self.OUTPUT_LAYER, self.tr('Heatmap')))
Example #24
0
 def defineCharacteristics(self):
     self.addParameter(ParameterRaster(self.INPUT, self.tr('Raster layer')))
     self.addParameter(
         ParameterFile(self.STYLE, self.tr('Style file'), False, False,
                       'qml'))
     self.addOutput(OutputRaster(self.OUTPUT, self.tr('Styled'), True))
Example #25
0
    def defineCharacteristics(self):
        self.name, self.i18n_name = self.trAlgorithm(
            'Translate (convert format)')
        self.group, self.i18n_group = self.trAlgorithm('[GDAL] Conversion')
        self.addParameter(
            ParameterRaster(self.INPUT, self.tr('Input layer'), False))
        self.addParameter(
            ParameterNumber(
                self.OUTSIZE,
                self.tr('Set the size of the output file (In pixels or %)'), 1,
                None, 100))
        self.addParameter(
            ParameterBoolean(
                self.OUTSIZE_PERC,
                self.tr('Output size is a percentage of input size'), True))
        self.addParameter(
            ParameterString(
                self.NO_DATA,
                self.
                tr("Nodata value, leave blank to take the nodata value from input"
                   ),
                '',
                optional=True))
        self.addParameter(
            ParameterSelection(self.EXPAND, self.tr('Expand'),
                               ['none', 'gray', 'rgb', 'rgba']))
        self.addParameter(
            ParameterCrs(
                self.SRS,
                self.
                tr('Output projection for output file [leave blank to use input projection]'
                   ),
                None,
                optional=True))
        self.addParameter(
            ParameterExtent(
                self.PROJWIN,
                self.tr('Subset based on georeferenced coordinates')))
        self.addParameter(
            ParameterBoolean(
                self.SDS,
                self.
                tr('Copy all subdatasets of this file to individual output files'
                   ), False))

        params = []
        params.append(
            ParameterSelection(self.RTYPE, self.tr('Output raster type'),
                               self.TYPE, 5))
        params.append(
            ParameterSelection(self.COMPRESS,
                               self.tr('GeoTIFF options. Compression type:'),
                               self.COMPRESSTYPE, 4))
        params.append(
            ParameterNumber(self.JPEGCOMPRESSION,
                            self.tr('Set the JPEG compression level'), 1, 100,
                            75))
        params.append(
            ParameterNumber(self.ZLEVEL,
                            self.tr('Set the DEFLATE compression level'), 1, 9,
                            6))
        params.append(
            ParameterNumber(
                self.PREDICTOR,
                self.tr('Set the predictor for LZW or DEFLATE compression'), 1,
                3, 1))
        params.append(
            ParameterBoolean(
                self.TILED,
                self.tr(
                    'Create tiled output (only used for the GTiff format)'),
                False))
        params.append(
            ParameterSelection(
                self.BIGTIFF,
                self.
                tr('Control whether the created file is a BigTIFF or a classic TIFF'
                   ), self.BIGTIFFTYPE, 0))
        params.append(
            ParameterBoolean(
                self.TFW,
                self.
                tr('Force the generation of an associated ESRI world file (.tfw))'
                   ), False))
        params.append(
            ParameterString(self.EXTRA,
                            self.tr('Additional creation parameters'),
                            '',
                            optional=True))

        for param in params:
            param.isAdvanced = True
            self.addParameter(param)

        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Converted')))
Example #26
0
 def defineCharacteristics(self):
     self.name = 'Rasterize (vector to raster)'
     self.group = '[GDAL] Conversion'
     self.addParameter(ParameterVector(self.INPUT, self.tr('Input layer')))
     self.addParameter(
         ParameterTableField(self.FIELD, self.tr('Attribute field'),
                             self.INPUT))
     self.addParameter(
         ParameterBoolean(
             self.WRITEOVER,
             self.tr('Write values inside an existing raster layer(*)'),
             False))
     self.addParameter(
         ParameterSelection(
             self.DIMENSIONS,
             self.
             tr('Set output raster size (ignored if above option is checked)'
                ), [
                    'Output size in pixels',
                    'Output resolution in map units per pixel'
                ], 1))
     self.addParameter(
         ParameterNumber(self.WIDTH, self.tr('Horizontal'), 0.0,
                         99999999.999999, 100.0))
     self.addParameter(
         ParameterNumber(self.HEIGHT, self.tr('Vertical'), 0.0,
                         99999999.999999, 100.0))
     self.addParameter(
         ParameterSelection(self.RTYPE, self.tr('Raster type'), self.TYPE,
                            0))
     self.addParameter(
         ParameterString(self.NO_DATA, self.tr("Nodata value"), '-9999'))
     self.addParameter(
         ParameterSelection(self.COMPRESS,
                            self.tr('GeoTIFF options. Compression type:'),
                            self.COMPRESSTYPE, 0))
     self.addParameter(
         ParameterNumber(self.JPEGCOMPRESSION,
                         self.tr('Set the JPEG compression level'), 1, 100,
                         75))
     self.addParameter(
         ParameterNumber(self.ZLEVEL,
                         self.tr('Set the DEFLATE compression level'), 1, 9,
                         6))
     self.addParameter(
         ParameterNumber(
             self.PREDICTOR,
             self.tr('Set the predictor for LZW or DEFLATE compression'), 1,
             3, 1))
     self.addParameter(
         ParameterBoolean(
             self.TILED,
             self.tr(
                 'Create tiled output (only used for the GTiff format)'),
             False))
     self.addParameter(
         ParameterSelection(
             self.BIGTIFF,
             self.
             tr('Control whether the created file is a BigTIFF or a classic TIFF'
                ), self.BIGTIFFTYPE, 0))
     self.addParameter(
         ParameterBoolean(
             self.TFW,
             self.
             tr('Force the generation of an associated ESRI world file (.tfw))'
                ), False))
     self.addOutput(
         OutputRaster(
             self.OUTPUT,
             self.
             tr('Output layer: mandatory to choose an existing raster layer if the (*) option is selected'
                )))
Example #27
0
    def __init__(self):
        super().__init__()

        class ParameterReliefColors(Parameter):
            default_metadata = {
                'widget_wrapper':
                'processing.algs.qgis.ui.ReliefColorsWidget.ReliefColorsWidgetWrapper'
            }

            def __init__(self,
                         name='',
                         description='',
                         parent=None,
                         optional=True):
                Parameter.__init__(self, name, description, None, optional)
                self.parent = parent

            def setValue(self, value):
                if value is None:
                    if not self.flags(
                    ) & QgsProcessingParameterDefinition.FlagOptional:
                        return False
                    self.value = None
                    return True

                if value == '':
                    if not self.flags(
                    ) & QgsProcessingParameterDefinition.FlagOptional:
                        return False

                if isinstance(value, str):
                    self.value = value if value != '' else None
                else:
                    self.value = ParameterReliefColors.colorsToString(value)
                return True

            def getValueAsCommandLineParameter(self):
                return '"{}"'.format(self.value)

            def getAsScriptCode(self):
                param_type = ''
                param_type += 'relief colors '
                return '##' + self.name + '=' + param_type

            @classmethod
            def fromScriptCode(self, line):
                isOptional, name, definition = _splitParameterOptions(line)
                descName = _createDescriptiveName(name)
                parent = definition.lower().strip()[len('relief colors') + 1:]
                return ParameterReliefColors(name, descName, parent)

            @staticmethod
            def colorsToString(colors):
                s = ''
                for c in colors:
                    s += '{:f}, {:f}, {:d}, {:d}, {:d};'.format(
                        c[0], c[1], c[2], c[3], c[4])
                return s[:-1]

        self.addParameter(
            ParameterRaster(self.INPUT_LAYER, self.tr('Elevation layer')))
        self.addParameter(
            ParameterNumber(self.Z_FACTOR, self.tr('Z factor'), 1.0, 999999.99,
                            1.0))
        self.addParameter(
            ParameterBoolean(self.AUTO_COLORS,
                             self.tr('Generate relief classes automatically'),
                             False))
        self.addParameter(
            ParameterReliefColors(self.COLORS, self.tr('Relief colors'),
                                  self.INPUT_LAYER, True))
        self.addOutput(OutputRaster(self.OUTPUT_LAYER, self.tr('Relief')))
        self.addOutput(
            OutputTable(self.FREQUENCY_DISTRIBUTION,
                        self.tr('Frequency distribution')))
Example #28
0
 def defineCharacteristics(self):
     self.name = 'Raster calculator'
     self.group = '[GDAL] Miscellaneous'
     self.addParameter(
         ParameterRaster(self.INPUT_A, self.tr('Input layer A'), False))
     self.addParameter(
         ParameterString(self.BAND_A,
                         self.tr('Number of raster band for raster A'),
                         '1',
                         optional=True))
     self.addParameter(
         ParameterRaster(self.INPUT_B, self.tr('Input layer B'), True))
     self.addParameter(
         ParameterString(self.BAND_B,
                         self.tr('Number of raster band for raster B'),
                         '1',
                         optional=True))
     self.addParameter(
         ParameterRaster(self.INPUT_C, self.tr('Input layer C'), True))
     self.addParameter(
         ParameterString(self.BAND_C,
                         self.tr('Number of raster band for raster C'),
                         '1',
                         optional=True))
     self.addParameter(
         ParameterRaster(self.INPUT_D, self.tr('Input layer D'), True))
     self.addParameter(
         ParameterString(self.BAND_D,
                         self.tr('Number of raster band for raster D'),
                         '1',
                         optional=True))
     self.addParameter(
         ParameterRaster(self.INPUT_E, self.tr('Input layer E'), True))
     self.addParameter(
         ParameterString(self.BAND_E,
                         self.tr('Number of raster band for raster E'),
                         '1',
                         optional=True))
     self.addParameter(
         ParameterRaster(self.INPUT_F, self.tr('Input layer F'), True))
     self.addParameter(
         ParameterString(self.BAND_F,
                         self.tr('Number of raster band for raster F'),
                         '1',
                         optional=True))
     self.addParameter(
         ParameterString(
             self.FORMULA,
             self.
             tr('Calculation in gdalnumeric syntax using +-/* or any numpy array functions (i.e. logical_and())'
                ),
             'A*2',
             optional=False))
     self.addParameter(
         ParameterString(self.NO_DATA, self.tr('Set output nodata value'),
                         '-9999'))
     self.addParameter(
         ParameterSelection(self.RTYPE, self.tr('Output raster type'),
                            self.TYPE, 5))
     #self.addParameter(ParameterBoolean(
     #    self.DEBUG, self.tr('Print debugging information'), False))
     self.addParameter(
         ParameterString(self.EXTRA,
                         self.tr('Additional creation parameters'),
                         '',
                         optional=True))
     self.addOutput(OutputRaster(self.OUTPUT, self.tr('Output layer')))
Example #29
0
    def defineCharacteristics(self):
        self.METHODS = [self.tr('Linear'),
                        self.tr('Clough-Toucher (cubic)')
                        ]

        class ParameterInterpolationData(Parameter):
            default_metadata = {
                'widget_wrapper': 'processing.algs.qgis.ui.InterpolationDataWidget.InterpolationDataWidgetWrapper'
            }

            def __init__(self, name='', description=''):
                Parameter.__init__(self, name, description)

            def setValue(self, value):
                if value is None:
                    if not self.optional:
                        return False
                    self.value = None
                    return True

                if value == '':
                    if not self.optional:
                        return False

                if isinstance(value, str):
                    self.value = value if value != '' else None
                else:
                    self.value = ParameterInterpolationData.dataToString(value)
                return True

            def getValueAsCommandLineParameter(self):
                return '"{}"'.format(self.value)

            def getAsScriptCode(self):
                param_type = ''
                param_type += 'interpolation data '
                return '##' + self.name + '=' + param_type

            @classmethod
            def fromScriptCode(self, line):
                isOptional, name, definition = _splitParameterOptions(line)
                descName = _createDescriptiveName(name)
                parent = definition.lower().strip()[len('interpolation data') + 1:]
                return ParameterInterpolationData(name, descName, parent)

            @staticmethod
            def dataToString(data):
                s = ''
                for c in data:
                    s += '{}, {}, {:d}, {:d};'.format(c[0],
                                                      c[1],
                                                      c[2],
                                                      c[3])
                return s[:-1]

        self.addParameter(ParameterInterpolationData(self.INTERPOLATION_DATA,
                                                     self.tr('Input layer(s)')))
        self.addParameter(ParameterSelection(self.METHOD,
                                             self.tr('Interpolation method'),
                                             self.METHODS,
                                             0))
        self.addParameter(ParameterNumber(self.COLUMNS,
                                          self.tr('Number of columns'),
                                          0, 10000000, 300))
        self.addParameter(ParameterNumber(self.ROWS,
                                          self.tr('Number of rows'),
                                          0, 10000000, 300))
        self.addParameter(ParameterNumber(self.CELLSIZE_X,
                                          self.tr('Cell size X'),
                                          0.0, 999999.000000, 0.0))
        self.addParameter(ParameterNumber(self.CELLSIZE_Y,
                                          self.tr('Cell size Y'),
                                          0.0, 999999.000000, 0.0))
        self.addParameter(ParameterExtent(self.EXTENT,
                                          self.tr('Extent'),
                                          optional=False))
        self.addOutput(OutputRaster(self.OUTPUT_LAYER,
                                    self.tr('Interpolated')))
        self.addOutput(OutputVector(self.TRIANULATION_FILE,
                                    self.tr('Triangulation'),
                                    ))  # datatype=dataobjects.TYPE_VECTOR_LINE))
Example #30
0
    def defineCharacteristics(self):
        self.name, self.i18n_name = self.trAlgorithm(
            'Translate (convert format)')
        self.group, self.i18n_group = self.trAlgorithm('Raster conversion')

        self.addParameter(ParameterRaster(self.INPUT, self.tr('Input layer')))
        self.addParameter(
            ParameterNumber(
                self.OUTSIZE,
                self.tr('Set the size of the output file (In pixels or %)'), 1,
                None, 100))
        self.addParameter(
            ParameterBoolean(
                self.OUTSIZE_PERC,
                self.tr('Output size is a percentage of input size'), True))
        self.addParameter(
            ParameterString(
                self.NO_DATA,
                self.
                tr("Nodata value, leave blank to take the nodata value from input"
                   ),
                '',
                optional=True))
        self.addParameter(
            ParameterSelection(self.EXPAND,
                               self.tr('Expand'),
                               ['none', 'gray', 'rgb', 'rgba'],
                               default=0))
        self.addParameter(
            ParameterCrs(
                self.SRS,
                self.
                tr('Output projection for output file [leave blank to use input projection]'
                   ),
                None,
                optional=True))
        self.addParameter(
            ParameterExtent(
                self.PROJWIN,
                self.tr('Subset based on georeferenced coordinates'),
                optional=True))
        self.addParameter(
            ParameterBoolean(
                self.SDS,
                self.
                tr('Copy all subdatasets of this file to individual output files'
                   ), False))

        self.addParameter(
            ParameterString(
                self.OPTIONS,
                self.tr('Additional creation options'),
                optional=True,
                metadata={
                    'widget_wrapper':
                    'processing.algs.gdal.ui.RasterOptionsWidget.RasterOptionsWidgetWrapper'
                }))
        self.addParameter(
            ParameterSelection(self.RTYPE, self.tr('Output raster type'),
                               self.TYPE, 5))

        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Converted')))
Example #31
0
 def addParametersRasterOutputGUI(self):
     self.addOutput(
         OutputRaster(LAStoolsAlgorithm.OUTPUT_RASTER,
                      self.tr("Output raster file")))
Example #32
0
    def processOutputParameterToken(self, token):
        out = None

        if token.lower().strip().startswith('raster'):
            out = OutputRaster()
        elif token.lower().strip().startswith('vector'):
            out = OutputVector()
        elif token.lower().strip().startswith('table'):
            out = OutputTable()
        elif token.lower().strip().startswith('html'):
            out = OutputHTML()
        elif token.lower().strip().startswith('file'):
            out = OutputFile()
            ext = token.strip()[len('file') + 1:]
            if ext:
                out.ext = ext
        elif token.lower().strip().startswith('directory'):
            out = OutputDirectory()
        elif token.lower().strip().startswith('number'):
            out = OutputNumber()
        elif token.lower().strip().startswith('string'):
            out = OutputString()
        elif token.lower().strip().startswith('extent'):
            out = OutputExtent()

        return out
Example #33
0
    def defineCharacteristics(self):
        self.name, self.i18n_name = self.trAlgorithm(
            'Clip raster by mask layer')
        self.group, self.i18n_group = self.trAlgorithm('[GDAL] Extraction')
        self.addParameter(
            ParameterRaster(self.INPUT, self.tr('Input layer'), False))
        self.addParameter(
            ParameterVector(self.MASK, self.tr('Mask layer'),
                            [ParameterVector.VECTOR_TYPE_POLYGON]))
        self.addParameter(
            ParameterString(
                self.NO_DATA,
                self.
                tr("Nodata value, leave blank to take the nodata value from input"
                   ), '-9999'))
        self.addParameter(
            ParameterBoolean(self.ALPHA_BAND,
                             self.tr('Create and output alpha band'), False))
        self.addParameter(
            ParameterBoolean(
                self.CROP_TO_CUTLINE,
                self.
                tr('Crop the extent of the target dataset to the extent of the cutline'
                   ), False))
        self.addParameter(
            ParameterBoolean(self.KEEP_RESOLUTION,
                             self.tr('Keep resolution of output raster'),
                             False))

        params = []
        params.append(
            ParameterSelection(self.RTYPE, self.tr('Output raster type'),
                               self.TYPE, 5))
        params.append(
            ParameterSelection(self.COMPRESS,
                               self.tr('GeoTIFF options. Compression type:'),
                               self.COMPRESSTYPE, 4))
        params.append(
            ParameterNumber(self.JPEGCOMPRESSION,
                            self.tr('Set the JPEG compression level'), 1, 100,
                            75))
        params.append(
            ParameterNumber(self.ZLEVEL,
                            self.tr('Set the DEFLATE compression level'), 1, 9,
                            6))
        params.append(
            ParameterNumber(
                self.PREDICTOR,
                self.tr('Set the predictor for LZW or DEFLATE compression'), 1,
                3, 1))
        params.append(
            ParameterBoolean(
                self.TILED,
                self.tr(
                    'Create tiled output (only used for the GTiff format)'),
                False))
        params.append(
            ParameterSelection(
                self.BIGTIFF,
                self.
                tr('Control whether the created file is a BigTIFF or a classic TIFF'
                   ), self.BIGTIFFTYPE, 0))
        params.append(
            ParameterBoolean(
                self.TFW,
                self.
                tr('Force the generation of an associated ESRI world file (.tfw))'
                   ), False))
        params.append(
            ParameterString(self.EXTRA,
                            self.tr('Additional creation parameters'),
                            '',
                            optional=True))

        for param in params:
            param.isAdvanced = True
            self.addParameter(param)

        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Clipped (mask)')))
Example #34
0
    def defineCharacteristics(self):
        self.addParameter(
            ParameterRaster(self.INPUT, self.tr('Input layer'), False))
        self.addParameter(
            ParameterCrs(self.SOURCE_SRS,
                         self.tr('Source SRS'),
                         '',
                         optional=True))
        self.addParameter(
            ParameterCrs(self.DEST_SRS, self.tr('Destination SRS'),
                         'EPSG:4326'))
        self.addParameter(
            ParameterString(
                self.NO_DATA,
                self.
                tr("Nodata value, leave blank to take the nodata value from input"
                   ),
                '',
                optional=True))
        self.addParameter(
            ParameterNumber(
                self.TR,
                self.
                tr('Output file resolution in target georeferenced units (leave 0 for no change)'
                   ), 0.0, None, 0.0))
        self.addParameter(
            ParameterSelection(self.METHOD, self.tr('Resampling method'),
                               self.METHOD_OPTIONS))
        self.addParameter(
            ParameterBoolean(
                self.USE_RASTER_EXTENT,
                self.tr('Set georeferenced extents of output file'), False))
        self.addParameter(
            ParameterExtent(self.RASTER_EXTENT,
                            self.tr('Raster extent'),
                            optional=True))
        self.addParameter(
            ParameterCrs(
                self.EXTENT_CRS,
                self.
                tr('CRS of the raster extent, leave blank for using Destination SRS'
                   ),
                optional=True))
        self.addParameter(
            ParameterString(
                self.OPTIONS,
                self.tr('Additional creation options'),
                optional=True,
                metadata={
                    'widget_wrapper':
                    'processing.algs.gdal.ui.RasterOptionsWidget.RasterOptionsWidgetWrapper'
                }))
        self.addParameter(
            ParameterBoolean(
                self.MULTITHREADING,
                self.tr('Use multithreaded warping implementation'), False))
        self.addParameter(
            ParameterSelection(self.RTYPE, self.tr('Output raster type'),
                               self.TYPE, 5))

        self.addOutput(OutputRaster(self.OUTPUT, self.tr('Reprojected')))
Example #35
0
    def processParameterLine(self, line):
        param = None
        out = None
        line = line.replace('#', '')
        if line.lower().strip().startswith('showplots'):
            self.showPlots = True
            self.addOutput(OutputHTML(RAlgorithm.RPLOTS, 'R Plots'))
            return
        if line.lower().strip().startswith('dontuserasterpackage'):
            self.useRasterPackage = False
            return
        if line.lower().strip().startswith('passfilenames'):
            self.passFileNames = True
            return
        tokens = line.split('=')
        desc = self.createDescriptiveName(tokens[0])
        if tokens[1].lower().strip() == 'group':
            self.group = tokens[0]
            return
        if tokens[1].lower().strip().startswith('raster'):
            param = ParameterRaster(tokens[0], desc, False)
        elif tokens[1].lower().strip() == 'vector':
            param = ParameterVector(tokens[0], desc,
                                    [ParameterVector.VECTOR_TYPE_ANY])
        elif tokens[1].lower().strip() == 'vector point':
            param = ParameterVector(tokens[0], desc,
                                    [ParameterVector.VECTOR_TYPE_POINT])
        elif tokens[1].lower().strip() == 'vector line':
            param = ParameterVector(tokens[0], desc,
                                    [ParameterVector.VECTOR_TYPE_LINE])
        elif tokens[1].lower().strip() == 'vector polygon':
            param = ParameterVector(tokens[0], desc,
                                    [ParameterVector.VECTOR_TYPE_POLYGON])
        elif tokens[1].lower().strip() == 'table':
            param = ParameterTable(tokens[0], desc, False)
        elif tokens[1].lower().strip().startswith('multiple raster'):
            param = ParameterMultipleInput(tokens[0], desc,
                                           ParameterMultipleInput.TYPE_RASTER)
            param.optional = False
        elif tokens[1].lower().strip() == 'multiple vector':
            param = ParameterMultipleInput(tokens[0], desc,
                                           ParameterMultipleInput.TYPE_VECTOR_ANY)
            param.optional = False
        elif tokens[1].lower().strip().startswith('selection'):
            options = tokens[1].strip()[len('selection'):].split(';')
            param = ParameterSelection(tokens[0], desc, options)
        elif tokens[1].lower().strip().startswith('boolean'):
            default = tokens[1].strip()[len('boolean') + 1:]
            param = ParameterBoolean(tokens[0], desc, default)
        elif tokens[1].lower().strip().startswith('number'):
            try:
                default = float(tokens[1].strip()[len('number') + 1:])
                param = ParameterNumber(tokens[0], desc, default=default)
            except:
                raise WrongScriptException(
                    self.tr('Could not load R script: %s.\n Problem with line %s' % (self.descriptionFile, line)))
        elif tokens[1].lower().strip().startswith('field'):
            field = tokens[1].strip()[len('field') + 1:]
            found = False
            for p in self.parameters:
                if p.name == field:
                    found = True
                    break
            if found:
                param = ParameterTableField(tokens[0], tokens[0], field)
        elif tokens[1].lower().strip() == 'extent':
            param = ParameterExtent(tokens[0], desc)
        elif tokens[1].lower().strip() == 'crs':
            param = ParameterCrs(tokens[0], desc)
        elif tokens[1].lower().strip() == 'point':
            param = ParameterPoint(tokens[0], desc)
        elif tokens[1].lower().strip() == 'file':
            param = ParameterFile(tokens[0], desc, False)
        elif tokens[1].lower().strip() == 'folder':
            param = ParameterFile(tokens[0], desc, True)
        elif tokens[1].lower().strip().startswith('string'):
            default = tokens[1].strip()[len('string') + 1:]
            param = ParameterString(tokens[0], desc, default)
        elif tokens[1].lower().strip().startswith('longstring'):
            default = tokens[1].strip()[len('longstring') + 1:]
            param = ParameterString(tokens[0], desc, default, multiline=True)
        elif tokens[1].lower().strip().startswith('output raster'):
            out = OutputRaster()
        elif tokens[1].lower().strip().startswith('output vector'):
            out = OutputVector()
        elif tokens[1].lower().strip().startswith('output table'):
            out = OutputTable()
        elif tokens[1].lower().strip().startswith('output file'):
            out = OutputFile()

        if param is not None:
            self.addParameter(param)
        elif out is not None:
            out.name = tokens[0]
            out.description = tokens[0]
            self.addOutput(out)
        else:
            raise WrongScriptException(
                self.tr('Could not load R script: %s.\n Problem with line %s' % (self.descriptionFile, line)))
Example #36
0
 def addOutputs(self):
     self.addOutput(OutputRaster(self.OUTPUT_FILLED_RASTER,
         self.tr('Filled')))