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,

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


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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.