Thursday 17 May 2018

pyqgis 3 - Where to get QGIS 3 Join by Field Value Script?


I´m trying to solve my problem with Join attributes by field value and for that I want to make a script on PyQGis to solve that.


Is there a location where I can found the script used in Join by field value on QGIS 3? To get it as a base and a guide.


I looked at GitHub and found only the Spatial Join script.



Answer




Since the QGIS version 3.6, you can export processing models as Python.


Just create a model with two input layers (geometry non required) and the "Join attributes by field" algorithm, save the model and export it as Python.


Result here :


from qgis.core import QgsProcessing
from qgis.core import QgsProcessingAlgorithm
from qgis.core import QgsProcessingMultiStepFeedback
from qgis.core import QgsProcessingParameterVectorLayer
from qgis.core import QgsProcessingParameterFeatureSink
import processing



class MyModel(QgsProcessingAlgorithm):

def initAlgorithm(self, config=None):
self.addParameter(QgsProcessingParameterVectorLayer('inputlayer1', 'input_layer_1', types=[QgsProcessing.TypeVector], defaultValue=None))
self.addParameter(QgsProcessingParameterVectorLayer('inputlayer2', 'input_layer_2', types=[QgsProcessing.TypeVector], defaultValue=None))
self.addParameter(QgsProcessingParameterFeatureSink('Output_layer', 'output_layer', optional=True, type=QgsProcessing.TypeVectorAnyGeometry, createByDefault=True, defaultValue=None))

def processAlgorithm(self, parameters, context, model_feedback):
# Use a multi-step feedback, so that individual child algorithm progress reports are adjusted for the

# overall progress through the model
feedback = QgsProcessingMultiStepFeedback(1, model_feedback)
results = {}
outputs = {}

# join_attributes_by_field_value
alg_params = {
'DISCARD_NONMATCHING': False,
'FIELD': 'join_field_layer_1',
'FIELDS_TO_COPY': None,

'FIELD_2': 'join_field_layer_2',
'INPUT': parameters['inputlayer1'],
'INPUT_2': parameters['inputlayer2'],
'METHOD': 1,
'PREFIX': '',
'OUTPUT': parameters['Output_layer']
}
outputs['Join_attributes_by_field_value'] = processing.run('native:joinattributestable', alg_params, context=context, feedback=feedback, is_child_algorithm=True)
results['Output_layer'] = outputs['Join_attributes_by_field_value']['OUTPUT']
return results


def name(self):
return 'my_model'

def displayName(self):
return 'my_model'

def group(self):
return ''


def groupId(self):
return ''

def createInstance(self):
return MyModel()

No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...