Categories
Planning

Urban Form Figure-Ground Diagrams

Check out the journal article about OSMnx.

I previously demonstrated how to create figure-ground square-mile visualizations of urban street networks with OSMnx to consistently compare city patterns, design paradigms, and connectivity. OSMnx downloads, analyzes, and visualizes street networks from OpenStreetMap but it can also get building footprints. If we mash-up these building footprints with the street networks, we get a fascinating comparative window into urban form:

Figure-ground map of building footprints and street network in New York, San Francisco, Monrovia, and Port au Prince from OpenStreetMap data, created in Python with OSMnx

Above we see four cities, all at the same scale (one square mile) to allow easy comparison of the pattern, texture, and grain of the urban form. At the top-left lies densely built midtown Manhattan, with large buildings filling most of the space between streets. Within this square mile, there are 2,237 building footprints with a median area of 241 m2. At the top-right, we see the medium-density perimeter blocks of San Francisco’s Richmond district. Here the building footprints line the streets while leaving the centers of each block open for residents. Within this square mile, there are 5,054 building footprints with a median area of 142 m2.

The bottom row reveals an entirely different mode of urbanization, by visualizing slums in Monrovia, Liberia and Port-au-Prince, Haiti. These informal settlements are much finer-grained, and are not structured according to the orderly logic of the American street grids. Monrovia’s square mile contains 2,543 building footprints with a median area of 127 m2. Port-au-Prince’s square mile contains an incredible 14,037 building footprints with a median area of just 34 m2. Compared to New York’s macro-form, the Port-au-Prince informal settlement’s urban fabric resembles a remarkable dusting of urbanization. Notice, too, the percolation (or lack thereof) of the circulation networks into each informal settlement.

Figure-ground diagrams like these are common tools in urban planning and design to represent the relationship between built and un-built space in a city. An early example is the Nolli Map of Rome from the 1740s. We can use OSMnx to produce a similar map of a city – in this example, suburban Piedmont, California:

Nolli map, figure-ground diagram of building footprints in Piedmont, California from OpenStreetMap data created in Python with OSMnx

Piedmont’s curving streets can be seen winding through the built form, which comprises almost exclusively single-family detached homes. By contrast, we may want to examine just one section of a city, such as this 1.5 km2 diagram of Paris, centered on the Arc de Triomphe. Notice how Baron Haussmann’s streets radiate outward as remnants of his massive demolition and renovation of 19th century Paris:

Nolli map, figure-ground diagram of building footprints and urban form in Paris, France from OpenStreetMap data created in Python with OSMnx

Each of these visualizations was created in just a handful of lines of code using OSMnx, a Python package I’ve developed as part of my dissertation. The code to reproduce these figures is in this demo notebook. Several more examples are available in OSMnx’s GitHub repo. For more info, check out the paper about OSMnx.

4 replies on “Urban Form Figure-Ground Diagrams”

Dear Geoff Boeing,

Initially I would like to congratulate you for the excellent work. I’m studying the OSMNX package by following the examples available in your git (https://github.com/gboeing/osmnx-examples/tree/master/notebooks) and I’m learning a lot.
However, in example 10 (building-footprints) I’m having a problem. The codes generate the square views of urban street networks but did not generate the footprints (highlighted in orange).

Ps. I’m just not changing the codes, just giving “Kernel-restart & clearOutput” to refactor them as I read them.

Ps. As in this case it does not return an error (it returns street network views) I could not find the solution when I gave google.

info:
conda version: 4.6.8
conda-build version: 3.17.8
python version: 3.6.7.final.0
platform: win-64
user-agent: conda / 4.6.8 requests / 2.21.0 CPython / 3.6.7 Windows / 10 Windows / 10.0.17134
nx .__ version__ = ‘0.9’

I would be happy if you could help me.

Thank you very much in advance.

Leave a Comment