def processAlgorithm(self, parameters, context, feedback):
        """
        Here is where the processing itself takes place.
        """
        layerHandler = LayerHandler()
        inputLyr = self.parameterAsVectorLayer(parameters, self.INPUT, context)
        if inputLyr is None:
            raise QgsProcessingException(
                self.invalidSourceError(parameters, self.INPUT))
        outputLyr = self.parameterAsVectorLayer(parameters, self.OUTPUT,
                                                context)
        if outputLyr is None:
            raise QgsProcessingException(
                self.invalidSourceError(parameters, self.OUTPUT))
        if inputLyr == outputLyr:
            raise QgsProcessingException(
                self.tr('Input must be different from output!'))
        inputExpression = self.parameterAsExpression(
            parameters, self.INPUT_FILTER_EXPRESSION, context)
        filterLyr = self.parameterAsVectorLayer(parameters, self.FILTER_LAYER,
                                                context)
        behavior = self.parameterAsEnum(parameters, self.BEHAVIOR, context)

        prepairedLyr = layerHandler.prepareConversion(
            inputLyr=inputLyr,
            context=context,
            inputExpression=inputExpression,
            filterLyr=filterLyr,
            behavior=behavior,
            feedback=feedback)

        return {self.INPUT: inputLyr}
Пример #2
0
 def prepareInputLayers(self,
                        inputLayers,
                        stepConversionMap,
                        context=None,
                        feedback=None):
     """
     Prepare layers for a translation unit (step) to be executed (e.g. applies filters).
     :param inputLayers: (dict) a map from layer name to each vector layer contained by the
                         input datasource. 
     :param stepConversionMap: (dict) conversion map generated by Datasource Conversion tool
                               for a conversion step.
     :param context: (QgsProcessingContext) environment parameters in which processing tools are used.
     :param feedback: (QgsProcessingMultiStepFeedback) QGIS tool for progress tracking.
     :return: (dict) map of layers to have its features mapped to output format.
     """
     lh = LayerHandler()
     context = context if context is not None else QgsProcessingContext()
     layerFilters = stepConversionMap["filter"]["layer_filter"]
     spatialFilters = stepConversionMap["filter"]["spatial_filter"]
     # in case a selection of layers was made, only chosen layers should be translated
     inputLayers = inputLayers if layerFilters == {} else {
         layer: inputLayers[layer]
         for layer in layerFilters
     }
     multiStepFeedback = QgsProcessingMultiStepFeedback(
         len(inputLayers), feedback)
     if spatialFilters:
         # spatial filtering behaviour is set based on the modes defined in convertLayer2LayerAlgorithm
         behaviour = self.getSpatialFilterBehaviour(
             spatialFilters["predicate"] if "predicate" in
             spatialFilters else None)
         spatialFilterlLayer = self.prepareSpatialFilterLayer(
             spatialFilters, context)
     else:
         behaviour = None
         spatialFilters = None
     preparedLayers = dict()
     currentStep = 0
     for layer, vl in inputLayers.items():
         if feedback is not None:
             multiStepFeedback.setCurrentStep(currentStep)
             if multiStepFeedback.isCanceled():
                 break
             currentStep += 1
         translatedLayer = lh.prepareConversion(
             inputLyr=vl,
             context=context,
             inputExpression=layerFilters[layer]["expression"]
             if layer in layerFilters else None,
             filterLyr=spatialFilterlLayer,
             behavior=behaviour,
             conversionMap=stepConversionMap,
             feedback=multiStepFeedback if feedback is not None else None)
         if translatedLayer.featureCount() > 0:
             preparedLayers[layer] = translatedLayer
     return preparedLayers