16

I have 2 polygon layers which can be found here. The two layers are overlapping. The first contains a map of the German counties in 1928 and the second the counties how they are in 2014.

The 2014 layer contains information about the population (called Bev in the dataset). Is it possible to project the population attribute from the one polygon layer to the other?

To be a bit more specific:

Consider the situation where I have 2 counties in the layer with the population attribute but in the same area on the other layer there is only 1 county. Can QGIS aggregate the population of the two counties and write this information into the other layer?

If this works, is there also a way to do it when the layer with the information has in a specific area only 1 county but there are 2 counties in the other layer? In this case I would like to split the population proportional to the size of the county.

  • This answer should get you started on a general workflow: gis.stackexchange.com/a/136820/10919 – Tom Feb 4 '16 at 5:05
  • i think the above mentioned link is a good point to start - but (!) it implies that population is equally distributed within the affected polygons. which is not the fact – robert tuw Feb 5 '16 at 16:38
  • 2
    ... sorry missed the 5minutes time limit. to be continued:and if you compare both of thes shape files there is a significant difference in level of detail - which results in a myriard of sliver polygons ... have a look at [link] (dropbox.com/sh/7w97kjey33k7jdi/AAARDwyyMryOBwjtY6IrFsh9a?dl=0). if you had any information about settled area at that time results could be improved significantly – robert tuw Feb 5 '16 at 16:47
  • ... e.g. the free corine landcover-data could help to identify currently setteled area and thus enhance the results of area-based allocation of population. – robert tuw Feb 5 '16 at 17:17
8
+50

Disclaimer:

  1. I believe in this particular case it would be way more accurate to use population data from 2014 as a point layer with as much detail as possible (centroid of suburbs, towns, villages...)

  2. If BEV_ is really population then there are some really strange values like GEN = Uelzen, BEV_ = 92553 where this polygon is compared to Google satelite image area of mud size of maximum few football fields.

If you really want to get number values based on ratio of polygon area overlap between layers (L1 = counties_2014, L2 = german empire 1928):

  1. Before any calculations I suggest to use projected coordinate systems in meter units, respectively square meter units for area. In this case I used EPSG:3857
  2. In L1 use Field Calculator, create column "Area" and fill with $area
  3. Intersect layers - Vector / Geoprocessing Tools / Intersect... - Input=L1, Intersect=L2
  4. In the Intersected layer use Field Calculator, create column for population adjusted by new area "PopArea", and fill with "Population" * $area / "Area"
  5. Dissolve the Intersected layer with Processing Toolbox - find Dissolve Polygons
    • choose some unique polygon values column like "Name" from L2
    • check Compute min/max/sum... and compute it on "PopArea"
    • the final layer will have column sum_diss which is what you are after (in this particular case adjusted population for 1928 counties from 2014)

If you done all well you should get about 77 million people distributed based on L2 counties area out of 81 million in L1.

enter image description here

  • Thanks for your answer. Regarding the forst two points: I also tried to achive what I want with centroids. It worked quite ok but especially for the smaller polygons the matching did not work very well. I think the population data got somehow mixed up. But that's just a minor problem which I can solve myself. – Alex Mar 3 '16 at 11:36
  • @Alex I believe using points or centroids in this case is from my point of view too far from solution I would call sufficient because of very random overlap. You will loose too much of data that way. – Miro Mar 3 '16 at 23:42
9

If I understand your question correctly, this might solve your first question. I did a quick test and the following method seems to work but it is worth taking a closer look to verify if it is correct.

  1. create random points in the 1928 layer (centroids might work better. You will have to check);
  2. intersect the points layer with the 2014 layer (points layer should be the input layer);
  3. Join attributes by location. Target layer is the 2014 layer and the points layer is the join layer. Use contain as Geometric predicate. Leave attribute summary as default (first located feature). Keep all records in the Join table drop down box.

Check to see if the output layer is correct.

If possible run it via the processing toolbox in qgis (don't have to save each layer but instead save it as a temporary layer).

Not exactly sure what your second question entails. could you elaborate?

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.