From f3dd36b628cbae968eb43a401a8ac7458219e0f4 Mon Sep 17 00:00:00 2001 From: Joris Nettelstroth Date: Mon, 8 Dec 2025 11:15:27 +0100 Subject: [PATCH 1/2] Make welding more robust - Use previous result if current result would result in an empty geometry - Explode Multi- into LineStrings (because MultiLineStrings can cause issues in other places) --- src/dhnx/gistools/geometry_operations.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/dhnx/gistools/geometry_operations.py b/src/dhnx/gistools/geometry_operations.py index d7736c95..3b3dc7bc 100644 --- a/src/dhnx/gistools/geometry_operations.py +++ b/src/dhnx/gistools/geometry_operations.py @@ -364,6 +364,9 @@ def weld_segments( gdf_line_net_new = _weld_segments( gdf_line_net_new, gdf_line_gen, gdf_line_houses, debug_plotting ) + if len(gdf_line_net_new) == 0: + gdf_line_net_new = gdf_line_net_last + break logger.info("Welding lines... done") return gdf_line_net_new @@ -586,6 +589,7 @@ def debug_plot(neighbours, color="red"): # Merge the MultiLineString into a single object merged_line = linemerge(multi_line) gdf_merged = gpd.GeoDataFrame(geometry=[merged_line], crs=crs) + gdf_merged = gdf_merged.explode() # Explode Multi- into LineStrings debug_plot(neighbours) # Plot the segments before the merge debug_plot(gdf_merged, color="orange") # ...and after the merge gdf_line_net_new = pd.concat( From 5873aca802dc6a3126bb3b916def2bf8a56085d6 Mon Sep 17 00:00:00 2001 From: Joris Nettelstroth Date: Tue, 9 Dec 2025 14:21:26 +0100 Subject: [PATCH 2/2] Make function independent of geometry attribute name --- src/dhnx/gistools/geometry_operations.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/dhnx/gistools/geometry_operations.py b/src/dhnx/gistools/geometry_operations.py index 3b3dc7bc..5bcc93dc 100644 --- a/src/dhnx/gistools/geometry_operations.py +++ b/src/dhnx/gistools/geometry_operations.py @@ -229,11 +229,11 @@ def check_double_points(gdf, radius=0.001, id_column=None): return l_ids -def gdf_to_df(gdf): +def gdf_to_df(df): """Converts a GeoDataFrame to a pandas.DataFrame by deleting the geometry column.""" - - df = pd.DataFrame(gdf[[col for col in gdf.columns if col != "geometry"]]) + if isinstance(df, gpd.GeoDataFrame): + df = df.drop(columns=df.geometry.name) return df