Ich möchte IDs automatisch generieren, während ich neue Funktionen erstelle. Jedes Mal, wenn ich einen neuen Punkt erstelle, erhöht sich seine ID wie folgt um 1:
Feature 1: id 1
Feature 2: id 2
Feature 3: id 3
Wie kann ich das angreifen?
Ich möchte IDs automatisch generieren, während ich neue Funktionen erstelle. Jedes Mal, wenn ich einen neuen Punkt erstelle, erhöht sich seine ID wie folgt um 1:
Feature 1: id 1
Feature 2: id 2
Feature 3: id 3
Wie kann ich das angreifen?
Wenn Sie mit der rechten Maustaste auf Ihre Ebene klicken und Properties > Fields
dann auf klicken Text Edit
, können Sie Standardwerte festlegen (entweder durch Eingabe eines Werts oder mithilfe eines Ausdrucks), die automatisch in der Attributtabelle angezeigt werden.
Leider $rownum
funktioniert die Verwendung eines Ausdrucks wie (mit dem Sie eindeutige IDs für Ihre Funktionen erhalten sollten) nicht (ich vermute, dass die Funktion zuerst festgeschrieben werden muss?). Wir können jedoch eine Funktion erstellen, die die Anzahl der erstellten Features zählt und 1 hinzufügt. Sie können auf den Funktionseditor zugreifen, wie im Bild gezeigt:
Erstellen Sie dann im Funktionseditor eine neue Datei oder bearbeiten Sie eine vorhandene und verwenden Sie den folgenden Code:
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
Klicken Sie auf Laden, gehen Sie zur Registerkarte Ausdruck daneben und fügen Sie den Ausdruck ein:
update()
Klicken Sie dann auf OK und Sie sollten einen Vorschauwert sehen:
Klicken Sie auf OK , Übernehmen usw. und hoffentlich wird beim Erstellen eines Features automatisch eine eindeutige ID in dem von Ihnen ausgewählten Feld erstellt.
Sie können das Plugin "AutoFields" für automatische Attributaktualisierungen verwenden, wenn Sie Vektor-Features erstellen oder ändern
Ich denke, Sie können beim Erstellen einer neuen Funktion keine Standardwerte festlegen, aber Sie können die folgende Problemumgehung ausprobieren:
id
Int@row_number
der eindeutige Werte entsprechend der Zeilennummer ergibt