Festlegen eines Standardwerts in einem QGIS-Feld

12

Ich möchte in das Feld einer Ebene einen Standardwert einfügen. Ich meine, jedes Mal, wenn ein neues Feature erstellt wird, wird dieses Feld automatisch mit dem Standardwert gefüllt.

In meinem Fall wäre der Standardwert die Variable @project_filename (Dateiname des Projekts).

Ich kann diese Funktionalität nirgendwo finden.

Grüße,

Egidi
quelle

Antworten:

8

Wechseln Sie seit QGIS 2.18 zu den Layereigenschaften / Feldeigenschaften und legen Sie ( @project_filenamein diesem Fall) einen Ausdruck als Standardwert fest.

Ausdrucksbasierte Standardwerte

https://www.qgis.org/en/site/forusers/visualchangelog218/index.html#feature-client-side-default-field-values

Matthias Kuhn
quelle
1
Wenn ich mich nicht irre, gibt es in der C ++ - API die Klasse QgsDefaultValue, um dies programmgesteuert zu tun. Gibt es eine Alternative zu Python?
Shika-Kun
Wenn Sie dies als neue Frage stellen, werde ich sie gerne beantworten. Schicken Sie mir hier einfach eine Erinnerung;)
Matthias Kuhn
10

Sie können eine Funktion definieren, die den Projektdateinamen als Attribut hinzufügt, und diese Funktion mit dem Ereignis verbinden, das Features hinzufügt. Sie können den folgenden Code verwenden, den Namen des Felds in den von Ihnen gewählten Namen ändern (ich habe ihn verwendet Name) und ihn in die Python-Konsole einfügen . Wenn Sie jetzt ein neues Feature hinzufügen, wird das Feld mit dem aktuellen Projektnamen gefüllt:

import os

# Get project name
project = QgsProject.instance()
project_name = os.path.basename(project.fileName())

# Set active layer
layer = qgis.utils.iface.activeLayer()

# Define function to select added feature and add attribute to field "Name"
def update(featureAdded):
    idx = layer.fieldNameIndex('Name')
    layer.changeAttributeValue(featureAdded, idx, project_name)

# Connect "featureAdded" event to "select" function
layer.featureAdded.connect(update)

Ergebnis

Joseph
quelle
1
Müssen Sie das Skript jedes Mal ausführen, wenn Sie die Ebene bearbeiten, oder das Skript bleibt im qgis-Projekt gespeichert?
Vale
1
@Vale - Sie können das Skript als Makro speichern, das im QGIS-Projekt gespeichert wird. Ich werde den Beitrag so bearbeiten, dass er Folgendes enthält =)
Joseph
1
Warum müssen Sie Merkmale Joseph auswählen?
Germán Carrillo
3
Ich glaube nicht, dass eine weitere Frage gestellt werden muss, da es zu viele Überschneidungen geben würde. Du bist tatsächlich in der Nähe. Ich empfehle Ihnen, die Auswahl von Funktionen zu vermeiden. Was Sie als Parameter erhalten, wenn das SIGNAL featureAddedausgelöst wird, ist eigentlich eine Feature-ID. Und das ist alles, was Sie brauchen, um anzurufen changeAttributeValue. Für die updateFunktion benötigen Sie nur 2 Zeilen (unter Verwendung Ihrer Variablennamen): idx = layer.fieldNameIndex('Name')und layer.changeAttributeValue(featureAdded, idx, project_name).
Germán Carrillo
1
@ GermánCarrillo - Das hat funktioniert, wow so einfach! Vielen Dank für deinen tollen Vorschlag, Kumpel! Ich lerne jeden Tag etwas =)
Joseph