---
title: "Omvang van ecosystemen"
date: 2026-05-21T10:00:00+01:00
bibliography: ../references.bib
link-citations: TRUE
thema:
  - Ecosystemen
  - Ruimte
keywords:
  - ecosysteemrekening
  - ecosystem accounting
  - natural capital accounting
  - landgebruiksverandering
lang: nl
tab: indicator
verantwoordelijke:
  - Wouter Van Reeth <wouter.vanreeth@inbo.be>
output: html_document
editor_options:
  markdown:
    wrap: sentence
---

```{r setup, include=FALSE}
library(knitr)
opts_chunk$set(
  message = FALSE,
  warning = FALSE,
  echo = FALSE
)
library(tidyverse)
library(git2rdata)
library(plotly)
library(INBOtheme)
source(file.path("..", "..", "inbo_theme.R"))
library(htmlwidgets)
library(networkD3)
set.seed(20200520)
setWidgetIdSeed(20200520)
options(htmlwidgets.TOJSON_ARGS = list(pretty = TRUE))
```

[**INBO lanceert 'Omvang van ecosystemen' als experimentele indicator. We ontvangen graag uw opmerkingen om de leesbaarheid en bruikbaarheid ervan te verbeteren. Suggesties zijn welkom bij wouter.vanreeth@inbo.be.**]{style="color:#C04384"}

```{r data_inlezen}
dataset <- read_vc("omvang_ecosystemen") %>%
  mutate(Type = as.factor(Type)) %>%
  mutate(Jaar = as.factor(Jaar))
```

De grootste veranderingen in de omvang van ecosystemen tussen 2016 en 2022 zijn de afname van grasland en de toename van woongebieden en andere kunstmatige gebieden (ruimtebeslag).
De omvang van akkerland neemt licht af, die van de andere ecosystemen is stabiel of neemt licht toe.

```{r Staafdiagram Grouped, fig.width = 6, fig.height = 4, fig.cap = "Figuur 1: Omvang van ecosystemen."}

p <- ggplot(dataset,
            aes(x = Type, y = Oppervlakte, fill = Jaar,
                text = paste0("<b>Ecosysteem:</b> ", Type, "<br>",
                              "<b>Jaar:</b> ", Jaar, "<br>",
                              "<b>Omvang:</b> ",
                              scales::number(Oppervlakte, big.mark = "."),
                              " ha"))) +
  geom_bar(stat = "identity",
           position = position_dodge(width = 0.7, reverse = TRUE),
           width = 0.7) +
  labs(x = "",
       y = "Omvang in hectare") +
  scale_y_continuous(expand = c(0, 0), limits = c(0, 550000),
                     breaks = c(0, 100000, 200000, 300000, 400000, 500000),
                     labels = scales::label_number(big.mark = ".")) +
  scale_x_discrete(labels = scales::label_wrap(width = 25)) +
  guides(fill = guide_legend(reverse = TRUE)) +
  coord_flip()

if (interactive() || opts_knit$get("rmarkdown.pandoc.to") == "html") {
  ggplotly(p, tooltip = "text")
} else {
  p
}
```

## Definitie

De indicator toont de verandering in de omvang van ecosystemen in Vlaanderen en het Belgisch deel van de Noordzee, tussen 2016 en 2022.
Hij is gebaseerd op de milieueconomische rekening 'omvang van ecosystemen' die vanaf 2028 driejaarlijks wordt gerapporteerd aan Eurostat.

## Bespreking

Er ging tussen 2016 en 2022 **netto meer dan 11.100 ha grasland (4,3% van het totaal) verloren** (zie Figuur 2).
Die afname is sterk gekoppeld aan de toename van **woongebieden en andere kunstmatige gebieden (ruimtebeslag)**.
Die **groeiden met bijna 9.200 ha (+2,1% of ruim 4 ha/dag)**.
Na 2019 groeide het ruimtebeslag iets trager dan in de periode ervoor.
Bijna driekwart van die groei ging ten koste van grasland, het overige kwart kwam vooral van akkerland en bos.
Eerder onderzoek toonde dat ook tussen 2013 en 2016 de afname van grasland en de toename van ruimtebeslag de belangrijkste ecosysteemveranderingen waren in Vlaanderen [@VanReethStevens2020].

De omvang van akkerland schommelde tijdens de onderzochte periode maar daalde uiteindelijk licht met 0,6% (2730 ha).
De omvang van overige terrestrische ecosystemen bleef stabiel of nam toe.
Voor kleine terrestrische systemen was die toename relatief groot: heide groeide in omvang met ruim 7% (640 ha), wetlands in het binnenland met 14% (170 ha) en binnenlandse duinen (ecosystemen met schaarse begroeiïng) met meer dan 20% (21 ha).
De erosie van het strand door de zeestroming en de uitvoering van strandsuppleties zorgt voor uitwisselingen tussen de Noordzee (mariene ecosystemen), het laagstrand (estuaria en overgangswateren) en het hoogstrand (stranden, duinen en wetlands aan de kust).


```{r data inlezen2}
data_flow <- read_vc("flow_ecosystemen")
```

```{r graph, fig.width = 9, fig.height = 4, fig.cap = "Figuur 2: Omvorming van ecosystemen tussen tussen 2016 en 2022. De figuur toont enkel de nettoveranderingen. Wanneer er bijvoorbeeld 1386 ha bos werd omgevormd naar akkerland, en 1236 ha  akkerland naar bos, toont de figuur enkel de 150 ha nettoverandering van bos naar akkerland."}

# 1. Aanpasbare kolomnamen en netto of bruto
# Verwacht: kol1 = code_2016 (van), kol2 = code_2022 (naar),
# kol3 = oppervlakte (netto of bruto)
colnames(data_flow) <- c("van", "naar", "netto", "bruto")

# 2. kleurentabel maken (Met een veilige code voor JavaScript)
eco_ref <- data.frame(
  code = as.character(1:12),
  label = c(
    "Woongebieden en andere kunstmatige gebieden",
    "Akkerland",
    "Grasland",
    "Bossen en bosgebieden",
    "Heide",
    "Ecosystemen met schaarse begroeiïng",
    "Wetlands in het binnenland",
    "Rivieren en kanalen",
    "Meren en waterbekkens",
    "Estuaria en overgangswateren",
    "Stranden, duinen en wetlands aan de kust",
    "Mariene ecosystemen"
  ),
  color = c(
    "#E60000", "#FFE467", "#AAFF00", "#38A800", "#E49EDD", "#FFC34B",
    "#CDAA66", "#004DA8", "#73DFFF", "#00FFC5", "#FF73DF", "#138EB9"
  ),
  # simpele codes voor de kleuren (anders flipt sankeyD3)
  safe_group = paste0("cat_", 1:12),
  stringsAsFactors = FALSE
)

# 3. Data koppelen aan de referentietabel
data <- data_flow %>%
  # Filter de lege flows direct aan het begin weg
  dplyr::filter(netto >= 1 & bruto >= 1) %>%
  mutate(van = as.character(van), naar = as.character(naar)) %>%
  # Koppel info voor 2016
  left_join(eco_ref, by = c("van" = "code")) %>%
  rename(from_label = label, from_group = safe_group) %>%
  # Koppel info voor 2022
  left_join(eco_ref, by = c("naar" = "code")) %>%
  rename(to_label = label, to_group = safe_group) %>%
  # Filter rijen met foutieve codes eruit
  dplyr::filter(!is.na(from_label) & !is.na(to_label))

# 4. Nodes (blokjes) opbouwen
nodes_2016 <- data %>%
  distinct(van, from_label, from_group) %>%
  mutate(jaar = "2016")
nodes_2022 <- data %>%
  distinct(naar, to_label, to_group) %>%
  mutate(jaar = "2022")

nodes <- bind_rows(
  nodes_2016 %>% rename(code = van, label = from_label, group = from_group),
  nodes_2022 %>% rename(code = naar, label = to_label, group = to_group)
) %>%
  mutate(
    # Unieke naam voor de berekening
    name_unique = paste0(label, "_", jaar)
  )

# 5. Links (lijnen) opbouwen
links <- data %>%
  mutate(
    source = match(paste0(from_label, "_2016"), nodes$name_unique) - 1,
    target = match(paste0(to_label, "_2022"), nodes$name_unique) - 1,
    # Geef lijn categorie van bron OF 'cat_stable' als ecosystem gelijk blijft
    link_group = ifelse(van == naar, "cat_stable", from_group)
  ) %>%
  select(source, target, netto, link_group) # kies netto of bruto

# 6. De Bulletproof Kleurenschaal
# We gebruiken nu cat_1, cat_2, etc. Moet lukken voor vreemde leestekens.
all_groups <- c(eco_ref$safe_group, "cat_stable")
all_colors <- c(eco_ref$color, "#E0E0E0") # Grijstint voor stabiele oppervlakte

my_color_js <- networkD3::JS(paste0(
  "d3.scaleOrdinal()",
  '.domain(["', paste(all_groups, collapse = '","'), '"])',
  '.range(["', paste(all_colors, collapse = '","'), '"])'
))

# 7. Sankey Maken
sankey <- sankeyNetwork(
  Links = links,
  Nodes = nodes,
  Source = "source",
  Target = "target",
  Value = "netto", # kies netto of bruto
  NodeID = "name_unique", # JS rekent hiermee
  LinkGroup = "link_group", # De veilige code (bijv. cat_4)
  NodeGroup = "group",  # De veilige code (bijv. cat_4)
  colourScale = my_color_js,
  fontSize = 12,
  nodeWidth = 30,
  sinksRight = TRUE,
  margin = list(right = 265, left = 265) # Voldoende ruimte voor de lange namen
)

# 8. JavaScript: Posities corrigeren én labels opschonen
sankey_final <- onRender(
  sankey,
  '
  function(el) {
// 1. Haal _2016 en _2022 van labels af voor nette weergave op scherm
    d3.select(el).selectAll(".node text")
.text(function(d) { return d.name.replace("_2016", "").replace("_2022", "");
})
      .attr("x", function(d) { return d.x < 200 ? -10 : 40; })
      .attr("text-anchor", function(d) { return d.x < 200 ? "end" : "start"; });

// =========================================================================
// OPLOSSING VOOR DE POP-UP SPATIE:
// We isoleren de waarde door de computernaam weg te strepen
// =========================================================================
    d3.select(el).selectAll(".node").select("title")
      .text(function(d) {
        var huidigeTekst = d3.select(this).text();

// Haal de originele onbewerkte naam (bijv. "Bos_2016") uit de pop-up tekst
        var waardeDeel = huidigeTekst.replace(d.name, "").trim();

        // Maak de getoonde naam netjes schoon (zonder jaartal)
        var schoneNaam = d.name.replace("_2016", "").replace("_2022", "");

        // Plak ze aan elkaar met een gegarandeerde harde spatie
        return schoneNaam + ": " + waardeDeel + " hectare";
      });
// =========================================================================


    // 2. Kolomtitels (2016 en 2022) toevoegen
    var nodeWidth = this.sankey.nodeWidth();
    var cols_x = [250, 582];
    var labels = ["Netto afname 2016-2022 (ha)",
    "Netto toename 2016-2022 (ha)"];

    cols_x.forEach((d, i) => {
      d3.select(el).select("svg")
        .append("text")
        .attr("x", d + (nodeWidth / 2))
        .attr("y", 12)
        .attr("text-anchor", "middle")
        .style("font-weight", "bold")
        .style("font-family", "sans-serif")
        .text(labels[i]);
    });
  }
  '
)

sankey_final
```

De indicator is een grafische weergave van de ecosysteemrekening 'omvang van ecosystemen'.
Dit is één van de nieuwe milieu-economische rekeningen die EU-lidstaten vanaf 2028 moeten rapporteren aan Eurostat, in uitvoering van Verordening (EU) 2024/3024 van het Europees Parlement en de Raad van 27 november 2024.
De omvangsrekening is afgeleid van een gebiedsdekkende ecosysteemkaart van Vlaanderen en het Belgisch deel van de Noordzee.
De validatie van die kaart is voorzien tegen 2027.
In afwachting van die validatie moeten de geregistreerde ecosysteemveranderingen met de nodige voorzichtigheid worden geïnterpreteerd (zie metadata).

## Referenties
