The 30: at least 30% tree canopy in every neighbourhood
How much of a neighbourhood's land lies under a tree crown? We measured the area under crowns on a map with 25 by 25 cm cells from 2024, and divided it by the neighbourhood's land area.
Zuid-Holland; crowns in 2024, neighbourhoods and land area from CBS (2025).
What is measured?
The paper asks for at least 30% canopy cover in every neighbourhood, and adds that it is about the neighbourhood, not the city average. We calculate:
canopy cover = area under tree crowns ÷ land area × 100%
What the result assumes
The paper leaves open from where and how far to measure. The choices below fill that in and make the most difference to the figures. Each says which way it pushes the result; the reasons are under "Choices and why".
- The neighbourhood is the unit. A district or municipality is the crown area of all its neighbourhoods divided by their land area. Large green neighbourhoods lift it while others can stay far below 30%, so read the map at neighbourhood level.
- Every bit of crown counts once. Overlapping crowns count once, and a crown on a boundary counts in each neighbourhood for the part that lies there.
- Divided by land area. A neighbourhood with a lake is not marked down for the water, but a crown over a canal does count as crown. (more favourable)
- Street and garden trees count. The crown map is made from lidar; what exactly counts as a crown is decided by that map.
Steps
- Where are the crowns? Friedenau Society's Boomkroonbedekking 2024 (BKB 2024) divides all of the Netherlands into cells of 25 by 25 cm and says for each cell whether a tree crown hangs over it. The map was made from lidar: laser height measurements from an aircraft.
- Neighbourhoods. The municipalities, districts and neighbourhoods are those of the map, from the CBS Wijk- en Buurtkaart 2025, so the 3, the 30 and the 300 are shown on exactly the same polygons.
- Count the crowns per neighbourhood. Each cell belongs to the neighbourhood that holds its centre. A crown on a boundary therefore counts for the part that lies in each neighbourhood, and nowhere twice. Districts and municipalities are the sum of their neighbourhoods; for Delft we checked that this gives exactly the same result as clipping the districts and the municipality themselves.
- Divide by the land area. The land area also comes from CBS (2025). Area under crowns ÷ land area × 100%.
Choices and why
| Choice | Why | Alternative we did not choose |
|---|---|---|
| Per CBS neighbourhood | The paper asks for 30% per neighbourhood. The CBS buurt is the smallest official unit that comes closest to that, and it is the same nationwide, so comparable between municipalities and provinces. | A grid or a radius around every home: more precise per home, but no longer "the neighbourhood" of the rule. |
| A crown map from lidar | The rule is about cover: how much ground lies under a crown. The map measures that directly. Overlapping crowns count once, just as the ground under them exists only once. | Adding up crown polygons per tree (the earlier calculation, see below): overlapping crowns then count twice. |
| The centre of a cell decides the neighbourhood | Every bit of crown counts in exactly one neighbourhood. With 25 cm cells a boundary is at most 12.5 cm off; in Delft the counted area differs from the true area by at most 4 m² per neighbourhood. | Counting a whole crown in every neighbourhood it touches. |
| Dividing by land area | No trees grow on open water. A neighbourhood with a lake or river would otherwise come out unfairly low. | Total area including water. |
| Crowns 2024, neighbourhoods 2025 | The crowns and the areas are from almost the same year, and the neighbourhoods are the same as on the map. | Older neighbourhood boundaries, which would first have to be carried over. |
| Colours: < 10, 10–20, 20–30, ≥ 30% | 30% is the rule's threshold; the steps in between show how far a neighbourhood is from it. | — |
Compared with the earlier calculation
The 30 used to come from a calculation with the crown polygons of the NEO trees (2020–2022), on the CBS neighbourhoods of 2023. It always gave higher values: higher in all 39 municipalities for which that calculation was complete, usually by about 23% (median). In Delft it was 24.7% against 21.0% now. The pattern does agree: which municipalities score high and low is almost the same (correlation 0.99).
The difference probably comes mostly from how crowns were counted. The old calculation counted every crown that touched a neighbourhood in full, so crowns on a boundary counted in two neighbourhoods, and it added up the areas of overlapping crowns. In Delft the difference per neighbourhood grows with the length of its boundary and with the amount of crown in it. The years also differ: the NEO crowns are from 2020–2022, the crown map from 2024. The old calculation also had no values for Voorne aan Zee and parts of Schiedam, Leiderdorp, Westland, Pijnacker-Nootdorp and Delft, because of an error with neighbourhood codes; those areas now have a value.
Limitations
- Land area in whole hectares. CBS rounds the land area to whole hectares. For a small neighbourhood that can shift the percentage by a few points.
- Crowns over water count. A crown over a ditch or canal counts as crown, while the water is not part of the land area. In neighbourhoods with a lot of water along the banks the value can come out slightly higher.
- What counts as a crown is decided by Friedenau Society's map. Very small trees and shrubs may or may not be in it, depending on how that map was made.
Code and sources
| Step | Script |
|---|---|
| Count crown cells per neighbourhood | etl/bkb_per_gebied.py |
| Per neighbourhood, district and municipality, with land area | etl/kroonbedekking_gebieden.py |
| Map tiles | web/build_tiles_30_300.py |
| Data | Source | As of |
|---|---|---|
| Tree crowns | Boomkroonbedekking 2024 (BKB 2024), Friedenau Society, from lidar, 25 cm cells | 2024 |
| Municipalities, districts, neighbourhoods and land area | CBS Wijk- en Buurtkaart 2025 via PDOK | 2025 |