def testScriptCode(self): parameter = ParameterCrs('myName', 'myDescription') code = parameter.getAsScriptCode() result = getParameterFromString(code) self.assertIsInstance(result, ParameterCrs) parameter.optional = True code = parameter.getAsScriptCode() result = getParameterFromString(code) self.assertIsInstance(result, ParameterCrs) self.assertTrue(result.optional)
def testOptional(self): optionalParameter = ParameterString('myName', 'myDesc', default='test', optional=True) self.assertEqual(optionalParameter.value, 'test') optionalParameter.setValue('check') self.assertEqual(optionalParameter.value, 'check') self.assertTrue(optionalParameter.setValue(None)) self.assertEqual(optionalParameter.value, '') requiredParameter = ParameterCrs('myName', 'myDesc', default='test', optional=False) self.assertEqual(requiredParameter.value, 'test') requiredParameter.setValue('check') self.assertEqual(requiredParameter.value, 'check') self.assertFalse(requiredParameter.setValue(None)) self.assertEqual(requiredParameter.value, 'check')
def testOptional(self): optionalParameter = ParameterCrs('myName', 'myDesc', default='EPSG:4326', optional=True) self.assertEqual(optionalParameter.value, 'EPSG:4326') optionalParameter.setValue('EPSG:12003') self.assertEqual(optionalParameter.value, 'EPSG:12003') self.assertTrue(optionalParameter.setValue(None)) self.assertEqual(optionalParameter.value, None) requiredParameter = ParameterCrs('myName', 'myDesc', default='EPSG:4326', optional=False) self.assertEqual(requiredParameter.value, 'EPSG:4326') requiredParameter.setValue('EPSG:12003') self.assertEqual(requiredParameter.value, 'EPSG:12003') self.assertFalse(requiredParameter.setValue(None)) self.assertEqual(requiredParameter.value, 'EPSG:12003')
def testOptional(self): optionalParameter = ParameterCrs("myName", "myDesc", default="EPSG:4326", optional=True) self.assertEqual(optionalParameter.value, "EPSG:4326") optionalParameter.setValue("EPSG:12003") self.assertEqual(optionalParameter.value, "EPSG:12003") self.assertTrue(optionalParameter.setValue(None)) self.assertEqual(optionalParameter.value, None) requiredParameter = ParameterCrs("myName", "myDesc", default="EPSG:4326", optional=False) self.assertEqual(requiredParameter.value, "EPSG:4326") requiredParameter.setValue("EPSG:12003") self.assertEqual(requiredParameter.value, "EPSG:12003") self.assertFalse(requiredParameter.setValue(None)) self.assertEqual(requiredParameter.value, "EPSG:12003")
def testParameterCRS(self): param = ParameterCrs('name', 'desc') assert param.setValue('EPSG:12003') assert param.value == 'EPSG:12003' assert param.setValue(None) assert param.value == param.default s = param.serialize() param2 = ParameterCrs() param2.deserialize(s) assert param.default == param2.default assert param.description == param2.description assert param.name == param2.name
def defineCharacteristics(self): self.name = 'Create grid' self.group = 'Vector creation tools' self.addParameter(ParameterSelection( self.TYPE, 'Grid type', self.TYPES)) self.addParameter(ParameterNumber( self.WIDTH, 'Width', default=360.0)) self.addParameter(ParameterNumber( self.HEIGHT, 'Height', default=180.0)) self.addParameter(ParameterNumber( self.HSPACING, 'Horizontal spacing', default=10.0)) self.addParameter(ParameterNumber( self.VSPACING, 'Vertical spacing', default=10.0)) self.addParameter(ParameterNumber( self.CENTERX, 'Center X', default=0.0)) self.addParameter(ParameterNumber( self.CENTERY, 'Center Y', default=0.0)) self.addParameter(ParameterCrs(self.CRS, 'Output CRS')) self.addOutput(OutputVector(self.OUTPUT, 'Output'))
def defineCharacteristics(self): self.name = 'Translate (convert format)' self.group = '[GDAL] Conversion' self.addParameter(ParameterRaster(self.INPUT, 'Input layer', False)) self.addParameter( ParameterNumber( self.OUTSIZE, 'Set the size of the output file (In pixels or %)', 1, None, 100)) self.addParameter( ParameterBoolean(self.OUTSIZE_PERC, 'Output size is a percentage of input size', True)) self.addParameter( ParameterString( self.NO_DATA, 'Nodata value, leave as none to take the nodata value from input', 'none')) self.addParameter( ParameterSelection(self.EXPAND, 'Expand', ['none', 'gray', 'rgb', 'rgba'])) self.addParameter( ParameterCrs( self.SRS, 'Output projection for output file [leave blank to use input projection]', None)) self.addParameter( ParameterExtent(self.PROJWIN, 'Subset based on georeferenced coordinates')) self.addParameter( ParameterBoolean( self.SDS, 'Copy all subdatasets of this file to individual output files', False)) self.addParameter( ParameterString(self.EXTRA, 'Additional creation parameters', '', optional=True)) self.addOutput(OutputRaster(self.OUTPUT, 'Output layer'))
def defineCharacteristics(self): self.name, self.i18n_name = self.trAlgorithm('Create grid (lines)') self.group, self.i18n_group = self.trAlgorithm('Vector creation tools') self.tags = self.tr('grid,lines,vector,create,fishnet') self.addParameter( ParameterExtent(self.EXTENT, self.tr('Grid extent'), optional=False)) self.addParameter( ParameterNumber(self.HSPACING, self.tr('Horizontal spacing'), 0.0, 1000000000.0, default=0.0001)) self.addParameter( ParameterNumber(self.VSPACING, self.tr('Vertical spacing'), 0.0, 1000000000.0, default=0.0001)) self.addParameter( ParameterNumber(self.HOVERLAY, self.tr('Horizontal overlay'), 0.0, 1000000000.0, default=0.0)) self.addParameter( ParameterNumber(self.VOVERLAY, self.tr('Vertical overlay'), 0.0, 1000000000.0, default=0.0)) self.addParameter(ParameterCrs(self.CRS, 'Grid CRS', 'EPSG:4326')) self.addOutput( OutputVector(self.OUTPUT, self.tr('Grid'), datatype=[dataobjects.TYPE_VECTOR_LINE]))
def defineCharacteristics(self): self.name, self.i18n_name = self.trAlgorithm('Create grid (lines)') self.group, self.i18n_group = self.trAlgorithm('Vector creation tools') self.addParameter( ParameterExtent(self.EXTENT, self.tr('Grid extent'), optional=False)) self.addParameter( ParameterNumber(self.HSPACING, self.tr('Horizontal spacing'), default=10.0)) self.addParameter( ParameterNumber(self.VSPACING, self.tr('Vertical spacing'), default=10.0)) self.addParameter(ParameterCrs(self.CRS, 'Grid CRS')) self.addOutput( OutputVector(self.OUTPUT, self.tr('Grid'), datatype=[dataobjects.TYPE_VECTOR_LINE]))
def defineCharacteristics(self): """Here we define the inputs and output of the algorithm, along with some other properties. """ # The name that the user will see in the toolbox self.name = 'Create equal area lambert grids' # The branch of the toolbox under which the algorithm will appear self.group = 'Grid tools' # We add the input vector layer. It can have any kind of geometry # It is a mandatory (not optional) one, hence the False argument self.addParameter(ParameterExtent(self.EXTENT, self.tr('Grid Extent'))) self.addParameter(ParameterSelection(self.YAXE, self.tr('Y-direction'), self.YAXE_OPTIONS)) self.addParameter(ParameterNumber(self.LEVEL, self.tr('Grid Level'), 0, 19, 9)) self.addParameter(ParameterCrs(self.CRS, self.tr('Coordinate System'), self.tr('EPSG:4326'))) # We add a vector layer as output self.addOutput(OutputVector(self.OUTPUT_LAYER, self.tr('Output Grid')))
def defineCharacteristics(self): self.name, self.i18n_name = self.trAlgorithm('Create grid (polygon)') self.group, self.i18n_group = self.trAlgorithm('Vector creation tools') self.tags = self.tr('grid,polygons,vector,create,fishnet') self.types = [self.tr('Rectangle (polygon)'), self.tr('Diamond (polygon)'), self.tr('Hexagon (polygon)')] self.addParameter(ParameterSelection(self.TYPE, self.tr('Grid type'), self.types)) self.addParameter(ParameterExtent(self.EXTENT, self.tr('Grid extent'), optional=False)) self.addParameter(ParameterNumber(self.HSPACING, self.tr('Horizontal spacing'), 0.0, 1000000000.0, 0.0001)) self.addParameter(ParameterNumber(self.VSPACING, self.tr('Vertical spacing'), 0.0, 1000000000.0, 0.0001)) self.addParameter(ParameterNumber(self.HOVERLAY, self.tr('Horizontal overlay'), 0.0, 1000000000.0, 0.0)) self.addParameter(ParameterNumber(self.VOVERLAY, self.tr('Vertical overlay'), 0.0, 1000000000.0, 0.0)) self.addParameter(ParameterCrs(self.CRS, 'Grid CRS', 'EPSG:4326')) self.addOutput(OutputVector(self.OUTPUT, self.tr('Grid'), datatype=[dataobjects.TYPE_VECTOR_POLYGON]))
def __init__(self): super().__init__() self.addParameter( ParameterExtent(self.EXTENT, self.tr('Grid extent'), optional=False)) self.addParameter( ParameterNumber(self.HSPACING, self.tr('Horizontal spacing'), 0.0, 1000000000.0, default=0.0001)) self.addParameter( ParameterNumber(self.VSPACING, self.tr('Vertical spacing'), 0.0, 1000000000.0, default=0.0001)) self.addParameter( ParameterNumber(self.HOVERLAY, self.tr('Horizontal overlay'), 0.0, 1000000000.0, default=0.0)) self.addParameter( ParameterNumber(self.VOVERLAY, self.tr('Vertical overlay'), 0.0, 1000000000.0, default=0.0)) self.addParameter(ParameterCrs(self.CRS, 'Grid CRS', 'EPSG:4326')) self.addOutput( OutputVector(self.OUTPUT, self.tr('Grid'), datatype=[dataobjects.TYPE_VECTOR_LINE]))
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')))
def defineCharacteristics(self): self.name, self.i18n_name = self.trAlgorithm( 'SLMS - Import Vector timeseries instance into PostGIS (APPEND MODE)' ) self.group, self.i18n_group = self.trAlgorithm('[OGR] Miscellaneous') self.DB_CONNECTIONS = self.dbConnectionNames() self.addParameter( ParameterSelection(self.DATABASE, self.tr('Database (connection name)'), self.DB_CONNECTIONS)) self.addParameter( ParameterVector(self.INPUT_LAYER, self.tr('Input layer'), [ParameterVector.VECTOR_TYPE_ANY], False)) #self.addParameter(ParameterSelection(self.GTYPE, # self.tr('Output geometry type'), self.GEOMTYPE, 0)) #self.addParameter(ParameterCrs(self.A_SRS, # self.tr('Assign an output CRS'), '', optional=True)) self.addParameter( ParameterCrs(self.T_SRS, self.tr('Reproject to this CRS on output '), '', optional=True)) #self.addParameter(ParameterCrs(self.S_SRS, # self.tr('Override source CRS'), '', optional=True)) self.addParameter( ParameterString(self.SCHEMA, self.tr('Schema name'), 'stg_geoserver')) self.addParameter( ParameterString(self.TABLE, self.tr('The output PostGIS table name'), False)) self.addParameter( ParameterString(self.PK, self.tr('Primary key (new field)'), 'id', optional=True)) self.addParameter( ParameterTableField( self.PRIMARY_KEY, self. tr('Primary key (existing field, used if the above option is left empty)' ), self.INPUT_LAYER, optional=True)) self.addParameter( ParameterString(self.GEOCOLUMN, self.tr('Geometry column name'), 'the_geom', optional=True)) #self.addParameter(ParameterSelection(self.DIM, # self.tr('Vector dimensions'), self.DIMLIST, 0)) #self.addParameter(ParameterString(self.SIMPLIFY, # self.tr('Distance tolerance for simplification'), # '', optional=True)) #self.addParameter(ParameterString(self.SEGMENTIZE, # self.tr('Maximum distance between 2 nodes (densification)'), # '', optional=True)) #self.addParameter(ParameterExtent(self.SPAT, # self.tr('Select features by extent (defined in input layer CRS)'))) #self.addParameter(ParameterBoolean(self.CLIP, # self.tr('Clip the input layer using the above (rectangle) extent'), # False)) #self.addParameter(ParameterString(self.WHERE, # self.tr('Select features using a SQL "WHERE" statement (Ex: column=\'value\')'), # '', optional=True)) #self.addParameter(ParameterString(self.GT, # self.tr('Group N features per transaction (Default: 20000)'), # '', optional=True)) #self.addParameter(ParameterBoolean(self.OVERWRITE, # self.tr('Overwrite existing table'), True)) #self.addParameter(ParameterBoolean(self.APPEND, # self.tr('Append to existing table'), False)) #self.addParameter(ParameterBoolean(self.ADDFIELDS, # self.tr('Append and add new fields to existing table'), False)) #self.addParameter(ParameterBoolean(self.LAUNDER, # self.tr('Do not launder columns/table names'), False)) #self.addParameter(ParameterBoolean(self.INDEX, # self.tr('Do not create spatial index'), False)) self.addParameter( ParameterBoolean( self.SKIPFAILURES, self.tr( 'Continue after a failure, skipping the failed feature'), False))
def testSetValue(self): parameter = ParameterCrs('myName', 'myDesc') self.assertTrue(parameter.setValue('EPSG:12003')) self.assertEqual(parameter.value, 'EPSG:12003')
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, 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( 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'), '', optional=True)) 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')))
def defineCharacteristics(self): self.addParameter(ParameterVector(self.INPUT, self.tr('Input Layer'))) self.addParameter(ParameterCrs(self.CRS, 'Output CRS')) self.addOutput( OutputVector(self.OUTPUT, self.tr('Layer with projection'), True))
class ModelerParameterDefinitionDialog(QDialog): PARAMETER_NUMBER = 'Number' PARAMETER_RASTER = 'Raster layer' PARAMETER_TABLE = 'Table' PARAMETER_VECTOR = 'Vector layer' PARAMETER_STRING = 'String' PARAMETER_EXPRESSION = 'Expression' PARAMETER_BOOLEAN = 'Boolean' PARAMETER_TABLE_FIELD = 'Table field' PARAMETER_EXTENT = 'Extent' PARAMETER_FILE = 'File' PARAMETER_POINT = 'Point' PARAMETER_CRS = 'CRS' PARAMETER_MULTIPLE = 'Multiple input' paramTypes = [ PARAMETER_BOOLEAN, PARAMETER_EXTENT, PARAMETER_FILE, PARAMETER_NUMBER, PARAMETER_RASTER, PARAMETER_STRING, PARAMETER_EXPRESSION, PARAMETER_TABLE, PARAMETER_TABLE_FIELD, PARAMETER_VECTOR, PARAMETER_POINT, PARAMETER_CRS, PARAMETER_MULTIPLE ] def __init__(self, alg, paramType=None, param=None): self.alg = alg self.paramType = paramType self.param = param QDialog.__init__(self) self.setModal(True) self.setupUi() def setupUi(self): self.setWindowTitle(self.tr('Parameter definition')) self.setMinimumWidth(300) self.verticalLayout = QVBoxLayout(self) self.verticalLayout.setMargin(20) self.label = QLabel(self.tr('Parameter name')) self.verticalLayout.addWidget(self.label) self.nameTextBox = QLineEdit() self.verticalLayout.addWidget(self.nameTextBox) if isinstance(self.param, QgsProcessingParameterDefinition): self.nameTextBox.setText(self.param.description()) if self.paramType == ModelerParameterDefinitionDialog.PARAMETER_BOOLEAN or \ isinstance(self.param, ParameterBoolean): self.state = QCheckBox() self.state.setText(self.tr('Checked')) self.state.setChecked(False) if self.param is not None: self.state.setChecked(bool(self.param.value)) self.verticalLayout.addWidget(self.state) elif self.paramType == ModelerParameterDefinitionDialog.PARAMETER_TABLE_FIELD or \ isinstance(self.param, ParameterTableField): self.verticalLayout.addWidget(QLabel(self.tr('Parent layer'))) self.parentCombo = QComboBox() idx = 0 for param in list(self.alg.inputs.values()): if isinstance(param.param, (ParameterVector, ParameterTable)): self.parentCombo.addItem(param.param.description(), param.param.name()) if self.param is not None: if self.param.parent == param.param.name(): self.parentCombo.setCurrentIndex(idx) idx += 1 self.verticalLayout.addWidget(self.parentCombo) # add the datatype selector self.verticalLayout.addWidget(QLabel(self.tr('Allowed data type'))) self.datatypeCombo = QComboBox() self.datatypeCombo.addItem(self.tr('Any'), -1) self.datatypeCombo.addItem(self.tr('Number'), 0) self.datatypeCombo.addItem(self.tr('String'), 1) self.datatypeCombo.addItem(self.tr('Date/time'), 2) self.verticalLayout.addWidget(self.datatypeCombo) if self.param is not None and self.param.datatype is not None: # QComboBoxes indexes start at 0, # self.param.datatype start with -1 that is why I need to do +1 datatypeIndex = self.param.datatype + 1 self.datatypeCombo.setCurrentIndex(datatypeIndex) self.multipleCheck = QCheckBox() self.multipleCheck.setText(self.tr('Accept multiple fields')) self.multipleCheck.setChecked(False) if self.param is not None: self.multipleCheck.setChecked(self.param.multiple) self.verticalLayout.addWidget(self.multipleCheck) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_VECTOR or isinstance(self.param, ParameterVector)): self.verticalLayout.addWidget(QLabel(self.tr('Shape type'))) self.shapetypeCombo = QComboBox() self.shapetypeCombo.addItem(self.tr('Any')) self.shapetypeCombo.addItem(self.tr('Point')) self.shapetypeCombo.addItem(self.tr('Line')) self.shapetypeCombo.addItem(self.tr('Polygon')) if self.param is not None: self.shapetypeCombo.setCurrentIndex(self.param.datatype[0] + 1) self.verticalLayout.addWidget(self.shapetypeCombo) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_MULTIPLE or isinstance(self.param, ParameterMultipleInput)): self.verticalLayout.addWidget(QLabel(self.tr('Data type'))) self.datatypeCombo = QComboBox() self.datatypeCombo.addItem(self.tr('Vector (any)')) self.datatypeCombo.addItem(self.tr('Vector (point)')) self.datatypeCombo.addItem(self.tr('Vector (line)')) self.datatypeCombo.addItem(self.tr('Vector (polygon)')) self.datatypeCombo.addItem(self.tr('Raster')) self.datatypeCombo.addItem(self.tr('File')) if self.param is not None: self.datatypeCombo.setCurrentIndex(self.param.datatype + 1) self.verticalLayout.addWidget(self.datatypeCombo) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_NUMBER or isinstance(self.param, ParameterNumber)): self.verticalLayout.addWidget(QLabel(self.tr('Min value'))) self.minTextBox = QLineEdit() self.verticalLayout.addWidget(self.minTextBox) self.verticalLayout.addWidget(QLabel(self.tr('Max value'))) self.maxTextBox = QLineEdit() self.verticalLayout.addWidget(self.maxTextBox) if self.param is not None: self.minTextBox.setText(str(self.param.min)) self.maxTextBox.setText(str(self.param.max)) self.verticalLayout.addWidget(QLabel(self.tr('Default value'))) self.defaultTextBox = QLineEdit() self.defaultTextBox.setText(self.tr('0')) if self.param is not None: default = self.param.default if self.param.isInteger: default = int(math.floor(default)) if default: self.defaultTextBox.setText(str(default)) self.verticalLayout.addWidget(self.defaultTextBox) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_EXPRESSION or isinstance(self.param, ParameterExpression)): self.verticalLayout.addWidget(QLabel(self.tr('Default value'))) self.defaultEdit = QgsExpressionLineEdit() if self.param is not None: self.defaultEdit.setExpression(self.param.defaultValue()) self.verticalLayout.addWidget(self.defaultEdit) self.verticalLayout.addWidget(QLabel(self.tr('Parent layer'))) self.parentCombo = QComboBox() self.parentCombo.addItem(self.tr("None"), None) idx = 1 for param in list(self.alg.inputs.values()): if isinstance(param.param, (ParameterVector, ParameterTable)): self.parentCombo.addItem(param.param.description(), param.param.name()) if self.param is not None: if self.param.parent_layer == param.param.name(): self.parentCombo.setCurrentIndex(idx) idx += 1 self.verticalLayout.addWidget(self.parentCombo) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_STRING or isinstance(self.param, ParameterString)): self.verticalLayout.addWidget(QLabel(self.tr('Default value'))) self.defaultTextBox = QLineEdit() if self.param is not None: self.defaultTextBox.setText(self.param.defaultValue()) self.verticalLayout.addWidget(self.defaultTextBox) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_FILE or isinstance(self.param, ParameterFile)): self.verticalLayout.addWidget(QLabel(self.tr('Type'))) self.fileFolderCombo = QComboBox() self.fileFolderCombo.addItem(self.tr('File')) self.fileFolderCombo.addItem(self.tr('Folder')) if self.param is not None: self.fileFolderCombo.setCurrentIndex( 1 if self.param.isFolder else 0) self.verticalLayout.addWidget(self.fileFolderCombo) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_POINT or isinstance(self.param, ParameterPoint)): self.verticalLayout.addWidget(QLabel(self.tr('Default value'))) self.defaultTextBox = QLineEdit() if self.param is not None: self.defaultTextBox.setText(self.param.defaultValue()) self.verticalLayout.addWidget(self.defaultTextBox) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_CRS or isinstance(self.param, ParameterCrs)): self.verticalLayout.addWidget(QLabel(self.tr('Default value'))) self.selector = QgsProjectionSelectionWidget() if self.param is not None: self.selector.setCrs(QgsCoordinateReferenceSystem(self.param.defaultValue())) else: self.selector.setCrs(QgsCoordinateReferenceSystem('EPSG:4326')) self.verticalLayout.addWidget(self.selector) self.verticalLayout.addSpacing(20) self.requiredCheck = QCheckBox() self.requiredCheck.setText(self.tr('Mandatory')) self.requiredCheck.setChecked(True) if self.param is not None: self.requiredCheck.setChecked(not self.param.flags() & QgsProcessingParameterDefinition.FlagOptional) self.verticalLayout.addWidget(self.requiredCheck) self.buttonBox = QDialogButtonBox(self) self.buttonBox.setOrientation(Qt.Horizontal) self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel | QDialogButtonBox.Ok) self.buttonBox.setObjectName('buttonBox') self.buttonBox.accepted.connect(self.okPressed) self.buttonBox.rejected.connect(self.cancelPressed) self.verticalLayout.addStretch() self.verticalLayout.addWidget(self.buttonBox) self.setLayout(self.verticalLayout) def okPressed(self): description = str(self.nameTextBox.text()) if description.strip() == '': QMessageBox.warning(self, self.tr('Unable to define parameter'), self.tr('Invalid parameter name')) return if self.param is None: validChars = \ 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' safeName = ''.join(c for c in description if c in validChars) name = safeName.lower() i = 2 while name in self.alg.inputs: name = safeName.lower() + str(i) else: name = self.param.name() if (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_BOOLEAN or isinstance(self.param, ParameterBoolean)): self.param = ParameterBoolean(name, description, self.state.isChecked()) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_TABLE_FIELD or isinstance(self.param, ParameterTableField)): if self.parentCombo.currentIndex() < 0: QMessageBox.warning(self, self.tr('Unable to define parameter'), self.tr('Wrong or missing parameter values')) return parent = self.parentCombo.currentData() datatype = self.datatypeCombo.currentData() self.param = ParameterTableField(name, description, parent, datatype, multiple=self.multipleCheck.isChecked()) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_RASTER or isinstance(self.param, ParameterRaster)): self.param = ParameterRaster( name, description) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_TABLE or isinstance(self.param, ParameterTable)): self.param = ParameterTable( name, description) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_VECTOR or isinstance(self.param, ParameterVector)): self.param = ParameterVector( name, description, [self.shapetypeCombo.currentIndex() - 1]) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_MULTIPLE or isinstance(self.param, ParameterMultipleInput)): self.param = ParameterMultipleInput( name, description, self.datatypeCombo.currentIndex() - 1) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_NUMBER or isinstance(self.param, ParameterNumber)): try: vmin = self.minTextBox.text().strip() if vmin == '': vmin = None else: vmin = float(vmin) vmax = self.maxTextBox.text().strip() if vmax == '': vmax = None else: vmax = float(vmax) self.param = ParameterNumber(name, description, vmin, vmax, str(self.defaultTextBox.text())) except: QMessageBox.warning(self, self.tr('Unable to define parameter'), self.tr('Wrong or missing parameter values')) return elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_EXPRESSION or isinstance(self.param, ParameterExpression)): parent = self.parentCombo.currentData() self.param = ParameterExpression(name, description, default=str(self.defaultEdit.expression()), parent_layer=parent) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_STRING or isinstance(self.param, ParameterString)): self.param = ParameterString(name, description, str(self.defaultTextBox.text())) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_EXTENT or isinstance(self.param, ParameterExtent)): self.param = ParameterExtent(name, description) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_FILE or isinstance(self.param, ParameterFile)): isFolder = self.fileFolderCombo.currentIndex() == 1 self.param = ParameterFile(name, description, isFolder=isFolder) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_POINT or isinstance(self.param, ParameterPoint)): self.param = ParameterPoint(name, description, str(self.defaultTextBox.text())) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_CRS or isinstance(self.param, ParameterCrs)): self.param = ParameterCrs(name, description, default=self.selector.crs().authid()) if not self.requiredCheck.isChecked(): self.param.setFlags(self.param.flags() | QgsProcessingParameterDefinition.FlagOptional) self.close() def cancelPressed(self): self.param = None self.close()
def okPressed(self): description = str(self.nameTextBox.text()) if description.strip() == '': QMessageBox.warning(self, self.tr('Unable to define parameter'), self.tr('Invalid parameter name')) return if self.param is None: validChars = \ 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' safeName = ''.join(c for c in description if c in validChars) name = safeName.lower() i = 2 while name in self.alg.inputs: name = safeName.lower() + str(i) else: name = self.param.name if (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_BOOLEAN or isinstance(self.param, ParameterBoolean)): self.param = ParameterBoolean(name, description, self.state.isChecked()) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_TABLE_FIELD or isinstance(self.param, ParameterTableField)): if self.parentCombo.currentIndex() < 0: QMessageBox.warning( self, self.tr('Unable to define parameter'), self.tr('Wrong or missing parameter values')) return parent = self.parentCombo.currentData() datatype = self.datatypeCombo.currentData() self.param = ParameterTableField( name, description, parent, datatype, multiple=self.multipleCheck.isChecked()) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_RASTER or isinstance(self.param, ParameterRaster)): self.param = ParameterRaster(name, description) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_TABLE or isinstance(self.param, ParameterTable)): self.param = ParameterTable(name, description) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_VECTOR or isinstance(self.param, ParameterVector)): self.param = ParameterVector( name, description, [self.shapetypeCombo.currentIndex() - 1]) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_MULTIPLE or isinstance(self.param, ParameterMultipleInput)): self.param = ParameterMultipleInput( name, description, self.datatypeCombo.currentIndex() - 1) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_NUMBER or isinstance(self.param, ParameterNumber)): try: vmin = self.minTextBox.text().strip() if vmin == '': vmin = None else: vmin = float(vmin) vmax = self.maxTextBox.text().strip() if vmax == '': vmax = None else: vmax = float(vmax) self.param = ParameterNumber(name, description, vmin, vmax, str(self.defaultTextBox.text())) except: QMessageBox.warning( self, self.tr('Unable to define parameter'), self.tr('Wrong or missing parameter values')) return elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_EXPRESSION or isinstance(self.param, ParameterExpression)): parent = self.parentCombo.currentData() self.param = ParameterExpression( name, description, default=str(self.defaultEdit.expression()), parent_layer=parent) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_STRING or isinstance(self.param, ParameterString)): self.param = ParameterString(name, description, str(self.defaultTextBox.text())) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_EXTENT or isinstance(self.param, ParameterExtent)): self.param = ParameterExtent(name, description) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_FILE or isinstance(self.param, ParameterFile)): isFolder = self.fileFolderCombo.currentIndex() == 1 self.param = ParameterFile(name, description, isFolder=isFolder) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_POINT or isinstance(self.param, ParameterPoint)): self.param = ParameterPoint(name, description, str(self.defaultTextBox.text())) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_CRS or isinstance(self.param, ParameterCrs)): self.param = ParameterCrs(name, description, default=self.selector.crs().authid()) self.param.optional = not self.requiredCheck.isChecked() self.close()
def defineCharacteristics(self): self.name = 'Import Vector into PostGIS database (new connection)' self.group = '[OGR] Miscellaneous' self.addParameter( ParameterVector(self.INPUT_LAYER, self.tr('Input layer'), [ParameterVector.VECTOR_TYPE_ANY], False)) self.addParameter( ParameterSelection(self.GTYPE, self.tr('Output geometry type'), self.GEOMTYPE, 5)) self.addParameter( ParameterCrs(self.S_SRS, self.tr('Input CRS'), 'EPSG:4326')) self.addParameter( ParameterCrs(self.T_SRS, self.tr('Output CRS'), 'EPSG:4326')) self.addParameter( ParameterString(self.HOST, self.tr('Host'), 'localhost', optional=False)) self.addParameter( ParameterString(self.PORT, self.tr('Port'), '5432', optional=False)) self.addParameter( ParameterString(self.USER, self.tr('Username'), '', optional=False)) self.addParameter( ParameterString(self.DBNAME, self.tr('Database name'), '', optional=False)) self.addParameter( ParameterString(self.PASSWORD, self.tr('Password'), '', optional=False)) self.addParameter( ParameterString(self.SCHEMA, self.tr('Schema name'), 'public', optional=True)) self.addParameter( ParameterString( self.TABLE, self.tr('Table name, leave blank to use input name'), '', optional=True)) self.addParameter( ParameterString(self.PK, self.tr('Primary Key'), 'id', optional=True)) self.addParameter( ParameterString(self.GEOCOLUMN, self.tr('Geometry column name'), 'geom', optional=True)) self.addParameter( ParameterSelection(self.DIM, self.tr('Vector dimensions'), self.DIMLIST, 0)) self.addParameter( ParameterString(self.SIMPLIFY, self.tr('Distance tolerance for simplification'), '', optional=True)) self.addParameter( ParameterString( self.SEGMENTIZE, self.tr('Maximum distance between 2 nodes (densification)'), '', optional=True)) self.addParameter( ParameterExtent( self.SPAT, self.tr( 'Select features by extent (defined in input layer CRS)'))) self.addParameter( ParameterBoolean( self.CLIP, self.tr( 'Clip the input layer using the above (rectangle) extent'), False)) self.addParameter( ParameterString( self.WHERE, self. tr('Select features using a SQL "WHERE" statement (Ex: column="value")' ), '', optional=True)) self.addParameter( ParameterString( self.GT, self.tr('Group N features per transaction (Default: 20000)'), '', optional=True)) self.addParameter( ParameterBoolean(self.OVERWRITE, self.tr('Overwrite existing table'), True)) self.addParameter( ParameterBoolean(self.APPEND, self.tr('Append to existing table'), False)) self.addParameter( ParameterBoolean( self.ADDFIELDS, self.tr('Append and add new fields to existing table'), False)) self.addParameter( ParameterBoolean(self.LAUNDER, self.tr('Do not launder columns/table names'), False)) self.addParameter( ParameterBoolean(self.INDEX, self.tr('Do not create spatial index'), False)) self.addParameter( ParameterBoolean( self.SKIPFAILURES, self.tr( 'Continue after a failure, skipping the failed feature'), False)) self.addParameter( ParameterString(self.OPTIONS, self.tr('Additional creation options'), '', optional=True))
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')))
class ModelerParameterDefinitionDialog(QDialog): PARAMETER_NUMBER = 'Number' PARAMETER_RASTER = 'Raster layer' PARAMETER_TABLE = 'Table' PARAMETER_VECTOR = 'Vector layer' PARAMETER_STRING = 'String' PARAMETER_EXPRESSION = 'Expression' PARAMETER_BOOLEAN = 'Boolean' PARAMETER_TABLE_FIELD = 'Table field' PARAMETER_EXTENT = 'Extent' PARAMETER_FILE = 'File' PARAMETER_POINT = 'Point' PARAMETER_CRS = 'CRS' PARAMETER_MULTIPLE = 'Multiple input' paramTypes = [ PARAMETER_BOOLEAN, PARAMETER_EXTENT, PARAMETER_FILE, PARAMETER_NUMBER, PARAMETER_RASTER, PARAMETER_STRING, PARAMETER_EXPRESSION, PARAMETER_TABLE, PARAMETER_TABLE_FIELD, PARAMETER_VECTOR, PARAMETER_POINT, PARAMETER_CRS, PARAMETER_MULTIPLE ] def __init__(self, alg, paramType=None, param=None): self.alg = alg self.paramType = paramType self.param = param QDialog.__init__(self) self.setModal(True) self.setupUi() def setupUi(self): self.setWindowTitle(self.tr('Parameter definition')) self.setMinimumWidth(300) self.verticalLayout = QVBoxLayout(self) self.verticalLayout.setMargin(20) self.label = QLabel(self.tr('Parameter name')) self.verticalLayout.addWidget(self.label) self.nameTextBox = QLineEdit() self.verticalLayout.addWidget(self.nameTextBox) if isinstance(self.param, QgsProcessingParameterDefinition): self.nameTextBox.setText(self.param.description()) if self.paramType == ModelerParameterDefinitionDialog.PARAMETER_BOOLEAN or \ isinstance(self.param, ParameterBoolean): self.state = QCheckBox() self.state.setText(self.tr('Checked')) self.state.setChecked(False) if self.param is not None: self.state.setChecked(bool(self.param.value)) self.verticalLayout.addWidget(self.state) elif self.paramType == ModelerParameterDefinitionDialog.PARAMETER_TABLE_FIELD or \ isinstance(self.param, ParameterTableField): self.verticalLayout.addWidget(QLabel(self.tr('Parent layer'))) self.parentCombo = QComboBox() idx = 0 for param in list(self.alg.inputs.values()): if isinstance(param.param, (ParameterVector, ParameterTable)): self.parentCombo.addItem(param.param.description(), param.param.name()) if self.param is not None: if self.param.parent == param.param.name(): self.parentCombo.setCurrentIndex(idx) idx += 1 self.verticalLayout.addWidget(self.parentCombo) # add the datatype selector self.verticalLayout.addWidget(QLabel(self.tr('Allowed data type'))) self.datatypeCombo = QComboBox() self.datatypeCombo.addItem(self.tr('Any'), -1) self.datatypeCombo.addItem(self.tr('Number'), 0) self.datatypeCombo.addItem(self.tr('String'), 1) self.datatypeCombo.addItem(self.tr('Date/time'), 2) self.verticalLayout.addWidget(self.datatypeCombo) if self.param is not None and self.param.datatype is not None: # QComboBoxes indexes start at 0, # self.param.datatype start with -1 that is why I need to do +1 datatypeIndex = self.param.datatype + 1 self.datatypeCombo.setCurrentIndex(datatypeIndex) self.multipleCheck = QCheckBox() self.multipleCheck.setText(self.tr('Accept multiple fields')) self.multipleCheck.setChecked(False) if self.param is not None: self.multipleCheck.setChecked(self.param.multiple) self.verticalLayout.addWidget(self.multipleCheck) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_VECTOR or isinstance(self.param, ParameterVector)): self.verticalLayout.addWidget(QLabel(self.tr('Shape type'))) self.shapetypeCombo = QComboBox() self.shapetypeCombo.addItem(self.tr('Any')) self.shapetypeCombo.addItem(self.tr('Point')) self.shapetypeCombo.addItem(self.tr('Line')) self.shapetypeCombo.addItem(self.tr('Polygon')) if self.param is not None: self.shapetypeCombo.setCurrentIndex(self.param.datatype[0] + 1) self.verticalLayout.addWidget(self.shapetypeCombo) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_MULTIPLE or isinstance(self.param, ParameterMultipleInput)): self.verticalLayout.addWidget(QLabel(self.tr('Data type'))) self.datatypeCombo = QComboBox() self.datatypeCombo.addItem(self.tr('Vector (any)')) self.datatypeCombo.addItem(self.tr('Vector (point)')) self.datatypeCombo.addItem(self.tr('Vector (line)')) self.datatypeCombo.addItem(self.tr('Vector (polygon)')) self.datatypeCombo.addItem(self.tr('Raster')) self.datatypeCombo.addItem(self.tr('File')) if self.param is not None: self.datatypeCombo.setCurrentIndex(self.param.datatype + 1) self.verticalLayout.addWidget(self.datatypeCombo) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_NUMBER or isinstance(self.param, ParameterNumber)): self.verticalLayout.addWidget(QLabel(self.tr('Min value'))) self.minTextBox = QLineEdit() self.verticalLayout.addWidget(self.minTextBox) self.verticalLayout.addWidget(QLabel(self.tr('Max value'))) self.maxTextBox = QLineEdit() self.verticalLayout.addWidget(self.maxTextBox) if self.param is not None: self.minTextBox.setText(str(self.param.min)) self.maxTextBox.setText(str(self.param.max)) self.verticalLayout.addWidget(QLabel(self.tr('Default value'))) self.defaultTextBox = QLineEdit() self.defaultTextBox.setText(self.tr('0')) if self.param is not None: default = self.param.default if self.param.isInteger: default = int(math.floor(default)) if default: self.defaultTextBox.setText(str(default)) self.verticalLayout.addWidget(self.defaultTextBox) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_EXPRESSION or isinstance(self.param, ParameterExpression)): self.verticalLayout.addWidget(QLabel(self.tr('Default value'))) self.defaultEdit = QgsExpressionLineEdit() if self.param is not None: self.defaultEdit.setExpression(self.param.defaultValue()) self.verticalLayout.addWidget(self.defaultEdit) self.verticalLayout.addWidget(QLabel(self.tr('Parent layer'))) self.parentCombo = QComboBox() self.parentCombo.addItem(self.tr("None"), None) idx = 1 for param in list(self.alg.inputs.values()): if isinstance(param.param, (ParameterVector, ParameterTable)): self.parentCombo.addItem(param.param.description(), param.param.name()) if self.param is not None: if self.param.parent_layer == param.param.name(): self.parentCombo.setCurrentIndex(idx) idx += 1 self.verticalLayout.addWidget(self.parentCombo) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_STRING or isinstance(self.param, ParameterString)): self.verticalLayout.addWidget(QLabel(self.tr('Default value'))) self.defaultTextBox = QLineEdit() if self.param is not None: self.defaultTextBox.setText(self.param.defaultValue()) self.verticalLayout.addWidget(self.defaultTextBox) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_FILE or isinstance(self.param, ParameterFile)): self.verticalLayout.addWidget(QLabel(self.tr('Type'))) self.fileFolderCombo = QComboBox() self.fileFolderCombo.addItem(self.tr('File')) self.fileFolderCombo.addItem(self.tr('Folder')) if self.param is not None: self.fileFolderCombo.setCurrentIndex( 1 if self.param.isFolder else 0) self.verticalLayout.addWidget(self.fileFolderCombo) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_POINT or isinstance(self.param, ParameterPoint)): self.verticalLayout.addWidget(QLabel(self.tr('Default value'))) self.defaultTextBox = QLineEdit() if self.param is not None: self.defaultTextBox.setText(self.param.defaultValue()) self.verticalLayout.addWidget(self.defaultTextBox) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_CRS or isinstance(self.param, ParameterCrs)): self.verticalLayout.addWidget(QLabel(self.tr('Default value'))) self.selector = QgsProjectionSelectionWidget() if self.param is not None: self.selector.setCrs( QgsCoordinateReferenceSystem(self.param.defaultValue())) else: self.selector.setCrs(QgsCoordinateReferenceSystem('EPSG:4326')) self.verticalLayout.addWidget(self.selector) self.verticalLayout.addSpacing(20) self.requiredCheck = QCheckBox() self.requiredCheck.setText(self.tr('Mandatory')) self.requiredCheck.setChecked(True) if self.param is not None: self.requiredCheck.setChecked( not self.param.flags() & QgsProcessingParameterDefinition.FlagOptional) self.verticalLayout.addWidget(self.requiredCheck) self.buttonBox = QDialogButtonBox(self) self.buttonBox.setOrientation(Qt.Horizontal) self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel | QDialogButtonBox.Ok) self.buttonBox.setObjectName('buttonBox') self.buttonBox.accepted.connect(self.okPressed) self.buttonBox.rejected.connect(self.cancelPressed) self.verticalLayout.addStretch() self.verticalLayout.addWidget(self.buttonBox) self.setLayout(self.verticalLayout) def okPressed(self): description = str(self.nameTextBox.text()) if description.strip() == '': QMessageBox.warning(self, self.tr('Unable to define parameter'), self.tr('Invalid parameter name')) return if self.param is None: validChars = \ 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' safeName = ''.join(c for c in description if c in validChars) name = safeName.lower() i = 2 while name in self.alg.inputs: name = safeName.lower() + str(i) else: name = self.param.name() if (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_BOOLEAN or isinstance(self.param, ParameterBoolean)): self.param = ParameterBoolean(name, description, self.state.isChecked()) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_TABLE_FIELD or isinstance(self.param, ParameterTableField)): if self.parentCombo.currentIndex() < 0: QMessageBox.warning( self, self.tr('Unable to define parameter'), self.tr('Wrong or missing parameter values')) return parent = self.parentCombo.currentData() datatype = self.datatypeCombo.currentData() self.param = ParameterTableField( name, description, parent, datatype, multiple=self.multipleCheck.isChecked()) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_RASTER or isinstance(self.param, ParameterRaster)): self.param = ParameterRaster(name, description) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_TABLE or isinstance(self.param, ParameterTable)): self.param = ParameterTable(name, description) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_VECTOR or isinstance(self.param, ParameterVector)): self.param = ParameterVector( name, description, [self.shapetypeCombo.currentIndex() - 1]) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_MULTIPLE or isinstance(self.param, ParameterMultipleInput)): self.param = ParameterMultipleInput( name, description, self.datatypeCombo.currentIndex() - 1) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_NUMBER or isinstance(self.param, ParameterNumber)): try: vmin = self.minTextBox.text().strip() if vmin == '': vmin = None else: vmin = float(vmin) vmax = self.maxTextBox.text().strip() if vmax == '': vmax = None else: vmax = float(vmax) self.param = ParameterNumber(name, description, vmin, vmax, str(self.defaultTextBox.text())) except: QMessageBox.warning( self, self.tr('Unable to define parameter'), self.tr('Wrong or missing parameter values')) return elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_EXPRESSION or isinstance(self.param, ParameterExpression)): parent = self.parentCombo.currentData() self.param = ParameterExpression( name, description, default=str(self.defaultEdit.expression()), parent_layer=parent) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_STRING or isinstance(self.param, ParameterString)): self.param = ParameterString(name, description, str(self.defaultTextBox.text())) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_EXTENT or isinstance(self.param, ParameterExtent)): self.param = ParameterExtent(name, description) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_FILE or isinstance(self.param, ParameterFile)): isFolder = self.fileFolderCombo.currentIndex() == 1 self.param = ParameterFile(name, description, isFolder=isFolder) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_POINT or isinstance(self.param, ParameterPoint)): self.param = ParameterPoint(name, description, str(self.defaultTextBox.text())) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_CRS or isinstance(self.param, ParameterCrs)): self.param = ParameterCrs(name, description, default=self.selector.crs().authid()) if not self.requiredCheck.isChecked(): self.param.setFlags( self.param.flags() | QgsProcessingParameterDefinition.FlagOptional) self.close() def cancelPressed(self): self.param = None self.close()
def defineCharacteristics(self): self.addParameter(ParameterVector(self.INPUT, self.tr('Input layer'))) self.addParameter( ParameterCrs(self.TARGET_CRS, self.tr('Target CRS'), 'EPSG:4326')) self.addOutput(OutputVector(self.OUTPUT, self.tr('Reprojected')))
def initAlgorithm(self, config=None): # Required parameters self.addParameter(ParameterRaster(self.INPUT, self.tr('Input layer'))) # Advanced parameters params = [] params.append( ParameterSelection(self.PROFILE, self.tr('Tile cutting profile'), self.PROFILES, 0, False, optional=True)) params.append( ParameterSelection(self.RESAMPLING, self.tr('Resampling method'), self.RESAMPLINGS, 0, False, optional=True)) params.append( ParameterCrs( self.S_SRS, self. tr('The spatial reference system used for the source input data' ), None, True)) params.append( ParameterString(self.ZOOM, self.tr('Zoom levels to render'), None, False, True)) params.append( ParameterBoolean( self.RESUME, self.tr('Resume mode, generate only missing files'), False, True)) params.append( ParameterString( self.NODATA, self.tr( 'NODATA transparency value to assign to the input data'), None, False, True)) params.append( ParameterBoolean( self.FORCEKML, self. tr('Generate KML for Google Earth - default for "geodetic" profile and "raster" in EPSG:4326' ), False, True)) params.append( ParameterBoolean( self.NOKML, self.tr( 'Avoid automatic generation of KML files for EPSG:4326'), False, True)) params.append( ParameterString( self.URL, self. tr('URL address where the generated tiles are going to be published' ), None, False, True)) params.append( ParameterSelection(self.WEBVIEWER, self.tr('Web viewer to generate'), self.WEBVIEWERS, 0, False, optional=True)) params.append( ParameterString(self.TITLE, self.tr('Title of the map'), None, False, True)) params.append( ParameterString(self.COPYRIGHT, self.tr('Copyright for the map'), None, False, True)) params.append( ParameterString( self.GOOGLEKEY, self. tr('Google Maps API key from http://code.google.com/apis/maps/signup.html' ), None, False, True)) params.append( ParameterString( self.BINGKEY, self.tr( 'Bing Maps API key from https://www.bingmapsportal.com/'), None, False, True)) for param in params: param.setFlags(param.flags() | QgsProcessingParameterDefinition.FlagAdvanced) self.addParameter(param) self.addOutput( OutputDirectory( self.OUTPUTDIR, self.tr('The directory where the tile result is created')))
def testSetValue(self): parameter = ParameterCrs("myName", "myDesc") self.assertTrue(parameter.setValue("EPSG:12003")) self.assertEqual(parameter.value, "EPSG:12003")
def defineCharacteristics(self): self.name = 'Import Vector into PostGIS database (available connections)' self.group = '[OGR] Miscellaneous' self.DB_CONNECTIONS = self.dbConnectionNames() self.addParameter( ParameterSelection(self.DATABASE, 'Database (connection name)', self.DB_CONNECTIONS)) self.addParameter( ParameterVector(self.INPUT_LAYER, 'Input layer', [ParameterVector.VECTOR_TYPE_ANY], False)) self.addParameter( ParameterSelection(self.GTYPE, 'Output geometry type', self.GEOMTYPE, 5)) self.addParameter( ParameterCrs(self.S_SRS, 'Input CRS (EPSG Code)', 'EPSG:4326')) self.addParameter( ParameterCrs(self.T_SRS, 'Output CRS (EPSG Code)', 'EPSG:4326')) self.addParameter( ParameterString(self.SCHEMA, 'Schema name', 'public', optional=True)) self.addParameter( ParameterString(self.TABLE, 'Table name, leave blank to use input name', '', optional=True)) self.addParameter( ParameterString(self.PK, 'Primary Key', 'id', optional=True)) self.addParameter( ParameterString(self.GEOCOLUMN, 'Geometry column name', 'geom', optional=True)) self.addParameter( ParameterSelection(self.DIM, 'Vector dimensions', self.DIMLIST, 0)) self.addParameter( ParameterString(self.SIMPLIFY, 'Distance tolerance for simplification', '', optional=True)) self.addParameter( ParameterString(self.SEGMENTIZE, 'Maximum distance between 2 nodes (densification)', '', optional=True)) self.addParameter( ParameterExtent( self.SPAT, 'Select features by extent (defined in input layer CRS)')) self.addParameter( ParameterBoolean( self.CLIP, 'Clip the input layer using the above (rectangle) extent', False)) self.addParameter( ParameterString( self.WHERE, 'Select features using a SQL "WHERE" statement (Ex: column="value")', '', optional=True)) self.addParameter( ParameterString( self.GT, 'Group "n" features per transaction (Default: 20000)', '', optional=True)) self.addParameter( ParameterBoolean(self.OVERWRITE, 'Overwrite existing table?', True)) self.addParameter( ParameterBoolean(self.APPEND, 'Append to existing table?', False)) self.addParameter( ParameterBoolean(self.ADDFIELDS, 'Append and add new fields to existing table?', False)) self.addParameter( ParameterBoolean(self.LAUNDER, 'Do not launder columns/table name/s?', False)) self.addParameter( ParameterBoolean(self.INDEX, 'Do not create Spatial Index?', False)) self.addParameter( ParameterBoolean( self.SKIPFAILURES, 'Continue after a failure, skipping the failed feature', False)) self.addParameter( ParameterString(self.OPTIONS, 'Additional creation options', '', optional=True))
def defineCharacteristics(self): self.name, self.i18n_name = self.trAlgorithm( 'Import Vector into PostGIS database (available connections)') self.group, self.i18n_group = self.trAlgorithm('Vector miscellaneous') self.addParameter( ParameterString( self.DATABASE, self.tr('Database (connection name)'), metadata={ 'widget_wrapper': { 'class': 'processing.gui.wrappers_postgis.ConnectionWidgetWrapper' } })) self.addParameter( ParameterVector(self.INPUT_LAYER, self.tr('Input layer'))) self.addParameter( ParameterString(self.SHAPE_ENCODING, self.tr('Shape encoding'), "", optional=True)) self.addParameter( ParameterSelection(self.GTYPE, self.tr('Output geometry type'), self.GEOMTYPE, 0)) self.addParameter( ParameterCrs(self.A_SRS, self.tr('Assign an output CRS'), '', optional=False)) self.addParameter( ParameterCrs(self.T_SRS, self.tr('Reproject to this CRS on output '), '', optional=True)) self.addParameter( ParameterCrs(self.S_SRS, self.tr('Override source CRS'), '', optional=True)) self.addParameter( ParameterString( self.SCHEMA, self.tr('Schema name'), 'public', optional=True, metadata={ 'widget_wrapper': { 'class': 'processing.gui.wrappers_postgis.SchemaWidgetWrapper', 'connection_param': self.DATABASE } })) self.addParameter( ParameterString( self.TABLE, self.tr('Table name, leave blank to use input name'), '', optional=True, metadata={ 'widget_wrapper': { 'class': 'processing.gui.wrappers_postgis.TableWidgetWrapper', 'schema_param': self.SCHEMA } })) self.addParameter( ParameterString(self.PK, self.tr('Primary key (new field)'), 'id', optional=True)) self.addParameter( ParameterTableField( self.PRIMARY_KEY, self. tr('Primary key (existing field, used if the above option is left empty)' ), self.INPUT_LAYER, optional=True)) self.addParameter( ParameterString(self.GEOCOLUMN, self.tr('Geometry column name'), 'geom', optional=True)) self.addParameter( ParameterSelection(self.DIM, self.tr('Vector dimensions'), self.DIMLIST, 0)) self.addParameter( ParameterString(self.SIMPLIFY, self.tr('Distance tolerance for simplification'), '', optional=True)) self.addParameter( ParameterString( self.SEGMENTIZE, self.tr('Maximum distance between 2 nodes (densification)'), '', optional=True)) self.addParameter( ParameterExtent( self.SPAT, self.tr( 'Select features by extent (defined in input layer CRS)'))) self.addParameter( ParameterBoolean( self.CLIP, self.tr( 'Clip the input layer using the above (rectangle) extent'), False)) self.addParameter( ParameterString( self.WHERE, self. tr('Select features using a SQL "WHERE" statement (Ex: column=\'value\')' ), '', optional=True)) self.addParameter( ParameterString( self.GT, self.tr('Group N features per transaction (Default: 20000)'), '', optional=True)) self.addParameter( ParameterBoolean(self.OVERWRITE, self.tr('Overwrite existing table'), True)) self.addParameter( ParameterBoolean(self.APPEND, self.tr('Append to existing table'), False)) self.addParameter( ParameterBoolean( self.ADDFIELDS, self.tr('Append and add new fields to existing table'), False)) self.addParameter( ParameterBoolean(self.LAUNDER, self.tr('Do not launder columns/table names'), False)) self.addParameter( ParameterBoolean(self.INDEX, self.tr('Do not create spatial index'), False)) self.addParameter( ParameterBoolean( self.SKIPFAILURES, self.tr( 'Continue after a failure, skipping the failed feature'), False)) self.addParameter( ParameterBoolean(self.PROMOTETOMULTI, self.tr('Promote to Multipart'), True)) self.addParameter( ParameterBoolean( self.PRECISION, self.tr('Keep width and precision of input attributes'), True)) self.addParameter( ParameterString(self.OPTIONS, self.tr('Additional creation options'), '', optional=True))
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))
def __init__(self): super().__init__() self.addParameter(ParameterVector(self.INPUT, self.tr('Input Layer'))) self.addParameter(ParameterCrs(self.CRS, 'Output CRS')) self.addOutput( OutputVector(self.OUTPUT, self.tr('Layer with projection'), True))
def __init__(self): super().__init__() # Required parameters self.addParameter( ParameterMultipleInput(self.INPUT, self.tr('Input layers'), dataobjects.TYPE_RASTER)) # Advanced parameters params = [] params.append( ParameterString( self.PIXELSIZE, self. tr('Pixel size to be used for the output file (XSIZE YSIZE like 512 512)' ), None, False, True)) params.append( ParameterSelection(self.ALGORITHM, self.tr('Resampling algorithm'), self.ALGO, 0, False, optional=True)) params.append( ParameterCrs(self.S_SRS, self.tr('Override source CRS'), None, True)) params.append( ParameterNumber(self.PYRAMIDLEVELS, self.tr('Number of pyramids levels to build'), None, None, None, True)) params.append( ParameterBoolean(self.ONLYPYRAMIDS, self.tr('Build only the pyramids'), False, True)) params.append( ParameterSelection(self.RTYPE, self.tr('Output raster type'), self.TYPE, 5, False, optional=True)) params.append( ParameterSelection(self.FORMAT, self.tr('Output raster format'), list(GdalUtils.getSupportedRasters().keys()), 0, False, optional=True)) params.append( ParameterBoolean(self.USEDIRFOREACHROW, self.tr('Use a directory for each row'), False, True)) params.append( ParameterString( self.CSVFILE, self. tr('Name of the csv file containing the tile(s) georeferencing information' ), None, False, True)) params.append( ParameterString(self.CSVDELIM, self.tr('Column delimiter used in the CSV file'), None, False, True)) params.append( ParameterString( self.TILEINDEX, self.tr( 'name of shape file containing the result tile(s) index'), None, False, True)) params.append( ParameterString( self.TILEINDEXFIELD, self. tr('name of the attribute containing the tile name in the result shape file' ), None, False, True)) for param in params: param.setFlags(param.flags() | QgsProcessingParameterDefinition.FlagAdvanced) self.addParameter(param) self.addOutput( OutputDirectory( self.TARGETDIR, self.tr('The directory where the tile result is created')))
def initAlgorithm(self, config=None): self.addParameter(ParameterVector(self.INPUT, self.tr('Input Layer'))) self.addParameter(ParameterCrs(self.CRS, 'Output CRS')) self.addOutput( OutputVector(self.OUTPUT, self.tr('Layer with projection'), True))
def okPressed(self): description = str(self.nameTextBox.text()) if description.strip() == '': QMessageBox.warning(self, self.tr('Unable to define parameter'), self.tr('Invalid parameter name')) return if self.param is None: validChars = \ 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' safeName = ''.join(c for c in description if c in validChars) name = safeName.lower() i = 2 while name in self.alg.inputs: name = safeName.lower() + str(i) else: name = self.param.name() if (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_BOOLEAN or isinstance(self.param, ParameterBoolean)): self.param = ParameterBoolean(name, description, self.state.isChecked()) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_TABLE_FIELD or isinstance(self.param, ParameterTableField)): if self.parentCombo.currentIndex() < 0: QMessageBox.warning(self, self.tr('Unable to define parameter'), self.tr('Wrong or missing parameter values')) return parent = self.parentCombo.currentData() datatype = self.datatypeCombo.currentData() self.param = ParameterTableField(name, description, parent, datatype, multiple=self.multipleCheck.isChecked()) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_RASTER or isinstance(self.param, ParameterRaster)): self.param = ParameterRaster( name, description) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_TABLE or isinstance(self.param, ParameterTable)): self.param = ParameterTable( name, description) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_VECTOR or isinstance(self.param, ParameterVector)): self.param = ParameterVector( name, description, [self.shapetypeCombo.currentIndex() - 1]) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_MULTIPLE or isinstance(self.param, ParameterMultipleInput)): self.param = ParameterMultipleInput( name, description, self.datatypeCombo.currentIndex() - 1) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_NUMBER or isinstance(self.param, ParameterNumber)): try: vmin = self.minTextBox.text().strip() if vmin == '': vmin = None else: vmin = float(vmin) vmax = self.maxTextBox.text().strip() if vmax == '': vmax = None else: vmax = float(vmax) self.param = ParameterNumber(name, description, vmin, vmax, str(self.defaultTextBox.text())) except: QMessageBox.warning(self, self.tr('Unable to define parameter'), self.tr('Wrong or missing parameter values')) return elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_EXPRESSION or isinstance(self.param, ParameterExpression)): parent = self.parentCombo.currentData() self.param = ParameterExpression(name, description, default=str(self.defaultEdit.expression()), parent_layer=parent) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_STRING or isinstance(self.param, ParameterString)): self.param = ParameterString(name, description, str(self.defaultTextBox.text())) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_EXTENT or isinstance(self.param, ParameterExtent)): self.param = ParameterExtent(name, description) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_FILE or isinstance(self.param, ParameterFile)): isFolder = self.fileFolderCombo.currentIndex() == 1 self.param = ParameterFile(name, description, isFolder=isFolder) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_POINT or isinstance(self.param, ParameterPoint)): self.param = ParameterPoint(name, description, str(self.defaultTextBox.text())) elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_CRS or isinstance(self.param, ParameterCrs)): self.param = ParameterCrs(name, description, default=self.selector.crs().authid()) if not self.requiredCheck.isChecked(): self.param.setFlags(self.param.flags() | QgsProcessingParameterDefinition.FlagOptional) self.close()
def processInputParameterToken(self, token, name): param = None descName = self.createDescriptiveName(name) if token.lower().strip() == 'raster': param = ParameterRaster(name, descName, False) elif token.lower().strip() == 'vector': param = ParameterVector(name, descName, [ParameterVector.VECTOR_TYPE_ANY]) elif token.lower().strip() == 'vector point': param = ParameterVector(name, descName, [ParameterVector.VECTOR_TYPE_POINT]) elif token.lower().strip() == 'vector line': param = ParameterVector(name, descName, [ParameterVector.VECTOR_TYPE_LINE]) elif token.lower().strip() == 'vector polygon': param = ParameterVector(name, descName, [ParameterVector.VECTOR_TYPE_POLYGON]) elif token.lower().strip() == 'table': param = ParameterTable(name, descName, False) elif token.lower().strip() == 'multiple raster': param = ParameterMultipleInput(name, descName, ParameterMultipleInput.TYPE_RASTER) param.optional = False elif token.lower().strip() == 'multiple vector': param = ParameterMultipleInput( name, descName, ParameterMultipleInput.TYPE_VECTOR_ANY) param.optional = False elif token.lower().strip().startswith('selectionfromfile'): options = token.strip()[len('selectionfromfile '):].split(';') param = ParameterSelection(name, descName, options, isSource=True) elif token.lower().strip().startswith('selection'): options = token.strip()[len('selection '):].split(';') param = ParameterSelection(name, descName, options) elif token.lower().strip().startswith('boolean'): default = token.strip()[len('boolean') + 1:] if default: param = ParameterBoolean(name, descName, default) else: param = ParameterBoolean(name, descName) elif token.lower().strip() == 'extent': param = ParameterExtent(name, descName) elif token.lower().strip() == 'point': param = ParameterPoint(name, descName) elif token.lower().strip() == 'file': param = ParameterFile(name, descName, False) elif token.lower().strip() == 'folder': param = ParameterFile(name, descName, True) elif token.lower().strip().startswith('number'): default = token.strip()[len('number') + 1:] if default: param = ParameterNumber(name, descName, default=default) else: param = ParameterNumber(name, descName) elif token.lower().strip().startswith('field'): field = token.strip()[len('field') + 1:] found = False for p in self.parameters: if p.name == field: found = True break if found: param = ParameterTableField(name, descName, field) elif token.lower().strip().startswith('string'): default = token.strip()[len('string') + 1:] if default: param = ParameterString(name, descName, default) else: param = ParameterString(name, descName) elif token.lower().strip().startswith('longstring'): default = token.strip()[len('longstring') + 1:] if default: param = ParameterString(name, descName, default, multiline=True) else: param = ParameterString(name, descName, multiline=True) elif token.lower().strip().startswith('crs'): default = token.strip()[len('crs') + 1:] if default: param = ParameterCrs(name, descName, default) else: param = ParameterCrs(name, descName) return param
def __init__(self): super().__init__() 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')))
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)))
def __init__(self): super().__init__() self.addParameter( ParameterVector(self.INPUT_LAYER, self.tr('Input layer'))) self.addParameter( ParameterString(self.SHAPE_ENCODING, self.tr('Shape encoding'), "", optional=True)) self.addParameter( ParameterSelection(self.GTYPE, self.tr('Output geometry type'), self.GEOMTYPE, 0)) self.addParameter( ParameterCrs(self.A_SRS, self.tr('Assign an output CRS'), '', optional=False)) self.addParameter( ParameterCrs(self.T_SRS, self.tr('Reproject to this CRS on output '), '', optional=True)) self.addParameter( ParameterCrs(self.S_SRS, self.tr('Override source CRS'), '', optional=True)) self.addParameter( ParameterString(self.HOST, self.tr('Host'), 'localhost', optional=True)) self.addParameter( ParameterString(self.PORT, self.tr('Port'), '5432', optional=True)) self.addParameter( ParameterString(self.USER, self.tr('Username'), '', optional=True)) self.addParameter( ParameterString(self.DBNAME, self.tr('Database name'), '', optional=True)) self.addParameter( ParameterString(self.PASSWORD, self.tr('Password'), '', optional=True)) self.addParameter( ParameterString(self.SCHEMA, self.tr('Schema name'), 'public', optional=True)) self.addParameter( ParameterString( self.TABLE, self.tr('Table name, leave blank to use input name'), '', optional=True)) self.addParameter( ParameterString(self.PK, self.tr('Primary key (new field)'), 'id', optional=True)) self.addParameter( ParameterTableField( self.PRIMARY_KEY, self. tr('Primary key (existing field, used if the above option is left empty)' ), self.INPUT_LAYER, optional=True)) self.addParameter( ParameterString(self.GEOCOLUMN, self.tr('Geometry column name'), 'geom', optional=True)) self.addParameter( ParameterSelection(self.DIM, self.tr('Vector dimensions'), self.DIMLIST, 0)) self.addParameter( ParameterString(self.SIMPLIFY, self.tr('Distance tolerance for simplification'), '', optional=True)) self.addParameter( ParameterString( self.SEGMENTIZE, self.tr('Maximum distance between 2 nodes (densification)'), '', optional=True)) self.addParameter( ParameterExtent( self.SPAT, self.tr( 'Select features by extent (defined in input layer CRS)'))) self.addParameter( ParameterBoolean( self.CLIP, self.tr( 'Clip the input layer using the above (rectangle) extent'), False)) self.addParameter( ParameterString( self.WHERE, self. tr('Select features using a SQL "WHERE" statement (Ex: column=\'value\')' ), '', optional=True)) self.addParameter( ParameterString( self.GT, self.tr('Group N features per transaction (Default: 20000)'), '', optional=True)) self.addParameter( ParameterBoolean(self.OVERWRITE, self.tr('Overwrite existing table'), True)) self.addParameter( ParameterBoolean(self.APPEND, self.tr('Append to existing table'), False)) self.addParameter( ParameterBoolean( self.ADDFIELDS, self.tr('Append and add new fields to existing table'), False)) self.addParameter( ParameterBoolean(self.LAUNDER, self.tr('Do not launder columns/table names'), False)) self.addParameter( ParameterBoolean(self.INDEX, self.tr('Do not create spatial index'), False)) self.addParameter( ParameterBoolean( self.SKIPFAILURES, self.tr( 'Continue after a failure, skipping the failed feature'), False)) self.addParameter( ParameterBoolean(self.PROMOTETOMULTI, self.tr('Promote to Multipart'), True)) self.addParameter( ParameterBoolean( self.PRECISION, self.tr('Keep width and precision of input attributes'), True)) self.addParameter( ParameterString(self.OPTIONS, self.tr('Additional creation options'), '', optional=True))
def defineCharacteristics(self): self.name, self.i18n_name = self.trAlgorithm('Retile') self.group, self.i18n_group = self.trAlgorithm('[GDAL] Miscellaneous') # Required parameters self.addParameter( ParameterMultipleInput(self.INPUT, self.tr('Input layers'), ParameterMultipleInput.TYPE_RASTER)) # Advanced parameters params = [] params.append( ParameterString( self.PIXELSIZE, self. tr('Pixel size to be used for the output file (XSIZE YSIZE like 512 512)' ), None, False, True)) params.append( ParameterSelection(self.ALGORITHM, self.tr('Resampling algorithm'), self.ALGO, 0, False, True)) params.append( ParameterCrs(self.S_SRS, self.tr('Override source CRS'), None, True)) params.append( ParameterNumber(self.PYRAMIDLEVELS, self.tr('Number of pyramids levels to build'), None, None, None, True)) params.append( ParameterBoolean(self.ONLYPYRAMIDS, self.tr('Build only the pyramids'), False, True)) params.append( ParameterSelection(self.RTYPE, self.tr('Output raster type'), self.TYPE, 5, False, True)) params.append( ParameterSelection(self.FORMAT, self.tr('Output raster format'), GdalUtils.getSupportedRasters().keys(), 0, False, True)) params.append( ParameterBoolean(self.USEDIRFOREACHROW, self.tr('Use a directory for each row'), False, True)) params.append( ParameterString( self.CSVFILE, self. tr('Name of the csv file containing the tile(s) georeferencing information' ), None, False, True)) params.append( ParameterString(self.CSVDELIM, self.tr('Column delimiter used in the CSV file'), None, False, True)) params.append( ParameterString( self.TILEINDEX, self.tr( 'name of shape file containing the result tile(s) index'), None, False, True)) params.append( ParameterString( self.TILEINDEXFIELD, self. tr('name of the attribute containing the tile name in the result shape file' ), None, False, True)) for param in params: param.isAdvanced = True self.addParameter(param) self.addOutput( OutputDirectory( self.TARGETDIR, self.tr('The directory where the tile result is created')))