Suite

Comment exécuter l'algorithme Refactor Fields dans la console Python ?


J'ai remarqué que le Traitement algorithme, Refactoriser les champs a unmappage des champsparamètre. Je ne pense pas avoir rencontré cela et je ne l'ai certainement pas utilisé auparavant depuis la console Python.

Il fournit un exemple sur la façon de l'utiliser:

processing.runalg("qgis:refactorfields", input, [{'name': output_field_name, 'type': output_field_type, 'length': output_field_length, 'precision': output_field_precision, 'expression': expression_based_on_input_layer }], sortie)

J'ai essayé de modifier cela dans la console mais je ne reçois aucune sortie. Voici le code type que j'ai utilisé :

traitement d'importation input = qgis.utils.iface.activeLayer() output = "C:/Users/Me/Desktop//test.shp" processing.runalg("qgis:refactorfields", input, [{'name': "Value ", 'type' : 0, 'longueur' : 10, 'précision' : 10, 'expression' : "Valeur" }], sortie)

Quelqu'un sait où je me trompe ? J'utilise QGIS 2.12.0-Lyon avec Traitement version 2.10.2.


Bon je pense avoir trouvé quel était mon problème :

L'outil n'aime pasinput = qgis.utils.iface.activeLayer(). En d'autres termes, l'utilisateur doit soit spécifier le nom réel de la couche chargée dans la table des matières (surtout s'il s'exécute dans le Console Python de QGIS) ou spécifiez le chemin du fichier de formes.

import processing input = "C:/Users/Me/Desktop//polygon_example.shp" output = "C:/Users/Me/Desktop//test.shp" processing.runalg("qgis:refactorfields", input, [{ 'nom' : 'Valeur', 'type' : 10, 'longueur' : 10, 'précision' : 0, 'expression' : 'Valeur' ​​}], sortie)

Notez que lors de l'exécution du code ci-dessus, la sortie sera ne contiennent que le champ "Valeur". Si vous avez plusieurs champs, vous devrez répéter ce qui précèdecarte de terrainstyle pour tous les champs que vous souhaitez conserver, mais vous pouvez en même temps modifier leurs propriétés telles que le type et la longueur (par exemple, leValeurchamp de la question):

import processing input = "C:/Users/Me/Desktop//polygon_example.shp" output = "C:/Users/Me/Desktop//test.shp" processing.runalg("qgis:refactorfields", input, [{ 'nom' : 'Valeur', 'type' : 10, 'longueur' : 5, 'précision' : 0, 'expression' : 'Valeur' ​​}, { 'nom' : 'Nouveau_Champ', 'type' : 10, 'longueur' : 2, 'précision' : 0, 'expression' : sortie '10')

J'espère que cela aide quelqu'un !


Pour l'exécuter sur plusieurs fichiers de formes dans un répertoire, les éléments suivants peuvent être utilisés :

import glob, os, processing path = "path/to/folder/" pour la couche dans glob.glob(path + "*.shp") : vLayer = QgsVectorLayer(layer, os.path.splitext(os.path.basename( layer))[0], 'ogr') processing.runalg("qgis:refactorfields", vLayer, [{'name': 'Value', 'type': 10, 'length': 10, 'precision': 0 , 'expression' : '1' }], chemin + vLayer.name() + '_refactored.shp')


Voir la vidéo: Comment exécuter un script sur Python (Octobre 2021).