My data: 1 polygon layer + 1 point layer
My target: Calculate the number of points and the sum of a field within each polygon using the aggregate function in the QGIS field calculator.
I know I can simply use the QGIS functions "Join attributes by location (summary)"
or "Count points in polygon"
but I'm interested in the aggregate function in the field calculator since I don ́t understand exactly its meaning.
Using
aggregate('hh', 'sum', "sum_pop")
'hh'
- the name of the point layer
'sum_pop'
- the name of the attribute field from the hh layer (sum of the population of a point)
I get the sum of the whole field in the attribute table, so each feature has the same value.
How can I change the code for the aggregate function to calculate the sum of a value based on the number of points in each polygon feature and the number of features within a polygon so I get different values for each polygon?
2 Answers 2
This expression will count the number of populated places for each country:
aggregate(layer:='ne_110m_populated_places',
aggregate:='count',
expression:=name,
filter:=contains(geometry(@parent), $geometry)
)
you can use the same expression to get the sum, just change the aggregate to 'sum'
and the expression to the field name to summarize.
-
Thank you for your quick response. For point counts the expression functions well (the expression parameter as string needs to be in parentheses). Although I don´t exactly understand the meaning of this expression parameter (in this case "sub expression") since I can write there whatever I want but ok. For 'sum' I just get NULL values (changing the expression parameter to "pop_sum" as the field name) or an error (see above). pop_sum field is integer.Mapos– Mapos2019年07月30日 09:16:00 +00:00Commented Jul 30, 2019 at 9:16
-
aggregate(layer:= 'hh', aggregate:= 'sum', expression:= 'sum_pop_in', filter:= contains(geometry(@parent), $geometry))
Mapos– Mapos2019年07月30日 09:16:33 +00:00Commented Jul 30, 2019 at 9:16 -
1the expression should be without any quotation marks: expression:= sum_pop_ineurojam– eurojam2019年07月30日 17:38:40 +00:00Commented Jul 30, 2019 at 17:38
Since QGIS 3.16 (see the Changelog) there is also a possibility using the overlay_contains()
function
With the following expression, it is possible to count the number of features within another feature (see example below)
array_length(overlay_contains('random_points_test', expression:=1))
Explore related questions
See similar questions with these tags.
Join attributes by location
this field can be generated.