5

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.

aggregate_result_nok

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?

example1

ecample2

evaluation error

  • 1
    You need to add a group_by parameter. Does the point layer have a polygon_ID field that tells you which polygon each point belongs to? If so, use "polygon_ID" as the group_by parameter. – csk Jul 29 at 17:54
  • @csk The point layer does not have a field with the polygon affiliation. But using the function Join attributes by location this field can be generated. – Mapos Jul 30 at 9:03
  • What if you try this Calculating point layer values within polygon features in QGIS 2? Disclaimer: it does not use 'Field Calculator' but gives the output that you require. – Taras Jul 30 at 9:25
5

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 Jul 30 at 9:16
  • aggregate(layer:= 'hh', aggregate:= 'sum', expression:= 'sum_pop_in', filter:= contains(geometry(@parent), $geometry)) – Mapos Jul 30 at 9:16
  • 1
    the expression should be without any quotation marks: expression:= sum_pop_in – eurojam Jul 30 at 17:38

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.