Vorgestern gab es via bei Twitter folgende Anfrage: “Ich möchte mithilfe des Geometriegenerators den Zentroid eines aus einem Punktdatensatz (7 Punkte) erstellten Polygon mit einem noch nicht definierten Abstand puffern und dies als “Lage im Raum” darstellen.” [1]. Wie man das mit “normalen” Geoprocessing-Funktionen des QGIS lösen kann, eher kein Problem, aber dann entstehen ggf. immer wieder zusätzliche Layer. Die Forderung war ja, es mit dem Geometrie-Generator zu lösen. Unser Interesse war geweckt, wir wollten es wissen. Eigentlich auch nicht schwierig, nur konnte ich QGIS erstmal nicht überreden, die Punkte als gemeinsame Geometrie zu betrachten, QGIS wollte das immer für jeden Punkt einzeln tun. Die entscheidende Idee hatte dann mein Kollege mit “arrray_foreach” und “aggregate”, der Rest drum herum war ja schon fertig.
Wer den Code verbessern möchte, gern hier als Kommentar. Wir sind gespannt!
Unser Code:
buffer(centroid(
convex_hull(
make_line(
array_foreach( aggregate( @layer_name, 'array_agg', $id),
geometry( get_feature_by_id( @layer_name, @element))
)
)
)
),50
)
Projekt und Testdaten stehen Euch zur Nachnutzung als Download zur Verfügung [2].
[1] … https://twitter.com/alwazi88/status/1435168461823619078?s=20
[2] … http://www.geoobserver.de/Download/qgis_geometrygenerator_points_ line_convexhull_centroid_buffer.zip