Erstellen eines Aggregatattributs aus zwei Polygonebenen
Ich habe zwei Ebenen: eine zugrunde liegende Informationsschicht zur Landnutzung (mit den Spalten 'land_use_type' und 'area') und eine für gepachtetes Land.
Um die Verpachtung des Grundstücks zu organisieren, ist es wichtig, dass beim Zeichnen eines Polygons für eine Fläche, die ich leasen möchte, Spalten vorhanden sind, aus denen hervorgeht, wie viel Fläche des gezeichneten Polygons vom Landnutzungstyp (z. B. Holz, Ackerland usw.) bedeckt ist. .).
Ich habe ein bisschen mit der Aggregatfunktion und einem virtuellen Feld versucht, aber ohne Erfolg:
aggregate(layer:='Land_Use',aggregate:='sum',expression:="area",filter:=contains(geometry(@parent), $geometry),order_by:="land_use_type")
Wie kann ich das erreichen?
Antworten
Als funktionierende Lösung kann ich vorschlagen, eine "virtuelle Schicht" durch zu verwenden Layer > Add Layer > Add/Edit Virtual Layer....
Nehmen wir an, es gibt zwei Polygonebenen mit den Namen "land_use_info"(dunkelrot) und "leased_land"(gelb).
Mit der folgenden Abfrage können Spalten erstellt werden, aus denen hervorgeht, wie viel Fläche des gezeichneten Polygons vom Landnutzungstyp abgedeckt wird.
SELECT ll.*, GROUP_CONCAT(lui."land_type" || ':' || round(st_area(st_intersection(ll.geometry, lui.geometry)),4)) AS "info"
FROM "leased_land" AS ll
JOIN "land_use_info" AS lui ON st_intersects(ll.geometry, lui.geometry)
GROUP BY ll.id
Die Ausgabe-Polygonebene mit ihrer Attributtabelle sieht folgendermaßen aus