|
1 | 1 | import logging |
2 | 2 |
|
3 | 3 | import geopandas as gpd |
4 | | -import matplotlib.pyplot as plt |
5 | | -import numpy as np |
6 | | -from params_helper_functions import fill_boundary_with_polygons |
7 | | -from shapely import MultiPolygon, Polygon, make_valid |
| 4 | +import pandas as pd |
| 5 | +from params_helper_functions import clip_polygons_to_mask, fill_boundary_with_polygons |
8 | 6 |
|
9 | 7 | from nhflodata.get_paths import get_abs_data_path |
10 | 8 |
|
|
16 | 14 | data_path_nhdz = get_abs_data_path("bodemlagen_pwn_nhdz", "1.0.0") |
17 | 15 |
|
18 | 16 | layer_names = ["W11", "S11", "W12", "S12", "W13", "S13", "W21", "S21", "W22", "S22", "W31", "S31", "W32", "S32"] |
| 17 | +c_nhdz_fill_values = { # From bodemlagen_pwn_nhdz/v1.0.0/Ontleding_model_v2.xlsx |
| 18 | + "S11": 1.0, |
| 19 | + "S12": 10.0, |
| 20 | + "S13": 10.0, |
| 21 | + "S21": 10.0, |
| 22 | + "S22": 10.0, |
| 23 | + "S31": 10.0, |
| 24 | + "S32": 10.0, |
| 25 | +} |
| 26 | + |
19 | 27 | kh_bergen_fill_values = { |
20 | | - "W11": 8.0, |
21 | | - "S11": np.nan, |
| 28 | + "W11": 7.0, # Triwaco Excel uses 7.0, but prior nhflo implementations used 8.0. |
22 | 29 | "W12": 7.0, |
23 | | - "S12": np.nan, |
24 | 30 | "W13": 12.0, |
25 | | - "S13": np.nan, |
26 | 31 | "W21": 15.0, |
27 | | - "S21": np.nan, |
28 | 32 | } |
29 | | - |
| 33 | +c_bergen_fill_values = { |
| 34 | + "S11": 1.0, |
| 35 | + "S12": 100.0, |
| 36 | + "S13": 100.0, |
| 37 | + "S21": 1.0, |
| 38 | +} |
| 39 | +bergen_name_mapping = { |
| 40 | + "11": "1A", |
| 41 | + "12": "1B", |
| 42 | + "13": "1C", |
| 43 | + "21": "2", |
| 44 | +} |
30 | 45 |
|
31 | 46 | # Get boundaries that we need to fill up with the data from Bergen and NHDZ |
32 | 47 | gdf_bergen = gpd.read_file(data_path / "boundaries" / "triwaco_model_bergen.geojson") |
|
38 | 53 | if name.startswith("W"): |
39 | 54 | fp = data_path_nhdz / "Bodemparams" / "Kwaarden_aquifers" / f"K{name}.shp" |
40 | 55 | k = gpd.read_file(fp).set_crs("EPSG:28992") |
41 | | - kh_nhdz[name], _ = fill_boundary_with_polygons( |
| 56 | + kh_nhdz[name], _, _ = fill_boundary_with_polygons( |
42 | 57 | boundary_gdf=gdf_nhdz, |
43 | 58 | source_gdf=k, |
44 | 59 | value_col="VALUE", |
45 | | - fill_value=kh_bergen_fill_values[name], # Not used as fill method is 'mean' |
| 60 | + # fill_value=kh_bergen_fill_values[name], # Not used as fill method is 'mean' |
46 | 61 | fill_method="mean", |
47 | | - overlap_priority="smallest", |
| 62 | + overlap_priority="last", |
48 | 63 | override_gdf=None, |
49 | 64 | ) |
50 | 65 |
|
51 | | -# Bergen |
52 | | -kh_bergen = {} |
| 66 | +kd_nhdz = {} # horizontal transmissivity of the aquitards from nhdz |
| 67 | +folder = data_path_nhdz / "Bodemparams" / "KDwaarden_aquitards" |
| 68 | +s12kd = gpd.read_file(folder / "s12kd.shp").set_crs("EPSG:28992") |
| 69 | +s13kd = gpd.read_file(folder / "s13kd.shp").set_crs("EPSG:28992") |
| 70 | +s21kd = gpd.read_file(folder / "s21kd.shp").set_crs("EPSG:28992") |
| 71 | +s22kd = gpd.read_file(folder / "s22kd.shp").set_crs("EPSG:28992") |
| 72 | +folder = data_path_bergen / "Bodemparams" / "Masker_kdwaarden_aquitards" |
| 73 | +ms12kd = gpd.read_file(folder / "masker_aquitard12_kd.shp").set_crs("EPSG:28992") |
| 74 | +ms13kd = gpd.read_file(folder / "masker_aquitard13_kd.shp").set_crs("EPSG:28992") |
| 75 | +ms21kd = gpd.read_file(folder / "masker_aquitard21_kd.shp").set_crs("EPSG:28992") |
| 76 | +ms22kd = gpd.read_file(folder / "masker_aquitard22_kd.shp").set_crs("EPSG:28992") |
| 77 | + |
| 78 | +# Each formula is a list of (source_gdf, mask_gdf, mask_value, coefficient) terms |
| 79 | +# kd12s = s12kd*(ms12kd==1) + 0.5*s12kd*(ms12kd==2) + 3*s12kd*(ms12kd==3) |
| 80 | +# kd13s = (s13kd*(ms13kd==1) + 0.5*s12kd*(ms12kd==2)) * 1.04 |
| 81 | +# kd21s = (s21kd*(ms21kd==1) + s13kd*(ms13kd==2)) * 0.6 |
| 82 | +# kd22s = s22kd*(ms22kd==1) + s21kd*(ms21kd==2) |
| 83 | +# kd31s = s22kd*(ms22kd==2) |
| 84 | +kd_formulas = { |
| 85 | + "S12": [ |
| 86 | + (s12kd, ms12kd, 1, 1.0), |
| 87 | + (s12kd, ms12kd, 2, 0.5), |
| 88 | + (s12kd, ms12kd, 3, 3.0), |
| 89 | + ], |
| 90 | + "S13": [ |
| 91 | + (s13kd, ms13kd, 1, 1.04), |
| 92 | + (s12kd, ms12kd, 2, 0.5 * 1.04), |
| 93 | + ], |
| 94 | + "S21": [ |
| 95 | + (s21kd, ms21kd, 1, 0.6), |
| 96 | + (s13kd, ms13kd, 2, 0.6), |
| 97 | + ], |
| 98 | + "S22": [ |
| 99 | + (s22kd, ms22kd, 1, 1.0), |
| 100 | + (s21kd, ms21kd, 2, 1.0), |
| 101 | + ], |
| 102 | + "S31": [ |
| 103 | + (s22kd, ms22kd, 2, 1.0), |
| 104 | + ], |
| 105 | +} |
| 106 | + |
| 107 | +for name, terms in kd_formulas.items(): |
| 108 | + parts = [clip_polygons_to_mask(src, mask, mask_value=val, coefficient=coeff) for src, mask, val, coeff in terms] |
| 109 | + source = gpd.GeoDataFrame(pd.concat(parts, ignore_index=True), crs="EPSG:28992") |
| 110 | + kd_nhdz[name], _, _ = fill_boundary_with_polygons( |
| 111 | + boundary_gdf=gdf_nhdz, |
| 112 | + source_gdf=source, |
| 113 | + value_col="VALUE", |
| 114 | + fill_method="fill_value", |
| 115 | + fill_value=0.01, # From bodemlagen_pwn_nhdz/v1.0.0/Ontleding_model_v2.xlsx |
| 116 | + overlap_priority="sum", |
| 117 | + ) |
| 118 | + |
| 119 | +c_nhdz = {} |
53 | 120 | for name in layer_names: |
54 | | - if name.startswith("W"): |
55 | | - kh_bergen[name], _ = fill_boundary_with_polygons( |
56 | | - boundary_gdf=gdf_bergen, |
57 | | - source_gdf=None, # Are constants for Bergen, so use fill value only |
58 | | - value_col="VALUE", # Not used as source_gdf is None |
59 | | - fill_value=kh_bergen_fill_values[name], |
| 121 | + if name.startswith("S"): |
| 122 | + fp = data_path_nhdz / "Bodemparams" / "Cwaarden_aquitards" / f"C{name}.shp" |
| 123 | + c = gpd.read_file(fp).set_crs("EPSG:28992") |
| 124 | + if name == "S22": |
| 125 | + c["VALUE"] *= 1.02 # From bodemlagen_pwn_nhdz/v1.0.0/Ontleding_model_v2.xlsx |
| 126 | + |
| 127 | + c_nhdz[name], overlaps_gdf, fill_gdf = fill_boundary_with_polygons( |
| 128 | + boundary_gdf=gdf_nhdz, |
| 129 | + source_gdf=c, |
| 130 | + value_col="VALUE", |
| 131 | + fill_value=c_nhdz_fill_values[name], |
60 | 132 | fill_method="fill_value", |
61 | | - overlap_priority="smallest", # Not used as source_gdf is None |
| 133 | + overlap_priority="last", |
62 | 134 | override_gdf=None, |
63 | 135 | ) |
| 136 | + overlaps_gdf.to_file(data_path / "kh" / f"C{name}_NHDZ_overlaps.geojson", driver="GeoJSON") |
| 137 | + fill_gdf.to_file(data_path / "kh" / f"C{name}_NHDZ_fill.geojson", driver="GeoJSON") |
| 138 | + |
| 139 | +# Bergen |
| 140 | +kh_bergen = {} |
| 141 | +for name in bergen_name_mapping: |
| 142 | + kh_bergen[f"W{name}"], _, _ = fill_boundary_with_polygons( |
| 143 | + boundary_gdf=gdf_bergen, |
| 144 | + source_gdf=None, # Are constants for Bergen, so use fill value only |
| 145 | + value_col="VALUE", # Not used as source_gdf is None |
| 146 | + fill_value=kh_bergen_fill_values[f"W{name}"], |
| 147 | + fill_method="fill_value", |
| 148 | + overlap_priority="last", # Not used as source_gdf is None |
| 149 | + override_gdf=None, |
| 150 | + ) |
| 151 | + |
| 152 | +c_bergen = {} |
| 153 | +for name, bergen_name in bergen_name_mapping.items(): |
| 154 | + fp = data_path_bergen / "Bodemparams" / f"C{bergen_name}.shp" |
| 155 | + c = gpd.read_file(fp).set_crs("EPSG:28992") |
| 156 | + c_bergen[f"S{name}"], overlaps_gdf, fill_gdf = fill_boundary_with_polygons( |
| 157 | + boundary_gdf=gdf_bergen, |
| 158 | + source_gdf=c, |
| 159 | + value_col="VALUE", # Not used as source_gdf is None |
| 160 | + fill_value=c_bergen_fill_values[f"S{name}"], |
| 161 | + fill_method="fill_value", |
| 162 | + overlap_priority="last", # Not used as source_gdf is None |
| 163 | + override_gdf=None, |
| 164 | + ) |
| 165 | + overlaps_gdf.to_file(data_path / "kh" / f"C{bergen_name}_Bergen_overlaps.geojson", driver="GeoJSON") |
| 166 | + fill_gdf.to_file(data_path / "kh" / f"C{bergen_name}_Bergen_fill.geojson", driver="GeoJSON") |
64 | 167 |
|
65 | 168 | """ |
| 169 | +# NHDZ Bergen |
| 170 | +S21 S2 |
| 171 | +S13 S1C |
| 172 | +S12 S1B |
| 173 | +S11 S1A |
| 174 | +
|
| 175 | +
|
| 176 | +
|
66 | 177 | kh[0] = 8.0 |
67 | 178 | kh[1] = thickness[1] / clist[0] / f_anisotropy |
68 | 179 | kh[2] = 7.0 |
|
0 commit comments