Verwenden Sie den Eingabeparameter als Variable im Ausdruck

Sep 04 2020

In meinem Projekt habe ich eine Vektorebene und eine Rasterebene. Ich möchte alle Features der Vektorebene entfernen, bei denen die Position des Features an derselben Position in der Rasterebene einen Höhenwert von 0 hat.

Dies funktioniert gut, indem Sie "Nach Ausdruck auswählen" und den folgenden Ausdruck verwenden:

raster_value('layerid' ,1,make_point(x($geometry),y($geometry))) = 0

und dann durch 'layerid'die ID der Rasterebene ersetzen .

Ich möchte einen langen Workflow mit dem grafischen Modellierer automatisieren, wobei dies eine der Aufgaben ist.

Derzeit sieht es so aus:

Ich versuche, "Nach Ausdruck extrahieren" mit demselben Ausdruck wie oben zu verwenden. Dies funktioniert, solange der layeridParameter vor dem Ausführen des Modells geändert wird. Ich möchte jedoch die Eingabe der Rasterebene verwenden heightmap, um die ID abzurufen. Wie so:

Das funktioniert nicht. Der Ausdruck gibt jedes Mal null zurück. Ich habe es auch versucht eval(@heightmap), aber kein Glück.

Als Versuch einer Problemumgehung habe ich versucht, den Algorithmus "Ebene in Projekt laden" zu verwenden und dann die Ausgabevariable im Ausdruck zu verwenden, aber dies tat dasselbe.

Wie kann ich die Layer-ID der heightmapEingabe richtig in den Ausdruck einfügen ?

Antworten

1 henrikx Sep 07 2020 at 04:09

Ich habe keine Lösung für das Problem gefunden, auf eine Modelleingabe im Ausdruck zu verweisen, aber ich habe eine Lösung gefunden, die das gelöst hat, was ich versucht habe.

Der Algorithmus "Zonenstatistik" kann jedem Merkmal der Vektorebene Attribute hinzufügen, die den Mittelwert der Rasterebene für den Polygonbereich enthalten können.

Dadurch konnte ich dieses Feld als Vergleichswert im Algorithmus "Nach Ausdruck extrahieren" verwenden

Um sicherzustellen, dass "Zonenstatistik" vor "Nach Ausdruck extrahieren" ausgeführt wird, kann "Zonenstatistik" als Abhängigkeit festgelegt werden.

Beachten Sie, dass Sie anstelle von "Ausdruck" auch "Nach Attribut extrahieren" verwenden können.