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
def defineCharacteristics(self): self.name, self.i18n_name = self.trAlgorithm("Grid Metrics") self.group, self.i18n_group = self.trAlgorithm("Points") self.addParameter(ParameterFile(self.INPUT, self.tr("Input LAS layer"))) self.addParameter(ParameterFile(self.GROUND, self.tr("Input ground DTM layer"))) self.addParameter(ParameterNumber(self.HEIGHT, self.tr("Height break"))) self.addParameter(ParameterNumber(self.CELLSIZE, self.tr("Cell Size"))) self.addOutput(OutputFile(self.OUTPUT_CSV_ELEVATION, self.tr("Output table with grid metrics"))) output_csv_intensity = OutputFile(self.OUTPUT_CSV_INTENSITY, self.tr("OUTPUT CSV INTENSITY")) output_csv_intensity.hidden = True self.addOutput(output_csv_intensity) output_txt_elevation = OutputFile(self.OUTPUT_TXT_ELEVATION, self.tr("OUTPUT CSV INTENSITY")) output_txt_elevation.hidden = True self.addOutput(output_txt_elevation) output_txt_intensity = OutputFile(self.OUTPUT_TXT_INTENSITY, self.tr("OUTPUT CSV INTENSITY")) output_txt_intensity.hidden = True self.addOutput(output_txt_intensity) outlier = ParameterString(self.OUTLIER, self.tr("Outlier:low,high"), "", False, True) outlier.isAdvanced = True self.addParameter(outlier) first = ParameterBoolean(self.FIRST, self.tr("First"), False) first.isAdvanced = True self.addParameter(first) minht = ParameterString(self.MINHT, self.tr("Htmin"), "", False, True) minht.isAdvanced = True self.addParameter(minht) class_var = ParameterString(self.CLASS, self.tr("Class (set blank if not used)"), "", False, True) class_var.isAdvanced = True self.addParameter(class_var)
def defineCharacteristics(self): self.name = 'Grid Metrics' self.group = 'Points' self.addParameter(ParameterFile( self.INPUT, self.tr('Input las layer'))) self.addParameter(ParameterFile( self.GROUND, self.tr('Input ground DTM layer'))) self.addParameter(ParameterNumber( self.HEIGHT, self.tr('Height break'))) self.addParameter(ParameterNumber( self.CELLSIZE, self.tr('Cellsize'))) self.addOutput(OutputFile( self.OUTPUT_CSV_ELEVATION, self.tr('Output table with grid metrics'))) output_csv_intensity = OutputFile( self.OUTPUT_CSV_INTENSITY, self.tr('OUTPUT CSV INTENSITY')) output_csv_intensity.hidden = True self.addOutput(output_csv_intensity) output_txt_elevation = OutputFile( self.OUTPUT_TXT_ELEVATION, self.tr('OUTPUT CSV INTENSITY')) output_txt_elevation.hidden = True self.addOutput(output_txt_elevation) output_txt_intensity = OutputFile( self.OUTPUT_TXT_INTENSITY, self.tr('OUTPUT CSV INTENSITY')) output_txt_intensity.hidden = True self.addOutput(output_txt_intensity) outlier = ParameterString( self.OUTLIER, self.tr('Outlier:low,high'), '', False, True) outlier.isAdvanced = True self.addParameter(outlier) first = ParameterBoolean(self.FIRST, self.tr('First'), False) first.isAdvanced = True self.addParameter(first) minht = ParameterString(self.MINHT, self.tr('Htmin'), '', False, True) minht.isAdvanced = True self.addParameter(minht) class_var = ParameterString( self.CLASS, self.tr('Class (set blank if not used)'), '', False, True) class_var.isAdvanced = True self.addParameter(class_var)
def addParametersPointOutputGUI(self): self.addOutput(OutputFile(LAStoolsAlgorithm.OUTPUT_LASLAZ, self.tr("output LAS/LAZ file"), "laz"))
def defineCharacteristicsFromFile(self): lines = open(self.descriptionFile) line = lines.readline().strip('\n').strip() self.grass7Name = line line = lines.readline().strip('\n').strip() self.name = line self.i18n_name = QCoreApplication.translate("GrassAlgorithm", line) if " - " not in self.name: self.name = self.grass7Name + " - " + self.name self.i18n_name = self.grass7Name + " - " + self.i18n_name line = lines.readline().strip('\n').strip() self.group = line self.i18n_group = QCoreApplication.translate("GrassAlgorithm", line) hasRasterOutput = False hasVectorInput = False vectorOutputs = 0 line = lines.readline().strip('\n').strip() while line != '': try: line = line.strip('\n').strip() if line.startswith('Hardcoded'): self.hardcodedStrings.append(line[len('Hardcoded|'):]) elif line.startswith('Parameter'): parameter = getParameterFromString(line) self.addParameter(parameter) if isinstance(parameter, ParameterVector): hasVectorInput = True if isinstance(parameter, ParameterMultipleInput) \ and parameter.datatype < 3: hasVectorInput = True elif line.startswith('*Parameter'): param = getParameterFromString(line[1:]) param.isAdvanced = True self.addParameter(param) else: output = getOutputFromString(line) self.addOutput(output) if isinstance(output, OutputRaster): hasRasterOutput = True elif isinstance(output, OutputVector): vectorOutputs += 1 if isinstance(output, OutputHTML): self.addOutput( OutputFile("rawoutput", output.description + " (raw output)", "txt")) line = lines.readline().strip('\n').strip() except Exception as e: ProcessingLog.addToLog( ProcessingLog.LOG_ERROR, self.tr('Could not open GRASS GIS 7 algorithm: %s\n%s' % (self.descriptionFile, line))) raise e lines.close() self.addParameter( ParameterExtent(self.GRASS_REGION_EXTENT_PARAMETER, self.tr('GRASS GIS 7 region extent'))) if hasRasterOutput: self.addParameter( ParameterNumber( self.GRASS_REGION_CELLSIZE_PARAMETER, self.tr( 'GRASS GIS 7 region cellsize (leave 0 for default)'), 0, None, 0.0)) if hasVectorInput: param = ParameterNumber(self.GRASS_SNAP_TOLERANCE_PARAMETER, 'v.in.ogr snap tolerance (-1 = no snap)', -1, None, -1.0) param.isAdvanced = True self.addParameter(param) param = ParameterNumber(self.GRASS_MIN_AREA_PARAMETER, 'v.in.ogr min area', 0, None, 0.0001) param.isAdvanced = True self.addParameter(param) if vectorOutputs == 1: param = ParameterSelection(self.GRASS_OUTPUT_TYPE_PARAMETER, 'v.out.ogr output type', self.OUTPUT_TYPES) param.isAdvanced = True self.addParameter(param)
def defineCharacteristicsFromFile(self): with open(self.descriptionFile) as lines: line = lines.readline().strip('\n').strip() self.grass7Name = line line = lines.readline().strip('\n').strip() self._name = line self._display_name = QCoreApplication.translate( "GrassAlgorithm", line) if " - " not in self._name: self._name = self.grass7Name + " - " + self._name self._display_name = self.grass7Name + " - " + self._display_name self._name = self._name[:self._name.find(' ')].lower() line = lines.readline().strip('\n').strip() self._group = QCoreApplication.translate("GrassAlgorithm", line) hasRasterOutput = False hasVectorInput = False vectorOutputs = 0 line = lines.readline().strip('\n').strip() while line != '': try: line = line.strip('\n').strip() if line.startswith('Hardcoded'): self.hardcodedStrings.append(line[len('Hardcoded|'):]) parameter = getParameterFromString(line) if parameter is not None: self.addParameter(parameter) if isinstance(parameter, ParameterVector): hasVectorInput = True if isinstance(parameter, ParameterMultipleInput) \ and parameter.datatype < 3: hasVectorInput = True else: output = getOutputFromString(line) self.addOutput(output) if isinstance(output, OutputRaster): hasRasterOutput = True elif isinstance(output, OutputVector): vectorOutputs += 1 if isinstance(output, OutputHTML): self.addOutput( OutputFile( "rawoutput", self.tr("{0} (raw output)").format( output.description()), "txt")) line = lines.readline().strip('\n').strip() except Exception as e: QgsMessageLog.logMessage( self.tr( 'Could not open GRASS GIS 7 algorithm: {0}\n{1}'). format(self.descriptionFile, line), self.tr('Processing'), QgsMessageLog.CRITICAL) raise e self.addParameter( ParameterExtent(self.GRASS_REGION_EXTENT_PARAMETER, self.tr('GRASS GIS 7 region extent'))) if hasRasterOutput: self.addParameter( ParameterNumber( self.GRASS_REGION_CELLSIZE_PARAMETER, self.tr( 'GRASS GIS 7 region cellsize (leave 0 for default)'), 0, None, 0.0)) if hasVectorInput: param = ParameterNumber(self.GRASS_SNAP_TOLERANCE_PARAMETER, 'v.in.ogr snap tolerance (-1 = no snap)', -1, None, -1.0) param.setFlags(param.flags() | QgsProcessingParameterDefinition.FlagAdvanced) self.addParameter(param) param = ParameterNumber(self.GRASS_MIN_AREA_PARAMETER, 'v.in.ogr min area', 0, None, 0.0001) param.setFlags(param.flags() | QgsProcessingParameterDefinition.FlagAdvanced) self.addParameter(param) if vectorOutputs == 1: param = ParameterSelection(self.GRASS_OUTPUT_TYPE_PARAMETER, 'v.out.ogr output type', self.OUTPUT_TYPES) param.setFlags(param.flags() | QgsProcessingParameterDefinition.FlagAdvanced) self.addParameter(param)
def defineCharacteristics(self): """Algorithme variable and parameters parameters""" CholeAlgorithm.defineCharacteristics(self) # The name/group that the user will see in the toolbox self.group = 'landscape metrics' self.i18n_group = self.tr('landscape metrics') self.name = 'sliding multi' self.i18n_name = self.tr('sliding multi') # === INPUT PARAMETERS === self.addParameter( ParameterRaster(name=self.INPUT_LAYER_ASC, description=self.tr('Input layer asc'))) self.addParameter( ParameterSelection(name=self.WINDOW_SHAPE, description=self.tr('Window shape'), options=';'.join(self.types_of_shape))) self.addParameter( ParameterFile(name=self.FRICTION_FILE, description=self.tr('Friction file'))) self.addParameter( ParameterString(name=self.WINDOW_SIZES, description=self.tr('Windows sizes (pixels)'))) self.addParameter( ParameterNumber( name=self.DELTA_DISPLACEMENT, description=self.tr('Delta od displacement (pixels)'), default=1)) self.addParameter( ParameterBoolean(name=self.INTERPOLATE_VALUES_BOOL, description=self.tr('Interpolate Values'), default=False)) self.addParameter( ParameterString( name=self.FILTER, description=self.tr('Filters - Analyse only (optional)'), default='', optional=True)) self.addParameter( ParameterString( name=self.UNFILTER, default='', description=self.tr('Filters - Do not analyse (optional)'), optional=True)) self.addParameter( ParameterNumber( name=self.MAXIMUM_RATE_MISSING_VALUES, description=self.tr('Maximum rate of mising values'), minValue=0, maxValue=100, default=100)) self.addParameter( ParameterString(name=self.METRICS, description=self.tr('Select metrics'))) # === OUTPUT PARAMETERS === self.addOutput( OutputFile(name=self.SAVE_PROPERTIES, description=self.tr('Properties file'), ext='properties')) self.addOutput( OutputDirectory(name=self.OUTPUT_DIR, description=self.tr('Output directory'))) self.addParameter( ParameterBoolean(name=self.OPEN_ALL_ASC, description=self.tr('Open all ascii'), default=True, optional=True))
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 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))
def defineCharacteristics(self): self.name = 'Csv2Grid' self.group = 'Points' self.addParameter(ParameterFile(self.INPUT, 'CSV Files')) self.addParameter(ParameterString(self.COLUMN, 'Column')) self.addOutput(OutputFile(self.OUTPUT, 'Raster Output file', 'asc'))
def defineCharacteristics(self): """ Algorithme variable and parameters parameters """ CholeAlgorithm.defineCharacteristics(self) # The name/group that the user will see in the toolbox self.group = 'generate ascii grid' self.i18n_group = self.tr('generate ascii grid') self.name = 'from csv' self.i18n_name = self.tr('from csv') # === INPUT PARAMETERS === self.addParameter( ParameterTable(name=self.INPUT_FILE_CSV, description=self.tr('Input file csv'))) self.addParameter( ParameterString(name=self.FIELDS, description=self.tr('Fields selection'), default='')) self.addParameter( ParameterNumber(name=self.N_COLS, description=self.tr('Columns count'), minValue=0, default=100)) self.addParameter( ParameterNumber(name=self.N_ROWS, description=self.tr('Rows count'), minValue=0, default=100)) self.addParameter( ParameterNumber( name=self.XLL_CORNER, description=self.tr('X bottom left corner coordinate'), default=0.0)) self.addParameter( ParameterNumber( name=self.YLL_CORNER, description=self.tr('Y bottom left corner coordinate'), default=0.0)) self.addParameter( ParameterNumber(name=self.CELL_SIZE, description=self.tr('Cell size'), default=1.0)) self.addParameter( ParameterNumber(name=self.NODATA_VALUE, description=self.tr('Value if no-data'), default=-1)) self.addOutput( OutputFile(name=self.SAVE_PROPERTIES, description=self.tr('Properties file'), ext='properties')) # === OUTPUT PARAMETERS === self.addOutput( ASCOutputRaster(name=self.OUTPUT_ASC, description=self.tr('Ouput Raster ascii')))