QGIS – Correcting Geometry of Overlapping Polygons in the Same Layer

geometryoverlapping-featurespolygonqgis

I have a shapefile with buildings defined as polygons. Some of them are partially overlapped. They are all in the same layer. I can identify the overlapping using the "Topology Checker" but I cannot solve the overlapping issue.

What I would like is to obtain separate polygons, without overlapping but contiguous.

I have this:

enter image description here

enter image description here

and I would like to have this:

enter image description here

I tried without success:

  • GRASS > v.clean – nothing changed
  • SAGA > Vector polygon tools > Intersect
  • SAGA > Vector polygon tools > Self intersection – they both break the the 2 polygons on 3 (2+intersected area).

Best Answer

First make sure your Buildings have a unique "id" (which does not contain a | character, you will see why below). You can add it for example via field calculator by adding a new field with the expression $id if they do not have one already.

Then run the "Polygon Self-Intersection" from SAGA Processing tools and choose this "id" as Identifier:

enter image description here

Which will create a new layer, where the overlapping Parts become their own polygons.

enter image description here

This new layer will contain a new "id" field, containing the "id"s of their original buildings split by a | sign.

Now open the field calculator of this new layer and calculate a new field with this expression:

if(regexp_match("ID",'\\|') > 0, regexp_substr("ID",'[^|]*'), "ID")

to get the second "ID" as "mergeID" or

if(regexp_match("ID",'\\|') > 0, regexp_substr("ID",'(?<=\\|).*'), "ID")

to get the first "ID" as "mergeID":

This expression looks up in your "ID" field, whether it contains a | character. If so, it chooses the ID before or after the | character. If it does not contain this character, it will just copy over the ID to the "mergeID".

enter image description here

Then run the "Dissolve" from processing toolbox and choose this "mergeID" as dissolve field:

enter image description here

Your final result:

enter image description here