[GIS] Generating urban footprint polygons from building clusters in QGIS

cartographyclusteringqgis

I'm not sure what the correct term is, but it's a common cartographic design pattern.

I want to show the outline of built-up areas as a filled polygon beneath road and buildings layers.

In OpenStreetMap, such areas are sometimes available as landuse=residential. I suspect these will all have been traced manually.

Here's an example, this is Gibraltar. I digitzed this outline manually and clipped it to the shoreline. The "urban footprint" consists of the purple/pink areas (this was extended out to sea, then clipped to the land outline from OpenStreetMapData)

enter image description here

Is there a tool available in QGIS (or other FOSS GIS tools) to generate these automatically from a set of buildings?

Two approaches I've tried already…

  • I tried the Concave hull plugin but only got a single area.
  • I also tried a Delauney Triangulation on nodes extracted from the building outlines. I suspect if I can discard large polygons or those with very acute angles between vertices, that might work…

Best Answer

I was able to get some quite good results, with thanks to Michael Stimson for the suggestion.

I had forgotten about the "buffer out, buffer back in" trick (this can also help reduce the number of holes that need to be fixed). This involves a positive buffer (which tends to fill in gaps and holes) followed by a negative buffer (to shrink back to near original size).

Steps taken:-

  • Work in a local UTM projection so I'm working in Meters (used Projestions plugin, which suggested EPSG:3857)
  • buffer outwards by 30 meters. Any higher and distinct clusters start to merge
  • buffer inwards by -25 meters
  • multipart to singlepart to split out buffers
  • manually remove isolated buffers around isolated buildings and outlying clusters
  • filled in a few small holes manually using the "Delete ring" tool

The values might need to be tweaked according to the overall density of housing. Gibraltar is quite densely populated, values might need to go up elsewhere.

Finally to get the look I was after, used Geometry simplify, 20m tolerance.

This removes the "round corner" buffer artifacts, and gives a more "hand drawn" feel:-

enter image description here

I'd still be interested to hear of any better / other ways to do this :)

Related Question