From 92494a7a30e0d011964cf1fecc17f0deed6cee5e Mon Sep 17 00:00:00 2001 From: mdupays Date: Mon, 21 Oct 2024 17:20:24 +0200 Subject: [PATCH 01/13] modify congif: add bridge in parameters when lauch virtuals points --- configs/configs_lidro.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/configs/configs_lidro.yaml b/configs/configs_lidro.yaml index e55ebb5..2a91d9b 100644 --- a/configs/configs_lidro.yaml +++ b/configs/configs_lidro.yaml @@ -9,6 +9,7 @@ work_dir: ${hydra:runtime.cwd} io: input_filename: null input_mask_hydro: null + input_bridge: null input_skeleton: null input_dir: null input_dir_point_virtual: null From ae3d1bb4550ec588fceac8aaa985f2747e89060f Mon Sep 17 00:00:00 2001 From: mdupays Date: Mon, 21 Oct 2024 17:24:29 +0200 Subject: [PATCH 02/13] update skeleton with Z --- .../vectors/create_skeleton_3d.py | 107 ++++++++++++++++++ .../vectors/run_update_skeleton_with_z.py | 99 ++++++++++++++++ 2 files changed, 206 insertions(+) create mode 100644 lidro/create_virtual_point/vectors/create_skeleton_3d.py create mode 100644 lidro/create_virtual_point/vectors/run_update_skeleton_with_z.py diff --git a/lidro/create_virtual_point/vectors/create_skeleton_3d.py b/lidro/create_virtual_point/vectors/create_skeleton_3d.py new file mode 100644 index 0000000..ce03f95 --- /dev/null +++ b/lidro/create_virtual_point/vectors/create_skeleton_3d.py @@ -0,0 +1,107 @@ +# -*- coding: utf-8 -*- +""" Run function "update skeleton with Z" +""" +import logging + +import geopandas as gpd +import numpy as np +from shapely import line_locate_point +from shapely.geometry import LineString, Point + + +def skeleton_3d_with_linear_regression(line: gpd.GeoDataFrame, model: np.poly1d, crs: str) -> gpd.GeoDataFrame: + """ + This function updates the 2D hydro skeleton 'line' by adding a 3D 'Z' value + based on a previously calculated linear regression model, and saves the updated + skeleton to a GeoJSON file. + + Args: + line (gpd.GeoDataFrame): A GeoDataFrame containing each 2D line from Hydro's Skeleton. + model (np.poly1d): The linear regression model to calculate Z values. + crs (str): The coordinate reference system of the line. + + Returns: + gpd.GeoDataFrame: A GeoDataFrame of the updated 3D skeleton with Z values. + """ + # For each line in the GeoDataFrame, extract points and calculate Z values + updated_geometries = [] + z_mean_values = [] # List to store Z mean values for each geometry + + for i, geom in line.iterrows(): + line_geom = geom["geometry"] + + # If the line is not a LineString, skip it + if line_geom.geom_type != "LineString": + logging.warning(f"Geometry at index {i} is not a LineString") + continue + + # Extract points (2D) + coords_2d = np.array(line_geom.coords) + + # Calculate the curvilinear abscissa for each point using line_locate_point + abscissas = abscissas = np.array([line_locate_point(line_geom, Point(x, y)) for x, y in coords_2d]) + + # Predict Z values using the regression model + z_values = model(abscissas) + + # Calculate the mean Z value and store it + z_mean = np.mean(z_values) + z_mean_values.append(z_mean) + + # Update each coordinate with the Z value + coords_3d = [(x, y, z) for (x, y), z in zip(coords_2d, z_values)] + + # Create a new LineString with 3D coordinates + updated_geom = LineString(coords_3d) + updated_geometries.append(updated_geom) + + # Create a new GeoDataFrame for the updated lines + updated_line = gpd.GeoDataFrame(geometry=updated_geometries, crs=crs) + + # Add the Z mean values as a new column + updated_line["z_mean"] = z_mean_values + + return updated_line + + +def skeleton_3d_with_flatten(line: gpd.GeoDataFrame, z_value: float, crs: str) -> gpd.GeoDataFrame: + """ + This function updates the 2D hydro skeleton 'line' by adding a 3D 'Z' value + based on a previously calculated flatten model, and saves the updated + skeleton to a GeoJSON file. + + Args: + line (gpd.GeoDataFrame): A GeoDataFrame containing each 2D line from Hydro's Skeleton. + z_value (float) : Z of the river + crs (str): The coordinate reference system of the line. + + Returns: + gpd.GeoDataFrame: A GeoDataFrame of the updated 3D skeleton with Z values. + """ + # For each line in the GeoDataFrame, extract points and calculate Z values + updated_geometries = [] + for i, geom in line.iterrows(): + line_geom = geom["geometry"] + + # If the line is not a LineString, skip it + if line_geom.geom_type != "LineString": + logging.warning(f"Geometry at index {i} is not a LineString") + continue + + # Extract points (2D) + coords_2d = np.array(line_geom.coords) + + # Update each coordinate with the Z value + coords_3d = [(x, y, z) for (x, y), z in zip(coords_2d, z_value)] + + # Create a new LineString with 3D coordinates + updated_geom = LineString(coords_3d) + updated_geometries.append(updated_geom) + + # Create a new GeoDataFrame for the updated lines + updated_line = gpd.GeoDataFrame(geometry=updated_geometries, crs=crs) + + # Add the Z mean values as a new column + updated_line["z_mean"] = z_value + + return updated_line diff --git a/lidro/create_virtual_point/vectors/run_update_skeleton_with_z.py b/lidro/create_virtual_point/vectors/run_update_skeleton_with_z.py new file mode 100644 index 0000000..71b0468 --- /dev/null +++ b/lidro/create_virtual_point/vectors/run_update_skeleton_with_z.py @@ -0,0 +1,99 @@ +# -*- coding: utf-8 -*- +""" Run function "update skeleton with z" +""" +import logging +import os + +import geopandas as gpd +import numpy as np +import pandas as pd + +from lidro.create_virtual_point.vectors.create_skeleton_3d import ( + skeleton_3d_with_flatten, + skeleton_3d_with_linear_regression, +) +from lidro.create_virtual_point.vectors.flatten_river import flatten_little_river +from lidro.create_virtual_point.vectors.linear_regression_model import ( + calculate_linear_regression_line, +) + + +def compute_skeleton_with_z( + points: gpd.GeoDataFrame, + line: gpd.GeoDataFrame, + mask_hydro: gpd.GeoDataFrame, + crs: str, + spacing: float, + length: int, + output_dir: str, +) -> gpd.GeoDataFrame: + """This function update skeleton with Z + + Args: + points (gpd.GeoDataFrame): A GeoDataFrame containing points along Hydro's Skeleton + line (gpd.GeoDataFrame): A GeoDataFrame containing each line from Hydro's Skeleton + mask_hydro (gpd.GeoDataFrame): A GeoDataFrame containing each mask hydro from Hydro's Skeleton + crs (str): A pyproj CRS object used to create the output GeoJSON file + spacing (float, optional): Spacing between the grid points in meters. + The default value is 0.5 meter + length (int, optional): Minimum length of a river to use the linear regression model. + The default value is 150 meters. + output_dir (str): Folder to output Mask Hydro without virtual points + + Returns: + gpd.GeoDataFrame: All skeleton with Z + """ + # Check if the points DataFrame is empty and all the values in the "points_knn" column are null + if points.empty or points["points_knn"].isnull().all(): + logging.warning("The points GeoDataFrame is empty. Saving the skeleton and mask hydro to GeoJSON.") + masks_without_points = gpd.GeoDataFrame(columns=mask_hydro.columns, crs=mask_hydro.crs) + for idx, mask in mask_hydro.iterrows(): + logging.warning(f"No points found within mask hydro {idx}. Adding to masks_without_points.") + masks_without_points = pd.concat([masks_without_points, gpd.GeoDataFrame([mask], crs=mask_hydro.crs)]) + # Save the resulting masks_without_points to a GeoJSON file + output_mask_hydro_error = os.path.join(output_dir, "mask_hydro_no_virtual_points.geojson") + masks_without_points.to_file(output_mask_hydro_error, driver="GeoJSON") + else: + # Calculate the length of the river + river_length = float(line.length.iloc[0]) + + # Step 2 : Model linear regression for river's length > 150 m + if river_length > length: + model, r2 = calculate_linear_regression_line(points, line, crs) + if model == np.poly1d([0, 0]) and r2 == 0.0: + masks_without_points = gpd.GeoDataFrame(columns=mask_hydro.columns, crs=mask_hydro.crs) + for idx, mask in mask_hydro.iterrows(): + masks_without_points = pd.concat( + [masks_without_points, gpd.GeoDataFrame([mask], crs=mask_hydro.crs)] + ) + # Save the resulting masks_without_points because of linear regression is impossible to a GeoJSON file + output_mask_hydro_error = os.path.join( + output_dir, "mask_hydro_no_virtual_points_with_regression.geojson" + ) + logging.warning( + f"Save masks_without_points because linear regression is impossible: {output_mask_hydro_error}" + ) + masks_without_points.to_file(output_mask_hydro_error, driver="GeoJSON") + # Apply model from skeleton + skeleton_hydro_3D = skeleton_3d_with_linear_regression(line, model, crs) + # Step 2 bis: Model flattening for river's length < 150 m or river's length == 150 m + else: + predicted_z = flatten_little_river(points, line) + if predicted_z == 0: + masks_without_points = gpd.GeoDataFrame(columns=mask_hydro.columns, crs=mask_hydro.crs) + for idx, mask in mask_hydro.iterrows(): + masks_without_points = pd.concat( + [masks_without_points, gpd.GeoDataFrame([mask], crs=mask_hydro.crs)] + ) + # Save the resulting masks_without_points because of flattening river is impossible to a GeoJSON file + output_mask_hydro_error = os.path.join( + output_dir, "mask_hydro_no_virtual_points_for_little_river.geojson" + ) + logging.warning( + f"Save masks_without_points because of flattening river is impossible: {output_mask_hydro_error}" + ) + masks_without_points.to_file(output_mask_hydro_error, driver="GeoJSON") + # Apply model from skeleton + skeleton_hydro_3D = skeleton_3d_with_flatten(line, model, crs) + + return skeleton_hydro_3D From a48796dcf8c5a28a09fc909ee306e21d709870fc Mon Sep 17 00:00:00 2001 From: mdupays Date: Mon, 21 Oct 2024 17:27:48 +0200 Subject: [PATCH 03/13] add function : return severals infos by bridge for detecting if there are alert with model regression --- .../vectors/intersect_skeleton_by_bridge.py | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 lidro/create_virtual_point/vectors/intersect_skeleton_by_bridge.py diff --git a/lidro/create_virtual_point/vectors/intersect_skeleton_by_bridge.py b/lidro/create_virtual_point/vectors/intersect_skeleton_by_bridge.py new file mode 100644 index 0000000..622b42c --- /dev/null +++ b/lidro/create_virtual_point/vectors/intersect_skeleton_by_bridge.py @@ -0,0 +1,103 @@ +# -*- coding: utf-8 -*- +""" Run function "extract skeleton by bridge" +""" +from typing import List + +import pandas as pd +from shapely.geometry import LineString, Point, Polygon +from shapely.ops import nearest_points + + +def sort_skeleton_points_by_proximity(skeleton: LineString, reference_geometry: Polygon, is_upstream: bool): + """ + Sort the points of a LineString skeleton based on their proximity to the edge of the reference geometry. + + Args: + skeleton (LineString): Skeleton geometry to sort. + reference_geometry (Polygon): Reference geometry (bridge) to sort the skeleton's points by proximity. + is_upstream (bool): Boolean indicating if the skeleton is upstream or downstream. + If True, the farthest point from the bridge is first (upstream). + If False, the closest point to the bridge is first (downstream). + + Returns: + LineString: A sorted LineString with points ordered based on whether the skeleton is upstream or downstream. + """ + # Find nearest point on the skeleton to the bridge + reference_point = nearest_points(reference_geometry, skeleton)[0] + points_with_distance = [(point, Point(point).distance(reference_point)) for point in skeleton.coords] + + # Sort points by their distance to the reference point + points_with_distance.sort(key=lambda x: x[1]) + sorted_points = [point for point, distance in points_with_distance] + + # If upstream, reverse the order so that the farthest point is first + if is_upstream: + sorted_points = sorted_points[::-1] + + return LineString(sorted_points) + + +def extract_bridge_skeleton_info(bridge: Polygon, list_skeleton_with_z: List): + """ + Extract intersection information between bridges and skeletons. + For each intersection, retrieve the bridge geometry, the geometry of the upstream (amont) skeleton, + the geometry of the downstream (aval) skeleton, the Z value of the last point of the upstream skeleton, + and the Z value of the first point of the downstream skeleton. + + Args: + bridge (Polygon): bridge geometries. + list_skeleton_with_z (list): List of skeletons with Z values and geometries. + + Returns: + pd.DataFrame: DataFrame containing bridge geometry, upstream skeleton geometry, + downstream skeleton geometry, Z value of the last upstream point, + and Z value of the first downstream point. + """ + intersecting_skeletons = [ + skeleton for skeleton in list_skeleton_with_z if bridge.intersects(skeleton["geometry"]).all() + ] + list_skeleton = [i for i in intersecting_skeletons if len(intersecting_skeletons) == 2] + # Check if exactly two skeletons intersect the bridge + if round(list_skeleton[0]["z_mean"].item(), 2) > round(list_skeleton[1]["z_mean"].item(), 2): + skeleton_upstream = list_skeleton[0] + skeleton_downstream = list_skeleton[1] + else: + skeleton_upstream = list_skeleton[1] + skeleton_downstream = list_skeleton[0] + + # Sort the points for upstream and downstream skeletons based on proximity to the bridge + geometry_upstream_sorted = sort_skeleton_points_by_proximity( + skeleton_upstream["geometry"].iloc[0], bridge, is_upstream=True + ) + geometry_downstream_sorted = sort_skeleton_points_by_proximity( + skeleton_downstream["geometry"].iloc[0], bridge, is_upstream=False + ) + + # Extract the Z value of the last point of the upstream skeleton + if isinstance(geometry_upstream_sorted, LineString): + last_point_upstream = list(geometry_upstream_sorted.coords)[-1] # Get the coordinates of the last point + z_upstream = last_point_upstream[2] # The Z value of the last point + else: + raise ValueError("Upstream skeleton geometry is not a LineString.") + + # Extract the Z value of the first point of the downstream skeleton + if isinstance(geometry_downstream_sorted, LineString): + first_point_downstream = list(geometry_downstream_sorted.coords)[0] # Get the coordinates of the first point + z_downstream = first_point_downstream[2] # The Z value of the first point + else: + raise ValueError("Downstream skeleton geometry is not a LineString.") + + # Extract alert if Z value of the upstream skeleton < Z value of the downstream skeleton + alert = z_upstream < z_downstream + + # Create a DataFrame to return the results + data = { + "bridge_geometry": [bridge], + "upstream_geometry": [geometry_upstream_sorted], + "downstream_geometry": [geometry_downstream_sorted], + "z_upstream": [z_upstream], + "z_downstream": [z_downstream], + "alert": [alert], + } + + return pd.DataFrame(data) From 918fc474407b727c66da7624a09b41d16a12e160 Mon Sep 17 00:00:00 2001 From: mdupays Date: Mon, 21 Oct 2024 17:29:36 +0200 Subject: [PATCH 04/13] update lauch create virtuals points with the news functions --- lidro/main_create_virtual_point.py | 66 +++++++++++++++++++++++------- 1 file changed, 52 insertions(+), 14 deletions(-) diff --git a/lidro/main_create_virtual_point.py b/lidro/main_create_virtual_point.py index b17861f..35a726b 100644 --- a/lidro/main_create_virtual_point.py +++ b/lidro/main_create_virtual_point.py @@ -10,15 +10,23 @@ import pandas as pd from omegaconf import DictConfig from pyproj import CRS +from shapely.geometry import CAP_STYLE -from lidro.create_virtual_point.pointcloud.convert_list_points_to_las import ( - list_points_to_las, +# from lidro.create_virtual_point.pointcloud.convert_list_points_to_las import ( +# list_points_to_las, +# ) +from lidro.create_virtual_point.vectors.intersect_skeleton_by_bridge import ( + extract_bridge_skeleton_info, ) from lidro.create_virtual_point.vectors.merge_skeleton_by_mask import ( merge_skeleton_by_mask, ) -from lidro.create_virtual_point.vectors.run_create_virtual_points import ( - compute_virtual_points_by_section, + +# from lidro.create_virtual_point.vectors.run_create_virtual_points import ( +# compute_virtual_points_by_section, +# ) +from lidro.create_virtual_point.vectors.run_update_skeleton_with_z import ( + compute_skeleton_with_z, ) @@ -52,10 +60,11 @@ def main(config: DictConfig): input_mask_hydro = config.io.input_mask_hydro input_skeleton = config.io.input_skeleton input_dir_points_skeleton = config.io.dir_points_skeleton + input_bridge = config.io.input_bridge crs = CRS.from_user_input(config.io.srid) river_length = config.virtual_point.vector.river_length points_grid_spacing = config.virtual_point.pointcloud.points_grid_spacing - classes = config.virtual_point.pointcloud.virtual_points_classes + # classes = config.virtual_point.pointcloud.virtual_points_classes # Step 1 : Merged all "points around skeleton" by lidar tile def process_points_knn(points_knn): @@ -80,9 +89,9 @@ def process_points_knn(points_knn): # Combine skeleton lines into a single polyline for each hydro entity gdf_merged = merge_skeleton_by_mask(input_skeleton, input_mask_hydro, output_dir, crs) - # Step 3 : Generate a regular grid of 3D points spaced every N meters inside each hydro entity - list_virtual_points = [ - compute_virtual_points_by_section( + # Step 3 : Apply Z from skeleton + list_skeleton_with_z = [ + compute_skeleton_with_z( points_gdf, gpd.GeoDataFrame([{"geometry": row["geometry_skeleton"]}], crs=crs), gpd.GeoDataFrame([{"geometry": row["geometry_mask"]}], crs=crs), @@ -93,12 +102,41 @@ def process_points_knn(points_knn): ) for idx, row in gdf_merged.iterrows() ] - logging.info("Calculate virtuals points by mask hydro and skeleton") - - # Step 4 : Save the virtual points in a file (.LAZ) - list_points_to_las(list_virtual_points, output_dir, crs, classes) - else: - logging.error("Error when merged all points around skeleton by lidar tile") + logging.info("Apply Z to skeleton") + # print(list_skeleton_with_z) + + for idx, skeleton_data in enumerate(list_skeleton_with_z): + skeleton_gdf = gpd.GeoDataFrame(skeleton_data, crs=crs) + skeleton_gdf.to_file(f"output_skeleton_{idx}.geojson", driver="GeoJSON") + logging.info("All skeletons have been saved as GeoJSON") + + # Step 4 : intersect skeletons by bridge and return info + gdf_bridge = gpd.read_file(input_bridge, crs=crs) + gdf_bridge["geometry"] = gdf_bridge.buffer(5, cap_style=CAP_STYLE.square) + + for bridge in gdf_bridge["geometry"]: + p = extract_bridge_skeleton_info(bridge, list_skeleton_with_z) + print(p) + + # # Step 3 : Generate a regular grid of 3D points spaced every N meters inside each hydro entity + # list_virtual_points = [ + # compute_virtual_points_by_section( + # points_gdf, + # gpd.GeoDataFrame([{"geometry": row["geometry_skeleton"]}], crs=crs), + # gpd.GeoDataFrame([{"geometry": row["geometry_mask"]}], crs=crs), + # crs, + # points_grid_spacing, + # river_length, + # output_dir, + # ) + # for idx, row in gdf_merged.iterrows() + # ] + # logging.info("Calculate virtuals points by mask hydro and skeleton") + + # # Step 4 : Save the virtual points in a file (.LAZ) + # list_points_to_las(list_virtual_points, output_dir, crs, classes) + # else: + # logging.error("Error when merged all points around skeleton by lidar tile") if __name__ == "__main__": From 1c625f5c8005c7200e98332cbcc1903ee57eee86 Mon Sep 17 00:00:00 2001 From: mdupays Date: Tue, 29 Oct 2024 16:20:01 +0100 Subject: [PATCH 05/13] update README : add alert from bridge --- README.md | 9 ++++++++- images/alerte_squelette.png | Bin 0 -> 72427 bytes images/correction_alerte_squelette.png | Bin 0 -> 77042 bytes images/lidro_correction_pont.odp | Bin 0 -> 22813 bytes 4 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 images/alerte_squelette.png create mode 100644 images/correction_alerte_squelette.png create mode 100644 images/lidro_correction_pont.odp diff --git a/README.md b/README.md index 80d1b3a..8bdfaa2 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,13 @@ 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écessitant plusieurs étapes intermédiaires : +* 5- Vérifier que les modèles de régréssion linéaire calculés le long du squelette s'écoulement progressivement le long du cours d'eau, c'est-à-dire éviter les zones de cuvettes sous les ponts. D'un point de vue mathématique, cela signifie que le "Dernier point squelette AMONT < Premier point squelette AVAL = ALERTE". +![Alerte](images/alerte_squelette.jpg) + +Pour éviter ces "alertes", il faut corriger les valeurs Z des N points du squelette jusqu'à le Z du squelette aval est égal au dernier point Z du squelette amont. +![Corrections des alertes](images/alerte_squelette.jpg) + +* 6- 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) @@ -259,6 +265,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.input_bridge : Le chemin contenant le tablier de pont produit par la production (ex. "./data/bridge/tablier_pont.geojson") * io.output_dir : Le chemin du dossier de sortie (les points virtuels à l'échelle du projet). Autres paramètres disponibles : diff --git a/images/alerte_squelette.png b/images/alerte_squelette.png new file mode 100644 index 0000000000000000000000000000000000000000..4b820e69eefacf231d9c0afa139a0a02fd41e10c GIT binary patch literal 72427 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 z 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

V;dX8(ET=g2l4=6f<4Nx{Ht{Mk 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 literal 0 HcmV?d00001 diff --git a/images/lidro_correction_pont.odp b/images/lidro_correction_pont.odp new file mode 100644 index 0000000000000000000000000000000000000000..f3ebc3cdfb03efb415819a75d7db84d7785ebd60 GIT binary patch literal 22813 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 UE(PV`VNlXXjMSqiOb++{2es5` Date: Tue, 29 Oct 2024 16:21:25 +0100 Subject: [PATCH 06/13] update config : add bridge to parameters and update keep_classes and keep_neghboors_classes --- configs/configs_lidro.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configs/configs_lidro.yaml b/configs/configs_lidro.yaml index 2a91d9b..05799cb 100644 --- a/configs/configs_lidro.yaml +++ b/configs/configs_lidro.yaml @@ -34,7 +34,7 @@ mask_generation: dilation_size: 3 filter: # Classes to be considered as "non-water" - keep_classes: [0, 1, 2, 3, 4, 5, 6, 17, 64, 65, 66, 67] # All classes + keep_classes: [0, 1, 2, 3, 4, 5, 6, 17, 64, 65, 66, 67, 69] # All classes vector: # Filter water's area (m²) min_water_area: 150 @@ -69,7 +69,7 @@ skeleton: virtual_point: filter: # Keep ground and water pointclouds between Hydro Mask and Hydro Mask buffer - keep_neighbors_classes: [2, 9] + keep_neighbors_classes: [2, 69] vector: # Distance in meters between 2 consecutive points from Skeleton Hydro distance_meters: 5 From e010ed4fdc9ca0f8e00da4758d6fbe3854cad2b3 Mon Sep 17 00:00:00 2001 From: mdupays Date: Tue, 29 Oct 2024 16:35:38 +0100 Subject: [PATCH 07/13] update lauch create virtual point : add alert from bridge --- lidro/main_create_virtual_point.py | 75 +++++++++++++----------------- 1 file changed, 32 insertions(+), 43 deletions(-) diff --git a/lidro/main_create_virtual_point.py b/lidro/main_create_virtual_point.py index 35a726b..d8384e2 100644 --- a/lidro/main_create_virtual_point.py +++ b/lidro/main_create_virtual_point.py @@ -10,21 +10,19 @@ import pandas as pd from omegaconf import DictConfig from pyproj import CRS -from shapely.geometry import CAP_STYLE -# from lidro.create_virtual_point.pointcloud.convert_list_points_to_las import ( -# list_points_to_las, -# ) -from lidro.create_virtual_point.vectors.intersect_skeleton_by_bridge import ( - extract_bridge_skeleton_info, +from lidro.create_virtual_point.pointcloud.convert_list_points_to_las import ( + list_points_to_las, ) from lidro.create_virtual_point.vectors.merge_skeleton_by_mask import ( merge_skeleton_by_mask, ) - -# from lidro.create_virtual_point.vectors.run_create_virtual_points import ( -# compute_virtual_points_by_section, -# ) +from lidro.create_virtual_point.vectors.rectify_alert import ( + create_list_rectify_skeleton_with_mask, +) +from lidro.create_virtual_point.vectors.run_create_virtual_points import ( + compute_virtual_points_by_section, +) from lidro.create_virtual_point.vectors.run_update_skeleton_with_z import ( compute_skeleton_with_z, ) @@ -64,7 +62,7 @@ def main(config: DictConfig): crs = CRS.from_user_input(config.io.srid) river_length = config.virtual_point.vector.river_length points_grid_spacing = config.virtual_point.pointcloud.points_grid_spacing - # classes = config.virtual_point.pointcloud.virtual_points_classes + classes = config.virtual_point.pointcloud.virtual_points_classes # Step 1 : Merged all "points around skeleton" by lidar tile def process_points_knn(points_knn): @@ -96,7 +94,6 @@ def process_points_knn(points_knn): gpd.GeoDataFrame([{"geometry": row["geometry_skeleton"]}], crs=crs), gpd.GeoDataFrame([{"geometry": row["geometry_mask"]}], crs=crs), crs, - points_grid_spacing, river_length, output_dir, ) @@ -105,38 +102,30 @@ def process_points_knn(points_knn): logging.info("Apply Z to skeleton") # print(list_skeleton_with_z) - for idx, skeleton_data in enumerate(list_skeleton_with_z): - skeleton_gdf = gpd.GeoDataFrame(skeleton_data, crs=crs) - skeleton_gdf.to_file(f"output_skeleton_{idx}.geojson", driver="GeoJSON") - logging.info("All skeletons have been saved as GeoJSON") - # Step 4 : intersect skeletons by bridge and return info - gdf_bridge = gpd.read_file(input_bridge, crs=crs) - gdf_bridge["geometry"] = gdf_bridge.buffer(5, cap_style=CAP_STYLE.square) - - for bridge in gdf_bridge["geometry"]: - p = extract_bridge_skeleton_info(bridge, list_skeleton_with_z) - print(p) - - # # Step 3 : Generate a regular grid of 3D points spaced every N meters inside each hydro entity - # list_virtual_points = [ - # compute_virtual_points_by_section( - # points_gdf, - # gpd.GeoDataFrame([{"geometry": row["geometry_skeleton"]}], crs=crs), - # gpd.GeoDataFrame([{"geometry": row["geometry_mask"]}], crs=crs), - # crs, - # points_grid_spacing, - # river_length, - # output_dir, - # ) - # for idx, row in gdf_merged.iterrows() - # ] - # logging.info("Calculate virtuals points by mask hydro and skeleton") - - # # Step 4 : Save the virtual points in a file (.LAZ) - # list_points_to_las(list_virtual_points, output_dir, crs, classes) - # else: - # logging.error("Error when merged all points around skeleton by lidar tile") + gdf_skeleton_rectify_with_mask = create_list_rectify_skeleton_with_mask( + input_bridge, input_mask_hydro, list_skeleton_with_z, crs + ) + logging.info("intersect skeletons by bridge and return info") + print(gdf_skeleton_rectify_with_mask) + + # Step 5 : Generate a regular grid of 3D points spaced every N meters inside each hydro entity + list_virtual_points = [ + compute_virtual_points_by_section( + gpd.GeoDataFrame(geometry=row["geometry"], crs=crs), + gpd.GeoDataFrame(geometry=row["geometry_mask"], crs=crs), + crs, + points_grid_spacing, + ) + for idx, row in enumerate(gdf_skeleton_rectify_with_mask) + ] + logging.info("Calculate virtuals points by mask hydro and skeleton") + # print(list_virtual_points) + + # Step 6 : Save the virtual points in a file (.LAZ) + list_points_to_las(list_virtual_points, output_dir, crs, classes) + else: + logging.error("Error when merged all points around skeleton by lidar tile") if __name__ == "__main__": From cd62eb8a24f7366849da2080a8886d4eb47ee4c6 Mon Sep 17 00:00:00 2001 From: mdupays Date: Tue, 29 Oct 2024 16:36:47 +0100 Subject: [PATCH 08/13] add new function : detect upstream and downstream skeleton by bridge --- .../vectors/intersect_skeleton_by_bridge.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lidro/create_virtual_point/vectors/intersect_skeleton_by_bridge.py b/lidro/create_virtual_point/vectors/intersect_skeleton_by_bridge.py index 622b42c..3b8b29c 100644 --- a/lidro/create_virtual_point/vectors/intersect_skeleton_by_bridge.py +++ b/lidro/create_virtual_point/vectors/intersect_skeleton_by_bridge.py @@ -54,7 +54,7 @@ def extract_bridge_skeleton_info(bridge: Polygon, list_skeleton_with_z: List): and Z value of the first downstream point. """ intersecting_skeletons = [ - skeleton for skeleton in list_skeleton_with_z if bridge.intersects(skeleton["geometry"]).all() + skeleton for skeleton in list_skeleton_with_z if bridge.intersects(skeleton["geometry"]).any() ] list_skeleton = [i for i in intersecting_skeletons if len(intersecting_skeletons) == 2] # Check if exactly two skeletons intersect the bridge From 3f5217ff32421866424e6aca5888af9c7e10766e Mon Sep 17 00:00:00 2001 From: mdupays Date: Tue, 29 Oct 2024 16:42:31 +0100 Subject: [PATCH 09/13] create a new function : generate alert by bridge from skeletons --- .../vectors/rectify_alert.py | 130 ++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 lidro/create_virtual_point/vectors/rectify_alert.py diff --git a/lidro/create_virtual_point/vectors/rectify_alert.py b/lidro/create_virtual_point/vectors/rectify_alert.py new file mode 100644 index 0000000..2cba98c --- /dev/null +++ b/lidro/create_virtual_point/vectors/rectify_alert.py @@ -0,0 +1,130 @@ +# -*- coding: utf-8 -*- +"""Optimized function to adjust Z values of the downstream skeleton""" +import logging +from typing import List, Tuple + +import geopandas as gpd +import numpy as np +import pandas as pd +from shapely.geometry import CAP_STYLE, LineString + +from lidro.create_virtual_point.vectors.intersect_skeleton_by_bridge import ( + extract_bridge_skeleton_info, +) + + +def rectify_z_from_downstream_skeleton( + input_bridge: str, list_skeleton_with_z: List, crs: str +) -> Tuple[gpd.GeoDataFrame, gpd.GeoDataFrame]: + """ + Adjusts the Z values of N points in the downstream skeleton to match the Z value + of the last point in the upstream skeleton, up until reaching z_upstream + 0.1. + If no alert is active, adds the original downstream geometry without modification. + + Args: + input_bridge (str): Path to the bridge input file + list_skeleton_with_z (List): List of skeletons with Z values and associated hydro mask + crs (str): Coordinate reference system + + Returns: + Tuple[gpd.GeoDataFrame, gpd.GeoDataFrame]: A tuple of GeoDataFrames containing + the updated or original downstream and upstream skeleton geometries. + """ + # Load bridge data and apply a 5m buffer to each geometry + gdf_bridge = gpd.read_file(input_bridge, crs=crs) + gdf_bridge["geometry"] = gdf_bridge.buffer(5, cap_style=CAP_STYLE.square) + + downstream_geometries = [] + upstream_geometries = [] + + for bridge in gdf_bridge["geometry"]: + skeleton_info = extract_bridge_skeleton_info(bridge, list_skeleton_with_z) + + downstream_geometry = skeleton_info["downstream_geometry"] + upstream_geometry = skeleton_info["upstream_geometry"] + + # Add upstream geometry directly without modification + upstream_geometries.extend(upstream_geometry) + + # Check if alert is active and process downstream geometry accordingly + if skeleton_info["alert"].iloc[0] is True: + logging.info("Alert detected for bridge intersection. Updating Z values...") + z_upstream = float(skeleton_info["z_upstream"].iloc[0]) + z_downstream = float(skeleton_info["z_downstream"].iloc[0]) + + for line in downstream_geometry: + # Convert coordinates to NumPy arrays for efficient Z-value handling + coords = np.array(line.coords) + x_vals, y_vals, z_vals = coords[:, 0], coords[:, 1], coords[:, 2] + + # Set the initial Z value of the downstream skeleton to z_downstream + z_vals[0] = z_downstream + + # Apply z_upstream to all points in the downstream skeleton until reaching z_upstream + z_vals[z_vals > z_upstream] = z_upstream + + # Rebuild the geometry with the updated Z values + updated_coords = np.column_stack([x_vals, y_vals, z_vals]) + downstream_geometries.append(LineString(updated_coords)) + else: + # If no alert, add the original downstream geometry + logging.info("No alert detected. Adding original downstream geometry.") + downstream_geometries.extend(downstream_geometry) + + # Create GeoDataFrames for downstream and upstream geometries + downstream_gdf = gpd.GeoDataFrame([{"geometry": geom} for geom in downstream_geometries], crs=crs) + + upstream_gdf = gpd.GeoDataFrame([{"geometry": geom} for geom in upstream_geometries], crs=crs) + + return downstream_gdf, upstream_gdf + + +def create_list_rectify_skeleton_with_mask( + input_bridge: str, hydro_mask_path: str, list_skeleton_with_z: List, crs: str +) -> List[gpd.GeoDataFrame]: + """ + Processes skeletons per hydro mask, prioritizes downstream geometries, and returns + a list of GeoDataFrames containing unique skeleton geometries intersected + with each hydro mask along with the geometry of each mask. + + Args: + input_bridge (str): Path to the bridge input file + list_skeleton_with_z (List): List of skeletons with Z values and associated hydro masks + crs (str): Coordinate reference system + hydro_mask_path (str): Path to the hydro mask GeoJSON file + + Returns: + List[gpd.GeoDataFrame]: A list of GeoDataFrames, each containing a unique skeleton geometry + intersected with its hydro mask and the geometry of the mask itself. + """ + # # Load the hydro mask GeoJSON as a GeoDataFrame + hydro_masks = gpd.read_file(hydro_mask_path).to_crs(crs) + + # # Generate downstream and upstream skeletons + downstream_gdf, upstream_gdf = rectify_z_from_downstream_skeleton(input_bridge, list_skeleton_with_z, crs) + + # # Identify unique downstream geometries and add unmatched upstream geometries + # Keep Only the Matching Geometries from downstream_gdf + result_gdf = downstream_gdf.drop_duplicates(subset="geometry") + # Add Non-Matching Geometries from upstream_gdf + unmatched_upstream = upstream_gdf[upstream_gdf["geometry"].isin(downstream_gdf["geometry"]) is False] + result_gdf = pd.concat([result_gdf, unmatched_upstream], ignore_index=True) + + # # For each mask, get the intersecting skeleton geometries and prioritize downstream geometries + list_result_gdfs = [] + for mask in hydro_masks.itertuples(): + # Filter result_gdf to only include geometries that intersect with the current mask + intersecting_geometries = result_gdf[result_gdf.intersects(mask.geometry)] + # Prioritize downstream geometries within the intersecting set + mask_downstream = intersecting_geometries[intersecting_geometries["geometry"].isin(downstream_gdf["geometry"])] + if not mask_downstream.empty: + mask_gdf = mask_downstream + else: + mask_gdf = intersecting_geometries + # Add the mask geometry as a new column for reference + mask_gdf = mask_gdf.copy() + mask_gdf["geometry_mask"] = mask.geometry + + list_result_gdfs.append(mask_gdf) + + return list_result_gdfs From 7f1b127f0c293985fec9f01c98104f03eb54e26d Mon Sep 17 00:00:00 2001 From: mdupays Date: Tue, 29 Oct 2024 16:43:23 +0100 Subject: [PATCH 10/13] add function : update Z from skeleton thank to alert --- .../vectors/run_update_skeleton_with_z.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/lidro/create_virtual_point/vectors/run_update_skeleton_with_z.py b/lidro/create_virtual_point/vectors/run_update_skeleton_with_z.py index 71b0468..2ba3809 100644 --- a/lidro/create_virtual_point/vectors/run_update_skeleton_with_z.py +++ b/lidro/create_virtual_point/vectors/run_update_skeleton_with_z.py @@ -3,6 +3,7 @@ """ import logging import os +from typing import List import geopandas as gpd import numpy as np @@ -23,25 +24,21 @@ def compute_skeleton_with_z( line: gpd.GeoDataFrame, mask_hydro: gpd.GeoDataFrame, crs: str, - spacing: float, length: int, output_dir: str, -) -> gpd.GeoDataFrame: +) -> List: """This function update skeleton with Z Args: points (gpd.GeoDataFrame): A GeoDataFrame containing points along Hydro's Skeleton line (gpd.GeoDataFrame): A GeoDataFrame containing each line from Hydro's Skeleton mask_hydro (gpd.GeoDataFrame): A GeoDataFrame containing each mask hydro from Hydro's Skeleton - crs (str): A pyproj CRS object used to create the output GeoJSON file - spacing (float, optional): Spacing between the grid points in meters. - The default value is 0.5 meter length (int, optional): Minimum length of a river to use the linear regression model. The default value is 150 meters. output_dir (str): Folder to output Mask Hydro without virtual points Returns: - gpd.GeoDataFrame: All skeleton with Z + List : the 3D skeleton's geometrie (Polyligne Z) Z with Z mean """ # Check if the points DataFrame is empty and all the values in the "points_knn" column are null if points.empty or points["points_knn"].isnull().all(): @@ -94,6 +91,6 @@ def compute_skeleton_with_z( ) masks_without_points.to_file(output_mask_hydro_error, driver="GeoJSON") # Apply model from skeleton - skeleton_hydro_3D = skeleton_3d_with_flatten(line, model, crs) + skeleton_hydro_3D = skeleton_3d_with_flatten(line, predicted_z, crs) return skeleton_hydro_3D From 4ff8bbae29d54f29e7a69cb12ae845ce4e36fb76 Mon Sep 17 00:00:00 2001 From: mdupays Date: Tue, 29 Oct 2024 16:44:25 +0100 Subject: [PATCH 11/13] update fucntion run_create_virtual_point with alert and delete function apply_z_from_grid.py (useless now) --- .../vectors/apply_Z_from_grid.py | 48 -------- .../vectors/run_create_virtual_points.py | 112 ++++++------------ 2 files changed, 37 insertions(+), 123 deletions(-) delete mode 100644 lidro/create_virtual_point/vectors/apply_Z_from_grid.py diff --git a/lidro/create_virtual_point/vectors/apply_Z_from_grid.py b/lidro/create_virtual_point/vectors/apply_Z_from_grid.py deleted file mode 100644 index 9e6d497..0000000 --- a/lidro/create_virtual_point/vectors/apply_Z_from_grid.py +++ /dev/null @@ -1,48 +0,0 @@ -# -*- coding: utf-8 -*- -""" Apply Z from grid -""" -import geopandas as gpd -from shapely import line_locate_point - - -def calculate_grid_z_with_model(points: gpd.GeoDataFrame, line: gpd.GeoDataFrame, model) -> gpd.GeoDataFrame: - """Calculate Z with regression model. - If points are not on the line, these points will be projected on this line - - Args: - points (gpd.GeoDataFrame): A GeoDataFrame containing the grid points - line (gpd.GeoDataFrame): A GeoDataFrame containing each line from Hydro's Skeleton - model (dict): A dictionary representing the regression model - - Returns: - gpd.GeoDataFrame: A GeoDataFrame of initial points, but with a Z. - """ - # Calculate curvilinear abscises for all points of the grid - curvilinear_abs = line_locate_point(line.loc[0, "geometry"], points["geometry"].array, normalized=False) - - # Prediction of Z values using the regression model - # Its possible to use non-linear models for prediction - predicted_z = model(curvilinear_abs) - - # Generate a new geodataframe, with 3D points - grid_with_z = calculate_grid_z(points, predicted_z) - - return grid_with_z - - -def calculate_grid_z(points: gpd.GeoDataFrame, predicted_z: float) -> gpd.GeoDataFrame: - """Calculate Z grid - - Args: - points (gpd.GeoDataFrame): A GeoDataFrame containing the grid points - predicted_z (float): predicted Z for river - - Returns: - gpd.GeoDataFrame: A GeoDataFrame of initial points, but with a Z. - """ - # Generate a new geodataframe, with 3D points - grid_with_z = gpd.GeoDataFrame( - geometry=gpd.GeoSeries().from_xy(points.geometry.x, points.geometry.y, predicted_z), crs=points.crs - ) - - return grid_with_z diff --git a/lidro/create_virtual_point/vectors/run_create_virtual_points.py b/lidro/create_virtual_point/vectors/run_create_virtual_points.py index 487848d..06ab77d 100644 --- a/lidro/create_virtual_point/vectors/run_create_virtual_points.py +++ b/lidro/create_virtual_point/vectors/run_create_virtual_points.py @@ -1,105 +1,67 @@ # -*- coding: utf-8 -*- """ Run function "virtual points" """ -import logging -import os - import geopandas as gpd import numpy as np -import pandas as pd +from scipy.interpolate import interp1d +from shapely.geometry import Point -from lidro.create_virtual_point.vectors.apply_Z_from_grid import ( - calculate_grid_z, - calculate_grid_z_with_model, -) from lidro.create_virtual_point.vectors.create_grid_2D_inside_maskhydro import ( generate_grid_from_geojson, ) -from lidro.create_virtual_point.vectors.flatten_river import flatten_little_river -from lidro.create_virtual_point.vectors.linear_regression_model import ( - calculate_linear_regression_line, -) def compute_virtual_points_by_section( - points: gpd.GeoDataFrame, - line: gpd.GeoDataFrame, + line_gdf: gpd.GeoDataFrame, mask_hydro: gpd.GeoDataFrame, crs: str, spacing: float, - length: int, - output_dir: str, + # output_dir: str, ) -> gpd.GeoDataFrame: """This function generates a regular grid of 3D points spaced every N meters inside each hydro entity = virtual point Args: - points (gpd.GeoDataFrame): A GeoDataFrame containing points along Hydro's Skeleton - line (gpd.GeoDataFrame): A GeoDataFrame containing each line from Hydro's Skeleton + line_gdf (gpd.GeoDataFrame): A GeoDataFrame containing each line from Hydro's Skeleton 3D (rectify or not) mask_hydro (gpd.GeoDataFrame): A GeoDataFrame containing each mask hydro from Hydro's Skeleton crs (str): A pyproj CRS object used to create the output GeoJSON file spacing (float, optional): Spacing between the grid points in meters. The default value is 0.5 meter - length (int, optional): Minimum length of a river to use the linear regression model. - The default value is 150 meters. - output_dir (str): Folder to output Mask Hydro without virtual points Returns: gpd.GeoDataFrame: All virtual points by Mask Hydro """ - # Check if the points DataFrame is empty and all the values in the "points_knn" column are null - if points.empty or points["points_knn"].isnull().all(): - logging.warning("The points GeoDataFrame is empty. Saving the skeleton and mask hydro to GeoJSON.") - masks_without_points = gpd.GeoDataFrame(columns=mask_hydro.columns, crs=mask_hydro.crs) - for idx, mask in mask_hydro.iterrows(): - logging.warning(f"No points found within mask hydro {idx}. Adding to masks_without_points.") - masks_without_points = pd.concat([masks_without_points, gpd.GeoDataFrame([mask], crs=mask_hydro.crs)]) - # Save the resulting masks_without_points to a GeoJSON file - output_mask_hydro_error = os.path.join(output_dir, "mask_hydro_no_virtual_points.geojson") - masks_without_points.to_file(output_mask_hydro_error, driver="GeoJSON") - else: - # Step 1: Generates a regular 2D grid of evenly spaced points within a Mask Hydro - gdf_grid = generate_grid_from_geojson(mask_hydro, spacing) - # Calculate the length of the river - river_length = float(line.length.iloc[0]) + # Generate grid 2D inside mask hydro + grid_gdf = generate_grid_from_geojson(mask_hydro, spacing) + + # Extract the polyline from skeleton hydro (assuming there is only one geometry in line_gdf) + skeleton_line = line_gdf.iloc[0].geometry + # Extract points and their coordinates + polyline_coords = [Point(coord) for coord in skeleton_line.coords] + # Extract Z values from the 3D coordinates + z_values = np.array([coord[2] for coord in skeleton_line.coords]) # assuming the polyline is in 3D + + # Compute cumulative distances along the polyline for interpolation + cumulative_distances = [0] + [ + skeleton_line.project(Point(polyline_coords[i].x, polyline_coords[i].y)) + for i in range(1, len(polyline_coords)) + ] + + # Interpolation function for Z based on cumulative distances along the polyline + z_interpolator = interp1d(cumulative_distances, z_values, kind="linear", fill_value="extrapolate") + + # Assign Z values to grid points by projecting each point onto the polyline + z_values_for_grid = [] + for point in grid_gdf.geometry: + # Project the 2D point onto the polyline to get the distance along the polyline + distance_on_polyline = skeleton_line.project(point) + # Interpolate the Z value at this distance + z_value = z_interpolator(distance_on_polyline) + z_values_for_grid.append(z_value) - # Step 2 : Model linear regression for river's length > 150 m - if river_length > length: - model, r2 = calculate_linear_regression_line(points, line, crs) - if model == np.poly1d([0, 0]) and r2 == 0.0: - masks_without_points = gpd.GeoDataFrame(columns=mask_hydro.columns, crs=mask_hydro.crs) - for idx, mask in mask_hydro.iterrows(): - masks_without_points = pd.concat( - [masks_without_points, gpd.GeoDataFrame([mask], crs=mask_hydro.crs)] - ) - # Save the resulting masks_without_points because of linear regression is impossible to a GeoJSON file - output_mask_hydro_error = os.path.join( - output_dir, "mask_hydro_no_virtual_points_with_regression.geojson" - ) - logging.warning( - f"Save masks_without_points because linear regression is impossible: {output_mask_hydro_error}" - ) - masks_without_points.to_file(output_mask_hydro_error, driver="GeoJSON") - # Apply linear regression model at the rivers - gdf_grid_with_z = calculate_grid_z_with_model(gdf_grid, line, model) - # Step 2 bis: Model flattening for river's length < 150 m or river's length == 150 m - else: - predicted_z = flatten_little_river(points, line) - if predicted_z == 0: - masks_without_points = gpd.GeoDataFrame(columns=mask_hydro.columns, crs=mask_hydro.crs) - for idx, mask in mask_hydro.iterrows(): - masks_without_points = pd.concat( - [masks_without_points, gpd.GeoDataFrame([mask], crs=mask_hydro.crs)] - ) - # Save the resulting masks_without_points because of flattening river is impossible to a GeoJSON file - output_mask_hydro_error = os.path.join( - output_dir, "mask_hydro_no_virtual_points_for_little_river.geojson" - ) - logging.warning( - f"Save masks_without_points because of flattening river is impossible: {output_mask_hydro_error}" - ) - masks_without_points.to_file(output_mask_hydro_error, driver="GeoJSON") - # Apply flattening model at the rivers - gdf_grid_with_z = calculate_grid_z(gdf_grid, predicted_z) + # Create a new GeoDataFrame with X, Y, and interpolated Z values as 3D points + grid_with_z = gpd.GeoDataFrame( + geometry=gpd.points_from_xy(grid_gdf.geometry.x, grid_gdf.geometry.y, z_values_for_grid), crs=grid_gdf.crs + ) - return gdf_grid_with_z + return grid_with_z From 2f7ab2e302914aad2fca297a4d6dbe7f4724b2cb Mon Sep 17 00:00:00 2001 From: mdupays Date: Tue, 29 Oct 2024 16:46:51 +0100 Subject: [PATCH 12/13] update images --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8bdfaa2..218b98a 100644 --- a/README.md +++ b/README.md @@ -60,10 +60,10 @@ Pour les cours d'eau supérieurs à 150 m de long : * 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- Vérifier que les modèles de régréssion linéaire calculés le long du squelette s'écoulement progressivement le long du cours d'eau, c'est-à-dire éviter les zones de cuvettes sous les ponts. D'un point de vue mathématique, cela signifie que le "Dernier point squelette AMONT < Premier point squelette AVAL = ALERTE". -![Alerte](images/alerte_squelette.jpg) +![Alerte](images/alerte_squelette.png) Pour éviter ces "alertes", il faut corriger les valeurs Z des N points du squelette jusqu'à le Z du squelette aval est égal au dernier point Z du squelette amont. -![Corrections des alertes](images/alerte_squelette.jpg) +![Corrections des alertes](images/correction_alerte_squelette.png) * 6- 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" From d35604b20ef061f580a86af78333cefc00bac0ff Mon Sep 17 00:00:00 2001 From: mdupays Date: Tue, 29 Oct 2024 17:36:42 +0100 Subject: [PATCH 13/13] update rectify alert --- lidro/create_virtual_point/vectors/rectify_alert.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lidro/create_virtual_point/vectors/rectify_alert.py b/lidro/create_virtual_point/vectors/rectify_alert.py index 2cba98c..cdeb411 100644 --- a/lidro/create_virtual_point/vectors/rectify_alert.py +++ b/lidro/create_virtual_point/vectors/rectify_alert.py @@ -47,7 +47,7 @@ def rectify_z_from_downstream_skeleton( upstream_geometries.extend(upstream_geometry) # Check if alert is active and process downstream geometry accordingly - if skeleton_info["alert"].iloc[0] is True: + if skeleton_info["alert"].iloc[0]: logging.info("Alert detected for bridge intersection. Updating Z values...") z_upstream = float(skeleton_info["z_upstream"].iloc[0]) z_downstream = float(skeleton_info["z_downstream"].iloc[0]) @@ -66,7 +66,8 @@ def rectify_z_from_downstream_skeleton( # Rebuild the geometry with the updated Z values updated_coords = np.column_stack([x_vals, y_vals, z_vals]) downstream_geometries.append(LineString(updated_coords)) - else: + + if not skeleton_info["alert"].iloc[0]: # If no alert, add the original downstream geometry logging.info("No alert detected. Adding original downstream geometry.") downstream_geometries.extend(downstream_geometry) @@ -84,8 +85,8 @@ def create_list_rectify_skeleton_with_mask( ) -> List[gpd.GeoDataFrame]: """ Processes skeletons per hydro mask, prioritizes downstream geometries, and returns - a list of GeoDataFrames containing unique skeleton geometries intersected - with each hydro mask along with the geometry of each mask. + a list of GeoDataFrames containing unique skeleton geometries intersected with each hydro mask, + along with the geometry of each mask. Args: input_bridge (str): Path to the bridge input file @@ -107,7 +108,7 @@ def create_list_rectify_skeleton_with_mask( # Keep Only the Matching Geometries from downstream_gdf result_gdf = downstream_gdf.drop_duplicates(subset="geometry") # Add Non-Matching Geometries from upstream_gdf - unmatched_upstream = upstream_gdf[upstream_gdf["geometry"].isin(downstream_gdf["geometry"]) is False] + unmatched_upstream = upstream_gdf[~upstream_gdf["geometry"].isin(downstream_gdf["geometry"])] result_gdf = pd.concat([result_gdf, unmatched_upstream], ignore_index=True) # # For each mask, get the intersecting skeleton geometries and prioritize downstream geometries