From d5468778b3b74ccdd11cd03847dec8a5c3c936f1 Mon Sep 17 00:00:00 2001 From: Santonia27 Date: Thu, 6 Feb 2025 23:34:11 +0100 Subject: [PATCH 1/2] add param to only get spatial output --- hydromt_fiat/fiat.py | 49 +++++++++++++++++++++++++++++--------------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/hydromt_fiat/fiat.py b/hydromt_fiat/fiat.py index 7cb4cc5a..8650f4aa 100644 --- a/hydromt_fiat/fiat.py +++ b/hydromt_fiat/fiat.py @@ -135,6 +135,7 @@ def setup_output( output_dir: str = "output", output_csv_name: str = "output.csv", output_vector_name: Union[str, List[str]] = "spatial.gpkg", + output_single_file: bool = False ) -> None: """Setup Delft-FIAT output folder and files. @@ -146,14 +147,19 @@ def setup_output( The name of the output csv file, by default "output.csv". output_vector_name : Union[str, List[str]], optional The name of the output vector file, by default "spatial.gpkg". + output_single_file: bool + If True the exposure data is written in a single spatial file. Default set to False """ + self.output_single_file = False self.set_config("output.path", output_dir) self.set_config("output.csv.name", output_csv_name) if isinstance(output_vector_name, str): output_vector_name = [output_vector_name] for i, name in enumerate(output_vector_name): self.set_config(f"output.geom.name{str(i+1)}", name) - + if output_single_file: + self.output_single_file = True + def setup_region( self, region, @@ -1667,22 +1673,29 @@ def write_geoms(self): """_summary_.""" if self.exposure and "exposure" in self._tables: fn = "exposure/{name}.gpkg" - for i, (geom, name) in enumerate( - zip(self.exposure.exposure_geoms, self.exposure.geom_names) - ): - _fn = os.path.join(self.root, fn.format(name=name)) - if not os.path.isdir(os.path.dirname(_fn)): - os.makedirs(os.path.dirname(_fn)) - - # This whole ordeal is terrible, - # but it needs a refactor that is too much to fix this properly - self.set_config( - f"exposure.geom.file{str(i+1)}", - fn.format(name=name), - ) - geom.to_file(_fn) - if self.geoms: - GridModel.write_geoms(self) + if self.output_single_file : + gdf = self.exposure.get_full_gdf(self.exposure.exposure_db) + name = "exposure.gpkg" + _fn = os.path.join(self.root, "exposure" , name) + gdf.to_file(os.path.join(self.root, _fn)) + else: + for i, (geom, name) in enumerate( + zip(self.exposure.exposure_geoms, self.exposure.geom_names) + ): + _fn = os.path.join(self.root, fn.format(name=name)) + if not os.path.isdir(os.path.dirname(_fn)): + os.makedirs(os.path.dirname(_fn)) + + # This whole ordeal is terrible, + # but it needs a refactor that is too much to fix this properly + self.set_config( + f"exposure.geom.file{str(i+1)}", + fn.format(name=name), + ) + geom.to_file(_fn) + if self.geoms: + GridModel.write_geoms(self) + def write_tables(self) -> None: if len(self._tables) == 0: @@ -1708,6 +1721,8 @@ def write_tables(self) -> None: writer.writerow([metadata]) # Exposure elif name == "exposure": + if self.output_single_file: + break # The default location and save settings of the exposure data fn = "exposure/exposure.csv" kwargs = {"index": False} From e0b1a8ab3b92ad71d585da9061e3fea4d0284815 Mon Sep 17 00:00:00 2001 From: Santonia27 Date: Fri, 7 Feb 2025 08:27:07 +0100 Subject: [PATCH 2/2] fix write exposure continue --- hydromt_fiat/fiat.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hydromt_fiat/fiat.py b/hydromt_fiat/fiat.py index 8650f4aa..5dd99afe 100644 --- a/hydromt_fiat/fiat.py +++ b/hydromt_fiat/fiat.py @@ -1722,7 +1722,7 @@ def write_tables(self) -> None: # Exposure elif name == "exposure": if self.output_single_file: - break + continue # The default location and save settings of the exposure data fn = "exposure/exposure.csv" kwargs = {"index": False}