Löschen aller Felder außer einem mit QGIS 3 Model Builder

Sep 30 2020

Gibt es eine Möglichkeit, alle Felder bis auf eines in der Attributtabelle (mit einem bekannten Namen) mit QGIS 3 Model Builder zu entfernen?

Das Problem ist, dass ich nicht alle diese Namen in den Modellbauer aufnehmen möchte (außerdem sind sie möglicherweise nicht im Voraus bekannt).

Antworten

5 Simbamangu Oct 01 2020 at 15:03

Sie können den Algorithmus 'Refactor Fields' im Model Builder verwenden.

Verwenden Sie für 'Quellausdruck' und 'Name' im Dialogfeld "Refactor" den Feldnamen, den Sie aus Ihrer Eingabe kennen. Dies ist das einzige Feld, das im Ausgabevektor verbleibt.

Sie können die Option "Felder aus Vorlagenebene laden" verwenden, um korrekt eingegebene Felder abzurufen, und dann die Schaltfläche "Ausgewähltes Feld löschen" verwenden, um die nicht gewünschten Felder zu entfernen.

5 LeonPowałka Oct 01 2020 at 07:04

Wenn es Ihnen nichts ausmacht, ein bisschen mit Python herumzuspielen, können Sie das Modell mit der Option Als Skriptalgorithmus exportieren ... im Fenster " Processing Modeler" in ein Python-Skript exportieren .

Dann könnten Sie diesen Code einfügen und das exportierte Skript ausführen. Natürlich können Sie dann Ihre Logik der dynamischen Übergabe des Feldnamens einfach implementieren.

#INPUT - fields to remain
fieldsToRemain = ["id", "temp_id"]

#vlayer is a QgsVectorLayer object
fields = vlayer.fields()
print([f.name() for f in fields])

fieldsToDelete = []
for field in [f for f in fields if not f.name() in fieldsToRemain]:
    idx = fields.indexFromName(field.name())
    fieldsToDelete.append(idx)

vlayer.startEditing()
vlayer.deleteAttributes(fieldsToDelete)
vlayer.commitChanges()

#only the desired fields are left
print([f.name() for f in vlayer.fields()])