Urban form & morphology
Cities measured from their footprints and streets: coverage and floor area ratio, tessellation cells, blocks, street orientation and network metrics, and where the city ends.
Footprints, streets and a boundary are enough to describe a city’s form, and open data now supplies all three almost everywhere. What it does not supply is the definitions. A building is whatever the source says it is — in Den Haag, OpenStreetMap and the national register agree to the square metre because one was imported from the other, which is exactly why that agreement does not travel. A plot is whatever land unit you choose: the same buildings give a floor area ratio of 1.92 on street enclosures and 2.43 on a 250 m grid.
The street network has the same problem in a different form. Barcelona’s Eixample and Chicago’s Loop have almost identical blocks — about 17,000 m² between centrelines — yet the Eixample scores 0.61 on orientation order and Chicago 0.87, because the Eixample’s 45° grid falls across the histogram’s bins. Polygonising the streets of 4 km² of Den Haag gives 815 faces, a third of which are carriageway slivers and junction fragments rather than blocks.
The concepts below settle the elements of form, density measures, orientation, tessellation, blocks and urban extent; the how-to guides work through real footprints, cadastral parcels, street graphs and GHSL grids for Den Haag, Barcelona, Chicago, Rome and more; and the fixes are the five ways these measures go wrong while looking precise.
🧭 Start with the concepts
The ideas the how-to guides below assume you already have.
- Urban Morphology Explained
- Building Density Measures Explained
- Street Network Orientation Explained
- Morphological Tessellation Explained
- Urban Blocks Explained
- Urban Extent Explained
Show every concept in this topic
⚙️ Then do the task
Step-by-step walkthroughs with code you can copy and adapt.
- How to Download Building Footprints from OSM and Overture in Python
- How to Calculate Building Shape Metrics in Python
- How to Measure Street Orientation Entropy in Python
- How to Create a Morphological Tessellation in Python
- How to Extract Urban Blocks from a Street Network in Python
- How to Calculate Coverage and Floor Area Ratio in Python
Show every how-to guide in this topic
- How to Cluster Urban Fabric Types in Python
- How to Calculate Street Network Metrics in Python
- How to Delineate an Urban Extent from GHSL in Python
- How to Measure the Cooling Effect of Parks in Python
- How to Measure Urban Growth From NLCD in Python
- How to Classify Degree of Urbanisation with GHSL in Python
- How to Compute Population-Weighted Density in Python
- How to Measure Built-Up Area per Person with GHSL in Python
- How to Find Parks and Green Space in OpenStreetMap With Python
- How to Get Building Heights and Levels From OpenStreetMap in Python
- How to Analyse Noise Complaints by Hour, Weekday and Season
🔧 When it breaks
The errors this topic produces, with the cause explained rather than just the command.
Learning paths through this topic
A curated route rather than a list — the guides in the order that builds on itself.
Related topics
Subjects that keep coming up alongside this one, most overlap first.