11

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...
  • 2
    You're on the right track. A primitave way of doing this is buffer out, buffer in. Buffer your buildings by a constant, dissolving your buffers, discard the 'small' buffers (a few isolated buildings) and then buffer by negative your constant to bring the outline back to your buildings... the values for constant and small are subjective, you'll have to try a few values and see what looks good to you. – Michael Stimson Jul 12 '17 at 21:52
  • thanks, will give that a go! I'll probably need a way to "square off" the edges to avoid the obvious buffered look, but I recently found out that GRASS has a "make corners straight" option... – Steven Kay Jul 13 '17 at 9:01
10
+50

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 :)

  • 1
    Buffering might allow to reduce the number of segments used for curves, if you use a low number on the buffering-in step, it might look similarly. – bugmenot123 Jul 21 '17 at 12:00
  • I tried to give visibility to this interesting question, but other approaches didn't appear. However, I assign the bounty to your answer since it shows good results. – mgri Jul 25 '17 at 8:21

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.