Generare attributi in modo automatico con QGIS?


11

Voglio generare automaticamente gli ID mentre creo nuove funzionalità. Quindi ogni volta che creo un nuovo punto, il suo ID aumenterà di 1 come il seguente:

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

Come posso attaccarlo?

Risposte:


8

Se fai clic con il pulsante destro del mouse sul livello e vai a, Properties > Fieldsquindi fai clic su Text Edit, puoi impostare i valori Predefiniti (digitando un valore o usando un'espressione) che appariranno automaticamente nella tabella degli attributi.

Sfortunatamente, usare un'espressione come $rownum(che dovrebbe procurarti ID unici per le tue funzionalità) non funziona (la mia ipotesi è perché la funzione deve essere impegnata per prima?). Ma possiamo creare una funzione che conta il numero di funzioni create e aggiunge 1. È possibile accedere all'editor delle funzioni come mostrato nell'immagine:

Editor di funzioni

Quindi nell'editor delle funzioni, crea un nuovo file o modificane uno esistente e usa il seguente codice:

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

Fai clic su Carica, quindi vai alla scheda Espressione accanto ad essa e inserisci l'espressione:

update()

Quindi fai clic su OK e dovresti vedere un valore di anteprima:

Anteprima

Fai clic su OK , Applica ecc. E ora si spera che quando crei una funzione, creerà automaticamente un ID univoco nel campo prescelto.



3

Penso che non sia possibile impostare valori predefiniti durante la creazione di una nuova funzionalità, ma è possibile provare a risolvere il seguente problema:

  • una volta terminata la creazione delle funzionalità, vai alla tabella degli attributi
  • Vai al calcolatore di campo e crea una nuova colonna chiamata idcon il tipo Int
  • Come valore inserire @row_numberche produrrà valori univoci in base al numero di riga
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.