Quelle est la syntaxe de «mappage de champs» de l'outil Refactor Fields par lots dans QGIS?


10

Dans QGIS, il y a ce bel outil "Refactor Fields" dans la boîte à outils de traitement:

Outil Refactorisation des champs

Son utilisation sur un seul calque est assez simple.

Cependant, lorsque vous prévoyez de l'utiliser en mode batch, vous pouvez voir la zone de texte "Mappage des champs" . Je cherche un exemple de syntaxe à utiliser ici . Je n'ai pas encore trouvé de documentation spécifique.

Refactor batch


Après avoir exécuté une refactorisation à partir de l'interface graphique, vous pouvez regarder la commande dans le menu Traitement -> Historique (Ctrl + Alt + H)
kadarivan

Réponses:


7

Ce n'est pas très confortable à faire, mais ce qui suit est la syntaxe requise pour cette zone de texte (je l'écris en plusieurs lignes uniquement pour des raisons de clarté):

{'expression': u'type the expression here',
 'length': <type the length>,
 'type': <code of the type>,
 'name': u'type the field name here',
 'precision': <type the precision>}

Par exemple (n'oubliez pas d'utiliser des accolades):

{'expression': u'"FLAG1"+"FLAG2"',
 'length': 20, 'type': 6,
 'name': u'FLAG1',
 'precision': 5}

Vous devez écrire autant de lignes comme celle ci-dessus que le nombre de champs d'entrée, séparés par des virgules. Par exemple, si votre couche contient trois champs:

{'expression': u'"FLAG1"+"FLAG2"', 'length': 20, 'type': 6, 'name': u'FLAG1', 'precision': 5}, {'expression': u'100*"FLAG2"', 'length': 20, 'type': 6, 'name': u'FLAG2', 'precision': 5}, {'expression': u'"100-"FLAG2"', 'length': 20, 'type': 6, 'name': u'FLAG3', 'precision': 5}

et ça devrait marcher (ça a marché pour moi).

Veuillez noter que vous pouvez éviter d'utiliser cette syntaxe orientée dictionnaire et utiliser directement les valeurs requises. Par exemple, en référence au premier exemple, vous pouvez simplement utiliser:

{u'"FLAG1"+"FLAG2"', 20, 6, u'FLAG1', 5}

Si vous n'utilisez pas cette syntaxe, l'erreur suivante s'affiche:

Valeur de paramètre manquante: mappage des champs (ligne 1)


2
Pouvez-vous expliquer ce que signifie <code du type>? J'ai essayé d'utiliser 3 en supposant que c'est pour la chaîne (car c'est le 3ème dans les options déroulantes) mais j'ai eu une erreur: l'objet 'int' n'a pas d'attribut ' getItem ' Voir le journal pour plus de détails. Le code que j'ai utilisé est: {u '"FLAG"', 0, 3, u'FLAG ', 0} pour l'un de mes calques où {' expression ': u' "FLAG" ',' length ': 0,' tapez ': 3,' nom ': u'FLAG', 'précision': 0}.
JAT86

@ JAT86 C'est le nombre qui identifie le type de données (c'est-à-dire int, chaîne, etc.). Malheureusement, je n'ai pas trouvé de référence pour eux, mais je dois me souvenir des valeurs pour les types les plus utilisés: 2 pour int, 6 pour double et 10 pour chaîne. En plus de cela, vous ne devriez peut-être pas spécifier 0la longueur du champ (au moins 1!). S'il vous plaît, faites-moi savoir si vous avez résolu le problème.
mgri

Merci pour la réponse rapide. Peut-être que le traitement par lots est beaucoup plus complexe que je ne le pensais. J'ai essayé d'utiliser au moins 1 pour la longueur et 10 pour le type de code: {u '"FLAG"', 1, 10, u'FLAG ', 0} Pourtant, l'erreur apparaît:' int 'object has no attribute' getItem 'Voir le journal pour plus de détails. Ma couche a les attributs suivants: nom: drapeau, Type: chaîne, Longueur: 0, Précision: 0, Expression: "drapeau"
JAT86

@ JAT86 L'exécution de l'outil à partir de l'interface graphique renvoie-t-elle un problème?
mgri

Si par interface graphique, vous entendez une seule couche, non, cela n'a posé aucun problème. La colonne FLAG a été supprimée avec succès en "cliquant sur Supprimer le champ sélectionné" et a été enregistrée dans une nouvelle couche "Refactorisée".
JAT86

2

Il existe un autre algorithme similaire à celui-ci dont l'interface simplifie mieux le traitement par lots.

entrez la description de l'image ici


1
Anglais anglais
BERA

La traduction en anglais de l'élément de menu en question est "Ajouter un champ à la table attributaire"
J. Taylor
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.