feat(config): Add configuration for lake processing and manual masks

Added `LakeConfig` to `RiverErosionConfig` to support HydroLAKES integration and manual override settings. Updated config parsing logic to handle the new fields.
This commit is contained in:
2026-02-04 00:58:14 +01:00
parent b05a981966
commit 62aa4ec59f
2 changed files with 45 additions and 1 deletions

View File

@@ -17,6 +17,7 @@ class RawConfig:
dop20_dir: str = "raw/dop20/jp2"
citygml_lod1_dir: str = "raw/citygml/lod1"
citygml_lod2_dir: str = "raw/citygml/lod2"
hydrolakes_dir: str = "raw/hydrolakes/HydroLAKES_polys_v10_shp"
@dataclass
@@ -79,6 +80,14 @@ class RiverErosionLidarConfig:
fill_holes_radius: int = 3
@dataclass
class LakeConfig:
enabled: bool = True
source_path: str = "raw/hydrolakes/HydroLAKES_polys_v10_shp/HydroLAKES_polys_v10.shp"
default_depth_m: float = 5.0
match_tolerance_m: float = 100.0
def _default_river_profile_vr() -> "RiverErosionProfileConfig":
return RiverErosionProfileConfig(
order_field="ORD_STRA",
@@ -109,6 +118,7 @@ class RiverErosionConfig:
manifest_vr: str = "export_unity/tile_index_river_vr.csv"
vr: RiverErosionProfileConfig = field(default_factory=_default_river_profile_vr)
lidar: RiverErosionLidarConfig = field(default_factory=RiverErosionLidarConfig)
lakes: LakeConfig = field(default_factory=LakeConfig)
bridge_source: str = "dom1"
bridge_height_min_m: float = 2.0
bridge_height_max_m: float = 12.0
@@ -393,9 +403,11 @@ def _river_erosion_from_dict(data: Dict[str, Any]) -> RiverErosionConfig:
base = _filter_kwargs(RiverErosionConfig, data)
base.pop("vr", None)
base.pop("lidar", None)
base.pop("lakes", None)
vr_cfg = RiverErosionProfileConfig(**_filter_kwargs(RiverErosionProfileConfig, data.get("vr", {})))
lidar_cfg = RiverErosionLidarConfig(**_filter_kwargs(RiverErosionLidarConfig, data.get("lidar", {})))
return RiverErosionConfig(**base, vr=vr_cfg, lidar=lidar_cfg)
lakes_cfg = LakeConfig(**_filter_kwargs(LakeConfig, data.get("lakes", {})))
return RiverErosionConfig(**base, vr=vr_cfg, lidar=lidar_cfg, lakes=lakes_cfg)
def _swe_lod_from_dict(data: Dict[str, Any]) -> SweLodConfig:

View File

@@ -0,0 +1,32 @@
import unittest
from geodata_pipeline.config import Config, LakeConfig, RiverErosionConfig
class TestConfigLakes(unittest.TestCase):
def test_default_lake_config(self):
cfg = Config.default()
self.assertIsInstance(cfg.river_erosion.lakes, LakeConfig)
self.assertTrue(cfg.river_erosion.lakes.enabled)
self.assertEqual(cfg.river_erosion.lakes.default_depth_m, 5.0)
self.assertEqual(cfg.river_erosion.lakes.match_tolerance_m, 100.0)
def test_load_lake_config(self):
data = {
"river_erosion": {
"lakes": {
"enabled": False,
"default_depth_m": 10.0,
"match_tolerance_m": 50.0
}
}
}
cfg = Config.from_dict(data)
self.assertFalse(cfg.river_erosion.lakes.enabled)
self.assertEqual(cfg.river_erosion.lakes.default_depth_m, 10.0)
self.assertEqual(cfg.river_erosion.lakes.match_tolerance_m, 50.0)
def test_raw_config_hydrolakes(self):
cfg = Config.default()
self.assertEqual(cfg.raw.hydrolakes_dir, "raw/hydrolakes/HydroLAKES_polys_v10_shp")
if __name__ == "__main__":
unittest.main()