Skip to content

Commit

Permalink
rectify spelling, add FILINO and add scripts for clip virtual points …
Browse files Browse the repository at this point in the history
…by tiles
  • Loading branch information
mdupaysign committed Sep 24, 2024
1 parent 3373852 commit 157db02
Showing 1 changed file with 33 additions and 17 deletions.
50 changes: 33 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# LIDRO

Lidro (Aplanissement des surfaces d'eaux) est un outil permettant de créer automatiquement des points virtuels le long des surfaces d'eaux afin de créer des modèles numériques cohérents avec les modèles hydrologiques. Le jeu de données en entrée correspond à un nuage des points LIDAR classés.
Ce processus a été mis en place après plusieurs mois d'échanges (ateliers) avec le CEREMA et l'Université Gustave Eiffel afin d'améliorer la génération des Modèles Numériques de Terrains issus du projet LIDAR HD. L'IGN s'est inspiré du code développé par Frédéric PONS : https://github.com/CEREMA/filino

## Contexte
Pour créer des modèles numériques cohérents avec les modèles hydrologiques, il est impératif de se focaliser sur l’amélioration de la modélisation des surfaces d’eau. ​
Expand Down Expand Up @@ -32,13 +33,13 @@ AND classe_de_largeur NOT IN ('Entre 0 et 5 m', 'Sans objet')
AND position_par_rapport_au_sol='0'
```

Trois grands axes du processus à mettre en place en distanguant l'échelle de traitement associé :
Trois grands axes du processus à mettre en place en distanguant l'échelle de traitement associée :
* 1- Création de masques hydrographiques à l'échelle de la dalle LIDAR
* 2- Création de masques hydrographiques pré-filtrés à l'échelle du chantier, soit :
* la suppression de ces masques dans les zones ZICAD/ZIPVA
* la suppression des aires < 150 m² (paramétrable)
* la suppression des aires < 1000 m² hors BD IGN (grands cours d'eau < 5m de large)
A noter que pour l'instant, la suppresion des masques hydrographiques en dehors des grands cours d'eau et le nettoyage de ces masques s'effectuent manuellement. Ce processus sera développé prochainement en automatique.
A noter que pour l'instant, la suppression des masques hydrographiques en dehors des grands cours d'eau et le nettoyage de ces masques s'effectuent manuellement. Ce processus sera développé prochainement en automatique.
* 3*- Pour les grands cours d'eaux, il existe une étape intermédaire : Création des squelettes internes des masques hydrographiques, c'est-à-dire les lignes internes indiquant le sens de l'écoulement de l'eau pour les grands cours d'eaux.
* 4- Création de points virtuels le long de deux entités hydrographiques :
* Grands cours d'eau (> 5 m de large dans la BD Unis).
Expand All @@ -53,12 +54,12 @@ Il existe plusieurs étapes intermédiaires :
/ ! \ EN AMONT : Appariement, contrôle et correction manuels des masques hydrographiques "écoulement" (rivières) et du squelette hydrographique

A l'échelle de l'entité hydrographique :
* 2- Réccupérer tous les points LIDAR considérés comme du "SOL" situés à la limite de berges (masque hydrographique) moins N mètres
* 2- Récupérer tous les points LIDAR considérés comme du "SOL" situés à la limite de berges (masque hydrographique) moins N mètres
Pour les cours d'eau supérieurs à 150 m de long :
* 3- Transformer les coordonnées de ces points (étape précédente) en abscisses curvilignes
* 4- Générer un modèle de régression linéaire afin de générer tous les N mètres une valeur d'altitude le long du squelette de cette rivière. Les différents Z le long des squelettes HYDRO doivent assurer l'écoulement. Il est important de noter que tous les 50 mètres semble une valeur correcte pour appréhender la donnée. Cette valeur s'explique en raison de la précision altimétrique des données LIDAR (20 cm) ET que les rivières françaises correspondent à des cours d’eau naturels dont la pente est inférieure à 1%.
/ ! \ Pour les cours d'eau inférieurs à 150 m de long, le modèle de régression linéaire ne fonctionne pas. La valeur du premier quartile sera calculée sur l'ensemble des points d'altitudes du LIDAR "SOL" (étape 2) et affectée pour ces entités hydrographiques (< 150m de long) : aplanissement.
* 5- Création de points virtuels nécéssitant plusieurs étapes intermédiaires :
* 5- Création de points virtuels nécessitant plusieurs étapes intermédiaires :
* Création des points virtuels 2D espacés selon une grille régulière tous les N mètres (paramétrable) à l'intérieur du masque hydrographique "écoulement"
* Affecter une valeur d'altitude à ces points virtuels en fonction des "Z" calculés à l'étape précédente (interpolation linéaire ou aplanissement)

Expand Down Expand Up @@ -129,7 +130,7 @@ example_create_mask_default.sh
```

* 2- Créer un masque hydrographiques fusionné et nettoyé à l'échelle de l'ensemble de l'ensemble des dalles LIDAR
Tester sur un dossier contenant plusieurs dalles LIDAR pour créer fusionner l'ensemble des masques hydrographiques
Tester sur un dossier contenant plusieurs dalles LIDAR pour créer et fusionner l'ensemble des masques hydrographiques
```
example_merge_mask_default.sh
```
Expand All @@ -149,6 +150,11 @@ B. Tester sur un dossier contenant plusieurs dalles LIDAR pour créer des points
example_create_virtual_point_default.sh
```

C. tester sur un dossier contenant plusieurs dalles LIDAR pour intégrer les points virtuels 3D à l'échelle de la dalle LIDAR
```
example_clip_virtual_point_default.sh
```

### Tests unitaires
Pour lancer les tests :
```
Expand All @@ -157,7 +163,7 @@ python -m pytest -s

### Paramètres pour créer les masques hydro des grands cours d'eaux
Pour fonctionner, la création des masques hydro a besoin d'une série de paramètres, certains ayant une valeur par défaut, d'autres non. Les paramètres se trouvent dans le fichier configs/configs_lidro.yaml.
On peut soit les y modifier, soit les modifer en ligne de commande lors de l'exécution du script avec :
On peut soit les y modifier, soit les modifier en ligne de commande lors de l'exécution du script avec :
```
python -m lidro.main_create_mask [nom_paramètre_1]=[valeur_du_paramètre_1] [nom_paramètre_2]=[valeur_du_paramètre_2]
```
Expand All @@ -169,7 +175,7 @@ Options généralement passées en paramètres :

Autres paramètres disponibles :
* mask_generation.filter.keep_classes : Les classes LIDAR considérées comme "non eau" utilisées pour générer les masques hydro
* mask_generation.raster.dilatation_size : La taille pour la dilation du raster binaire "eau"
* mask_generation.raster.dilatation_size : La taille pour la dilatation du raster binaire "eau"


Lors de la fusion des masques hydro, plusieurs paramètres peuvent également être utilisés.
Expand All @@ -182,7 +188,7 @@ Options généralement passées en paramètres :
* io.output_dir : Le chemin du dossier de sortie (Masque Hydro fusionné)

Autres paramètres disponibles :
* mask_generation.vector.min_water_area : La superficie minimal en m² des masques hydro à conserver
* mask_generation.vector.min_water_area : La superficie minimale en m² des masques hydro à conserver
* mask_generation.vector.buffer_positive : La taille en mètres de la zone tampon "positive" appliquée aux masques hydro
* mask_generation.vector.buffer_negative : La taille en mètres de la zone tampon "négative" appliquée aux masques hydro
* mask_generation.vector.tolerance : La distance de tolérance en mètres pour appliquer l'algorithme de Douglas-Peucker sur les masques hydro
Expand All @@ -193,34 +199,34 @@ Pour fonctionner, la création de squelettes a besoin d'une série de paramètre
```
python lidro/main_create_skeleton_lines.py [nom_paramètre_1]=[valeur_du_paramètre_1] [nom_paramètre_2]=[valeur_du_paramètre_2]
```
Généralement, sont mis dans le fichier de config ceux qui changent rarement (srid par défaut, port de connexion à la base de données...), et sont passés en paramètres les éléments qui changent souvent (chemins de fichiers d'entrée et de sortie) ou ce qu'il ne faut théoriquement pas stocker (credentials).
Généralement, sont mis dans le fichier de configuration ceux qui changent rarement (srid par défaut, port de connexion à la base de données...), et sont passés en paramètres les éléments qui changent souvent (chemins de fichiers d'entrée et de sortie) ou ce qu'il ne faut théoriquement pas stocker (credentials).

Options généralement passées en paramètres :
* io.skeleton.mask_input_path : Le chemin du fichier d'entrée contenant les masques de cours d'eau
* io.skeleton.skeleton_lines_output_path : Le chemin du fichier de sortie contenant uniquement les lignes reliant les emprises de cours d'eau (optionnel)
* io.skeleton.gap_lines_output_path : Le chemin du fichier de sortie contenant uniquement les lignes reliant les emprises de cours d'eau (optionnel)
* io.skeleton.skeleton_lines_output_path : Le chemin du fichier de sortie contenant uniquement les lignes internes (optionnel)
* io.skeleton.global_lines_output_path : Le chemin du fichier de sortie contenant toutes les lignes (optionnel)

Autres paramètres disponibles :
* skeleton.max_gap_width : La distance maximale envisagée pour franchir des ponts.
* skeleton.max_bridges : Le nombre maximal de ponts entre deux bras séparés de cours d'eau différent.
* skeleton.max_bridges : Le nombre maximal de ponts entre deux bras séparés de cours d'eau différents.
* skeleton.gap_width_check_db : La distance à partir de laquelle on vérifie via la base de données s'il y a bien un pont.
* skeleton.ratio_gap : La proportion de la ligne franchissant un pont qui est comparé en base pour voir s'il y a bien un pont (trop grande et on pourrait trouver un pont qui ne correspond pas).
* skeleton.ratio_gap : La proportion de la ligne franchissant un pont qui est comparée en base pour voir s'il y a bien un pont (trop grande et on pourrait trouver un pont qui ne correspond pas).
* skeleton.clipping_length : Indique de quelle longueur doivent être raccourcies les lignes des squelettes. Ces lignes feront toujorus au moins 1m de longueur.

* skeleton.db_uni.db_using_db : Si le paramètre est à faux, la base de données ne sera pas utilisée (prévu pour être utilisé que s'il n'y pas d'accès à la base de données).
* skeleton.db_uni.db_name : Le nom de la base de données.
* skeleton.db_uni.db_host : L'adresse de la base de données.
* skeleton.db_uni.db_user : L'utilisateur de la base de données.
* skeleton.db_uni.db_password : Le mot de passe de l'utilisateur. ATTENTION ! S'il y a des charactères spéciaux, il peut être nécessaire de les écrire ainsi : "skeleton.db_uni.db_password='$tr@ng€_ch@r@ct€r$'" (notez les " et les '). Si cela ne fonctionne toujours pas, peut-être essayer de jongler un peu avec ces ponctuations pour trouver celle qui fonctionne.
* skeleton.db_uni.db_password : Le mot de passe de l'utilisateur. ATTENTION ! S'il y a des caractères spéciaux, il peut être nécessaire de les écrire ainsi : "skeleton.db_uni.db_password='$tr@ng€_ch@r@ct€r$'" (notez les " et les '). Si cela ne fonctionne toujours pas, peut-être essayer de jongler un peu avec ces ponctuations pour trouver celle qui fonctionne.
* skeleton.db_uni.db_port : La port de connexion avec la base de données.
* skeleton.branch.voronoi_max_length : La longueur maximum des lignes individuelles des squelettes.
* skeleton.branch.water_min_size : La longueur minimal à partir de laquelle une ligne de squelette sera automatiquement gardée (trop petite, et il y aura des sortes "d'aiguilles" qui apparaitront. Trop grande, et certains afluents ne seront pas détectés).
* skeleton.branch.water_min_size : La longueur minimale à partir de laquelle une ligne de squelette sera automatiquement gardée (trop petite, et il y aura des sortes "d'aiguilles" qui apparaitront. Trop grande, et certains afluents ne seront pas détectés).
* skeleton.branch.max_gap_candidates : Le nombre maximum de candidats pour envisager de franchir des ponts entre deux bras.

### Paramètres pour créer les points virtuels (grille régulière tous les N mètres) à l'intérieur des grands cours d'eaux
Pour fonctionner, la création des points virtuels a besoin d'une série de paramètres, certains ayant une valeur par défaut, d'autres non. Les paramètres se trouvent dans le fichier configs/configs_lidro.yaml.
On peut soit les y modifier, soit les modifer en ligne de commande lors de l'exécution du script avec :
On peut soit les y modifier, soit les modifier en ligne de commande lors de l'exécution du script avec :
```
python -m lidro.main_create_virtual_points [nom_paramètre_1]=[valeur_du_paramètre_1] [nom_paramètre_2]=[valeur_du_paramètre_2]
```
Expand All @@ -229,7 +235,7 @@ Options généralement passées en paramètres :
* io.input_mask_hydro : Le chemin contenant le masque hydro fusionné (ex."./data/merge_mask_hydro/MaskHydro_merge.geosjon")
* io.input_skeleton= Le chemin contenant le squelette hydrographique (ex. "./data/skeleton_hydro/Skeleton_Hydro.geojson")
* io.dir_points_skeleton : Le chemin contenant l'ensemble des N points du squelette créés à l'échelle des dalles LIDAR ( ex. "./tmp/point_skeleton/")
* io.output_dir : Le chemin du dossier de sortie (les points virtuels intégrés dans chaque dalle LIDAR)
* io.output_dir : Le chemin du dossier de sortie (les points virtuels à l'échelle du projet)

Autres paramètres disponibles :
* virtual_point.filter.keep_neighbors_classes : Les classes LIDAR (par défaut "sol" et "eau") à conserver pour analyser les bordures de berges le long des grands cours d'eaux
Expand All @@ -238,4 +244,14 @@ Autres paramètres disponibles :
* virtual_point.vector.k : Le nombre de voisins les plus proches à trouver avec KNN
* virtual_point.vector.river_length : La longueur minimale en mètres d'une rivière pour utiliser le modèle de régression linéaire
* pointcloud.points_grid_spacing : L'espacement entre les points de la grille en mètres
* pointcloud.virtual_points_classes : Le choix du numéro de classification pour les points virtuels dans les nuages de points LIDAR
* pointcloud.virtual_points_classes : Le choix du numéro de classification pour les points virtuels dans les nuages de points LIDAR

### Paramètres pour intégrer les points virtuels à l'échelle de la dalle LIDAR (1 Km * Km)
Pour fonctionner, le découpage des points virtuels par dalle LIDAR a besoin d'une série de paramètres, certains ayant une valeur par défaut, d'autres non. Les paramètres se trouvent dans le fichier configs/configs_lidro.yaml.
On peut soit les y modifier, soit les modifier en ligne de commande lors de l'exécution du script avec :
```
python -m lidro.main_create_virtual_points [nom_paramètre_1]=[valeur_du_paramètre_1] [nom_paramètre_2]=[valeur_du_paramètre_2]
```
Options généralement passées en paramètres :
* io.input_dir : Le chemin du dossier contenant l'ensemble des dalles LIDAR classées (ex. "./data/pointcloud")
* io.output_dir : Le chemin du dossier de sortie (les points virtuels intégrés dans chaque dalle LIDAR)

0 comments on commit 157db02

Please sign in to comment.