mirror of
				https://github.com/qgis/QGIS.git
				synced 2025-11-03 00:14:12 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			270 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			270 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
# -*- coding: utf-8 -*-
 | 
						|
 | 
						|
"""
 | 
						|
***************************************************************************
 | 
						|
    Parameters.py
 | 
						|
    ---------------------
 | 
						|
    Date                 : August 2012
 | 
						|
    Copyright            : (C) 2012 by Victor Olaya
 | 
						|
    Email                : volayaf at gmail dot com
 | 
						|
***************************************************************************
 | 
						|
*                                                                         *
 | 
						|
*   This program is free software; you can redistribute it and/or modify  *
 | 
						|
*   it under the terms of the GNU General Public License as published by  *
 | 
						|
*   the Free Software Foundation; either version 2 of the License, or     *
 | 
						|
*   (at your option) any later version.                                   *
 | 
						|
*                                                                         *
 | 
						|
***************************************************************************
 | 
						|
"""
 | 
						|
 | 
						|
__author__ = 'Victor Olaya'
 | 
						|
__date__ = 'August 2012'
 | 
						|
__copyright__ = '(C) 2012, Victor Olaya'
 | 
						|
 | 
						|
import sys
 | 
						|
 | 
						|
from qgis.core import (QgsRasterLayer,
 | 
						|
                       QgsVectorLayer,
 | 
						|
                       QgsMapLayer,
 | 
						|
                       QgsCoordinateReferenceSystem,
 | 
						|
                       QgsExpression,
 | 
						|
                       QgsProject,
 | 
						|
                       QgsRectangle,
 | 
						|
                       QgsVectorFileWriter,
 | 
						|
                       QgsProcessing,
 | 
						|
                       QgsProcessingUtils,
 | 
						|
                       QgsProcessingParameters,
 | 
						|
                       QgsProcessingParameterDefinition,
 | 
						|
                       QgsProcessingParameterRasterLayer,
 | 
						|
                       QgsProcessingParameterVectorLayer,
 | 
						|
                       QgsProcessingParameterBand,
 | 
						|
                       QgsProcessingParameterBoolean,
 | 
						|
                       QgsProcessingParameterCrs,
 | 
						|
                       QgsProcessingParameterRange,
 | 
						|
                       QgsProcessingParameterPoint,
 | 
						|
                       QgsProcessingParameterEnum,
 | 
						|
                       QgsProcessingParameterExtent,
 | 
						|
                       QgsProcessingParameterExpression,
 | 
						|
                       QgsProcessingParameterMatrix,
 | 
						|
                       QgsProcessingParameterFile,
 | 
						|
                       QgsProcessingParameterField,
 | 
						|
                       QgsProcessingParameterVectorDestination,
 | 
						|
                       QgsProcessingParameterFileDestination,
 | 
						|
                       QgsProcessingParameterFolderDestination,
 | 
						|
                       QgsProcessingParameterRasterDestination,
 | 
						|
                       QgsProcessingParameterString,
 | 
						|
                       QgsProcessingParameterMapLayer,
 | 
						|
                       QgsProcessingParameterMultipleLayers,
 | 
						|
                       QgsProcessingParameterFeatureSource,
 | 
						|
                       QgsProcessingParameterNumber,
 | 
						|
                       QgsProcessingParameterColor)
 | 
						|
 | 
						|
from qgis.PyQt.QtCore import QCoreApplication
 | 
						|
 | 
						|
PARAMETER_NUMBER = 'number'
 | 
						|
PARAMETER_DISTANCE = 'distance'
 | 
						|
PARAMETER_SCALE = 'scale'
 | 
						|
PARAMETER_RASTER = 'raster'
 | 
						|
PARAMETER_TABLE = 'vector'
 | 
						|
PARAMETER_VECTOR = 'source'
 | 
						|
PARAMETER_STRING = 'string'
 | 
						|
PARAMETER_EXPRESSION = 'expression'
 | 
						|
PARAMETER_BOOLEAN = 'boolean'
 | 
						|
PARAMETER_TABLE_FIELD = 'field'
 | 
						|
PARAMETER_EXTENT = 'extent'
 | 
						|
PARAMETER_FILE = 'file'
 | 
						|
PARAMETER_POINT = 'point'
 | 
						|
PARAMETER_CRS = 'crs'
 | 
						|
PARAMETER_MULTIPLE = 'multilayer'
 | 
						|
PARAMETER_BAND = 'band'
 | 
						|
PARAMETER_LAYOUTITEM = 'layoutitem'
 | 
						|
PARAMETER_MAP_LAYER = 'layer'
 | 
						|
PARAMETER_RANGE = 'range'
 | 
						|
PARAMETER_ENUM = 'enum'
 | 
						|
PARAMETER_MATRIX = 'matrix'
 | 
						|
PARAMETER_VECTOR_DESTINATION = 'vectorDestination'
 | 
						|
PARAMETER_FILE_DESTINATION = 'fileDestination'
 | 
						|
PARAMETER_FOLDER_DESTINATION = 'folderDestination'
 | 
						|
PARAMETER_RASTER_DESTINATION = 'rasterDestination'
 | 
						|
 | 
						|
 | 
						|
def getParameterFromString(s, context=''):
 | 
						|
    # Try the parameter definitions used in description files
 | 
						|
    if '|' in s and (s.startswith("QgsProcessingParameter") or s.startswith("*QgsProcessingParameter") or s.startswith('Parameter') or s.startswith('*Parameter')):
 | 
						|
        isAdvanced = False
 | 
						|
        if s.startswith("*"):
 | 
						|
            s = s[1:]
 | 
						|
            isAdvanced = True
 | 
						|
        tokens = s.split("|")
 | 
						|
        params = [t if str(t) != str(None) else None for t in tokens[1:]]
 | 
						|
 | 
						|
        if True:
 | 
						|
            clazz = getattr(sys.modules[__name__], tokens[0])
 | 
						|
            # convert to correct type
 | 
						|
            if clazz == QgsProcessingParameterRasterLayer:
 | 
						|
                if len(params) > 3:
 | 
						|
                    params[3] = True if params[3].lower() == 'true' else False
 | 
						|
            elif clazz == QgsProcessingParameterBand:
 | 
						|
                if len(params) > 4:
 | 
						|
                    params[4] = True if params[4].lower() == 'true' else False
 | 
						|
                if len(params) > 5:
 | 
						|
                    params[5] = True if params[5].lower() == 'true' else False
 | 
						|
            elif clazz == QgsProcessingParameterVectorLayer:
 | 
						|
                if len(params) > 2:
 | 
						|
                    params[2] = [int(p) for p in params[2].split(';')]
 | 
						|
                if len(params) > 4:
 | 
						|
                    params[4] = True if params[4].lower() == 'true' else False
 | 
						|
            elif clazz == QgsProcessingParameterMapLayer:
 | 
						|
                if len(params) > 3:
 | 
						|
                    params[3] = True if params[3].lower() == 'true' else False
 | 
						|
                    try:
 | 
						|
                        params[4] = [int(p) for p in params[4].split(';')]
 | 
						|
                    except:
 | 
						|
                        params[4] = [getattr(QgsProcessing, p.split(".")[1]) for p in params[4].split(';')]
 | 
						|
            elif clazz == QgsProcessingParameterBoolean:
 | 
						|
                if len(params) > 2:
 | 
						|
                    params[2] = True if params[2].lower() == 'true' else False
 | 
						|
                if len(params) > 3:
 | 
						|
                    params[3] = True if params[3].lower() == 'true' else False
 | 
						|
            elif clazz == QgsProcessingParameterPoint:
 | 
						|
                if len(params) > 3:
 | 
						|
                    params[3] = True if params[3].lower() == 'true' else False
 | 
						|
            elif clazz == QgsProcessingParameterCrs:
 | 
						|
                if len(params) > 3:
 | 
						|
                    params[3] = True if params[3].lower() == 'true' else False
 | 
						|
            elif clazz == QgsProcessingParameterRange:
 | 
						|
                if len(params) > 2:
 | 
						|
                    try:
 | 
						|
                        params[2] = int(params[2])
 | 
						|
                    except:
 | 
						|
                        params[2] = getattr(QgsProcessingParameterNumber, params[2].split(".")[1])
 | 
						|
                if len(params) > 4:
 | 
						|
                    params[4] = True if params[4].lower() == 'true' else False
 | 
						|
            elif clazz == QgsProcessingParameterExtent:
 | 
						|
                if len(params) > 3:
 | 
						|
                    params[3] = True if params[3].lower() == 'true' else False
 | 
						|
            elif clazz == QgsProcessingParameterExpression:
 | 
						|
                if len(params) > 3:
 | 
						|
                    params[3] = True if params[3].lower() == 'true' else False
 | 
						|
            elif clazz == QgsProcessingParameterEnum:
 | 
						|
                if len(params) > 2:
 | 
						|
                    params[2] = params[2].split(';')
 | 
						|
                if len(params) > 3:
 | 
						|
                    params[3] = True if params[3].lower() == 'true' else False
 | 
						|
                if len(params) > 4:
 | 
						|
                    # For multiple values; default value is a list of int
 | 
						|
                    if params[3] == True:
 | 
						|
                        params[4] = [int(v) for v in params[4].split(',')] if params[4] is not None else None
 | 
						|
                    else:
 | 
						|
                        params[4] = int(params[4]) if params[4] is not None else None
 | 
						|
                if len(params) > 5:
 | 
						|
                    params[5] = True if params[5].lower() == 'true' else False
 | 
						|
            elif clazz == QgsProcessingParameterFeatureSource:
 | 
						|
                if len(params) > 2:
 | 
						|
                    try:
 | 
						|
                        params[2] = [int(p) for p in params[2].split(';')]
 | 
						|
                    except:
 | 
						|
                        params[2] = [getattr(QgsProcessing, p.split(".")[1]) for p in params[2].split(';')]
 | 
						|
                if len(params) > 4:
 | 
						|
                    params[4] = True if params[4].lower() == 'true' else False
 | 
						|
            elif clazz == QgsProcessingParameterMultipleLayers:
 | 
						|
                if len(params) > 2:
 | 
						|
                    try:
 | 
						|
                        params[2] = int(params[2])
 | 
						|
                    except:
 | 
						|
                        params[2] = getattr(QgsProcessing, params[2].split(".")[1])
 | 
						|
                if len(params) > 4:
 | 
						|
                    params[4] = True if params[4].lower() == 'true' else False
 | 
						|
            elif clazz == QgsProcessingParameterMatrix:
 | 
						|
                if len(params) > 2:
 | 
						|
                    params[2] = int(params[2])
 | 
						|
                if len(params) > 3:
 | 
						|
                    params[3] = True if params[3].lower() == 'true' else False
 | 
						|
                if len(params) > 4:
 | 
						|
                    params[4] = params[4].split(';')
 | 
						|
                if len(params) > 6:
 | 
						|
                    params[6] = True if params[6].lower() == 'true' else False
 | 
						|
            elif clazz == QgsProcessingParameterField:
 | 
						|
                if len(params) > 4:
 | 
						|
                    try:
 | 
						|
                        params[4] = int(params[4])
 | 
						|
                    except:
 | 
						|
                        params[4] = getattr(QgsProcessingParameterField, params[4].split(".")[1])
 | 
						|
                if len(params) > 5:
 | 
						|
                    params[5] = True if params[5].lower() == 'true' else False
 | 
						|
                if len(params) > 6:
 | 
						|
                    params[6] = True if params[6].lower() == 'true' else False
 | 
						|
            elif clazz == QgsProcessingParameterFile:
 | 
						|
                if len(params) > 2:
 | 
						|
                    try:
 | 
						|
                        params[2] = int(params[2])
 | 
						|
                    except:
 | 
						|
                        params[2] = getattr(QgsProcessingParameterFile, params[2].split(".")[1])
 | 
						|
                if len(params) > 5:
 | 
						|
                    params[5] = True if params[5].lower() == 'true' else False
 | 
						|
            elif clazz == QgsProcessingParameterNumber:
 | 
						|
                if len(params) > 2:
 | 
						|
                    try:
 | 
						|
                        params[2] = int(params[2])
 | 
						|
                    except:
 | 
						|
                        params[2] = getattr(QgsProcessingParameterNumber, params[2].split(".")[1])
 | 
						|
                if len(params) > 3:
 | 
						|
                    params[3] = float(params[3].strip()) if params[3] is not None else None
 | 
						|
                if len(params) > 4:
 | 
						|
                    params[4] = True if params[4].lower() == 'true' else False
 | 
						|
                if len(params) > 5:
 | 
						|
                    params[5] = float(params[5].strip()) if params[5] is not None else -sys.float_info.max + 1
 | 
						|
                if len(params) > 6:
 | 
						|
                    params[6] = float(params[6].strip()) if params[6] is not None else sys.float_info.max - 1
 | 
						|
            elif clazz == QgsProcessingParameterString:
 | 
						|
                if len(params) > 3:
 | 
						|
                    params[3] = True if params[3].lower() == 'true' else False
 | 
						|
                if len(params) > 4:
 | 
						|
                    params[4] = True if params[4].lower() == 'true' else False
 | 
						|
            elif clazz == QgsProcessingParameterColor:
 | 
						|
                if len(params) > 3:
 | 
						|
                    params[3] = True if params[3].lower() == 'true' else False
 | 
						|
                if len(params) > 4:
 | 
						|
                    params[4] = True if params[4].lower() == 'true' else False
 | 
						|
            elif clazz == QgsProcessingParameterFileDestination:
 | 
						|
                if len(params) > 4:
 | 
						|
                    params[4] = True if params[4].lower() == 'true' else False
 | 
						|
                if len(params) > 5:
 | 
						|
                    params[5] = True if params[5].lower() == 'true' else False
 | 
						|
            elif clazz == QgsProcessingParameterFolderDestination:
 | 
						|
                if len(params) > 3:
 | 
						|
                    params[3] = True if params[3].lower() == 'true' else False
 | 
						|
                if len(params) > 4:
 | 
						|
                    params[4] = True if params[4].lower() == 'true' else False
 | 
						|
            elif clazz == QgsProcessingParameterRasterDestination:
 | 
						|
                if len(params) > 3:
 | 
						|
                    params[3] = True if params[3].lower() == 'true' else False
 | 
						|
                if len(params) > 4:
 | 
						|
                    params[4] = True if params[4].lower() == 'true' else False
 | 
						|
            elif clazz == QgsProcessingParameterVectorDestination:
 | 
						|
                if len(params) > 2:
 | 
						|
                    try:
 | 
						|
                        params[2] = int(params[2])
 | 
						|
                    except:
 | 
						|
                        params[2] = getattr(QgsProcessing, params[2].split(".")[1])
 | 
						|
                if len(params) > 4:
 | 
						|
                    params[4] = True if params[4].lower() == 'true' else False
 | 
						|
                if len(params) > 5:
 | 
						|
                    params[5] = True if params[5].lower() == 'true' else False
 | 
						|
 | 
						|
            param = clazz(*params)
 | 
						|
            if isAdvanced:
 | 
						|
                param.setFlags(param.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
 | 
						|
 | 
						|
            param.setDescription(QCoreApplication.translate(context, param.description()))
 | 
						|
 | 
						|
            return param
 | 
						|
        else:
 | 
						|
            return None
 | 
						|
    else:  # try script syntax
 | 
						|
 | 
						|
        # try native method
 | 
						|
        param = QgsProcessingParameters.parameterFromScriptCode(s)
 | 
						|
        if param:
 | 
						|
            return param
 |