3D & buildings
Footprints with a height on them: extrusion, city models, volumes, shadows and the meshes you export.
Most 3D GIS is a two-dimensional footprint with a number attached. Extrude the footprint by the number and you have a building; the interesting questions are all about that number and where it came from.
Eaves height, ridge height, storey count multiplied by an assumed floor height and a LiDAR-derived roof mean are four different answers for one building, and the difference between the smallest and the largest is easily a third of the volume. Source data rarely records which one its height column holds. Anything downstream — shadow, volume, solar potential, a city model somebody will render — inherits that choice.
Below: the concepts cover levels of detail, what a city model actually stores and how heights are derived; the how-to guides extrude, measure and export; and the fixes are the meshes and coordinates that come out wrong.
🧭 Start with the concepts
The ideas the how-to guides below assume you already have.
⚙️ Then do the task
Step-by-step walkthroughs with code you can copy and adapt.
- How to extrude building footprints into 3D in Python
- How to read a CityJSON city model in Python
- How to calculate building volumes and floor area in Python
- How to classify roof shapes from LiDAR in Python
- How to compute building shadows for a given time in Python
- How to estimate rooftop solar potential in Python
🔧 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.