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:
@@ -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:
|
||||
|
||||
32
tests/test_config_lakes.py
Normal file
32
tests/test_config_lakes.py
Normal 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()
|
||||
Reference in New Issue
Block a user