Observations de l’eau depuis l’espace (WOfS)
Produits utilisés : wofs_ls, wofs_ls_summary_annual, wofs_ls_summary_alltime
Mots-clés : datasets; wofs_ls, datasets; wofs_ls_summary_alltime, datasets; wofs_ls_summary_annual
Aperçu
Water Observations from Space (WOfS) est un service qui s’appuie sur l’imagerie satellite pour fournir des observations historiques des eaux de surface de l’ensemble du continent africain. WOfS permet aux utilisateurs de comprendre l’emplacement et le mouvement des eaux intérieures et côtières présentes dans le paysage africain. Il montre où l’eau est généralement présente, où elle est rarement observée et où l’inondation de la surface a été observée par satellite.
Ils sont générés à l’aide de l’algorithme de classification WOfS sur les données satellitaires Landsat. Plusieurs produits WOfS sont disponibles pour le continent africain, comme indiqué ci-dessous :
Type de produit |
Description |
---|---|
Résumé annuel du WOfS |
Le rapport entre les observations de temps humide et clair de chaque année civile |
Résumé de tous les temps du WOfS |
Le rapport entre les observations humides et claires sur toute la période |
Couches d’entités WOFL (WOfS) |
Classification de l’eau et des non-eau générée par scène |
Résumé annuel/historique du WOfS : Fréquence à laquelle un pixel a été classé comme humide. Cela nécessite :
Nombre total d’observations claires pour chaque pixel : nombre d’observations claires (sans nuage ni ombre) pour la période sélectionnée. L’algorithme de classification les classe ensuite comme humides ou sèches.
Nombre total d’observations humides pour chaque pixel : le nombre d’observations qui étaient claires et humides pour la période sélectionnée.
Les résumés WOfS sont calculés comme le rapport entre les observations claires et humides et le total des observations claires.
WOFL (couches d’entités WOfS) : les images individuelles classées par type d’eau sont appelées couches d’entités d’observation de l’eau (WOFL) et sont créées à partir des données satellites d’entrée. Il existe une WOFL pour chaque ensemble de données satellite traité pour la présence d’eau. Pour plus d’informations sur les WOFL, consultez le bloc-notes Applying WOfS bitmasking.
Référence
Mueller, N., Lewis, A., Roberts, D., Ring, S., Melrose, R., Sixsmith, J., Lymburner, L., McIntyre, A., Tan, P., Curnow, S., & Ip, A. (2016). Observations de l’eau depuis l’espace : cartographie des eaux de surface à partir de 25 années d’images Landsat à travers l’Australie. Télédétection de l’environnement, 174, 341-352.
Description
Ce cahier explique le chargement des WOFL et des résumés WOfS.
Ce cahier montre comment :
Charger et tracer des WOFLS pour plusieurs pas de temps
Télécharger les résumés annuels du WOfS
Téléchargez le résumé de tous les temps du WOfS
Pour un exemple détaillé d’utilisation de WOfS pour la gestion des ressources en eau, consultez le bloc-notes Water_extent_WOfS dans le bac à sable DE Africa.
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 seaborn as sns
import matplotlib.pyplot as plt
from datacube.utils import masking
from datacube.utils import geometry
from datacube.utils.geometry import CRS
from deafrica_tools.plotting import display_map, plot_wofs
from deafrica_tools.datahandling import wofs_fuser, mostcommon_crs
Se connecter au datacube
[2]:
dc = datacube.Datacube(app="Intro_WOfS")
Liste des produits WOfS disponibles sur Digital Earth Africa
[3]:
products = dc.list_products()
display_columns = ['name', 'description']
dc_products = products[display_columns]
dc_products[dc_products['name'].str.contains("wofs_ls")]
[3]:
name | description | |
---|---|---|
name | ||
wofs_ls | wofs_ls | Historic Flood Mapping Water Observations from... |
wofs_ls_summary_alltime | wofs_ls_summary_alltime | Water Observations from Space Alltime Statistics |
wofs_ls_summary_annual | wofs_ls_summary_annual | Water Observations from Space Annual Statistics |
Paramètres d’analyse
Les éléments suivants sont inclus dans la « requête » qui définit ce que le datacube doit renvoyer.
« lat, lon, buffer » : latitude/longitude centrales et taille de la fenêtre d’analyse pour la zone d’intérêt
time
: plage de dates pour récupérer les scènes. Le temps approximatif entre deux scènes est de 16 jours. S’il y a un emplacement près d’une limite de bande, il peut être capturé en deux passes et il pourrait donc y avoir deux images dans la période de 16 jours.
L’emplacement par défaut est le lac Ngami au Botswana.
[4]:
lat, lon = -20.4855, 22.7547
buffer = 0.175
time_range = ('2019-01-01', '2019-01-20')
#add lat,lon,buffer togethert to get bounding box
x = (lon-buffer, lon+buffer)
y = (lat+buffer, lat-buffer)
Afficher l’emplacement sélectionné
[5]:
# View the location
display_map(x=x, y=y)
[5]:
Charger les couches d’entités WOfS (WOFL)
Ici, il n’est pas nécessaire d’appeler directement les indicateurs de bits car nous pouvons utiliser la sélection wet=True
pour créer le masque d’eau, tandis que dry=True
donne l’inverse. Dans ce cas, isel
est utilisé pour sélectionner un seul pas de temps et affiche les pixels humides/secs pour cet incrément uniquement.
[6]:
# Create a reusable query
query = {
'x': x,
'y': y,
'time': time_range,
'resolution': (-30, 30)
}
#grab crs of location
output_crs = mostcommon_crs(dc=dc, product='wofs_ls', query=query)
# Load WOfS feature layers
wofls= dc.load(product = 'wofs_ls',
group_by="solar_day",
fuse_func=wofs_fuser,
output_crs = output_crs,
collection_category="T1",
**query)
print(wofls)
<xarray.Dataset>
Dimensions: (time: 4, y: 1306, x: 1231)
Coordinates:
* time (time) datetime64[ns] 2019-01-09T08:26:36.339805 ... 2019-01...
* y (y) float64 -2.247e+06 -2.247e+06 ... -2.286e+06 -2.286e+06
* x (x) float64 6.646e+05 6.646e+05 ... 7.014e+05 7.015e+05
spatial_ref int32 32634
Data variables:
water (time, y, x) uint8 64 64 64 64 64 64 64 64 ... 0 0 0 0 0 0 0 0
Attributes:
crs: epsg:32634
grid_mapping: spatial_ref
Tracé des données
Nous pouvons tracer des WOFL à l’aide de la fonction « plot_wofs ». Nous pouvons voir que notre zone d’étude comprend un grand plan d’eau. Nous pouvons également voir que certaines observations contiennent des nuages, des ombres de nuages et des régions sans données.
[7]:
# Classify different types of data in the area of interest
plot_wofs(wofls.water, col='time', size=4, col_wrap=4);

Masquage à l’aide des indicateurs de bits WOfS
WOFLs utilise des indicateurs de bits pour signaler les pixels comme « humides » ou non. Pour plus de détails sur le masquage de bits avec WOfS, consultez le bloc-notes Applying WOfS bitmasking.
Nous pouvons convertir le champ de bits WOfS en un tableau binaire contenant les valeurs True et False. Cela nous permet d’utiliser les données WOFL comme un masque pouvant être appliqué à d’autres ensembles de données.
La fonction « make_mask » nous permet de créer un masque en utilisant les étiquettes des indicateurs (par exemple « wet » ou « dry ») plutôt que les nombres binaires du masque. Par exemple, nous pouvons facilement identifier les pixels qui étaient humides dans chaque image (c’est-à-dire jaunes) en passant l’indicateur « wet=True » :
[8]:
# Keeping only dry, non-cloudy pixels
wofls_wet = masking.make_mask(wofls, wet=True)
# Plot output mask
wofls_wet.water.plot(col='time', size=4, col_wrap=4);

Chargement des résumés annuels du WOfS
Pour consulter un résumé des WOFL sur une année civile, nous pouvons charger le produit « wofs_ls_summary_annual ». Cela peut être utile pour comprendre en un coup d’œil la dynamique annuelle d’un plan d’eau. Le produit WOfS Annual Summary est pré-calculé, ce qui le rend plus rapide à charger. Il comporte trois mesures : « count_wet », « count_clear » et « frequency ».
[9]:
wofs_annual = dc.load(product='wofs_ls_summary_annual',
like=wofls.geobox,
time='2019')
print(wofs_annual)
<xarray.Dataset>
Dimensions: (time: 1, y: 1306, x: 1231)
Coordinates:
* time (time) datetime64[ns] 2019-07-02T11:59:59.999999
* y (y) float64 -2.247e+06 -2.247e+06 ... -2.286e+06 -2.286e+06
* x (x) float64 6.646e+05 6.646e+05 ... 7.014e+05 7.015e+05
spatial_ref int32 32634
Data variables:
count_wet (time, y, x) int16 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
count_clear (time, y, x) int16 35 34 34 34 34 34 34 ... 51 51 51 51 51 51
frequency (time, y, x) float32 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0
Attributes:
crs: PROJCS["WGS 84 / UTM zone 34N",GEOGCS["WGS 84",DATUM["WGS_...
grid_mapping: spatial_ref
Tracé de la fréquence WOfS
Le graphique ci-dessous aura des valeurs allant de 0 à 1. Les valeurs qui se rapprochent de 1 indiquent un plan d’eau permanent, tandis que les valeurs plus proches de 0 indiquent un plan d’eau plus éphémère ou saisonnier.
[10]:
wofs_annual.frequency.plot(size=6, cmap=sns.color_palette("mako_r", as_cmap=True))
plt.title('WOfS Annual Summary for 2019');

Chargement des résumés « de tous les temps » du WOfS
Pour consulter un résumé des WOFL sur l’ensemble des archives Landsat (de 1984 à aujourd’hui), nous pouvons charger le produit « wofs_ls_summary_alltime ».
[11]:
wofs_alltime = dc.load(product='wofs_ls_summary_alltime',
like=wofls.geobox)
print(wofs_alltime)
<xarray.Dataset>
Dimensions: (time: 1, y: 1306, x: 1231)
Coordinates:
* time (time) datetime64[ns] 2003-07-02T11:59:59.999999
* y (y) float64 -2.247e+06 -2.247e+06 ... -2.286e+06 -2.286e+06
* x (x) float64 6.646e+05 6.646e+05 ... 7.014e+05 7.015e+05
spatial_ref int32 32634
Data variables:
count_wet (time, y, x) int16 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
count_clear (time, y, x) int16 557 558 558 558 559 ... 966 969 969 966 965
frequency (time, y, x) float32 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0
Attributes:
crs: PROJCS["WGS 84 / UTM zone 34N",GEOGCS["WGS 84",DATUM["WGS_...
grid_mapping: spatial_ref
Tracez le résumé de tous les temps du WOfS
[12]:
wofs_alltime.frequency.plot(size=6, cmap=sns.color_palette("mako_r", as_cmap=True))
plt.title('WOfS All-Time Summary (1984 to present)');

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 :
[13]:
print(datacube.__version__)
1.8.15
Dernier test :
[14]:
from datetime import datetime
datetime.today().strftime('%Y-%m-%d')
[14]:
'2023-08-11'