{
 "city": "charleroi",
 "name": "Charleroi",
 "join_key": "id (Statbel statistical sector); lau_id for the Article 8 files",
 "encoding": "CSV: UTF-8, comma-separated, a header row. GeoPackage: OGC GeoPackage 1.2, EPSG:3035",
 "layers": [
  {
   "key": "sectors",
   "group": "Sectors",
   "title": "Statistical sectors",
   "file": "sectors.csv",
   "format": "CSV",
   "rows": 291,
   "bytes": 19012,
   "computed": null,
   "measures": "The unit every layer is joined on: each statistical sector with its commune, residents, area and centroid.",
   "unit": "people, hectares, degrees (WGS 84)",
   "method": "Read from the city package: Statbel sectors with their 2024 population; the centroid is the polygon's.",
   "source": "Statbel statistical sectors and population.",
   "threshold": null,
   "threshold_from": "No significance threshold: this layer is a state or a recommendation, not a measured change.",
   "limits": [
    "Sector boundaries are not included: download them from Statbel (statistical sectors, open data) and join on id."
   ],
   "licence": "CC BY 4.0",
   "credit": [
    "Source: Statbel (Directorate-General Statistics – Statistics Belgium), CC BY 4.0; aggregated and joined by Frondia"
   ],
   "columns": [
    {
     "name": "id",
     "description": "Statbel statistical sector code (the join key of every layer)"
    },
    {
     "name": "name",
     "description": "sector name, as Statbel writes it"
    },
    {
     "name": "commune",
     "description": "commune (municipality) the sector lies in"
    },
    {
     "name": "population",
     "description": "residents (Statbel)"
    },
    {
     "name": "area_ha",
     "description": "area of the sector, hectares"
    },
    {
     "name": "lon",
     "description": "centroid longitude, WGS 84"
    },
    {
     "name": "lat",
     "description": "centroid latitude, WGS 84"
    }
   ]
  },
  {
   "key": "article8_2024",
   "group": "What changed",
   "title": "Green, canopy and built-up in 2024, and the trend against matched places",
   "file": "article8_2024.csv",
   "format": "CSV",
   "rows": 287,
   "bytes": 51816,
   "computed": "2026-09-26",
   "measures": "Summer 2024 levels of greenness (NDVI) and of tree, grass and built-up cover, and the change from summers 2017–19 to 2021–24 against twelve matched sectors.",
   "unit": "NDVI units; Dynamic World class probability",
   "method": "Difference in differences: the sector's change minus the mean change of the 12 sectors most alike before (greenness and summer surface temperature), none closer than 1.5 km. A sector whose closest match differs by more than 0.04 NDVI before is refused, not compared.",
   "source": "Copernicus Sentinel-2 (summer medians, Cloud Score+ mask), Dynamic World V1, Landsat surface temperature for the matching; income: Statbel 2023.",
   "threshold": 0.04082,
   "threshold_from": "Greenness 0.0408, canopy 0.0263, built-up 0.0339: the 95th percentile of this run's own null distribution — every one of the 269 comparable sectors plays “intervention” once against its own 12 matched places, and the effects it shows are pure noise.",
   "limits": [
    "Class values are probabilities, not shares of ground: compare them between sectors, do not read them as percentages of area.",
    "Greenness is not tree canopy: a young planting on a meadow reads as a loss, and restoring an existing park does not show."
   ],
   "licence": "CC BY 4.0",
   "credit": [
    "Contains modified Copernicus Sentinel data (2016–2026)",
    "Dynamic World V1 (Google, World Resources Institute), CC BY 4.0",
    "Landsat Collection 2 courtesy of the U.S. Geological Survey",
    "Source: Statbel (Directorate-General Statistics – Statistics Belgium), CC BY 4.0; aggregated and joined by Frondia"
   ],
   "columns": [
    {
     "name": "id",
     "description": "Statbel statistical sector code (the join key of every layer)"
    },
    {
     "name": "name",
     "description": "sector name, as Statbel writes it"
    },
    {
     "name": "commune",
     "description": "commune"
    },
    {
     "name": "area_ha",
     "description": "area, hectares"
    },
    {
     "name": "population",
     "description": "residents"
    },
    {
     "name": "density",
     "description": "residents per hectare"
    },
    {
     "name": "income",
     "description": "median taxable income, €, Statbel 2023"
    },
    {
     "name": "ndvi_2024",
     "description": "summer 2024 greenness (NDVI), sector mean"
    },
    {
     "name": "trees_2024",
     "description": "summer 2024 tree cover, Dynamic World class probability"
    },
    {
     "name": "grass_2024",
     "description": "summer 2024 grass cover, class probability"
    },
    {
     "name": "built_2024",
     "description": "summer 2024 built-up cover, class probability"
    },
    {
     "name": "ndvi_eff",
     "description": "effect on greenness: the sector's change minus its 12 matched places' mean change"
    },
    {
     "name": "ndvi_verdict",
     "description": "up (greener beyond noise), down (lost beyond noise), noise, or refused (no comparable places)"
    },
    {
     "name": "trees_eff",
     "description": "effect on tree cover, same matched places"
    },
    {
     "name": "trees_verdict",
     "description": "the same verdict for tree cover"
    },
    {
     "name": "grass_eff",
     "description": "effect on grass cover"
    },
    {
     "name": "built_eff",
     "description": "effect on built-up (sealed) cover, same matched places"
    },
    {
     "name": "built_verdict",
     "description": "up (more built-up beyond noise: sealed), down (less beyond noise: unsealed), noise, or refused"
    },
    {
     "name": "gap",
     "description": "greenness before: the sector minus its matched places (above 0.04 in absolute value: refused)"
    },
    {
     "name": "comparable",
     "description": "True when the matched places are comparable"
    },
    {
     "name": "ndvi_b",
     "description": "greenness before, summers 2017–19"
    },
    {
     "name": "ndvi_a",
     "description": "greenness after, summers 2021–24"
    },
    {
     "name": "ndvi_raw",
     "description": "change without subtracting matched places (after − before)"
    },
    {
     "name": "lst_b",
     "description": "summer land surface temperature before, °C (Landsat), used for matching"
    }
   ]
  },
  {
   "key": "monitoring_2024",
   "group": "What changed",
   "title": "Monitoring, summer 2024",
   "file": "monitoring_2024.csv",
   "format": "CSV",
   "rows": 287,
   "bytes": 21533,
   "computed": "2026-09-26",
   "measures": "Greenness in summer 2024 against a rolling base of the three summers before, sector by sector, with the second instrument's reading of every loss.",
   "unit": "NDVI units; class probability",
   "method": "Difference in differences against the same kind of matched places, with the season's own threshold. A loss beyond the threshold is read by Dynamic World (tree cover down: canopy loss; built-up up: construction; neither: not confirmed), then by documents.",
   "source": "Copernicus Sentinel-2, Dynamic World V1 (trees, built) for corroboration.",
   "threshold": 0.050269271356158926,
   "threshold_from": "0.0503: the 95th percentile of the season's own null distribution (base 2021–2023 against summer 2024, every sector playing “intervention” once). A loss is published only when the second instrument (Dynamic World) agrees.",
   "limits": [
    "One season is noisier than a four-year window: a loss is named only when two instruments agree.",
    "The cause is not in the numbers: it comes from documents, and without one it stays unknown."
   ],
   "licence": "CC BY 4.0",
   "credit": [
    "Contains modified Copernicus Sentinel data (2016–2026)",
    "Dynamic World V1 (Google, World Resources Institute), CC BY 4.0"
   ],
   "columns": [
    {
     "name": "id",
     "description": "Statbel statistical sector code (the join key of every layer)"
    },
    {
     "name": "name",
     "description": "sector name, as Statbel writes it"
    },
    {
     "name": "area_ha",
     "description": "area, hectares"
    },
    {
     "name": "population",
     "description": "residents"
    },
    {
     "name": "ndvi_before",
     "description": "greenness, mean of the base summers"
    },
    {
     "name": "ndvi_delta",
     "description": "summer 2024 minus the base"
    },
    {
     "name": "effect",
     "description": "the change minus the matched places' mean change"
    },
    {
     "name": "gap",
     "description": "greenness before, the sector minus its matched places"
    },
    {
     "name": "comparable",
     "description": "True when the matched places are comparable"
    },
    {
     "name": "dw_label",
     "description": "the second instrument's reading of a loss beyond the threshold: construction, canopy loss or not confirmed"
    },
    {
     "name": "dw_trees",
     "description": "tree cover change, class probability (seasons from 2025)"
    },
    {
     "name": "dw_built",
     "description": "built-up change, class probability (seasons from 2025)"
    },
    {
     "name": "bulletin",
     "description": "the season bulletin's reading after documents: construction, canopy loss, not confirmed or gained"
    }
   ]
  },
  {
   "key": "monitoring_2025",
   "group": "What changed",
   "title": "Monitoring, summer 2025",
   "file": "monitoring_2025.csv",
   "format": "CSV",
   "rows": 287,
   "bytes": 21692,
   "computed": "2026-09-26",
   "measures": "Greenness in summer 2025 against a rolling base of the three summers before, sector by sector, with the second instrument's reading of every loss.",
   "unit": "NDVI units; class probability",
   "method": "Difference in differences against the same kind of matched places, with the season's own threshold. A loss beyond the threshold is read by Dynamic World (tree cover down: canopy loss; built-up up: construction; neither: not confirmed), then by documents.",
   "source": "Copernicus Sentinel-2, Dynamic World V1 (trees, built) for corroboration.",
   "threshold": 0.038163483571947945,
   "threshold_from": "0.0382: the 95th percentile of the season's own null distribution (base 2022–2024 against summer 2025, every sector playing “intervention” once). A loss is published only when the second instrument (Dynamic World) agrees.",
   "limits": [
    "One season is noisier than a four-year window: a loss is named only when two instruments agree.",
    "The cause is not in the numbers: it comes from documents, and without one it stays unknown."
   ],
   "licence": "CC BY 4.0",
   "credit": [
    "Contains modified Copernicus Sentinel data (2016–2026)",
    "Dynamic World V1 (Google, World Resources Institute), CC BY 4.0"
   ],
   "columns": [
    {
     "name": "id",
     "description": "Statbel statistical sector code (the join key of every layer)"
    },
    {
     "name": "name",
     "description": "sector name, as Statbel writes it"
    },
    {
     "name": "area_ha",
     "description": "area, hectares"
    },
    {
     "name": "population",
     "description": "residents"
    },
    {
     "name": "ndvi_before",
     "description": "greenness, mean of the base summers"
    },
    {
     "name": "ndvi_delta",
     "description": "summer 2025 minus the base"
    },
    {
     "name": "effect",
     "description": "the change minus the matched places' mean change"
    },
    {
     "name": "gap",
     "description": "greenness before, the sector minus its matched places"
    },
    {
     "name": "comparable",
     "description": "True when the matched places are comparable"
    },
    {
     "name": "dw_label",
     "description": "the second instrument's reading of a loss beyond the threshold: construction, canopy loss or not confirmed"
    },
    {
     "name": "dw_trees",
     "description": "tree cover change, class probability (seasons from 2025)"
    },
    {
     "name": "dw_built",
     "description": "built-up change, class probability (seasons from 2025)"
    },
    {
     "name": "bulletin",
     "description": "the season bulletin's reading after documents: construction, canopy loss, not confirmed or gained"
    }
   ]
  },
  {
   "key": "monitoring_2026",
   "group": "What changed",
   "title": "Monitoring, summer 2026",
   "file": "monitoring_2026.csv",
   "format": "CSV",
   "rows": 287,
   "bytes": 21884,
   "computed": "2026-09-26",
   "measures": "Greenness in summer 2026 against a rolling base of the three summers before, sector by sector, with the second instrument's reading of every loss.",
   "unit": "NDVI units; class probability",
   "method": "Difference in differences against the same kind of matched places, with the season's own threshold. A loss beyond the threshold is read by Dynamic World (tree cover down: canopy loss; built-up up: construction; neither: not confirmed), then by documents.",
   "source": "Copernicus Sentinel-2, Dynamic World V1 (trees, built) for corroboration.",
   "threshold": 0.05589378662216317,
   "threshold_from": "0.0559: the 95th percentile of the season's own null distribution (base 2023–2025 against summer 2026, every sector playing “intervention” once). A loss is published only when the second instrument (Dynamic World) agrees.",
   "limits": [
    "One season is noisier than a four-year window: a loss is named only when two instruments agree.",
    "The cause is not in the numbers: it comes from documents, and without one it stays unknown."
   ],
   "licence": "CC BY 4.0",
   "credit": [
    "Contains modified Copernicus Sentinel data (2016–2026)",
    "Dynamic World V1 (Google, World Resources Institute), CC BY 4.0"
   ],
   "columns": [
    {
     "name": "id",
     "description": "Statbel statistical sector code (the join key of every layer)"
    },
    {
     "name": "name",
     "description": "sector name, as Statbel writes it"
    },
    {
     "name": "area_ha",
     "description": "area, hectares"
    },
    {
     "name": "population",
     "description": "residents"
    },
    {
     "name": "ndvi_before",
     "description": "greenness, mean of the base summers"
    },
    {
     "name": "ndvi_delta",
     "description": "summer 2026 minus the base"
    },
    {
     "name": "effect",
     "description": "the change minus the matched places' mean change"
    },
    {
     "name": "gap",
     "description": "greenness before, the sector minus its matched places"
    },
    {
     "name": "comparable",
     "description": "True when the matched places are comparable"
    },
    {
     "name": "dw_label",
     "description": "the second instrument's reading of a loss beyond the threshold: construction, canopy loss or not confirmed"
    },
    {
     "name": "dw_trees",
     "description": "tree cover change, class probability (seasons from 2025)"
    },
    {
     "name": "dw_built",
     "description": "built-up change, class probability (seasons from 2025)"
    },
    {
     "name": "bulletin",
     "description": "the season bulletin's reading after documents: construction, canopy loss, not confirmed or gained"
    }
   ]
  },
  {
   "key": "art8_official_lau_2021",
   "group": "The law",
   "title": "Article 8(1) by commune, with the Commission’s method",
   "file": "art8_official_lau_2021.csv",
   "format": "CSV",
   "rows": 1,
   "bytes": 600,
   "computed": "2026-09-26",
   "measures": "The share of urban green and tree canopy in each commune (LAU) and in its urban centres and clusters, and whether the commune passes the exemption of Article 8(1): more than 45% green and more than 10% canopy.",
   "unit": "share of area, 0–1",
   "method": "The EEA and JRC script NRR_Art8 repeated on open data: LAU 2024 × the 1 km² grid of urban centres and clusters 2021; the share of a class's pixels inside the polygon, by pixel centre.",
   "source": "Copernicus CLCplus Backbone 2021 (10 m), HRL Woody Vegetation Layer 2021 (5 m), HRL Tree Cover Density 2018 (10 m); Eurostat LAU 2024, degree of urbanisation 2024, clusters 2021.",
   "threshold": null,
   "threshold_from": "No significance threshold: this layer is a state or a recommendation, not a measured change.",
   "limits": [
    "Green from CLCplus 2021, where the Regulation names 2023; canopy from WVL 2021, allowed for draft plans only.",
    "Matching CLCplus classes to Article 3(20) is our reading; the verdict was re-checked with arable land as green and without water."
   ],
   "licence": "CC BY 4.0",
   "credit": [
    "© European Union, Copernicus Land Monitoring Service, European Environment Agency (CLCplus Backbone 2021, HRL Woody Vegetation Layer 2021, HRL Tree Cover Density 2018)",
    "Eurostat GISCO: LAU 2024, degree of urbanisation 2024, urban centres and clusters 2021; © EuroGeographics for the administrative boundaries"
   ],
   "columns": [
    {
     "name": "lau_id",
     "description": "LAU code (BE_ + NIS code)"
    },
    {
     "name": "name",
     "description": "commune"
    },
    {
     "name": "degurba",
     "description": "degree of urbanisation (1 = city)"
    },
    {
     "name": "population",
     "description": "residents (LAU 2024)"
    },
    {
     "name": "area_km2_official",
     "description": "official area, km²"
    },
    {
     "name": "area_km2_all",
     "description": "measured area, km²"
    },
    {
     "name": "green_all",
     "description": "green share, whole LAU"
    },
    {
     "name": "green_with7_all",
     "description": "green share counting arable land"
    },
    {
     "name": "green_no_water_all",
     "description": "green share without water"
    },
    {
     "name": "sealed_all",
     "description": "sealed share, whole LAU"
    },
    {
     "name": "canopy_wvl_all",
     "description": "woody vegetation share, whole LAU"
    },
    {
     "name": "tcd_all",
     "description": "mean tree cover density, whole LAU"
    },
    {
     "name": "tcd_any_all",
     "description": "share of pixels with any tree cover"
    },
    {
     "name": "area_km2_ucuc",
     "description": "area inside urban centres and clusters, km²"
    },
    {
     "name": "green_ucuc",
     "description": "green share inside urban centres and clusters (the test's green)"
    },
    {
     "name": "green_with7_ucuc",
     "description": "the same, counting arable land"
    },
    {
     "name": "green_no_water_ucuc",
     "description": "the same, without water"
    },
    {
     "name": "sealed_ucuc",
     "description": "sealed share inside centres and clusters"
    },
    {
     "name": "canopy_wvl_ucuc",
     "description": "woody vegetation share inside centres and clusters (the test's canopy)"
    },
    {
     "name": "tcd_ucuc",
     "description": "mean tree cover density inside"
    },
    {
     "name": "tcd_any_ucuc",
     "description": "share of pixels with any tree cover inside"
    },
    {
     "name": "exempt",
     "description": "True when the commune passes the exemption"
    },
    {
     "name": "reason",
     "description": "why it does not pass, in numbers"
    },
    {
     "name": "exempt_with7",
     "description": "the verdict counting arable land"
    },
    {
     "name": "exempt_no_water",
     "description": "the verdict without water"
    },
    {
     "name": "green_ucuc_statbel",
     "description": "green share with the commune built from Statbel sectors"
    },
    {
     "name": "canopy_wvl_ucuc_statbel",
     "description": "canopy share, the same way"
    },
    {
     "name": "exempt_statbel",
     "description": "the verdict, the same way"
    },
    {
     "name": "stable",
     "description": "True when the verdict holds under every reading above"
    }
   ]
  },
  {
   "key": "art8_baseline_2021",
   "group": "The law",
   "title": "The zero measurement by commune, in hectares",
   "file": "art8_baseline_2021.csv",
   "format": "CSV",
   "rows": 1,
   "bytes": 300,
   "computed": "2026-09-26",
   "measures": "For each commune, the area of its urban ecosystem and the green and tree canopy inside it, in hectares and per cent, for both boundaries the Commission leaves to the country: the urban centres and clusters inside the commune, and the whole commune. The form of the Dutch national zero measurement (PBL, 25 August 2026).",
   "unit": "hectares; per cent",
   "method": "The shares of the layer above multiplied by the area they were measured on: nothing is recomputed. A city of several communes adds a row for all of them together.",
   "source": "Frondia’s repeat of the EEA and JRC script NRR_Art8 (the layer above); Copernicus CLCplus Backbone 2021, HRL Woody Vegetation Layer 2021; Eurostat LAU 2024, urban centres and clusters 2021.",
   "threshold": null,
   "threshold_from": "No significance threshold: a level for one year, not a change. The Commission’s own format carries no threshold either; whether anything changed beyond noise is the layer under “What changed”.",
   "limits": [
    "2021 data: the Commission allows the Woody Vegetation Layer 2021 for draft plans only.",
    "Hectares are the pixels' area inside the 1:1M boundary, not the land register.",
    "Matching CLCplus classes to Article 3(20) is our reading: see the sensitivity table."
   ],
   "licence": "CC BY 4.0",
   "credit": [
    "© European Union, Copernicus Land Monitoring Service, European Environment Agency (CLCplus Backbone 2021, HRL Woody Vegetation Layer 2021, HRL Tree Cover Density 2018)",
    "Eurostat GISCO: LAU 2024, degree of urbanisation 2024, urban centres and clusters 2021; © EuroGeographics for the administrative boundaries"
   ],
   "columns": [
    {
     "name": "lau_id",
     "description": "LAU code as the Commission writes it (lau2024.BE.<NIS code>); empty on the row for all communes together"
    },
    {
     "name": "name",
     "description": "commune"
    },
    {
     "name": "population",
     "description": "residents (LAU 2024)"
    },
    {
     "name": "uea_ucuc_ha",
     "description": "urban ecosystem as urban centres and clusters inside the commune, hectares"
    },
    {
     "name": "green_ucuc_ha",
     "description": "green inside it, hectares"
    },
    {
     "name": "green_ucuc_pct",
     "description": "green inside it, per cent (the exemption's green)"
    },
    {
     "name": "canopy_ucuc_ha",
     "description": "tree canopy inside it, hectares"
    },
    {
     "name": "canopy_ucuc_pct",
     "description": "tree canopy inside it, per cent (the exemption's canopy)"
    },
    {
     "name": "uea_lau_ha",
     "description": "urban ecosystem as the whole commune, hectares"
    },
    {
     "name": "green_lau_ha",
     "description": "green in the whole commune, hectares"
    },
    {
     "name": "green_lau_pct",
     "description": "green in the whole commune, per cent"
    },
    {
     "name": "canopy_lau_ha",
     "description": "tree canopy in the whole commune, hectares"
    },
    {
     "name": "canopy_lau_pct",
     "description": "tree canopy in the whole commune, per cent"
    },
    {
     "name": "exempt",
     "description": "True when more than 45% green and more than 10% canopy in urban centres and clusters"
    },
    {
     "name": "stable",
     "description": "True when the verdict holds under every reading of the sensitivity table"
    }
   ]
  },
  {
   "key": "art8_sensitivity_2021",
   "group": "The law",
   "title": "How the exemption verdict depends on the reading",
   "file": "art8_sensitivity_2021.csv",
   "format": "CSV",
   "rows": 4,
   "bytes": 290,
   "computed": "2026-09-26",
   "measures": "The Article 8(1) verdict of each commune under every reading the test runs: the official one, arable land counted as green, water not counted as green, and the commune built from Statbel sectors instead of the 1:1M boundary.",
   "unit": "per cent; True or False",
   "method": "The thresholds of Article 8(1), more than 45% green and more than 10% canopy, applied to the shares of each reading.",
   "source": "Frondia’s repeat of NRR_Art8 (the layer “Article 8(1) by commune”).",
   "threshold": null,
   "threshold_from": "No significance threshold: a level for one year, not a change. The Commission’s own format carries no threshold either; whether anything changed beyond noise is the layer under “What changed”.",
   "limits": [
    "Only the readings the test runs: other boundaries a country may choose were not tried."
   ],
   "licence": "CC BY 4.0",
   "credit": [
    "© European Union, Copernicus Land Monitoring Service, European Environment Agency (CLCplus Backbone 2021, HRL Woody Vegetation Layer 2021, HRL Tree Cover Density 2018)",
    "Eurostat GISCO: LAU 2024, degree of urbanisation 2024, urban centres and clusters 2021; © EuroGeographics for the administrative boundaries"
   ],
   "columns": [
    {
     "name": "lau_id",
     "description": "LAU code (lau2024.BE.<NIS code>)"
    },
    {
     "name": "name",
     "description": "commune"
    },
    {
     "name": "reading",
     "description": "official, with_arable, without_water or statbel_sectors"
    },
    {
     "name": "green_pct",
     "description": "green in urban centres and clusters under this reading, per cent"
    },
    {
     "name": "canopy_pct",
     "description": "tree canopy there, per cent"
    },
    {
     "name": "exempt",
     "description": "the verdict under this reading (empty where the reading was not computed)"
    }
   ]
  },
  {
   "key": "t8_UEAPolygons_ucuc",
   "group": "The law",
   "title": "The Reportnet file, centres and clusters",
   "file": "t8_UEAPolygons_ucuc.gpkg",
   "format": "GeoPackage",
   "rows": 1,
   "bytes": 40960,
   "computed": "2026-09-26",
   "measures": "t8_UEAPolygons: one polygon per commune with the area of tree canopy (area_tcc) and of urban green (area_ugs) in km², the urban ecosystem taken as the urban centres and clusters inside the commune. The schema of the Commission’s own example, field by field.",
   "unit": "km²",
   "method": "The commune’s LAU 2024 polygon (Eurostat GISCO, EPSG:3035) with the areas of the layers above; area_tcc as text with five decimals, as the Commission’s script rounds it.",
   "source": "Schema: EEA and JRC, github.com/eea/NRR_Art8 (commit of 22 September 2026). Numbers: Frondia’s repeat of that script on open data.",
   "threshold": null,
   "threshold_from": "No significance threshold: a level for one year, not a change. The Commission’s own format carries no threshold either; whether anything changed beyond noise is the layer under “What changed”.",
   "limits": [
    "A draft on 2021 data: the Woody Vegetation Layer 2021 is allowed for draft plans only.",
    "area_ugs is empty in the Commission’s example; here it is our reading of Article 3(20) in CLCplus classes.",
    "uea_id is empty, as in the example: the country assigns it.",
    "No R-tree spatial index (optional in GeoPackage); GIS software builds one on opening if it needs it."
   ],
   "licence": "CC BY 4.0",
   "credit": [
    "© European Union, Copernicus Land Monitoring Service, European Environment Agency (CLCplus Backbone 2021, HRL Woody Vegetation Layer 2021, HRL Tree Cover Density 2018)",
    "Eurostat GISCO: LAU 2024, degree of urbanisation 2024, urban centres and clusters 2021; © EuroGeographics for the administrative boundaries"
   ],
   "columns": [
    {
     "name": "fid",
     "description": "feature id, inherited from GISCO’s LAU layer as in the example"
    },
    {
     "name": "geom",
     "description": "the commune’s polygon, MULTIPOLYGON, EPSG:3035"
    },
    {
     "name": "uea_id",
     "description": "urban ecosystem id, empty"
    },
    {
     "name": "lau_id",
     "description": "LAU code (lau2024.BE.<NIS code>)"
    },
    {
     "name": "area_tcc",
     "description": "tree canopy (Woody Vegetation Layer) in the urban ecosystem, km², text"
    },
    {
     "name": "area_ugs",
     "description": "urban green (CLCplus, our reading of Article 3(20)) in the urban ecosystem, km²"
    }
   ]
  },
  {
   "key": "t8_UEAPolygons_lau",
   "group": "The law",
   "title": "The Reportnet file, whole commune",
   "file": "t8_UEAPolygons_lau.gpkg",
   "format": "GeoPackage",
   "rows": 1,
   "bytes": 40960,
   "computed": "2026-09-26",
   "measures": "t8_UEAPolygons: one polygon per commune with the area of tree canopy (area_tcc) and of urban green (area_ugs) in km², the urban ecosystem taken as the whole commune. The schema of the Commission’s own example, field by field.",
   "unit": "km²",
   "method": "The commune’s LAU 2024 polygon (Eurostat GISCO, EPSG:3035) with the areas of the layers above; area_tcc as text with five decimals, as the Commission’s script rounds it.",
   "source": "Schema: EEA and JRC, github.com/eea/NRR_Art8 (commit of 22 September 2026). Numbers: Frondia’s repeat of that script on open data.",
   "threshold": null,
   "threshold_from": "No significance threshold: a level for one year, not a change. The Commission’s own format carries no threshold either; whether anything changed beyond noise is the layer under “What changed”.",
   "limits": [
    "A draft on 2021 data: the Woody Vegetation Layer 2021 is allowed for draft plans only.",
    "area_ugs is empty in the Commission’s example; here it is our reading of Article 3(20) in CLCplus classes.",
    "uea_id is empty, as in the example: the country assigns it.",
    "No R-tree spatial index (optional in GeoPackage); GIS software builds one on opening if it needs it."
   ],
   "licence": "CC BY 4.0",
   "credit": [
    "© European Union, Copernicus Land Monitoring Service, European Environment Agency (CLCplus Backbone 2021, HRL Woody Vegetation Layer 2021, HRL Tree Cover Density 2018)",
    "Eurostat GISCO: LAU 2024, degree of urbanisation 2024, urban centres and clusters 2021; © EuroGeographics for the administrative boundaries"
   ],
   "columns": [
    {
     "name": "fid",
     "description": "feature id, inherited from GISCO’s LAU layer as in the example"
    },
    {
     "name": "geom",
     "description": "the commune’s polygon, MULTIPOLYGON, EPSG:3035"
    },
    {
     "name": "uea_id",
     "description": "urban ecosystem id, empty"
    },
    {
     "name": "lau_id",
     "description": "LAU code (lau2024.BE.<NIS code>)"
    },
    {
     "name": "area_tcc",
     "description": "tree canopy (Woody Vegetation Layer) in the urban ecosystem, km², text"
    },
    {
     "name": "area_ugs",
     "description": "urban green (CLCplus, our reading of Article 3(20)) in the urban ecosystem, km²"
    }
   ]
  },
  {
   "key": "art8_balance_2025",
   "group": "The law",
   "title": "Since the 2024 base, in hectares: summer 2025",
   "file": "art8_balance_2025.csv",
   "format": "CSV",
   "rows": 287,
   "bytes": 49559,
   "computed": "2026-09-26",
   "measures": "For each sector, urban green (the Regulation’s reading: trees, grass, shrub and water, not farmland), tree canopy and built-up ground in hectares in summer 2024 and summer 2025, and the change beyond noise against twelve matched places.",
   "unit": "hectares; share of the sector’s area",
   "method": "Each summer, the class with the highest mean Dynamic World probability wins each 10 m pixel; a class’s share of the sector times its area gives hectares. The effect is the sector’s change in share minus its matched places’ mean change (the most alike in 2024 by greenness and surface temperature, none closer than 1.5 km); times the area, hectares beyond what comparable places did.",
   "source": "Dynamic World V1; Copernicus Sentinel-2 greenness and Landsat surface temperature of summer 2024 for the matching; Statbel sectors and population.",
   "threshold": 0.06111,
   "threshold_from": "Green 0.0611, canopy 0.0453, built-up 0.0534 (share of the sector's area): the 95th percentile of this run's own null distribution, each class and season on its own — every sector plays “intervention” once against its 12 matched places.",
   "limits": [
    "Hectares as Dynamic World classifies the ground: not the official CLCplus and Woody Vegetation layers, and not the land register.",
    "One summer against another is noisier than a four-year window.",
    "The raw hectares include the classes’ shift from one summer to the next; only the effect subtracts it.",
    "A park that loses trees can read as more built-up when a mixed pixel changes class."
   ],
   "licence": "CC BY 4.0",
   "credit": [
    "Dynamic World V1 (Google, World Resources Institute), CC BY 4.0",
    "Contains modified Copernicus Sentinel data (2016–2026)",
    "Landsat Collection 2 courtesy of the U.S. Geological Survey",
    "Source: Statbel (Directorate-General Statistics – Statistics Belgium), CC BY 4.0; aggregated and joined by Frondia"
   ],
   "columns": [
    {
     "name": "id",
     "description": "Statbel statistical sector code (the join key of every layer)"
    },
    {
     "name": "name",
     "description": "sector name, as Statbel writes it"
    },
    {
     "name": "commune",
     "description": "commune"
    },
    {
     "name": "area_ha",
     "description": "area, hectares"
    },
    {
     "name": "population",
     "description": "residents"
    },
    {
     "name": "green_2024_ha",
     "description": "urban green, summer 2024, hectares"
    },
    {
     "name": "green_2025_ha",
     "description": "urban green, summer 2025, hectares"
    },
    {
     "name": "green_raw_ha",
     "description": "urban green: summer 2025 minus summer 2024, hectares, without matched places"
    },
    {
     "name": "green_eff",
     "description": "urban green: the change in share minus the matched places’ mean change"
    },
    {
     "name": "green_eff_ha",
     "description": "urban green: that effect in hectares"
    },
    {
     "name": "green_verdict",
     "description": "urban green: up, down, noise or refused"
    },
    {
     "name": "trees_2024_ha",
     "description": "tree canopy, summer 2024, hectares"
    },
    {
     "name": "trees_2025_ha",
     "description": "tree canopy, summer 2025, hectares"
    },
    {
     "name": "trees_raw_ha",
     "description": "tree canopy: summer 2025 minus summer 2024, hectares, without matched places"
    },
    {
     "name": "trees_eff",
     "description": "tree canopy: the change in share minus the matched places’ mean change"
    },
    {
     "name": "trees_eff_ha",
     "description": "tree canopy: that effect in hectares"
    },
    {
     "name": "trees_verdict",
     "description": "tree canopy: up, down, noise or refused"
    },
    {
     "name": "built_2024_ha",
     "description": "built-up, summer 2024, hectares"
    },
    {
     "name": "built_2025_ha",
     "description": "built-up, summer 2025, hectares"
    },
    {
     "name": "built_raw_ha",
     "description": "built-up: summer 2025 minus summer 2024, hectares, without matched places"
    },
    {
     "name": "built_eff",
     "description": "built-up: the change in share minus the matched places’ mean change"
    },
    {
     "name": "built_eff_ha",
     "description": "built-up: that effect in hectares"
    },
    {
     "name": "built_verdict",
     "description": "built-up: up, down, noise or refused"
    },
    {
     "name": "gap",
     "description": "greenness in 2024, the sector minus its matched places (above 0.04 in absolute value: refused)"
    },
    {
     "name": "comparable",
     "description": "True when the matched places are comparable"
    }
   ]
  },
  {
   "key": "art8_balance_2026",
   "group": "The law",
   "title": "Since the 2024 base, in hectares: summer 2026",
   "file": "art8_balance_2026.csv",
   "format": "CSV",
   "rows": 287,
   "bytes": 49576,
   "computed": "2026-09-26",
   "measures": "For each sector, urban green (the Regulation’s reading: trees, grass, shrub and water, not farmland), tree canopy and built-up ground in hectares in summer 2024 and summer 2026, and the change beyond noise against twelve matched places.",
   "unit": "hectares; share of the sector’s area",
   "method": "Each summer, the class with the highest mean Dynamic World probability wins each 10 m pixel; a class’s share of the sector times its area gives hectares. The effect is the sector’s change in share minus its matched places’ mean change (the most alike in 2024 by greenness and surface temperature, none closer than 1.5 km); times the area, hectares beyond what comparable places did.",
   "source": "Dynamic World V1; Copernicus Sentinel-2 greenness and Landsat surface temperature of summer 2024 for the matching; Statbel sectors and population.",
   "threshold": 0.07313,
   "threshold_from": "Green 0.0731, canopy 0.0608, built-up 0.0616 (share of the sector's area): the 95th percentile of this run's own null distribution, each class and season on its own — every sector plays “intervention” once against its 12 matched places.",
   "limits": [
    "Hectares as Dynamic World classifies the ground: not the official CLCplus and Woody Vegetation layers, and not the land register.",
    "One summer against another is noisier than a four-year window.",
    "The raw hectares include the classes’ shift from one summer to the next; only the effect subtracts it.",
    "A park that loses trees can read as more built-up when a mixed pixel changes class."
   ],
   "licence": "CC BY 4.0",
   "credit": [
    "Dynamic World V1 (Google, World Resources Institute), CC BY 4.0",
    "Contains modified Copernicus Sentinel data (2016–2026)",
    "Landsat Collection 2 courtesy of the U.S. Geological Survey",
    "Source: Statbel (Directorate-General Statistics – Statistics Belgium), CC BY 4.0; aggregated and joined by Frondia"
   ],
   "columns": [
    {
     "name": "id",
     "description": "Statbel statistical sector code (the join key of every layer)"
    },
    {
     "name": "name",
     "description": "sector name, as Statbel writes it"
    },
    {
     "name": "commune",
     "description": "commune"
    },
    {
     "name": "area_ha",
     "description": "area, hectares"
    },
    {
     "name": "population",
     "description": "residents"
    },
    {
     "name": "green_2024_ha",
     "description": "urban green, summer 2024, hectares"
    },
    {
     "name": "green_2026_ha",
     "description": "urban green, summer 2026, hectares"
    },
    {
     "name": "green_raw_ha",
     "description": "urban green: summer 2026 minus summer 2024, hectares, without matched places"
    },
    {
     "name": "green_eff",
     "description": "urban green: the change in share minus the matched places’ mean change"
    },
    {
     "name": "green_eff_ha",
     "description": "urban green: that effect in hectares"
    },
    {
     "name": "green_verdict",
     "description": "urban green: up, down, noise or refused"
    },
    {
     "name": "trees_2024_ha",
     "description": "tree canopy, summer 2024, hectares"
    },
    {
     "name": "trees_2026_ha",
     "description": "tree canopy, summer 2026, hectares"
    },
    {
     "name": "trees_raw_ha",
     "description": "tree canopy: summer 2026 minus summer 2024, hectares, without matched places"
    },
    {
     "name": "trees_eff",
     "description": "tree canopy: the change in share minus the matched places’ mean change"
    },
    {
     "name": "trees_eff_ha",
     "description": "tree canopy: that effect in hectares"
    },
    {
     "name": "trees_verdict",
     "description": "tree canopy: up, down, noise or refused"
    },
    {
     "name": "built_2024_ha",
     "description": "built-up, summer 2024, hectares"
    },
    {
     "name": "built_2026_ha",
     "description": "built-up, summer 2026, hectares"
    },
    {
     "name": "built_raw_ha",
     "description": "built-up: summer 2026 minus summer 2024, hectares, without matched places"
    },
    {
     "name": "built_eff",
     "description": "built-up: the change in share minus the matched places’ mean change"
    },
    {
     "name": "built_eff_ha",
     "description": "built-up: that effect in hectares"
    },
    {
     "name": "built_verdict",
     "description": "built-up: up, down, noise or refused"
    },
    {
     "name": "gap",
     "description": "greenness in 2024, the sector minus its matched places (above 0.04 in absolute value: refused)"
    },
    {
     "name": "comparable",
     "description": "True when the matched places are comparable"
    }
   ]
  },
  {
   "key": "fit_score",
   "group": "What’s missing",
   "title": "Everyday services within walking distance",
   "file": "fit_score.csv",
   "format": "CSV",
   "rows": 873,
   "bytes": 77832,
   "computed": "2026-09-26",
   "measures": "How well a sector serves three ways of living — a family with children, remote work, seniors — by walking access to fourteen everyday services.",
   "unit": "score 0–100 and percentile; per-service scores 0–1",
   "method": "Walking time from the sector's centroid on the OpenStreetMap walking graph; each service scored with a plateau-and-decay curve; public transport weighted by departures in the morning peak; a weighted sum per scenario; the percentile is Hazen's, over the city's sectors.",
   "source": "Neighbourhood Fit Score pipeline: OpenStreetMap points of interest and walking graph, Statbel sectors, TEC timetables. OpenStreetMap from a Geofabrik extract of Belgium, data as of 2026-09-25T20:24:36Z.",
   "threshold": null,
   "threshold_from": "No significance threshold: this layer is a state or a recommendation, not a measured change.",
   "limits": [
    "A state, not a measured change: never mix it with the effects above.",
    "OpenStreetMap is not equally complete everywhere: a score reflects the map as well as the city.",
    "The scenario weights are an editorial choice, not a measurement."
   ],
   "licence": "ODbL 1.0 (derived from OpenStreetMap)",
   "credit": [
    "© OpenStreetMap contributors, ODbL 1.0",
    "Public transport stops and timetables: TEC open data",
    "Source: Statbel (Directorate-General Statistics – Statistics Belgium), CC BY 4.0; aggregated and joined by Frondia"
   ],
   "columns": [
    {
     "name": "id",
     "description": "Statbel statistical sector code (the join key of every layer)"
    },
    {
     "name": "scenario",
     "description": "family, remote or senior"
    },
    {
     "name": "score",
     "description": "the scenario's score, 0–100"
    },
    {
     "name": "percentile",
     "description": "rank among the city's sectors, 0–100"
    },
    {
     "name": "cafe",
     "description": "cafe sub-score, 0–1"
    },
    {
     "name": "childcare",
     "description": "childcare sub-score, 0–1"
    },
    {
     "name": "convenience",
     "description": "convenience sub-score, 0–1"
    },
    {
     "name": "gp",
     "description": "GP sub-score, 0–1"
    },
    {
     "name": "hospital",
     "description": "hospital sub-score, 0–1"
    },
    {
     "name": "library",
     "description": "library sub-score, 0–1"
    },
    {
     "name": "park",
     "description": "park sub-score, 0–1"
    },
    {
     "name": "pharmacy",
     "description": "pharmacy sub-score, 0–1"
    },
    {
     "name": "playground",
     "description": "playground sub-score, 0–1"
    },
    {
     "name": "restaurant",
     "description": "restaurant sub-score, 0–1"
    },
    {
     "name": "school",
     "description": "school sub-score, 0–1"
    },
    {
     "name": "sport",
     "description": "sport sub-score, 0–1"
    },
    {
     "name": "supermarket",
     "description": "supermarket sub-score, 0–1"
    },
    {
     "name": "transit",
     "description": "public transport sub-score, 0–1, weighted by departures"
    }
   ]
  },
  {
   "key": "shops_access",
   "group": "What’s missing",
   "title": "Bakeries, cafés and confectioners within reach",
   "file": "shops_access.csv",
   "format": "CSV",
   "rows": 291,
   "bytes": 10528,
   "computed": "2026-09-26",
   "measures": "The distance from a sector to the nearest bakery, café and confectioner, and how many of each lie inside it.",
   "unit": "metres; count",
   "method": "From the sector's representative point to the nearest venue of each kind, anywhere in the city, in a straight line (SpotFinder).",
   "source": "SpotFinder pipeline: OpenStreetMap venues, Statbel sectors. OpenStreetMap from a Geofabrik extract of Belgium, data as of 2026-09-25T20:24:36Z.",
   "threshold": null,
   "threshold_from": "No significance threshold: this layer is a state or a recommendation, not a measured change.",
   "limits": [
    "A state, not a measured change.",
    "Straight-line distance, not along streets.",
    "OpenStreetMap is not equally complete everywhere."
   ],
   "licence": "ODbL 1.0 (derived from OpenStreetMap)",
   "credit": [
    "© OpenStreetMap contributors, ODbL 1.0",
    "Source: Statbel (Directorate-General Statistics – Statistics Belgium), CC BY 4.0; aggregated and joined by Frondia"
   ],
   "columns": [
    {
     "name": "id",
     "description": "Statbel statistical sector code (the join key of every layer)"
    },
    {
     "name": "bakery_m",
     "description": "metres to the nearest bakery"
    },
    {
     "name": "cafe_m",
     "description": "metres to the nearest café"
    },
    {
     "name": "confectionery_m",
     "description": "metres to the nearest confectioner"
    },
    {
     "name": "bakery_in_sector",
     "description": "bakeries inside the sector"
    },
    {
     "name": "cafe_in_sector",
     "description": "cafés inside the sector"
    },
    {
     "name": "confectionery_in_sector",
     "description": "confectioners inside the sector"
    }
   ]
  },
  {
   "key": "heat_2022_2025",
   "group": "What’s missing",
   "title": "Summer heat",
   "file": "heat_2022_2025.csv",
   "format": "CSV",
   "rows": 291,
   "bytes": 13898,
   "computed": "2026-09-26",
   "measures": "The summer land surface temperature of each sector and how far it lies above or below the city's median sector.",
   "unit": "°C",
   "method": "The median of summer scenes 2022–2025, Landsat 8/9 thermal band, cloud-masked with QA_PIXEL.",
   "source": "Landsat Collection 2 Level 2 (ST_B10), Statbel sectors and population.",
   "threshold": null,
   "threshold_from": "No significance threshold: this layer is a state or a recommendation, not a measured change.",
   "limits": [
    "Surface temperature, not air temperature.",
    "Good for ranking sectors against each other; not for “it got cooler”: the threshold for a change in temperature came out at 1.32 °C, more than a realistic park effect, so cooling is not measured."
   ],
   "licence": "CC BY 4.0",
   "credit": [
    "Landsat Collection 2 courtesy of the U.S. Geological Survey",
    "Source: Statbel (Directorate-General Statistics – Statistics Belgium), CC BY 4.0; aggregated and joined by Frondia"
   ],
   "columns": [
    {
     "name": "id",
     "description": "Statbel statistical sector code (the join key of every layer)"
    },
    {
     "name": "name",
     "description": "sector name, as Statbel writes it"
    },
    {
     "name": "population",
     "description": "residents"
    },
    {
     "name": "area_ha",
     "description": "area, hectares"
    },
    {
     "name": "lst_summer_c",
     "description": "median summer surface temperature 2022–2025, °C"
    },
    {
     "name": "excess_over_city_c",
     "description": "that minus the city's median sector, °C"
    }
   ]
  },
  {
   "key": "rule_3_30_300",
   "group": "What’s missing",
   "title": "The 3-30-300 rule",
   "file": "rule_3_30_300.csv",
   "format": "CSV",
   "rows": 291,
   "bytes": 14325,
   "computed": "2026-09-26",
   "measures": "The two measurable parts of the rule: 30% tree canopy in the sector, and a park of at least one hectare within 300 m.",
   "unit": "share of area; pass flags",
   "method": "Canopy: the share of ESA WorldCover's tree class (10 m), pass at 30%. Parks: named OpenStreetMap polygons of 1 ha or more; a sector passes when half of its area lies within 300 m of one.",
   "source": "ESA WorldCover v200 (2021), OpenStreetMap parks, Statbel sectors and population.",
   "threshold": null,
   "threshold_from": "No significance threshold: this layer is a state or a recommendation, not a measured change.",
   "limits": [
    "The first part, three trees in view from every window, is not measured.",
    "Private and closed gardens are not told apart from parks."
   ],
   "licence": "ODbL 1.0 (derived from OpenStreetMap)",
   "credit": [
    "© ESA WorldCover project 2021 / Contains modified Copernicus Sentinel data (2021) processed by ESA WorldCover consortium, CC BY 4.0",
    "© OpenStreetMap contributors, ODbL 1.0",
    "Source: Statbel (Directorate-General Statistics – Statistics Belgium), CC BY 4.0; aggregated and joined by Frondia"
   ],
   "columns": [
    {
     "name": "id",
     "description": "Statbel statistical sector code (the join key of every layer)"
    },
    {
     "name": "name",
     "description": "sector name, as Statbel writes it"
    },
    {
     "name": "population",
     "description": "residents"
    },
    {
     "name": "canopy_share",
     "description": "tree canopy share of the sector (WorldCover)"
    },
    {
     "name": "near_park_share",
     "description": "share of the sector within 300 m of a park of 1 ha or more"
    },
    {
     "name": "passes_30",
     "description": "1 when canopy ≥ 30%"
    },
    {
     "name": "passes_300",
     "description": "1 when at least half the sector is within 300 m of a park"
    },
    {
     "name": "passes_both",
     "description": "1 when both parts pass"
    }
   ]
  },
  {
   "key": "population_age",
   "group": "What’s missing",
   "title": "Residents by age",
   "file": "population_age.csv",
   "format": "CSV",
   "rows": 284,
   "bytes": 15873,
   "computed": "2026-09-26",
   "measures": "Children under 15, adults, people aged 65 and over, and 80 and over separately.",
   "unit": "people; share",
   "method": "The 2021 census by sector, sex and age, summed into four bands; 80+ is part of 65+.",
   "source": "Statbel, Census 2021, table TF_CENSUS_2021_S01.",
   "threshold": null,
   "threshold_from": "No significance threshold: this layer is a state or a recommendation, not a measured change.",
   "limits": [
    "The census date, not 2024.",
    "Small sectors may be rounded by Statbel for privacy."
   ],
   "licence": "CC BY 4.0",
   "credit": [
    "Source: Statbel (Directorate-General Statistics – Statistics Belgium), CC BY 4.0; aggregated and joined by Frondia"
   ],
   "columns": [
    {
     "name": "id",
     "description": "Statbel statistical sector code (the join key of every layer)"
    },
    {
     "name": "name",
     "description": "sector name, as Statbel writes it"
    },
    {
     "name": "population_census",
     "description": "residents at the 2021 census"
    },
    {
     "name": "children_0_14",
     "description": "children under 15"
    },
    {
     "name": "adults_15_64",
     "description": "aged 15 to 64"
    },
    {
     "name": "seniors_65_plus",
     "description": "aged 65 and over"
    },
    {
     "name": "seniors_80_plus",
     "description": "aged 80 and over (included in 65+)"
    },
    {
     "name": "share_children",
     "description": "children under 15, share of residents"
    },
    {
     "name": "share_seniors",
     "description": "aged 65 and over, share of residents"
    }
   ]
  },
  {
   "key": "planner_points",
   "group": "What to place",
   "title": "Where City Planner would place the next objects",
   "file": "planner_points.csv",
   "format": "CSV",
   "rows": 560,
   "bytes": 47444,
   "computed": "2026-09-26",
   "measures": "For fourteen kinds of public object, the forty best places ranked by City Planner; the first ten of each kind were named on 5 September 2026, the next ten are their comparison.",
   "unit": "rank; coordinates; planner's scores",
   "method": "A greedy maximum-coverage solver over a demand grid weighted by deprivation, with a 500 m service radius: each next place is the one that covers the most unmet demand.",
   "source": "City Planner pipeline: OpenStreetMap objects and points of demand, Statbel sectors, deprivation by sector. OpenStreetMap from a Geofabrik extract of Belgium, data as of 2026-09-25T20:24:36Z.",
   "threshold": null,
   "threshold_from": "No significance threshold: this layer is a state or a recommendation, not a measured change.",
   "limits": [
    "A recommendation, not a measurement.",
    "Ranks 11–20 are slightly worse than 1–10 by construction: as a comparison group they are conservative."
   ],
   "licence": "ODbL 1.0 (derived from OpenStreetMap)",
   "credit": [
    "© OpenStreetMap contributors, ODbL 1.0",
    "Source: Statbel (Directorate-General Statistics – Statistics Belgium), CC BY 4.0; aggregated and joined by Frondia",
    "Deprivation weights: Belgian Index of Multiple Deprivation 2011"
   ],
   "columns": [
    {
     "name": "kind",
     "description": "kind of object"
    },
    {
     "name": "rank",
     "description": "planner's rank, 1–40"
    },
    {
     "name": "role",
     "description": "named (1–10), comparison (11–20) or further (21–40)"
    },
    {
     "name": "lon",
     "description": "longitude, WGS 84"
    },
    {
     "name": "lat",
     "description": "latitude, WGS 84"
    },
    {
     "name": "sector",
     "description": "Statbel sector the place falls in (empty outside the package)"
    },
    {
     "name": "score",
     "description": "planner's composite score"
    },
    {
     "name": "gap_score",
     "description": "unmet demand the place covers, 0–1"
    },
    {
     "name": "equity_index",
     "description": "deprivation weight, 0–1"
    },
    {
     "name": "named_at",
     "description": "the date the points were fixed"
    },
    {
     "name": "official_at_point",
     "description": "objects of the same kind in the city's own register within the point's 50 m check radius (empty: no register of this kind)"
    },
    {
     "name": "official_within_500m",
     "description": "the same within 500 m, the planner's service radius"
    },
    {
     "name": "map_gap_500m",
     "description": "of those within 500 m, how many the planner's OpenStreetMap did not have within 50 m: a gap of the map, not of the street (empty where that OSM was not kept)"
    },
    {
     "name": "out_of_check",
     "description": "True when an object already stood within the check radius by the register, so the point leaves the named-against-comparison check"
    }
   ]
  },
  {
   "key": "planner_coverage",
   "group": "What to place",
   "title": "Coverage after each of the next forty objects",
   "file": "planner_coverage.csv",
   "format": "CSV",
   "rows": 574,
   "bytes": 16153,
   "computed": "2026-09-26",
   "measures": "The share of demand within 500 m of an object, today (n = 0) and after each rank is placed: the curve under “What if N more?”.",
   "unit": "share of demand, 0–1",
   "method": "From the same City Planner run as the ranked places.",
   "source": "City Planner pipeline. OpenStreetMap from a Geofabrik extract of Belgium, data as of 2026-09-25T20:24:36Z.",
   "threshold": null,
   "threshold_from": "No significance threshold: this layer is a state or a recommendation, not a measured change.",
   "limits": [
    "Coverage of demand points, not of residents."
   ],
   "licence": "ODbL 1.0 (derived from OpenStreetMap)",
   "credit": [
    "© OpenStreetMap contributors, ODbL 1.0",
    "Source: Statbel (Directorate-General Statistics – Statistics Belgium), CC BY 4.0; aggregated and joined by Frondia",
    "Deprivation weights: Belgian Index of Multiple Deprivation 2011"
   ],
   "columns": [
    {
     "name": "kind",
     "description": "kind of object"
    },
    {
     "name": "n",
     "description": "objects added, 0–40"
    },
    {
     "name": "coverage",
     "description": "share of demand covered"
    },
    {
     "name": "service_radius_m",
     "description": "service radius, metres"
    }
   ]
  },
  {
   "key": "worldcover_2021",
   "group": "Cross-checks",
   "title": "ESA WorldCover shares, a check on our tree class",
   "file": "worldcover_2021.csv",
   "format": "CSV",
   "rows": 291,
   "bytes": 18561,
   "computed": "2026-09-26",
   "measures": "The share of each sector under trees, shrub, grass, built-up and bare ground, by a hard 10 m classification.",
   "unit": "share of area, 0–1",
   "method": "The mean of each class's mask inside the sector.",
   "source": "ESA WorldCover v200, epoch 2021.",
   "threshold": null,
   "threshold_from": "No significance threshold: this layer is a state or a recommendation, not a measured change.",
   "limits": [
    "One epoch, 2021: not a baseline and not a change.",
    "Hard classes against Dynamic World's probabilities: compare the rank, not the value."
   ],
   "licence": "CC BY 4.0",
   "credit": [
    "© ESA WorldCover project 2021 / Contains modified Copernicus Sentinel data (2021) processed by ESA WorldCover consortium, CC BY 4.0",
    "Source: Statbel (Directorate-General Statistics – Statistics Belgium), CC BY 4.0; aggregated and joined by Frondia"
   ],
   "columns": [
    {
     "name": "id",
     "description": "Statbel statistical sector code (the join key of every layer)"
    },
    {
     "name": "name",
     "description": "sector name, as Statbel writes it"
    },
    {
     "name": "area_ha",
     "description": "area, hectares"
    },
    {
     "name": "population",
     "description": "residents"
    },
    {
     "name": "wc_trees",
     "description": "tree share"
    },
    {
     "name": "wc_shrub",
     "description": "shrub share"
    },
    {
     "name": "wc_grass",
     "description": "grass share"
    },
    {
     "name": "wc_built",
     "description": "built-up share"
    },
    {
     "name": "wc_bare",
     "description": "bare ground share"
    }
   ]
  },
  {
   "key": "canopy_probav_2019",
   "group": "Cross-checks",
   "title": "Proba-V tree cover, a third instrument",
   "file": "canopy_probav_2019.csv",
   "format": "CSV",
   "rows": 291,
   "bytes": 9722,
   "computed": "2026-09-26",
   "measures": "The tree cover fraction of each sector from a different producer and sensor.",
   "unit": "share of area, 0–1",
   "method": "The tree-coverfraction band, mean over the sector, 100 m grid.",
   "source": "Copernicus Global Land Service, Land Cover 100 m (Proba-V, VITO), epoch 2019.",
   "threshold": null,
   "threshold_from": "No significance threshold: this layer is a state or a recommendation, not a measured change.",
   "limits": [
    "Epoch 2019, and the series has ended.",
    "On a 100 m grid small crowns in dense streets read as zero."
   ],
   "licence": "CC BY 4.0",
   "credit": [
    "Copernicus Global Land Service, Land Cover 100 m (Proba-V, VITO), epoch 2019"
   ],
   "columns": [
    {
     "name": "id",
     "description": "Statbel statistical sector code (the join key of every layer)"
    },
    {
     "name": "name",
     "description": "sector name, as Statbel writes it"
    },
    {
     "name": "canopy_share",
     "description": "tree cover fraction"
    }
   ]
  }
 ]
}