Cartographie de l’étendue des eaux et des précipitations à l’aide de WOfS et CHIRPS#
Produits utilisés : wofs_ls, rainfall_chirps_monthly
Aperçu#
Les Nations Unies ont prescrit 17 « Objectifs de développement durable » (ODD). Ce carnet tente de suivre l’indicateur ODD 6.6.1 - changement dans l’étendue des écosystèmes liés à l’eau. L’indicateur 6.6.1 comporte 4 sous-indicateurs :
i. The spatial extent of water-related ecosystems
ii. The quantity of water contained within these ecosystems
iii. The quality of water within these ecosystems
iv. The health or state of these ecosystems
Ce carnet se concentre principalement sur le premier sous-indicateur : l’étendue spatiale.
Description#
Le bloc-notes charge les couches d’entités WOfS pour cartographier l’étendue spatiale des masses d’eau. Il charge et trace également les précipitations totales mensuelles à partir de CHIRPS. La dernière section comparera l’étendue de l’eau entre deux périodes pour permettre de visualiser où les changements se produisent.
Charger des paquets#
Importez les packages Python utilisés pour l’analyse.
[1]:
%matplotlib inline
import datacube
import matplotlib.pyplot as plt
from deafrica_tools.dask import create_local_dask_cluster
from deafrica_tools.datahandling import wofs_fuser
from long_term_water_extent import (
load_vector_file,
get_resampled_labels,
resample_water_observations,
resample_rainfall_observations,
calculate_change_in_extent,
compare_extent_and_rainfall,
)
Configurer un cluster Dask#
Dask peut être utilisé pour mieux gérer l’utilisation de la mémoire et effectuer l’analyse en parallèle.
[ ]:
create_local_dask_cluster()
Se connecter à Data Cube#
[3]:
dc = datacube.Datacube(app="long_term_water_extent")
Paramètres d’analyse#
La cellule suivante définit les paramètres qui définissent la zone d’intérêt et la durée de réalisation de l’analyse.
Téléchargez un fichier vectoriel pour votre étendue d’eau et votre bassin versant dans le dossier « données ».
Définissez la plage horaire que vous souhaitez utiliser.
Définissez la stratégie de rééchantillonnage. Les options possibles sont les suivantes :
« 1Y » - Rééchantillonnage annuel, utilisez cette option pour une surveillance à plus long terme
« QS-DEC » - Rééchantillonnage trimestriel à partir de décembre
« 3M » - Rééchantillonnage trimestriel
« 1M » - Rééchantillonnage mensuel
Pour plus de détails sur le rééchantillonnage des périodes de temps, consultez la documentation xarray et pandas.
[4]:
water_extent_vector_file = "data/lake_baringo_extent.geojson"
water_catchment_vector_file = "data/lake_baringo_catchment.geojson"
time_range = ("2018-07", "2021")
resample_strategy = "Q-DEC"
dask_chunks = dict(x=1000, y=1000)
Obtenir les géométries des plans d’eau et des bassins versants#
La cellule suivante extraira les géométries du plan d’eau et du bassin versant à partir des fichiers vectoriels fournis, qui seront utilisés pour charger les observations de l’eau depuis l’espace et les produits de précipitations CHIRPS.
[5]:
extent, extent_geometry = load_vector_file(water_extent_vector_file)
catchment, catchment_geometry = load_vector_file(water_catchment_vector_file)
Charger l’observation de l’eau depuis l’espace pour le plan d’eau#
La première étape consiste à charger le produit Observations de l’eau depuis l’espace à l’aide de la géométrie d’étendue.
[6]:
extent_query = {
"time": time_range,
"resolution": (-30, 30),
"output_crs": "EPSG:6933",
"geopolygon": extent_geometry,
"group_by": "solar_day",
"dask_chunks":dask_chunks
}
wofs_ds = dc.load(product="wofs_ls", fuse_func=wofs_fuser, **extent_query)
Identifier l’eau à chaque période de rééchantillonnage#
La deuxième étape consiste à rééchantillonner les observations pour obtenir une mesure cohérente de la masse d’eau, puis à calculer la quantité d’eau classée pour chaque période.
[7]:
resampled_water_ds, resampled_water_area_ds = resample_water_observations(
wofs_ds, resample_strategy
)
date_range_labels = get_resampled_labels(wofs_ds, resample_strategy)
/usr/local/lib/python3.10/dist-packages/rasterio/warp.py:344: NotGeoreferencedWarning: Dataset has no geotransform, gcps, or rpcs. The identity matrix will be returned.
_reproject(
Tracer l’évolution de la surface de l’eau au fil du temps#
[8]:
fig, ax = plt.subplots(figsize=(15, 5))
ax.plot(
date_range_labels,
resampled_water_area_ds.values,
color="red",
marker="^",
markersize=4,
linewidth=1,
)
plt.xticks(date_range_labels, rotation=65)
plt.title(f"Observed Area of Water from {time_range[0]} to {time_range[1]}")
plt.ylabel("Waterbody area (km$^2$)")
plt.tight_layout()
Charger les précipitations mensuelles CHIRPS#
[9]:
catchment_query = {
"time": time_range,
"resolution": (-5000, 5000),
"output_crs": "EPSG:6933",
"geopolygon": catchment_geometry,
"group_by": "solar_day",
"dask_chunks":dask_chunks
}
rainfall_ds = dc.load(product="rainfall_chirps_monthly", **catchment_query)
Rééchantillonner pour estimer les précipitations pour chaque période#
Cela se fait en calculant la pluviométrie moyenne sur l’étendue du bassin versant, puis en additionnant ces moyennes sur la période de rééchantillonnage pour estimer la pluviométrie totale pour le bassin versant.
[10]:
catchment_rainfall_resampled_ds = resample_rainfall_observations(
rainfall_ds, resample_strategy, catchment
)
Comparer la superficie du plan d’eau aux précipitations du bassin versant#
Cette étape trace la somme des précipitations moyennes pour le bassin versant sur chaque période sous forme d’histogramme, superposée à la superficie du plan d’eau calculée précédemment.
[11]:
figure = compare_extent_and_rainfall(
resampled_water_area_ds, catchment_rainfall_resampled_ds, "mm", date_range_labels
)
Sauver la figure#
[12]:
figure.savefig("waterarea_and_rainfall.png", bbox_inches="tight")
Comparer l’étendue d’eau pour deux périodes différentes#
Pour l’étape suivante, entrez une date de référence et une date d’analyse pour construire un graphique montrant où l’eau est apparue et a disparu, en comparant les deux dates.
[13]:
baseline_time = "2018-07-01"
analysis_time = "2021-10-01"
[14]:
figure = calculate_change_in_extent(baseline_time, analysis_time, resampled_water_ds)
Enregistrer la figure#
[15]:
figure.savefig("waterarea_change.png", bbox_inches="tight")
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 :
[16]:
print(datacube.__version__)
1.8.15
Dernier test :
[17]:
from datetime import datetime
datetime.today().strftime('%Y-%m-%d')
[17]:
'2023-08-21'