These days, climate change warnings are everywhere. But I have to admit, the first time I had the opportunity to verify it for myself in data, it was a shock. This is now an exercise I do every year with my students.
To that end, I use Corine Land Cover, which is an inventory of European land cover split into 44 different land cover classes. These data are freely available. Here is a geopackage (478 Mo) centered on Region Auvergne Rhône Alpes in France with all the data from 1990 to 2018. One possibility is to open the geopackage with QGIS and then to upload all the layers (1990, 2000, 2006, 2012 and 2018) to PostGIS. The SQL script below computes the areas (in square kilometers) of each land cover class for each year. Then, taking the year 1990 as reference, it calculates the percentage of each land cover.
What do the figures say? Glaciers have lost 40% of their surface area in 30 years, with a strong acceleration of this reduction since the year 2000. This is particularly visible in the Mont Blanc Massif.
At the same time, the sclerophyllous vegetation typical of the Mediterranean basin has increased by 80%. And, we have continued the artificialization of soils: urban areas have increased by 30% and the road network has been multiplied by 2.
DROP VIEW IF EXISTS superficie_90 CASCADE;
CREATE VIEW superficie_90 as
SELECT code_90, sum(st_area(geom))/1000000 as superficie_90
FROM clc_90
GROUP BY code_90;
DROP VIEW IF EXISTS superficie_00 CASCADE;
CREATE VIEW superficie_00 as
SELECT code_00, sum(st_area(geom))/1000000 as superficie_00
FROM clc_00
GROUP BY code_00;
DROP VIEW IF EXISTS superficie_06 CASCADE;
CREATE VIEW superficie_06 as
SELECT code_06, sum(st_area(geom))/1000000 as superficie_06
FROM clc_06
GROUP BY code_06;
DROP VIEW IF EXISTS superficie_12 CASCADE;
CREATE VIEW superficie_12 as
SELECT code_12, sum(st_area(geom))/1000000 as superficie_12
FROM clc_12
GROUP BY code_12;
DROP VIEW IF EXISTS superficie_18 CASCADE;
CREATE VIEW superficie_18 as
SELECT code_18, sum(st_area(geom))/1000000 as superficie_18
FROM clc_18
GROUP BY code_18;
DROP VIEW IF EXISTS superficies_clc CASCADE;
CREATE VIEW superficies_clc as
SELECT code_90 as code_clc, superficie_90, superficie_00, superficie_06, superficie_12, superficie_18
FROM superficie_90, superficie_00, superficie_06, superficie_12, superficie_18
WHERE code_90 = code_00 and code_00 = code_06 and code_06 = code_12 and code_12 = code_18;
DROP TABLE IF EXISTS superficies_en_labels;
CREATE TABLE superficies_en_labels AS
SELECT libelle_en, code_clc, superficie_90, superficie_00, superficie_06, superficie_12, superficie_18
FROM superficies_clc, en_labels
WHERE code_clc = code_clc_niveau_3;
DROP TABLE IF EXISTS aura_clc_1990_2018;
CREATE TABLE aura_clc_1990_2018 AS
SELECT libelle_en AS label, round(((superficie_90/superficie_90) * 100)::numeric, 2) AS "1990" ,
round(((superficie_00/superficie_90) * 100)::numeric, 2) AS "2000",
round(((superficie_06/superficie_90) * 100)::numeric, 2) AS "2006",
round(((superficie_12/superficie_90) * 100)::numeric, 2) AS "2012",
round(((superficie_18/superficie_90) * 100)::numeric, 2) AS "2018"
FROM superficies_en_labels;