Skip to content

Commit

Permalink
Dca rivers (#209)
Browse files Browse the repository at this point in the history
* key_zb

* compatible with burnign in rivers through elevation dataset

* changes_review (to be cotinued)

* commnets_roel (continued)

* new adjustment for parsing

* last edit

* pre_commit

* small update; point zb could be combined with gdf_riv so it should be outside the if centerlines statement

---------

Co-authored-by: roeldegoede <[email protected]>
  • Loading branch information
vanasseltk and roeldegoede authored Aug 29, 2024
1 parent 84262d0 commit aef72a3
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 3 deletions.
21 changes: 18 additions & 3 deletions hydromt_sfincs/sfincs.py
Original file line number Diff line number Diff line change
Expand Up @@ -680,6 +680,7 @@ def setup_subgrid(
rivdph or rivbed (river depth [m]; river bedlevel [m+REF]),
manning (Manning's n [s/m^(1/3)]; optional)
* mask (optional): filename (or Path) of river mask
* point_zb (optional): filename (or Path) of river points with bed (z) values
* river attributes (optional): "rivdph", "rivbed", "rivwth", "manning"
to fill missing values
* arguments to the river burn method (optional):
Expand Down Expand Up @@ -3720,6 +3721,8 @@ def _parse_datasets_riv(self, datasets_riv):
"mask",
"gdf_riv",
"gdf_riv_mask",
"gdf_zb",
"point_zb",
]
copy_keys = []
attrs = ["rivwth", "rivdph", "rivbed", "manning"]
Expand Down Expand Up @@ -3747,11 +3750,24 @@ def _parse_datasets_riv(self, datasets_riv):
gdf_riv[key] = value
elif np.any(np.isnan(gdf_riv[key])): # fill na
gdf_riv[key] = gdf_riv[key].fillna(value)
if not gdf_riv.columns.isin(["rivbed", "rivdph"]).any():
dd.update({"gdf_riv": gdf_riv})

# parse bed_level on points
if "point_zb" in dataset:
gdf_zb = self.data_catalog.get_geodataframe(
dataset.get("point_zb"),
geom=self.mask.raster.box,
)
dd.update({"gdf_zb": gdf_zb})

if "gdf_riv" in dd:
if (
not gdf_riv.columns.isin(["rivbed", "rivdph"]).any()
and "gdf_zb" not in dd
):
raise ValueError("No 'rivbed' or 'rivdph' attribute found.")
else:
raise ValueError("No 'centerlines' dataset provided.")
dd.update({"gdf_riv": gdf_riv})

# parse mask
if "mask" in dataset:
Expand All @@ -3765,7 +3781,6 @@ def _parse_datasets_riv(self, datasets_riv):
"Either mask must be provided or centerlines "
"should contain a 'rivwth' attribute."
)

# copy remaining keys
for key, value in dataset.items():
if key in copy_keys and key not in dd:
Expand Down
1 change: 1 addition & 0 deletions hydromt_sfincs/workflows/bathymetry.py
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,7 @@ def burn_river_rect(
if np.any(np.isnan(gdf_zb[manning_name])):
gdf_zb["idx0"], _ = nearest(gdf_zb, gdf_riv)
man_nearest = gdf_riv.loc[gdf_zb["idx0"], manning_name]
man_nearest.index = gdf_zb.index
gdf_zb[manning_name] = gdf_zb[manning_name].fillna(man_nearest)
elif rivbed_name not in gdf_zb.columns:
raise ValueError(f"Missing {rivbed_name} or {rivdph_name} attributes")
Expand Down

0 comments on commit aef72a3

Please sign in to comment.