Hoge lijnelementen
Abrupte verhogingen in het landschap zoals kades, dijken en verhoogde wegen kunnen direct in het 2D-rooster worden geschematiseerd als het 2D-rooster en het hoogtemodel een voldoende hoge resolutie hebben. Als deze resolutie leidt tot te grote simulatietijden, kan worden gekozen om met een lagere resolutie te werken en de abrupte verhogingen als hoge lijnelementen te schematiseren. Hieronder is een voorbeeld gegeven van een D-HYDRO model van de Roer met daarin de hoge lijnelementen in het rood weergegeven.
Onderstaande figuur geeft de werking van de hoge lijnelementen weer in het 2D-rooster. Hoge lijnelementen worden op de randen van de 2D-cel geprojecteerd. De hoogte van het hoge lijnelement op de celwand wordt via lineaire interpolatie bepaald op het snijpunt van de flow links met de hoge lijnelemtenten (rechterdeel van onderstaande figuur). Als de waterstand in het 2D-rooster deze hoogte overschrijdt, zal er water over het hoge lijnelement stromen.
Hoge lijnelementen kunnen worden afgeleid door inmeting van dijken en kades, of bijvoorbeeld door gebruikt te maken van een selectie van lijnbestanden uit open source data waarvan bekend is dat deze een hoge ligging kunnen hebben ten opzichte van het omliggende terrein, zoals wegen, spoorwegen en fietspaden. Aan deze lijnelementen wordt een hoogte toegekend via een GIS-analyse met een hoogtemodel. Het resultaat is dan een 3D-lijnbestand (MultiLineStringZ) met in de vertices de hoogte als z-waarde.
D-HYDRO verwacht echter geen shape of geopackage, maar een pliz-bestand. Hieronder is een voorbeeld gegeven van code waarmee een dergelijk pliz-bestand kan worden aangemaakt vanuit een 3D-lijnbestand.
import geopandas as gpd
#%% Inlezen van het 3D-lijnen bestand en wegschrijven van een .pliz bestand
hoge_elementen = gpd.read_file(r"C:\temp\Hogelijnen.shp")
text = []
for i in range(len(hoge_elementen)):
if hoge_elementen.geometry[i] == None:
print('Geen gegevens voor deze lijn: {}.'.format(i))
continue
xyz = hoge_elementen.geometry[i].coords[:]
text.append(i)
text.append('\t{}\t{}'.format(len(xyz),3))
for k in range(len(xyz)):
x = hoge_elementen.geometry[i].coords[k][0]
y = hoge_elementen.geometry[i].coords[k][1]
z = hoge_elementen.geometry[i].coords[k][2]
text.append('{:0.6f}\t{:0.6f}\t{:0.6f}'.format(x,y,z))
with open('hoge_elementen.pliz', 'w') as f:
for item in text:
f.write("%s\n" % item)
Met hydrolib-core versie 0.4.1 onder D-HYDAMO 0.2.0 is het op dit moment niet mogelijk om dit hoge lijnelement toe te voegen via standaard functies. Het volgende code blok werkt nog niet:
fm.geometry.fixedweirfile='hoge_elementen.pliz'
Het hoge lijnelement moet handmatig aan de mdu-file worden toegekend, of de mdu-file dient te worden ingelezen en aangepast. Hieronder is een voorbeeld gegeven van de aanpassing van de mdu-file (zie laatste regel):
[geometry]
NetFile = network.nc
BathymetryFile =
DryPointsFile =
GridEnclosureFile =
WaterLevIniFile =
LandBoundaryFile =
ThinDamFile =
FixedWeirFile = 'hoge_elementen.pliz'
Het hoge lijnelementen bestand (FixedWeirFile) dient dan in dezelfde map te worden geplaatst als het mdu-bestand, of er dient een pad te worden opgegeven naar het bestand.