def load(self): group = self.name() ProcessingConfig.settingIcons[group] = self.icon() ProcessingConfig.addSetting( Setting(group, OtbUtils.ACTIVATE, self.tr('Activate'), True)) ProcessingConfig.addSetting( Setting(group, OtbUtils.FOLDER, self.tr("OTB folder"), OtbUtils.otbFolder(), valuetype=Setting.FOLDER, validator=self.validateOtbFolder)) ProcessingConfig.addSetting( Setting(group, OtbUtils.APP_FOLDER, self.tr("OTB application folder"), OtbUtils.appFolder(), valuetype=Setting.MULTIPLE_FOLDERS, validator=self.validateAppFolders)) ProcessingConfig.addSetting( Setting(group, OtbUtils.SRTM_FOLDER, self.tr("SRTM tiles folder"), OtbUtils.srtmFolder(), valuetype=Setting.FOLDER)) ProcessingConfig.addSetting( Setting(group, OtbUtils.GEOID_FILE, self.tr("Geoid file"), OtbUtils.geoidFile(), valuetype=Setting.FOLDER)) ProcessingConfig.addSetting( Setting(group, OtbUtils.MAX_RAM_HINT, self.tr("Maximum RAM to use"), OtbUtils.maxRAMHint(), valuetype=Setting.STRING)) ProcessingConfig.addSetting( Setting(group, OtbUtils.LOGGER_LEVEL, self.tr("Logger level"), OtbUtils.loggerLevel(), valuetype=Setting.STRING, validator=self.validateLoggerLevel)) ProcessingConfig.readSettings() self.refreshAlgorithms() return True
def load(self): group = self.name() ProcessingConfig.settingIcons[group] = self.icon() ProcessingConfig.addSetting(Setting(group, OtbUtils.ACTIVATE, self.tr('Activate'), True)) ProcessingConfig.addSetting(Setting(group, OtbUtils.FOLDER, self.tr("OTB folder"), OtbUtils.otbFolder(), valuetype=Setting.FOLDER, validator=self.validateOtbFolder )) ProcessingConfig.addSetting(Setting(group, OtbUtils.APP_FOLDER, self.tr("OTB application folder"), OtbUtils.appFolder(), valuetype=Setting.MULTIPLE_FOLDERS, validator=self.validateAppFolders )) ProcessingConfig.addSetting(Setting(group, OtbUtils.SRTM_FOLDER, self.tr("SRTM tiles folder"), OtbUtils.srtmFolder(), valuetype=Setting.FOLDER )) ProcessingConfig.addSetting(Setting(group, OtbUtils.GEOID_FILE, self.tr("Geoid file"), OtbUtils.geoidFile(), valuetype=Setting.FOLDER )) ProcessingConfig.addSetting(Setting(group, OtbUtils.MAX_RAM_HINT, self.tr("Maximum RAM to use"), OtbUtils.maxRAMHint(), valuetype=Setting.STRING )) ProcessingConfig.addSetting(Setting(group, OtbUtils.LOGGER_LEVEL, self.tr("Logger level"), OtbUtils.loggerLevel(), valuetype=Setting.STRING, validator=self.validateLoggerLevel )) ProcessingConfig.readSettings() self.refreshAlgorithms() return True
def processAlgorithm(self, parameters, context, feedback): app_launcher_path = OtbUtils.getExecutableInPath(OtbUtils.otbFolder(), 'otbApplicationLauncherCommandLine') command = '"{}" {} {}'.format(app_launcher_path, self.name(), OtbUtils.appFolder()) outputPixelType = None for k, v in parameters.items(): # if value is None for a parameter we don't have any businees with this key if not v or v is None: continue # for 'outputpixeltype' parameter we find the pixeltype string from self.pixelTypes if k == 'outputpixeltype': pixel_type = self.pixelTypes[int(parameters['outputpixeltype'])] outputPixelType = None if pixel_type == 'float' else pixel_type continue param = self.parameterDefinition(k) if param.isDestination(): continue if isinstance(param, QgsProcessingParameterEnum): value = self.parameterAsEnum(parameters, param.name(), context) elif isinstance(param, QgsProcessingParameterBoolean): value = self.parameterAsBoolean(parameters, param.name(), context) elif isinstance(param, QgsProcessingParameterCrs): crsValue = self.parameterAsCrs(parameters, param.name(), context) authid = crsValue.authid() if authid.startswith('EPSG:'): value = authid.split('EPSG:')[1] else: raise QgsProcessingException( self.tr("Incorrect value for parameter '{}'. No EPSG code found in '{}'".format( param.name(), authid))) elif isinstance(param, QgsProcessingParameterFile): value = self.parameterAsFile(parameters, param.name(), context) elif isinstance(param, QgsProcessingParameterMultipleLayers): layers = self.parameterAsLayerList(parameters, param.name(), context) if layers is None or len(layers) == 0: continue value = ' '.join(['"{}"'.format(self.getLayerSource(param.name(), layer)) for layer in layers]) elif isinstance(param, QgsProcessingParameterNumber): if param.dataType() == QgsProcessingParameterNumber.Integer: value = self.parameterAsInt(parameters, param.name(), context) else: value = self.parameterAsDouble(parameters, param.name(), context) elif isinstance(param, (QgsProcessingParameterRasterLayer, QgsProcessingParameterVectorLayer)): value = '"{}"'.format(self.getLayerSource(param.name(), self.parameterAsLayer(parameters, param.name(), context))) elif isinstance(param, QgsProcessingParameterString): value = '"{}"'.format(self.parameterAsString(parameters, param.name(), context)) else: # Use whatever is given value = '"{}"'.format(parameters[param.name()]) # Check if value is set in above if elif ladder and update command string if value and value is not None: command += ' -{} {}'.format(k, value) output_files = {} for out in self.destinationParameterDefinitions(): filePath = self.parameterAsOutputLayer(parameters, out.name(), context) if filePath: output_files[out.name()] = filePath if outputPixelType is not None: command += ' -{} "{}" "{}"'.format(out.name(), filePath, outputPixelType) else: command += ' -{} "{}"'.format(out.name(), filePath) OtbUtils.executeOtb(command, feedback) result = {} for o in self.outputDefinitions(): if o.name() in output_files: result[o.name()] = output_files[o.name()] return result