Cartes d’occupation du sol et d’utilisation du sol

Mots-clés : données utilisées ; ESRI Land Cover, ensembles de données ; io_lulc_v2, données utilisées ; ESA WorldCover, ensembles de données ; esa_worldcover_2020 données utilisées ; Copernicus Global Land Service, Land Use/Land Cover at 100 m, ensembles de données ; cgls_landcover données utilisées ; ESA Climate Change Initiative Land Cover, ensembles de données ; cci_landcover

Aperçu

Les cartes Let Use/Let Cover (LULC) classent les terres en grandes catégories telles que l’eau, les cultures ou les zones bâties. Elles sont utiles pour visualiser les utilisations dominantes des terres dans une zone donnée. La superficie totale ou la proportion de différentes classes peut également être calculée pour une zone spécifiée.

De nombreuses organisations publient des cartes LULC. DE Africa donne accès aux cartes d’utilisation des terres et de couverture terrestre (LULC) de l’Environmental Systems Research Institute (Esri)/Impact Observatory (IO) <https://www.arcgis.com/home/item.html?id=d3da5dd386d140cf93fc9ecbf8da5e31>, WorldCover de l’Agence spatiale européenne (ESA) <https://esa-worldcover.org/en>, Copernicus Global Land Service (CGLS) Land Use/Land Cover at 100 m <https://land.copernicus.eu/global/content/annual-100m-global-land-cover-maps-available> et à la carte de couverture terrestre de l’Initiative sur les changements climatiques de l’ESA (CCI) <https://www.esa-landcover-cci.org/>. Les produits ESRI/IO et ESA sont dérivés de l’imagerie Sentinel de l’ESA et sont disponibles à une résolution de 10 m chaque année à partir de 2017, 2020 et 2021 respectivement sur l’ensemble du continent africain. Le produit CGLS est disponible à une résolution de 100 m, est mis à jour chaque année et est actuellement disponible de 2015 à 2019. Le produit ESA CCI landcover est disponible à une résolution de 300 m, est mis à jour chaque année et est actuellement disponible de 1992 à 2019.

La précision des cartes d’occupation du sol varie en fonction de l’emplacement et de la classe, il est donc important de comprendre la qualité des cartes. ESRI publie des informations sur la précision du produit LULC 2020 (version 10 classes), qui sont soigneusement résumées dans la matrice de confusion située ici <https://www.arcgis.com/home/item.html?id=d6642f8a4f6d4685a24ae2dc0c73d4ac>`__. La précision globale pour toutes les classes est de 85 %. Gardez à l’esprit que les statistiques de précision dans le lien concernent le globe et non l’Afrique.

Le produit WorldCover de l’ESA est accompagné d’un rapport détaillé sur la qualité du produit, que nous ne reproduirons pas ici. Cependant, le rapport complet de validation du produit est disponible en utilisant le lien suivant : https://esa-worldcover.org/en/data-access. La précision globale du produit 2020 pour l’Afrique est de 73,6 %, et elle s’est améliorée à 76,5 % en 2021.

Le produit Copernicus Global Land Cover 100m a fait l’objet d’une « publication scientifique <https://www.sciencedirect.com/science/article/pii/S0034425721004065?via%3Dihub> » explorant la précision des cartes annuelles de couverture terrestre. La précision globale pour l’Afrique est d’environ 80 %.

Détails importants :

  • Classes et valeurs

valeur io_lulc

classe io_lulc

valeur esa

classe esa

valeur cgls

classe cgls

valeur cci

classe cci

0

aucune donnée

0

aucune donnée

0

aucune donnée

0

aucune donnée

1

eau

10

couverture d’arbre

20

arbustes

10

terres cultivées, pluviales

2

arbres

20

broussailles

30

végétation herbacée

11

terres cultivées, pluviales, couverture herbacée

3

non utilisé

30

prairie

40

végétation ou agriculture cultivée et gérée

12

terres cultivées, pluviales, couvertes d’arbres ou d’arbustes

4

végétation inondée

40

terres cultivées

50

urbain ou bâti

20

terres cultivées, irriguées ou après inondation

5

cultures

50

construit

60

végétation nue ou clairsemée

30

mosaïque de terres cultivées et de végétation naturelle

6

non utilisé

60

végétation nue/éparsemée

70

neige et glace

40

mosaïque de végétation naturelle/terres cultivées

7

superficie construite

70

neige et glace

80

plans d’eau permanents

50

couvert arboré, feuillu, persistant, fermé à ouvert

8

sol nu

80

plans d’eau permanents

90

zone humide herbacée

60

couvert arboré, feuillu, caduc, fermé à ouvert

9

neige/glace

90

zone humide herbacée

100

mousse et lichen

61

couvert arboré, feuillu, caduc, fermé

10

nuages

95

mangroves

111

forêt fermée, feuilles persistantes en forme d’aiguilles

62

couvert arboré, feuillu, caduc, ouvert

11

pâturage

100

mousse et lichen

112

forêt fermée, persistante, à feuilles larges

70

couvert arboré, à feuilles caduques, à feuilles persistantes, fermé à ouvert

113

forêt fermée, feuillue caduque à feuilles caduques

71

couvert arboré, à feuilles caduques, à feuilles persistantes, fermé

114

forêt dense, feuillue caduque

72

couvert arboré, à feuilles caduques, à feuilles persistantes, ouvert

115

forêt fermée, mixte

80

couvert arboré, à feuilles caduques, fermé à ouvert

116

forêt fermée, inconnue

81

couvert arboré, à feuilles caduques, fermé

121

forêt ouverte, feuilles persistantes en forme d’aiguilles

82

couvert arboré, à feuilles caduques, ouvert

122

forêt ouverte, feuillage persistant à larges feuilles

90

couverture arborée, type de feuilles mixtes

123

forêt ouverte, feuillue caduque à feuilles caduques

100

couverture mosaïque d’arbres et d’arbustes/herbacées

124

forêt ouverte, feuillue caduque

110

couverture herbacée mosaïque/arbre et arbuste

125

forêt ouverte, mixte

120

broussailles

126

forêt ouverte, inconnue

121

broussailles, à feuilles persistantes

200

mer ouverte

122

broussailles, feuillus

130

prairie

140

lichens et mousses

150

végétation clairsemée

151

arbre clairsemé

152

arbuste clairsemé

153

couverture herbacée clairsemée

160

couvert arboré, inondé, eau douce ou saumâtre

170

couvert forestier, inondé, eau salée

180

couverture arbustive ou herbacée, inondée, eau douce/salée/saumâtre

190

zones urbaines

200

zones nues

201

zones nues consolidées

202

zones nues non consolidées

210

plans d’eau

220

neige et glace permanentes

  • Plage de temps et résolution spatiale

io_lulc

esa_worldcover

cgls_landcover

cci_landcover

Plage de temps

2017-2023

2020-2021

2015-2019

1992-2019

Résolution spatiale

10 m

10 m

100 m

300 m

Description

Dans ce bloc-notes, nous allons charger les données LULC à l’aide de dc.load() pour renvoyer une carte des classes d’utilisation et de couverture terrestre pour une zone spécifiée.

Les sujets abordés comprennent :

  1. Inspection du produit LULC disponible dans le datacube

  2. Utilisation de la fonction « dc.load() » pour charger les données LULC

  3. Tracé de LULC à l’aide de la fonction plot_lulc()

  4. Un exemple d’analyse de la zone des classes LULC dans une zone donnée

  5. Chargement et traçage des « fractions de couverture » dans CGLS


Commencer

Pour exécuter cette analyse, exécutez toutes les cellules du bloc-notes, en commençant par la cellule « Charger les packages ».

Charger des paquets

[1]:
%matplotlib inline

import datacube
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
from deafrica_tools.plotting import display_map, plot_lulc

Se connecter au datacube

[2]:
dc = datacube.Datacube(app="Landcover_Classification")

Liste des mesures

Nous pouvons inspecter les données disponibles pour LULC en utilisant la fonctionnalité « list_measurements » de datacube. Le tableau ci-dessous répertorie les produits et les mesures disponibles pour les deux ensembles de données LULC indexés dans le datacube de DE Africa. Nous pouvons voir que le produit contient une couche nommée « classification ». Le type de données est un entier, ce qui correspond à une classe LULC.

[3]:
product_name = ['io_lulc_v2', 'esa_worldcover_2020', 'esa_worldcover_2021', 'cgls_landcover', 'cci_landcover']

dc_measurements = dc.list_measurements()
dc_measurements.loc[product_name].drop('flags_definition', axis=1)
[3]:
name dtype units nodata aliases
product measurement
io_lulc_v2 supercell supercell uint8 1 0.0 [classification]
esa_worldcover_2020 classification classification uint8 1 0.0 NaN
esa_worldcover_2021 classification classification uint8 1 0.0 NaN
cgls_landcover classification classification uint8 1 255.0 [class]
forest_type forest_type uint8 percent 255.0 []
classification_probability classification_probability uint8 percent 255.0 [prob]
bare_cover_fraction bare_cover_fraction uint8 percent 255.0 [bare]
builtup_cover_fraction builtup_cover_fraction uint8 percent 255.0 [builtup]
crops_cover_fraction crops_cover_fraction uint8 percent 255.0 [crops]
grass_cover_fraction grass_cover_fraction uint8 percent 255.0 [grass]
mosslichen_cover_fraction mosslichen_cover_fraction uint8 percent 255.0 [mosslichen]
permanentwater_cover_fraction permanentwater_cover_fraction uint8 percent 255.0 [permanentwater]
seasonalwater_cover_fraction seasonalwater_cover_fraction uint8 percent 255.0 [seasonalwater]
shrub_cover_fraction shrub_cover_fraction uint8 percent 255.0 [shrub]
snow_cover_fraction snow_cover_fraction uint8 percent 255.0 [snow]
tree_cover_fraction tree_cover_fraction uint8 percent 255.0 [tree]
cci_landcover classification classification uint8 1 0.0 [class]

Paramètres d’analyse

Cette section définit les paramètres d’analyse, notamment :

  • « lat, lon, buffer » : latitude/longitude centrales et taille de la fenêtre d’analyse pour la zone d’intérêt

  • « résolution » : la résolution en pixels à utiliser pour charger l’ensemble de données LULC. La résolution native du produit est de 10 mètres, soit « (-10,10) »

  • « mesures » : la « bande » ou la mesure à charger à partir du produit, nous pouvons utiliser les noms de mesure natifs de l’un des alias

L’emplacement par défaut est Madagascar

[4]:
lat, lon = -19.4557, 46.4644

buffer = 5.0

resolution=(-500, 500) #resample so we can view a large area

measurements='classification'

#convert the lat,lon,buffer into a range
lons = (lon - buffer, lon + buffer)
lats = (lat - buffer, lat + buffer)

Charger les ensembles de données LULC

Tout d’abord, nous allons charger la couverture terrestre ESRI. Pour ce produit annuel, la fenêtre temporelle répertoriée dans les métadonnées pour une année s’étend du 1er janvier au 1er janvier de l’année suivante, par exemple, les données de 2020 ont une date de début du 1er janvier 2020 et une date de fin du 1er janvier 2021. Nous définissons donc la requête avec l’année et le mois pour éviter de charger des données d’une année voisine.

[5]:
#create reusable datacube query object
query = {
    'time': ('2020-07'),
    'x': lons,
    'y': lats,
    'resolution':resolution,
    'output_crs': 'epsg:6933',
    'measurements':measurements
}

#load the data
ds_io = dc.load(product='io_lulc_v2', **query).squeeze()

print(ds_io)
<xarray.Dataset> Size: 5MB
Dimensions:         (y: 2407, x: 1931)
Coordinates:
    time            datetime64[ns] 8B 2020-07-01T23:59:59.997500
  * y               (y) float64 19kB -1.825e+06 -1.826e+06 ... -3.028e+06
  * x               (x) float64 15kB 4.001e+06 4.001e+06 ... 4.965e+06 4.966e+06
    spatial_ref     int32 4B 6933
Data variables:
    classification  (y, x) uint8 5MB 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
Attributes:
    crs:           epsg:6933
    grid_mapping:  spatial_ref

Nous pouvons maintenant charger les produits « esa_worldcover_2020 », « esa_worldcover_2021 », « cgls_landcover » et « cci_landcover » sur la même région.

[6]:
ds_esa_2020 = dc.load(product='esa_worldcover_2020', time='2020', measurements=measurements, like=ds_io.geobox).squeeze()

print(ds_esa_2020)
<xarray.Dataset> Size: 5MB
Dimensions:         (y: 2407, x: 1931)
Coordinates:
    time            datetime64[ns] 8B 2020-07-01T12:00:00
  * y               (y) float64 19kB -1.825e+06 -1.826e+06 ... -3.028e+06
  * x               (x) float64 15kB 4.001e+06 4.001e+06 ... 4.965e+06 4.966e+06
    spatial_ref     int32 4B 6933
Data variables:
    classification  (y, x) uint8 5MB 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
Attributes:
    crs:           PROJCS["WGS 84 / NSIDC EASE-Grid 2.0 Global",GEOGCS["WGS 8...
    grid_mapping:  spatial_ref
[7]:
ds_esa_2021 = dc.load(product='esa_worldcover_2021', time='2021', measurements=measurements, like=ds_io.geobox).squeeze()

print(ds_esa_2021)
<xarray.Dataset> Size: 5MB
Dimensions:         (y: 2407, x: 1931)
Coordinates:
    time            datetime64[ns] 8B 2021-07-02
  * y               (y) float64 19kB -1.825e+06 -1.826e+06 ... -3.028e+06
  * x               (x) float64 15kB 4.001e+06 4.001e+06 ... 4.965e+06 4.966e+06
    spatial_ref     int32 4B 6933
Data variables:
    classification  (y, x) uint8 5MB 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
Attributes:
    crs:           PROJCS["WGS 84 / NSIDC EASE-Grid 2.0 Global",GEOGCS["WGS 8...
    grid_mapping:  spatial_ref
[8]:
ds_cgls = dc.load(product='cgls_landcover', time='2019', measurements=measurements, like=ds_io.geobox).squeeze()

print(ds_cgls)
<xarray.Dataset> Size: 5MB
Dimensions:         (y: 2407, x: 1931)
Coordinates:
    time            datetime64[ns] 8B 2019-07-02T11:59:59.500000
  * y               (y) float64 19kB -1.825e+06 -1.826e+06 ... -3.028e+06
  * x               (x) float64 15kB 4.001e+06 4.001e+06 ... 4.965e+06 4.966e+06
    spatial_ref     int32 4B 6933
Data variables:
    classification  (y, x) uint8 5MB 200 200 200 200 200 ... 200 200 200 200 200
Attributes:
    crs:           PROJCS["WGS 84 / NSIDC EASE-Grid 2.0 Global",GEOGCS["WGS 8...
    grid_mapping:  spatial_ref
[9]:
ds_cci = dc.load(product='cci_landcover', time='2019', measurements=measurements, like=ds_io.geobox).squeeze()

print(ds_cci)
<xarray.Dataset> Size: 5MB
Dimensions:         (y: 2407, x: 1931)
Coordinates:
    time            datetime64[ns] 8B 2019-07-02T11:59:59.500000
  * y               (y) float64 19kB -1.825e+06 -1.826e+06 ... -3.028e+06
  * x               (x) float64 15kB 4.001e+06 4.001e+06 ... 4.965e+06 4.966e+06
    spatial_ref     int32 4B 6933
Data variables:
    classification  (y, x) uint8 5MB 210 210 210 210 210 ... 210 210 210 210 210
Attributes:
    crs:           PROJCS["WGS 84 / NSIDC EASE-Grid 2.0 Global",GEOGCS["WGS 8...
    grid_mapping:  spatial_ref

Tracé des données

Nous pouvons tracer le LULC pour Madagascar et ajouter une légende qui correspond aux classes en utilisant la fonction wrapper DE Africa plot_lulc. Nous pouvons voir que les arbres dominent les zones orientales de l’île, tandis que les broussailles/arbustes sont plus répandus du côté ouest. Nous pouvons également identifier quelques villes/villages avec la classe rouge « zone construite ». Vous remarquerez peut-être également que les différents ensembles de données ne concordent pas toujours.

[10]:
fig, ax = plt.subplots(3, 2, figsize=(22, 20), sharey=True)
plot_lulc(ds_io[measurements], product="IO", legend=True, ax=ax[0, 0])
plot_lulc(ds_esa_2020[measurements], product="ESA", legend=True, ax=ax[0, 1])
plot_lulc(ds_esa_2021[measurements], product="ESA", legend=True, ax=ax[1, 1])
plot_lulc(ds_cgls[measurements], product="CGLS", legend=True, ax=ax[1, 0])
plot_lulc(ds_cci[measurements], product="CCI", legend=True, ax=ax[2, 0])
ax[0, 0].set_title("ESRI/IO Land Cover 2020")
ax[0, 1].set_title("ESA WorldCover 2020")
ax[1, 1].set_title("ESA WorldCover 2021")
ax[1, 0].set_title("CGLS landcover 2019")
ax[2, 0].set_title("CCI landcover 2019")
fig.delaxes(ax[2, 1])
plt.tight_layout();
../../../_images/sandbox_notebooks_Datasets_Land_Use_Land_Cover_Maps_24_0.png

Exemple d’analyse : Enquête sur la zone des classes

Dans cet exemple, nous allons examiner de plus près la ville d’Antananarivo, la capitale de Madagascar, qui est visible en rouge sur la carte ci-dessus. Nous allons charger tous les ensembles de données LULC, calculer la surface de chaque classe dans chaque produit et comparer la surface des classes entre les produits. Comme nous examinons une zone plus petite, nous pouvons charger les ensembles de données à une résolution de 100 m (il est recommandé de sous-échantillonner les ensembles de données à haute résolution à une résolution plus grossière que l’inverse). Nous utilisons la statistique « mode » pour sous-échantillonner les ensembles de données de 10 m à une résolution de 100 m, ce qui signifie que chaque pixel se verra attribuer la classe la plus courante dans le pixel de 100 m.

Commençons d’abord par définir quelques nouveaux paramètres

[11]:
lat, lon =  -18.9028, 47.5203
buffer = 0.1
resolution=(-100,100)
measuremnents='classification'

#add lat,lon,buffer to get bounding box
lon_range = (lon-buffer, lon+buffer)
lat_range =  (lat+buffer, lat-buffer)

Afficher l’emplacement sélectionné

[12]:
display_map(x=lon_range, y=lat_range)
[12]:
Make this Notebook Trusted to load map: File -> Trust Notebook

Charger les données LULC pour Antananarivo

[13]:
query = {
    "x": lon_range,
    "y": lat_range,
    "resolution": resolution,
    "output_crs": "epsg:6933",
    "measurements": measurements,
}

# load the esri product
ds_io = dc.load(product="io_lulc_v2", resampling='mode',
                time='2020-07', **query).squeeze()

# load the esa 2020 product
ds_esa_2020 = dc.load(product="esa_worldcover_2021", resampling='mode',
                 time='2021', measurements=measurements, like=ds_io.geobox).squeeze()

# load the esa 2021 product
ds_esa_2021 = dc.load(product="esa_worldcover_2020", resampling='mode',
                 time='2020', measurements=measurements, like=ds_io.geobox).squeeze()

# load the cgls product
ds_cgls = dc.load(
    product="cgls_landcover",
    time="2019",
    measurements=measurements,
    like=ds_io.geobox
).squeeze()

# load the cci product
ds_cci = dc.load(
    product="cci_landcover",
    time="2019",
    measurements=measurements,
    resampling='nearest',
    like=ds_io.geobox
).squeeze()

Tracer les ensembles de données

[14]:
fig,ax = plt.subplots(3,2, figsize=(22,20), sharey=True)
plot_lulc(ds_io[measurements], product='IO', legend=True, ax=ax[0,0])
plot_lulc(ds_esa_2020[measurements], product='ESA', legend=True, ax=ax[0,1])
plot_lulc(ds_esa_2021[measurements], product='ESA', legend=True, ax=ax[1,1])
plot_lulc(ds_cgls[measurements], product='CGLS', legend=True, ax=ax[1,0])
plot_lulc(ds_cci[measurements], product='CCI', legend=True, ax=ax[2,0])
ax[0,0].set_title('ESRI/IO Land Cover')
ax[0,1].set_title('ESA WorldCover 2020')
ax[1,1].set_title('ESA WorldCover 2021')
ax[1,0].set_title('CGLS Classification 2019')
ax[2,0].set_title('CCI Classification 2019')
fig.delaxes(ax[2, 1])
plt.tight_layout();
../../../_images/sandbox_notebooks_Datasets_Land_Use_Land_Cover_Maps_33_0.png

Calculer l’aire de chaque classe

Nous pouvons utiliser la fonction numpy « np.unique » pour renvoyer le nombre de pixels pour chaque classe.

[15]:
ds_io_counts = np.unique(ds_io[measurements].data, return_counts=True)
ds_esa_2020_counts = np.unique(ds_esa_2020[measurements].data, return_counts=True)
ds_esa_2021_counts = np.unique(ds_esa_2021[measurements].data, return_counts=True)
ds_cgls_counts = np.unique(ds_cgls[measurements].data, return_counts=True)
ds_cci_counts = np.unique(ds_cci[measurements].data, return_counts=True)


print(ds_io_counts)
(array([ 1,  2,  4,  5,  7,  8, 11], dtype=uint8), array([ 1360,   306,  2312,  8052, 23874,   130, 10672]))

Nous pouvons voir ci-dessus que le résultat est un tableau avec les classes 1:11 qui correspondent à « eau » jusqu’à « pâturages », et le nombre de pixels dans ces classes. En utilisant la résolution que nous avons définie dans notre requête de chargement de données, nous pouvons calculer la superficie totale de chaque classe en kilomètres carrés et tracer les résultats. Le tracé correspond-il aux proportions des classes que nous pouvons visualiser sur la carte d’Antananarivo ?

Pour plus d’informations sur les calculs de superficie, consultez la section sur le calcul de l’étendue d’eau du cours de formation Digital Earth Africa Sandbox <https://learn.digitalearthafrica.org/courses/course-v1:digitalearthafrica+DEA101+2021/course/>`__.

[16]:
pixel_length = query["resolution"][1]  # in metres, refers to resolution we defined above (-10,10) for Antananarivo
m_per_km = 1000  # conversion from metres to kilometres
area_per_pixel = pixel_length**2 / m_per_km**2

#calculate the area of each class
ds_io_area = np.array(ds_io_counts[1] * area_per_pixel)
ds_esa_2020_area = np.array(ds_esa_2020_counts[1] * area_per_pixel)
ds_esa_2021_area = np.array(ds_esa_2021_counts[1] * area_per_pixel)
ds_cgls_area = np.array(ds_cgls_counts[1] * area_per_pixel)
ds_cci_area = np.array(ds_cci_counts[1] * area_per_pixel)

Tracer l’aire de chaque classe

Dans le graphique ci-dessous, les proportions de classes sont-elles similaires entre les produits ? Quelles sont les classes qui présentent généralement une confusion ?

[17]:
# list of classes actually in the map by extracting from the `flags_definition`
io_classes = [ds_io.classification.flags_definition['data']['values'][str(x)] for x in ds_io_counts[0]]
esa_classes_2020 = [ds_esa_2020.classification.flags_definition['data']['values'][str(x)] for x in ds_esa_2020_counts[0]]
esa_classes_2021 = [ds_esa_2021.classification.flags_definition['data']['values'][str(x)] for x in ds_esa_2021_counts[0]]
cgls_classes = [ds_cgls.classification.flags_definition['data']['values'][str(x)] for x in ds_cgls_counts[0]]
cci_classes = [ds_cci.classification.flags_definition['data']['values'][str(x)] for x in ds_cci_counts[0]]
[18]:
fig,ax=plt.subplots(1,5, figsize=(20,5))

#plot esri
ax[0].bar(io_classes, ds_io_area)
ticks_loc = ax[0].get_xticks()
ax[0].xaxis.set_major_locator(mticker.FixedLocator(ticks_loc))
ax[0].set_xticklabels(io_classes, rotation=90)
ax[0].set_xlabel("LULC class")
ax[0].set_ylabel("Area (Sq. km)")

#plot esa worldcover 2020
ax[1].bar(esa_classes_2020, ds_esa_2020_area)
ticks_1 = ax[1].get_xticks()
ax[1].xaxis.set_major_locator(mticker.FixedLocator(ticks_1))
ax[1].set_xticklabels(esa_classes_2020, rotation=90)
ax[1].set_xlabel("LULC class")
ax[1].set_ylabel("Area (Sq. km)")

#plot esa worldcover 2021
ax[2].bar(esa_classes_2021, ds_esa_2021_area)
ticks_1 = ax[2].get_xticks()
ax[2].xaxis.set_major_locator(mticker.FixedLocator(ticks_1))
ax[2].set_xticklabels(esa_classes_2021, rotation=90)
ax[2].set_xlabel("LULC class")
ax[2].set_ylabel("Area (Sq. km)")

#plot cgls
ax[3].bar(cgls_classes, ds_cgls_area)
ticks_2 = ax[3].get_xticks()
ax[3].xaxis.set_major_locator(mticker.FixedLocator(ticks_2))
ax[3].set_xticklabels(cgls_classes, rotation=90)
ax[3].set_xlabel("LULC class")
ax[3].set_ylabel("Area (Sq. km)")

#plot cci
ax[4].bar(cci_classes, ds_cci_area)
ticks_2 = ax[4].get_xticks()
ax[4].xaxis.set_major_locator(mticker.FixedLocator(ticks_2))
ax[4].set_xticklabels(cci_classes, rotation=90)
ax[4].set_xlabel("LULC class")
ax[4].set_ylabel("Area (Sq. km)")

# Adjust spacing between subplots
plt.subplots_adjust(wspace=0.3)

ax[0].set_title('ESRI/IO Land Cover')
ax[1].set_title('ESA WorldCover 2020')
ax[2].set_title('ESA WorldCover 2021')
ax[3].set_title('CGLS Landcover')
ax[4].set_title('CCI Landcover');
../../../_images/sandbox_notebooks_Datasets_Land_Use_Land_Cover_Maps_41_0.png

Découvrir la fraction de couverture CGLS

Dans l’analyse ci-dessus, nous pouvons voir que le produit CGLS classe une grande partie de la zone dans nos limites d’Antananarivo comme « urbaine ou construite ». Voyons comment cela se rapporte à la mesure de la fraction de couverture construite dans le produit CGLS.

Les mesures de fraction de couverture dans CGLS expriment le pourcentage du pixel qui est couvert par une classe spécifique de couverture du sol, dans ce cas urbain ou bâti. Nous pouvons voir ci-dessous que le pourcentage de couverture de la zone urbaine ou bâtie correspond spatialement à la classification de la couverture du sol.

[19]:
#load the cgls product
ds_cgls_urbancover = dc.load(product='cgls_landcover', time='2019', measurements='builtup_cover_fraction', like=ds_cgls.geobox).squeeze()

#plot the dataset
fig,ax = plt.subplots(1,2, figsize=(24,9), sharey=True)
ds_cgls_urbancover.builtup_cover_fraction.plot(ax=ax[0])
plot_lulc(ds_cgls[measurements], product='CGLS', legend=True, ax=ax[1])

ax[0].set_title('Built-up cover %')
ax[1].set_title('CGLS Landcover')
plt.tight_layout();
../../../_images/sandbox_notebooks_Datasets_Land_Use_Land_Cover_Maps_43_0.png

Informations Complémentaires

Licence : Le code de ce carnet est sous licence Apache, version 2.0 <https://www.apache.org/licenses/LICENSE-2.0>. Les données de Digital Earth Africa sont sous licence Creative Commons par attribution 4.0 <https://creativecommons.org/licenses/by/4.0/>.

Contact : Si vous avez besoin d’aide, veuillez poster une question sur le canal Slack Open Data Cube <http://slack.opendatacube.org/>`__ ou sur le GIS Stack Exchange en utilisant la balise open-data-cube (vous pouvez consulter les questions posées précédemment ici). Si vous souhaitez signaler un problème avec ce bloc-notes, vous pouvez en déposer un sur Github.

Version de Datacube compatible :

[20]:
print(datacube.__version__)
1.8.19

Dernier test :

[21]:
from datetime import datetime
datetime.today().strftime('%Y-%m-%d')
[21]:
'2024-11-22'