Calculer des relations Hauteur/Surface/Volume depuis une matrice de hauteurs d’eau (seule)

Il est recommandé de lire d’abord le notebook relatif aux calcul des ces grandeurs sur base de données d’altimétrie.

[ ]:
# import _add_path # for debugging purposes only - must be removed in production

import numpy as np
from pathlib import Path
import matplotlib.pyplot as plt

from wolfhece import is_enough
if not is_enough('2.2.35'):
    raise ImportError("This code requires wolfhece version 2.2.34 or higher. -- try pip install wolfhece --upgrade")

from wolfhece.wolf_array import WolfArray
from wolfhece.pydownloader import toys_dataset
from wolfhece.PyVertexvectors import Zones, zone, vector, wolfvertex as wv

Importer des données de hauteurs d’eau

On importe la matrice et on masque une portion sur base d’un polygone et d’une contrainte de seuil ( h <= 0.5 m).

[ ]:
a = WolfArray(toys_dataset('SurfaceVolume', 'waterdepth.tif'))

mask = Zones(toys_dataset('SurfaceVolume', 'selection.vec'))
mask_poly = mask[('selection', 'contour')]
a.mask_outsidepoly(mask_poly) # Mask the area outside the polygon

# For the example : Masking the area where the water depth is greater than 0.5 m
# ------------------------------------------------------------------------------
# a.mask_greater(0.5) # mask_greater will replace the current mask with the new one
# If we want to impose the union of the current mask and the new one, we can use the following line:
a.array.mask[:,:] = (a.array.mask) | (a.array.data > 0.5) # '|' is the OR operator


fig, ax = a.plot_matplotlib(first_mask_data= False) # If we do not use first_mask_data, the mask will be change in the routine

i_max, j_max = np.unravel_index(np.ma.argmax(a.array), a.array.shape)
x_max, y_max = a.ij2xy(i_max, j_max)

print('Maximum cell : ', x_max, y_max)
print('Maximum value : ', a.array[i_max, j_max])

ax.scatter(x_max, y_max, color='red', marker='x', s=100, label='Maximum cell')
ax.legend()
Minimum :  5.524059e-11
Maximum :  0.49995255
Maximum cell :  253173.75 136093.25
Maximum value :  0.49995255
<matplotlib.legend.Legend at 0x1902e9f4490>
../_images/tutorials_wolfarray_surfacevolume_wd_3_2.png

Calculer les relations Hauteur/Surface/Volume

Dans ce cas, on souhaite calculer les relations surface/volume en fonction des hauteurs d’eau.

On doit ainsi fournir :

  • la valeur minimale à considérer

  • la valeur maximale à considérer

  • le nombre d’intervalles à calculer

  • la méthode de calcul

Sur cette base, le code va itérer sur les hauteurs d’eau successives. Il va évaluer les grandeurs utiles (surface et volume) et tracer les courbes résultantes.

Les valeurs sont sauvegardées dans un fichier texte qui est par défaut dans le sous-répertoire “surface_volume” de la matrice chargée.

Est également sauvegardée la matrice contenant les mailles utilisées pour les différents intervalles calculés –> ‘surface_volume_extension.tif’. Attention, la numérotation est basée 1.

A l’inverse de la routine se basant sur des altitudes, on va ici exploiter une copie de la matrice dont on va commencer par changer le signe des valeurs. On exploitera alors la même routine que dans le cas des altimétries. Les labels d’axes sont adaptés automatiquement.

ATTENTION : cette approche ne revient pas nécessairement au même résultat que l’intégration des hauteurs d’eau sur base d’une altitude de surface libre croissante. On n’exploite ici qu’une seule matrice (H) et non 2 (DEM et H).

[5]:
fig, axs = a.surface_volume_estimation_from_waterdepth(desired_zmin= 0., # minimum elevation
                                                       nb = 100,             # number of steps
                                                       method= 'all below') # method to select the area below the elevation
100%|██████████| 101/101 [00:00<00:00, 393.48it/s]
../_images/tutorials_wolfarray_surfacevolume_wd_5_1.png

Récupérer les extensions

[4]:
ext = WolfArray(Path(a.filename).parent / 'surface_volume' / 'surface_volume_extension.tif')
ext.plot_matplotlib(with_legend=True,)
[4]:
(<Figure size 640x480 with 2 Axes>, <Axes: >)
../_images/tutorials_wolfarray_surfacevolume_wd_7_1.png