Couverture fractionnée

Mots-clés : datasets; fractional_cover, data used; fc_ls, data used; fc_ls_summary_annual, data used; wofs_ls

Aperçu

Le produit Couverture fractionnaire (FC) fournit des estimations des proportions de végétation verte, de végétation non verte (y compris les arbres à feuilles caduques en automne, l’herbe sèche, etc.) et de sols nus pour chaque pixel Landsat. La couverture fractionnaire fournit des informations précieuses pour toute une gamme d’applications environnementales et agricoles, notamment :

  • surveillance de l’érosion des sols

  • modélisation des processus de surface terrestre

  • pratiques de gestion des terres (par exemple, rotation des cultures, gestion des chaumes, gestion des pâturages)

  • études de végétation

  • estimation de la charge de carburant

  • modélisation des écosystèmes

  • cartographie de la couverture terrestre

L’algorithme est développé par le « Joint Remote Sensing Research Program <https://www.jrsrp.org.au/> » (JRSRP) et est décrit dans Scarth et al. (2010). Les données de terrain collectées dans toute l’Australie ont été utilisées pour calibrer et valider le modèle de démixage. Vous trouverez plus d’informations sur le produit « ici <http://data.auscover.org.au/xwiki/bin/view/Product+pages/Landsat+Seasonal+Fractional+Cover> ».

Le service DE Africa FC comporte deux volets :

  • Couverture fractionnaire, estimée à partir de chaque scène Landsat, fournissant des mesures de jours individuels.

  • Résumé annuel de la couverture fractionnaire (centiles), qui fournit les 10e, 50e et 90e centiles estimés indépendamment pour les fractions de végétation verte, de végétation non verte et de sol nu observées au cours de chaque année civile (du 1er janvier au 31 décembre).

Si la couverture fractionnaire basée sur des scènes peut être utilisée pour étudier les processus dynamiques, les résumés annuels facilitent l’analyse des changements d’une année à l’autre. Les percentiles fournissent des estimations fiables des valeurs de proportion basse, médiane et haute observées pour chaque type de couverture au cours d’une année, qui peuvent être utilisées pour caractériser la couverture terrestre. Avant le calcul des percentiles, les zones de couverture d’eau et de nuages, telles que cartographiées dans la couche d’entités Observations de l’eau depuis l’espace (WOfS), sont exclues.

Référence

Scarth, P, Roder, A et Schmidt, M 2010, « Suivi de la pression de pâturage et interaction climatique - le rôle de la couverture fractionnelle Landsat dans l’analyse des séries chronologiques », Actes de la 15e Conférence australasienne sur la télédétection et la photogrammétrie (ARSPC), du 13 au 17 septembre, Alice Springs, Australie. Alice Springs, NT.

Description

Ce cahier couvrira les sujets suivants :

  1. Inspection des produits et des mesures disponibles dans le datacube

  2. Chargement des données FC pré-générées.

  3. Masque de nuages et d’eau FC avec couches d’entités d’observations de l’eau depuis l’espace (WOfS)

  4. Tracé du FC et du résumé annuel du FC

  5. Inspection des sorties d’erreur de démixage

  6. Réalisation d’un workflow d’analyse simple avec FC

  7. Comprendre et charger les données récapitulatives annuelles du FC.

  8. Interprétation des percentiles récapitulatifs annuels


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

Importez les packages Python utilisés pour l’analyse.

[1]:
%matplotlib inline

import datacube
import xarray as xr
import matplotlib.pyplot as plt
from odc.algo import xr_geomedian
from datacube.utils import masking

from deafrica_tools.plotting import rgb, display_map
from deafrica_tools.datahandling import load_ard

Se connecter au datacube

Connectez-vous au datacube pour que nous puissions accéder aux données de DE Africa.

[2]:
dc = datacube.Datacube(app='fractional_cover')

Paramètres d’analyse

Cette section définit les paramètres d’analyse, y compris

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

  • time_period: période de temps à étudier

  • output_crs : projection pour le chargement des données ; la résolution de sortie n’est pas définie, donc des résolutions différentes peuvent être utilisées pour Landsat et Sentinel-2

L’emplacement par défaut est une zone le long de la rivière Olifants, en Afrique du Sud.

La résolution par défaut, les étendues spatiales et temporelles sont choisies pour limiter le temps requis pour calculer le FC à partir de la réflectance de surface Sentinel-2.

[3]:
lat, lon = -31.5374, 18.2722 #3.9779, 41.6454

buffer_lat, buffer_lon = 0.03, 0.03

time_period = ('2017-01', '2017-10')

output_crs = 'epsg:6933'

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

Afficher l’emplacement sélectionné

La cellule suivante affichera la zone sélectionnée sur une carte interactive. N’hésitez pas à zoomer et dézoomer pour mieux comprendre la zone que vous allez analyser. En cliquant sur n’importe quel point de la carte, vous découvrirez les coordonnées de latitude et de longitude de ce point.

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

Liste des produits disponibles dans Digital Earth Africa

Nous pouvons utiliser la fonctionnalité « list_products » de Datacube pour inspecter les produits de couverture fractionnée disponibles. Le tableau ci-dessous indique les noms de produits que nous utiliserons pour charger les données.

Notez qu’il existe deux produits distincts. Le produit « fc_ls » donne des pourcentages de couverture fractionnaires à des intervalles de temps quotidiens correspondant aux dates de survol Landsat, tandis que le produit « fc_ls_summary_annual » donne les valeurs des 10e, 50e et 90e percentiles, exprimées en pourcentage, pour chacune des fractions de sol nu, de végétation photosynthétique et de végétation non photosynthétique. Nous explorerons cette idée plus en détail dans les cellules ci-dessous.

[5]:
dc_measurements = dc.list_measurements()
dc_measurements.loc[['fc_ls', 'fc_ls_summary_annual']]
[5]:
name dtype units nodata aliases flags_definition
product measurement
fc_ls bs bs uint8 percent 255.0 [bare] NaN
pv pv uint8 percent 255.0 [green_veg] NaN
npv npv uint8 percent 255.0 [dead_veg] NaN
ue ue uint8 1 255.0 [err] NaN
fc_ls_summary_annual pv_pc_10 pv_pc_10 uint8 percent 255.0 NaN NaN
pv_pc_50 pv_pc_50 uint8 percent 255.0 NaN NaN
pv_pc_90 pv_pc_90 uint8 percent 255.0 NaN NaN
bs_pc_10 bs_pc_10 uint8 percent 255.0 NaN NaN
bs_pc_50 bs_pc_50 uint8 percent 255.0 NaN NaN
bs_pc_90 bs_pc_90 uint8 percent 255.0 NaN NaN
npv_pc_10 npv_pc_10 uint8 percent 255.0 NaN NaN
npv_pc_50 npv_pc_50 uint8 percent 255.0 NaN NaN
npv_pc_90 npv_pc_90 uint8 percent 255.0 NaN NaN
count_valid count_valid int16 1 255.0 NaN NaN
qa qa uint8 1 255.0 NaN {'qa': {'bits': [0, 1, 2, 3, 4, 5, 6, 7], 'val...

Chargement des données de couverture fractionnelle pré-générées

Le FC a été calculé à partir de la réflectance de surface de la collection Landsat 2, à une résolution spatiale de 30 m. Le FC est généré à partir des satellites Landsat 5, 7 et 8. Leurs données sont combinées en un seul produit appelé « fc_ls ».

[6]:
#generate a query object from the analysis parameters
query = {
    'time': time_period,
    'x': lon_range,
    'y': lat_range,
    'output_crs': output_crs
}
[7]:
# load all available fc data
fc = dc.load(product='fc_ls',
             resolution=(-30, 30),
             collection_category='T1',
             **query)
print(fc)
<xarray.Dataset>
Dimensions:      (time: 46, y: 219, x: 194)
Coordinates:
  * time         (time) datetime64[ns] 2017-01-02T08:41:12.785718 ... 2017-10...
  * y            (y) float64 -3.825e+06 -3.825e+06 ... -3.831e+06 -3.831e+06
  * x            (x) float64 1.76e+06 1.76e+06 1.76e+06 ... 1.766e+06 1.766e+06
    spatial_ref  int32 6933
Data variables:
    bs           (time, y, x) uint8 0 0 0 0 0 0 0 ... 255 255 255 255 255 255
    pv           (time, y, x) uint8 82 82 82 82 82 82 ... 255 255 255 255 255
    npv          (time, y, x) uint8 22 22 22 22 22 22 ... 255 255 255 255 255
    ue           (time, y, x) uint8 6 6 6 6 6 6 6 ... 255 255 255 255 255 255
Attributes:
    crs:           epsg:6933
    grid_mapping:  spatial_ref

Masque de nuages et d’eau FC avec couches d’entités d’observations de l’eau depuis l’espace (WOfS)

L’algorithme de démixage s’effondre en présence d’eau ou de nuages. La « couche d’entités d’observations de l’eau » peut être utilisée pour exclure ces pixels problématiques. Pour plus d’informations sur le masquage de bits, consultez le bloc-notes « Applying WOfS bitmasking <../Frequently_used_code/Applying_WOfS_bitmasking.ipynb> ».

[8]:
# load WOFLs from the same spatio-temporal extent
wofls = dc.load(product='wofs_ls',
                like=fc.geobox, #match extent of fc
                time=query['time'],
                collection_category='T1')

print(wofls)
<xarray.Dataset>
Dimensions:      (time: 46, y: 219, x: 194)
Coordinates:
  * time         (time) datetime64[ns] 2017-01-02T08:41:12.785718 ... 2017-10...
  * y            (y) float64 -3.825e+06 -3.825e+06 ... -3.831e+06 -3.831e+06
  * x            (x) float64 1.76e+06 1.76e+06 1.76e+06 ... 1.766e+06 1.766e+06
    spatial_ref  int32 6933
Data variables:
    water        (time, y, x) uint8 64 64 64 64 64 64 64 64 ... 1 1 1 1 1 1 1 1
Attributes:
    crs:           PROJCS["WGS 84 / NSIDC EASE-Grid 2.0 Global",GEOGCS["WGS 8...
    grid_mapping:  spatial_ref

Créez un masque de pixels clair (sans nuage) et sec (sans eau)

[9]:
clear_and_dry = masking.make_mask(wofls, dry=True).water

#plot a subset of masks
clear_and_dry.isel(time=[0,1,2,3,4,5]).plot.imshow(col='time',col_wrap=6);
../../../_images/sandbox_notebooks_Datasets_Fractional_Cover_21_0.png

Si nous le souhaitons, nous pouvons conserver la plupart des scènes claires en calculant le nombre de bons pixels par scène et en appliquant un seuil

  • « min_gooddata » : fraction minimale de bonnes données requises pour qu’une scène (FC ou réflectance de surface) soit conservée

[10]:
#set a good data fraction
min_gooddata = 0.95

#keep only the images that are at least as clear as min_gooddata
good_slice = clear_and_dry.mean(['x','y']) >= min_gooddata

Nous pouvons maintenant appliquer le « masque transparent » et le filtre uniquement aux scènes qui sont pour la plupart exemptes de nuages et d’eau.

[11]:
fc_clear = fc.where(clear_and_dry).isel(time=good_slice)
print(fc_clear)
<xarray.Dataset>
Dimensions:      (time: 10, y: 219, x: 194)
Coordinates:
  * time         (time) datetime64[ns] 2017-01-18T08:41:08.825013 ... 2017-10...
  * y            (y) float64 -3.825e+06 -3.825e+06 ... -3.831e+06 -3.831e+06
  * x            (x) float64 1.76e+06 1.76e+06 1.76e+06 ... 1.766e+06 1.766e+06
    spatial_ref  int32 6933
Data variables:
    bs           (time, y, x) float32 63.0 64.0 61.0 64.0 ... 64.0 68.0 68.0
    pv           (time, y, x) float32 2.0 0.0 0.0 2.0 0.0 ... 1.0 7.0 5.0 6.0
    npv          (time, y, x) float32 34.0 35.0 38.0 33.0 ... 27.0 25.0 25.0
    ue           (time, y, x) float32 6.0 6.0 6.0 6.0 6.0 ... 5.0 6.0 7.0 7.0
Attributes:
    crs:           epsg:6933
    grid_mapping:  spatial_ref

Tracé de la couverture fractionnaire

abc766f301e94ebebebbd802fddba08c

Nous pouvons représenter graphiquement chaque variable FC dans notre ensemble de données (c’est-à-dire « [“bs”, “pv”, “npv”] ») à l’aide de la fonction « rgb ». Cela créera une vue en fausses couleurs des données où les nuances de vert, de bleu et de rouge représentent des proportions variables de végétation et de couverture de sol nu :

  • Vert : végétation photosynthétique (verte) (« pv »)

  • Bleu : végétation non photosynthétique (c’est-à-dire « non verte ») (« npv »)

  • Rouge : sol nu ('bs')

Le graphique de droite indique comment la composition des couleurs RVB peut être interprétée.

Dans la zone d’intérêt utilisée ici, les images résultantes montrent des champs agricoles contenant de fortes proportions de couverture végétale verte, entourés de zones dominées par une végétation brune et un sol nu.

[12]:
rgb(fc_clear,
    col='time',
    bands=['bs','pv','npv'],
    col_wrap=5,
    size=4)
/usr/local/lib/python3.10/dist-packages/matplotlib/cm.py:478: RuntimeWarning: invalid value encountered in cast
  xx = (xx * 255).astype(np.uint8)
../../../_images/sandbox_notebooks_Datasets_Fractional_Cover_27_1.png

Inspection de l’erreur de démixage

Les valeurs de couverture fractionnelle varient entre 0 et 100 %, mais en raison des incertitudes du modèle et des limites des données d’apprentissage, certaines zones peuvent afficher des valeurs de couverture supérieures à 100 %. Ces zones peuvent être soit exclues, soit traitées comme équivalentes à 100 %.

Nous pouvons également visualiser l’erreur de démixage (ue) pour chacune de nos observations de couverture fractionnaire. Les valeurs d’erreur de démixage élevées (couleurs vives ci-dessous) représentent les zones d’incertitude plus élevée du modèle (par exemple, les zones d’eau, les nuages que nous n’avons pas masqués ou les types/couleurs de sol qui n’étaient pas inclus dans les données d’entraînement du modèle). Ces données peuvent être utiles pour supprimer les pixels incertains d’une analyse.

Dans cet exemple, les pixels humides associés à la rivière et aux pâturages irrigués présentent des erreurs de démixage relativement élevées. Un filtrage supplémentaire peut être effectué en exigeant que la somme des trois fractions soit proche de 100 % et/ou que l’erreur de démixage soit faible. Cependant, ces contraintes seules ne suffisent pas à exclure tous les résultats FC problématiques.

[13]:
# Plot unmixing error using `robust=True` to drop outliers and improve contrast
fc_clear.ue.plot(col='time', robust=True, col_wrap=5, size=4);
../../../_images/sandbox_notebooks_Datasets_Fractional_Cover_30_0.png

Exemple d’application : suivi des changements dans la couverture végétale et le sol nu au fil du temps

La section suivante illustre un flux de travail d’analyse simple basé sur la couverture fractionnaire. Dans cet exemple, nous traiterons nos données FC chargées afin de pouvoir suivre de manière cohérente l’évolution des proportions de végétation verte, de végétation brune et de sol nu au fil du temps.

La première étape consiste à charger FC, puis à masquer l’eau et les nuages, puis à filtrer les images pour qu’elles soient majoritairement claires. Heureusement, nous l’avons déjà fait ci-dessus. Nous imprimerons à nouveau nos données « fc_clear » pour nous rappeler le contenu des jeux de données

[14]:
print(fc_clear)
<xarray.Dataset>
Dimensions:      (time: 10, y: 219, x: 194)
Coordinates:
  * time         (time) datetime64[ns] 2017-01-18T08:41:08.825013 ... 2017-10...
  * y            (y) float64 -3.825e+06 -3.825e+06 ... -3.831e+06 -3.831e+06
  * x            (x) float64 1.76e+06 1.76e+06 1.76e+06 ... 1.766e+06 1.766e+06
    spatial_ref  int32 6933
Data variables:
    bs           (time, y, x) float32 63.0 64.0 61.0 64.0 ... 64.0 68.0 68.0
    pv           (time, y, x) float32 2.0 0.0 0.0 2.0 0.0 ... 1.0 7.0 5.0 6.0
    npv          (time, y, x) float32 34.0 35.0 38.0 33.0 ... 27.0 25.0 25.0
    ue           (time, y, x) float32 6.0 6.0 6.0 6.0 6.0 ... 5.0 6.0 7.0 7.0
Attributes:
    crs:           epsg:6933
    grid_mapping:  spatial_ref

Calcul de la couverture fractionnaire moyenne au fil du temps

Maintenant que nos données FC ont des valeurs nodata et que les pixels de nuages, d’ombre et d’eau sont définis sur NaN, nous pouvons suivre de manière fiable l’évolution des proportions moyennes de végétation verte et brune et de sol nu au fil du temps sur l’ensemble de notre zone d’étude. Nous pouvons ensuite représenter cela sous forme de graphique linéaire, montrant que la végétation verte (pv) a constamment diminué au fil du temps à cet endroit, tandis que le sol nu (bs) a augmenté et que la végétation non photosynthétique (npv) a été relativement stable.

[15]:
# Calculate average fractional cover for `bs`, `pv` and `npv` over time
fc_through_time = fc_clear[['pv', 'npv', 'bs']].mean(dim=['x', 'y'])

# Plot the changing proportions as a line graph
fc_through_time.to_array().plot.line(hue='variable', figsize=(10,5), marker='o')
plt.title('Fractional cover over time')
plt.ylabel('Percent cover (%)');
../../../_images/sandbox_notebooks_Datasets_Fractional_Cover_34_0.png

Comprendre le résumé annuel du FC

Le produit récapitulatif annuel de couverture fractionnaire donne les valeurs de percentiles annuels pour chacune des trois fractions (pv, bs, npv).

Cette idée est illustrée ci-dessous où nous traçons un histogramme des valeurs de pv pour la zone chargée ci-dessus, avec le % de pv sur l’axe des x et la densité sur l’axe des y. Nous pouvons voir que la distribution est positivement asymétrique car la plupart des valeurs sont comprises entre 0 % et 20 %. Les 10e, 50e et 90e percentiles sont représentés pour démontrer les informations disponibles dans le produit récapitulatif annuel. Dans ce cas, le 10e percentile pour pv est proche de 0 %, le 50e percentile est d’environ 11 % et le 90e percentile est d’environ 47 %.

Omettre les valeurs manquantes de l’ensemble de données

[16]:
fc_clear = fc.where(fc!= 255)
[17]:
fig, ax = plt.subplots(figsize = (6,4))

fc_clear.pv.plot(density = True, alpha = 0.5, bins = 15)
# Calculate percentiles
quant_values = fc_clear.pv.quantile([0.1, 0.5, 0.9])

# [quantile, opacity, length]
quants = [[quant_values[0], 0.8, 0.9], [quant_values[1], 0.8, 0.9], [quant_values[2], 0.8, 0.9]]

# Plot the lines
for i in quants:
    ax.axvline(i[0], alpha = i[1], ymax = i[2], linestyle = ":", color = 'r')

ax.text(quant_values[0]-.1, 0.045, "10th", size = 12)
ax.text(quant_values[1]-.1, 0.045, "50th", size = 12)
ax.text(quant_values[2]-.1, 0.045, "90th", size = 12)

plt.title("Photosynthetic vegetation percentiles")
plt.show();
../../../_images/sandbox_notebooks_Datasets_Fractional_Cover_38_0.png

Charger le résumé annuel

Le résumé annuel peut être utilisé pour suivre les changements d’une année à l’autre.

[18]:
fc_summary = dc.load(product='fc_ls_summary_annual',
                like=fc.geobox, #match extent of fc
                time=('2018','2020'))

print(fc_summary)
<xarray.Dataset>
Dimensions:      (time: 3, y: 219, x: 194)
Coordinates:
  * time         (time) datetime64[ns] 2018-07-02T11:59:59.999999 ... 2020-07...
  * y            (y) float64 -3.825e+06 -3.825e+06 ... -3.831e+06 -3.831e+06
  * x            (x) float64 1.76e+06 1.76e+06 1.76e+06 ... 1.766e+06 1.766e+06
    spatial_ref  int32 6933
Data variables:
    pv_pc_10     (time, y, x) uint8 0 0 0 0 0 0 0 0 0 0 ... 5 10 9 8 6 6 5 5 4 8
    pv_pc_50     (time, y, x) uint8 2 3 3 2 4 2 2 3 ... 19 17 13 11 10 11 10 12
    pv_pc_90     (time, y, x) uint8 20 17 18 18 17 16 18 ... 26 19 13 17 17 17
    bs_pc_10     (time, y, x) uint8 41 43 36 33 42 44 44 ... 30 42 48 49 50 52
    bs_pc_50     (time, y, x) uint8 55 56 55 54 56 57 58 ... 38 47 54 55 54 55
    bs_pc_90     (time, y, x) uint8 63 64 63 61 63 65 65 ... 45 53 61 59 60 61
    npv_pc_10    (time, y, x) uint8 28 28 31 30 28 29 28 ... 35 33 28 24 27 24
    npv_pc_50    (time, y, x) uint8 37 39 38 39 39 39 38 ... 44 37 34 34 34 28
    npv_pc_90    (time, y, x) uint8 46 49 47 48 45 46 47 ... 53 49 42 39 41 39
    count_valid  (time, y, x) int16 25 25 26 25 25 25 25 ... 26 27 27 27 28 28
    qa           (time, y, x) uint8 2 2 2 2 2 2 2 2 2 2 ... 2 2 2 2 2 2 2 2 2 2
Attributes:
    crs:           PROJCS["WGS 84 / NSIDC EASE-Grid 2.0 Global",GEOGCS["WGS 8...
    grid_mapping:  spatial_ref

Tracer et interpréter les percentiles récapitulatifs annuels

Pour chaque type de couverture, les 10e, 50e et 90e percentiles sont estimés à partir de toutes les mesures de fractions claires et valides d’une année civile. Comme indiqué ci-dessus, ces percentiles fournissent des estimations des valeurs basses, médianes et élevées d’une distribution qui sont robustes face aux valeurs aberrantes.

L’exemple ci-dessous montre les trois centiles de la fraction de couverture verte, qui peuvent servir de proxy pour la couverture verte minimale, typique et maximale pour une année donnée.

[19]:
fc_summary.isel(time=-1)[['pv_pc_10', 'pv_pc_50', 'pv_pc_90']].to_array(dim='band').plot.imshow(col='band', cmap='Greens', vmin=0, vmax=100, size=8);
../../../_images/sandbox_notebooks_Datasets_Fractional_Cover_43_0.png

Étant donné que les percentiles sont estimés indépendamment pour les trois types de couverture, les 10e percentiles représentent la limite inférieure des mesures pour les trois couvertures, qui peuvent avoir été observées à différents moments de l’année. De même, les 90e percentiles représentent la limite supérieure des mesures pour les trois couvertures, qui peuvent avoir eu lieu à des moments différents. Ces valeurs de percentiles peuvent être utilisées séparément ou combinées pour comprendre la dynamique de la couverture terrestre.

Par exemple, en utilisant le 90e percentile de la valeur actualisée comme indicateur de la fraction de couverture verte maximale observée au cours d’une année, les champs irrigués sont présentés ci-dessous comme ayant atteint la couverture verte maximale la plus élevée de toutes les années.

[20]:
fc_summary['pv_pc_90'].plot.imshow(col='time', cmap='Greens', vmin=0, vmax=100, size=8);
../../../_images/sandbox_notebooks_Datasets_Fractional_Cover_46_0.png

Le 10e percentile BS peut être utilisé comme indicateur de la fraction de sol nu la plus faible observée au cours d’une année.

[21]:
fc_summary['bs_pc_10'].plot.imshow(col='time', cmap='Reds', vmin=0, vmax=100, size=8);
../../../_images/sandbox_notebooks_Datasets_Fractional_Cover_48_0.png

Étant donné qu’à tout moment, les trois couvertures totalisent 100 pour cent, la fraction de sol nu la plus faible peut être utilisée pour obtenir la couverture végétale totale la plus élevée.

[22]:
(100-fc_summary['bs_pc_10']).plot.imshow(col='time', cmap='Greens', vmin=0, vmax=100, size=8);
../../../_images/sandbox_notebooks_Datasets_Fractional_Cover_50_0.png

La différence entre les 10e et 90e percentiles fournit une estimation de l’ampleur du changement au cours d’une année. Dans cet exemple, une plus grande variation est observée dans les terres agricoles pour toutes les couvertures et, comme indiqué ci-dessous, les changements les plus significatifs dans la couverture végétale sont observés dans les champs irrigués.

[23]:
(fc_summary['pv_pc_90']-fc_summary['pv_pc_10']).plot.imshow(col='time', cmap='Greens', vmin=0, vmax=100, size=8);
../../../_images/sandbox_notebooks_Datasets_Fractional_Cover_52_0.png

Enfin, une vue représentative du paysage sur une année peut être obtenue en combinant les 50e percentiles, ou les valeurs médianes, pour les trois types de couverture. Les changements d’une année à l’autre peuvent être facilement visualisés, ce qui peut être particulièrement utile pour surveiller la végétation naturelle.

[24]:
rgb(fc_summary,
    bands=['bs_pc_50','pv_pc_50','npv_pc_50'],
    size=8, col='time');
../../../_images/sandbox_notebooks_Datasets_Fractional_Cover_54_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 :

[25]:
print(datacube.__version__)
1.8.15

Dernier test :

[26]:
from datetime import datetime
datetime.today().strftime('%Y-%m-%d')
[26]:
'2023-08-11'