The 3-30-300 rule on a map
Seeing three trees from your home, 30% tree canopy in your neighbourhood and a park within 300 metres. These pages explain how each indicator was calculated, which choices were made and why, and how to repeat it for another province.
The paper
Where the rule comes from: Konijnendijk (2023), and where this map departs from it.
trees in view
Sightlines from every tree, a score per home just outside its facade.
% canopy cover
Area under tree crowns divided by land area, within 500 m of every home.
metres to green
Walking time over streets and paths to the entrance of a park or wood.
The map
On the map, the 3, 30 and 300 buttons switch between the indicators. All three are shown on the same areas, so you can compare them directly:
| Zoom level | Area | Source |
|---|---|---|
| province | municipalities (gemeenten) | Administrative boundaries (Kadaster), current division |
| city | districts (wijken) | CBS Wijk- en Buurtkaart 2025 |
| district | neighbourhoods (buurten) | CBS Wijk- en Buurtkaart 2025 |
| street | homes (3, 30 and 300) | BAG |
Green always means "meets the rule", orange and red "does not", grey "no data" or fewer than 10 homes. The i button on the map lists the sources and their dates. As background you can choose the grey topographic map or the aerial photo (Beeldmateriaal Nederland, 8 cm, via the PDOK WMS).
What is open, what is not?
| Indicator | Software | Data |
|---|---|---|
| 3 | Python + GDAL, fully in the repository | AHN, BAG, CBS: open. Trees: NEO (purchased) |
| 30 | Python + GDAL, fully in the repository | CBS: open. Tree crowns: Boomkroonbedekking 2024 by Friedenau Society |
| 300 | Python + GDAL + GRASS, fully in the repository | OpenStreetMap, TOP10NL, BAG, CBS, provincial facilities map: open |
Doing it yourself for another province
The repository is set up so that only settings and input files differ per province. The full technical guide is in the wiki page Another province. In short:
- Install QGIS/OSGeo4W (for GDAL) and get the code:
git clone https://github.com/RobertoTjesse/3-30-300-regel.git 330300regel - Prepare an elevation model and a tree file per municipality, with the same name:
Utrecht.tif(AHN4 DSM 0.5 m, raw) andUtrecht.gpkg(tree points). Without NEO data you can use a municipal tree register or another tree mapping. - Fill in
indicator_3_bomen/etl/config_local.py(a copy ofconfig_local.example.py):PROVINCE = "Utrecht" # as in PDOK VIEWANALYSE_DIR = Path(r"D:\data\utrecht") MUNICIPALITIES = [] # empty = all municipalities - Download the BAG, municipal and provincial boundaries and CBS neighbourhoods (PDOK). The commands
are in
indicator_3_bomen/etl/download_bag_pdok.py,05_merge_province.pyand06_area_summaries.py; use the extent of your own province. - Run the six steps (
indicator_3_bomen/etl/01to06) and thenweb/build_tiles.py. For the 30, runindicator_30_kroonbedekking/etl/kroon_raster_5m.pyandkroon_500m_woningen.pyon the crown map (BKB 2024 covers all of the Netherlands). For the 300, runindicator_300_park/etl/with green sources and an OpenStreetMap extract for your province. Then runweb/build_tiles_30_300.pyandweb/build_tiles_groen.py. - Adapt the map: in
web/index.htmlonlyPROVINCEandREPOat the top of the script. The map zooms to the extent of your data by itself. - Publish the
web/folder (without the.pyfiles) on a GitHub Pages branch.
What holds for all three
- Only homes. The paper also asks for trees in view of schools and workplaces.
- The sources are from different years: trees and elevation model 2020โ2022 (the 3), crowns 2024 (the 30), green 2025 and paths 2026 (the 300).
- The 3 and the 30 use different trees: NEO tree points against the BKB crown map, so a tree can count for one and not for the other.
- A building belongs to the neighbourhood and municipality that hold its centre point. Areas with fewer than 10 homes get no percentage for the 3, the 30 and the 300.
Future
The whole rule runs on QGIS and what comes with it: Python with GDAL, and for the 300 GRASS. No other software or
licence is needed. What is still planned (such as the 3 per floor, the WHO threshold of 1 ha for the 300, and one
result per home) is listed in
IMPROVEMENTS.md;
open issues are on the issues page.