Générer des attributs de manière automatique avec QGIS?


11

Je souhaite générer automatiquement des ID pendant que je crée de nouvelles fonctionnalités. Ainsi, chaque fois que je crée un nouveau point, son ID augmentera de 1 comme suit:

Feature 1: id 1
Feature 2: id 2
Feature 3: id 3

Comment puis-je attaquer cela?

Réponses:


8

Si vous cliquez avec le bouton droit sur votre calque et cliquez sur Properties > Fieldspuis sur Text Edit, vous pouvez définir des valeurs par défaut (soit en tapant une valeur, soit en utilisant une expression) qui apparaîtront automatiquement dans la table attributaire.

Malheureusement, l'utilisation d'une expression comme $rownum(qui devrait vous donner des identifiants uniques pour vos fonctionnalités) ne fonctionne pas (je suppose que la fonctionnalité doit être validée en premier?). Mais nous pouvons créer une fonction qui compte le nombre de fonctionnalités réalisées et en ajoute 1. Vous pouvez accéder à l' éditeur de fonctions comme indiqué dans l'image:

Éditeur de fonction

Ensuite, dans l'éditeur de fonctions, créez un nouveau fichier ou modifiez-en un existant et utilisez le code suivant:

from qgis.core import *
from qgis.gui import *

@qgsfunction(args='auto', group='Custom')
def update(feature, parent):
    layer = qgis.utils.iface.activeLayer()
    x = layer.featureCount()
    return x + 1

Cliquez sur Charger puis accédez à l' onglet Expression à côté et insérez l'expression:

update()

Cliquez ensuite sur OK et vous devriez voir une valeur d'aperçu:

Aperçu

Cliquez sur OK , Appliquer, etc. et maintenant, espérons-le, lorsque vous créerez une fonctionnalité, elle créera automatiquement un identifiant unique dans le champ que vous avez choisi.



3

Je pense que vous ne pouvez pas définir de valeurs par défaut lors de la création d'une nouvelle fonctionnalité, mais vous pouvez essayer le travail suivant:

  • une fois la création de vos fonctionnalités terminée, accédez au tableau des attributs
  • Accédez à la calculatrice de champ et créez une nouvelle colonne appelée idavec le type Int
  • Comme insert de valeur @row_numberqui produira des valeurs uniques selon le numéro de ligne
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.