Belastingen inlezen en classificeren
Om inzicht te krijgen in de veiligheid van waterkeringen is het van belang om de belastingen op de waterkeringen in kaart te brengen. Dit kunnen waterstanden op het buitenwater (zee, rivieren of meren) zijn, maar ook grondwaterstanden. De belastingen worden eerst ingelezen uit verschillende databronnen en vervolgens geclassificeerd. De belastingen worden ingelezen voor verschillende momenten (bijv. gister, nu, morgen of overmorgen etc.), zodat naast metingen ook voorspellingen van belastingen worden ingelezen.
Belastingen inlezen
De volgende databronnen worden op dit moment in de Toolbox Continu Inzicht ondersteund:
Aquo standaard
De standaard ondersteunde belastingen zetten de parameters om in het Aquo standaard formaat met parameter id, code en omschrijving (naam). Elke functie roept de functie base.aquo.read_aquo()
aan, hierbij wordt ook gekeken naar de GlobalVariables
voor een aquo_allias
. Op die manier is het ook mogelijk om andere parameters, bijvoorbeeld uit FEWS, te koppelen aan een Aquo grootheid. De meta data die gebruikt wordt voor deze standaard is te vinden onder Aquo grootheden.
Delft-FEWS
Veel waterschappen gebruiken een Delft - Forecast Early Warning System (FEWS) implementatie voor het beheren van verschillende interne en externe informatiebronnen. Via de REST API van FEWS kunnen verschillende belastingen worden ingelezen. Toegang verkrijgen tot een FEWS is complexer dan andere bronnen, waardoor het noodzakelijk is om extra parameters te definiëren in het configuratiebestand. De functie get_fews_locations()
kan worden gebruikt om de beschikbare locaties te tonen.
GlobalVariables:
rootdir: "data_sets"
moments: [-24,0,24,48]
aquo_allias:
WNSHDB1: "WATHTE"
LoadsFews:
host: "https:**********"
port: ****
region: "fewspiservice"
version: "1.25"
filter: "HKV_WV_1"
parameters: ["WNSHDB1"]
DataAdapter:
...
GlobalVariables:
- rootdir: Bestandslocatie van de invoer- en uitvoerbestanden
- moments: Momenten in uren waar gegevens voor opgehaald moet worden (bijv. -24, 0, +24, +48, +72 uur)
LoadsFews:
- host: FEWS PI REST URL
- port: FEWS PI REST poortnummer
- region: FEWS PI REST regionaam
- version: FEWS PI versienummer
- filter: Filternaam zoals deze in FEWS wordt gebruikt
- parameters: Parameternaam zoals deze in FEWS wordt gebruikt
Invoer schema locaties:
- measurement_location_id (int): Meetlocatie id
- measurement_location_code (str): Meetlocatie code
- measurement_location_description (str): Meetlocatie omschrijving/naam
Uitvoer schema:
- measurement_location_id (int): Meetlocatie id
- measurement_location_code (str): Meetlocatie code
- measurement_location_description (str): Meetlocatie omschrijving/naam
- parameter_id (int): Parameter id overeenkomstig Aquo-standaard
- parameter_code (str): Parameter code overeenkomstig Aquo-standaard
- parameter_description (str): Parameter omschrijving overeenkomstig Aquo-standaard
- unit (str): Eenheid van de waarde
- date_time (datetime): Datum en tijd van de waarde
- value (float): Waarde
- value_type (str): Type waarde: meting of verwachting
Matroos
Matroos of Multifunctional Access Tool for Operational Oceandata Services
is een webbased distributiesysteem van de operationele verwachtingen van waterstanden, stroming, debieten en golven, van onder meer het Watermanagementcentrum Nederland. Matroos is beschikbaar voor verschillende doelgroepen, waarvan er op dit moment drie relevant zijn voor de ontwikkeling van de Toolbox Continu Inzicht. De verschillende versies worden in de tabel hieronder toegelicht. Voor meer informatie verwijzen we naar de nieuwsbrief op iplo.nl. In de Toolbox wordt nu alleen de series API gebruikt, dus volstaat NOOS.
URL | Type | Inhoud | Doelgroep |
---|---|---|---|
vitaal.matroos.rws.nl | extern, vitaal | 21 dagen | Kustwacht, Waterschappen |
matroos.rws.nl | extern | Volledige historie | Waterschappen, universiteiten, externe |
noos.matroos.rws.nl | extern, open | Beperkte set; series:volledig; maps: 14 dagen | NOOS internationaal, Open Data |
In Matroos zijn verschillende bronnen beschikbaar, met get_matroos_sources()
kan een lijst van deze worden gegeneerd. De beschikbare locaties kunnen worden weergegeven met get_matroos_locations()
, met mogelijkheid om te filteren op een bron en parameter.
GlobalVariables:
rootdir: "data_sets"
moments: [-24,0,24,48]
...
LoadsMatroos:
website: "noos" # noos, vitaal of matroos
model: "observed"
parameters: ["WATHTE"]
DataAdapter:
...
Voor het gebruik van vitaal.matroos en matroos is een gebruikersnaam en wachtwoord nodig. Deze moeten in de environmental variables worden meegegeven (.env
bestand).
vitaal_user: "..."
vitaal_password: "..."
# of
matroos_user: "..."
matroos_password: "..."
RWS WaterWebservices
Via de RWS WaterWebservices zijn metingen en verwachtingen van o.a. waterstanden beschikbaar via de WaterWebservices API. Vooral langs de rivieren zijn veel meetpunten beschikbaar. Deze API is openbaar en vereist weinig configuratie. De MISSING_VALUE
kan in de configuratie worden aangepast, maar staat al standaard ingesteld.
LoadsWaterwebservicesRWS:
parameters: ["WATHTE"]
Beschikbare locaties kunnen worden weergegeven met get_rws_webservices_locations()
.
RWS Waterinfo
Naast de RWS WaterWebservices is alle informatie van Rijkswaterstaat ook verkrijgbaar via waterinfo.rws.nl. Waterinfo is bedoeld als informatieportaal, en niet als API om data op te halen. Voordat de WaterWebservices API beschikbaar was, werd de Waterinfo-website gebruikt in verschillende Continu Inzicht systemen. Om de comptabiliteit met deze oudere Continu Inzicht systemen te behouden, is deze functie nu nog wel beschikbaar in de Toolbox Continu Inzicht. Wel is in de toekomst mogelijk dat door veranderingen aan de Waterinfo-website deze ondersteuning komt te vervallen.
GlobalVariables:
rootdir: "data_sets"
moments: [-24,48]
LoadsWaterinfo:
parameters: ["waterhoogte"]
Omdat data ophalen uit Waterinfo gevoeliger is, worden de verschillende parameters hieronder weergegeven.
omschrijving | maptype | periode |
---|---|---|
Waterhoogte in cm | waterhoogte | 2d terug, 2d vooruit: -48,48 6u terug, 3u vooruit: -6,3 9d terug, 2d vooruit: -216,48 28d terug: -672,0 |
omschrijving | maptype | periode |
---|---|---|
Windsnelheid in m/s | wind | 2d terug: -48,48 6u terug: -6,3 9d terug: -216,48 28d terug: -672,0 |
omschrijving | maptype | periode |
---|---|---|
Golfhoogte in cm | golfhoogte | 2d terug, 2d vooruit: -48,48 6u terug, 3u vooruit: -6,3 9d terug, 2d vooruit: -216,48 28d terug: -672,0 |
omschrijving | maptype | periode |
---|---|---|
Watertemperatuur in °C | watertemperatuur | 2d terug: -48,0 6u terug: -6,0 9d terug: -216,0 28d terug:-672,0 |
omschrijving | maptype | periode |
---|---|---|
Luchttemperatuur in °C | luchttemperatuur | 2d terug: -48,0 6u terug: -6,0 9d terug: -216,0 28d terug:-672,0 |
omschrijving | maptype | periode |
---|---|---|
Astronomisch getij | astronomische-getij | 2d terug, 2d vooruit: -48,48 6u terug, 3u vooruit:-6,3 9d terug, 2d vooruit: -216,48 28d terug:-672,0 |
omschrijving | maptype | periode |
---|---|---|
Stroomsnelheid in m/s | stroming | 2d terug: -48,0 6u terug:-6,0 9d terug: -216,0 28d terug:-672,0 |
omschrijving | maptype | periode |
---|---|---|
Debiet in m3/s | waterafvoer | 2d terug, 2d vooruit: -48,48 6u terug, 3u vooruit: -6,3 9d terug, 2d vooruit:-216,48 28d terug:-672,0 |
omschrijving | maptype | periode |
---|---|---|
Chloride in mg/l | zouten | 2d terug: -48,0 6u terug: -6,0 9d terug: -216,0 28d terug:-672,0 |
Invoer schema locaties:
- measurement_location_id (int): Meetlocatie id
- measurement_location_code (str): Meetlocatie code
- measurement_location_description (str): Meetlocatie omschrijving/naam
Uitvoer schema:
- measurement_location_id (int): Meetlocatie id
- measurement_location_code (str): Meetlocatie code
- measurement_location_description (str): Meetlocatie omschrijving/naam
- parameter_id (int): Parameter id overeenkomstig Aquo-standaard
- parameter_code (str): Parameter code overeenkomstig Aquo-standaard
- parameter_description (str): Parameter omschrijving overeenkomstig Aquo-standaard
- unit (str): Eenheid van de waarde
- date_time (datetime): Datum en tijd van de waarde
- value (float): Waarde
- value_type (str): Type waarde: meting of verwachting
Classificeren van belastingen
De verschillende hierboven benoemde functies voor het inlezen van belastingen geven een tijdreeks terug op bepaalde punten. Deze kunnen omgezet worden naar moment, geclassificeerd met grenswaardes en toegekend aan dijkvakken.
Tijdreeks naar momenten
De ingelezen tijdsreeks met belastingen wordt omgezet naar belastingen op specifieke momenten met LoadsToMoments
.
Voor gebieden waar het getij van invloed is, is een aanvullende configuratie nodig. Bij getij wordt de maximale belasting tijdens een getijdencyclus (+/-12.25 uur) bepaald. Zonder deze configuratie wordt de belasting exact op het vooraf gedefinieerde moment bepaald.
GlobalVariables:
rootdir: "data_sets"
moments: [-24,0,24,48]
LoadsToMoments:
tide: true
DataAdapter:
default_options:
csv:
sep: ","
waterstanden_waterinfo:
type: csv
path: "waterstanden_waterinfo.csv"
waterstanden_waterinfo_maxima:
type: csv
path: "waterstanden_waterinfo_maxima.csv"
from toolbox_continu_inzicht import Config, DataAdapter
from toolbox_continu_inzicht.loads import LoadsToMoments
= Config(config_path="config.yaml")
config
config.lees_config()= DataAdapter(config=config)
data_adapter = LoadsToMoments(data_adapter=data_adapter)
moments input="waterstanden_waterinfo", output="waterstanden_waterinfo_maxima") moments.run(
Classificeren van belastingen
Met LoadsClassify
kunnen met vooraf gedefinieerde grenswaardes de belastingen worden geclassificeerd, bijvoorbeeld als waterstand die 1 keer per 100 jaar voorkomt. Hierbij moeten de data-adapters van de grenswaardes en belastingen worden doorgegeven in een lijst. Hierbij is de volgorde van de lijst belangrijk: eerst grenswaardes en dan belastingen. De belastingen moeten voor het classificeren aangeleverd worden als momentwaardes.
GlobalVariables:
rootdir: "data_demo"
moments: [-24,0,24,48]
LoadsMaxima:
tide: False
DataAdapter:
default_options:
csv:
sep: ","
waterstanden_waterinfo_maxima:
type: csv
path: "waterstanden_waterinfo_maxima.csv"
waterinfo_klassengrenzen:
type: csv
path: "klassengrenzen.csv"
waterstanden_waterinfo_klassen:
type: csv
path: "waterstanden_waterinfo_klassen.csv"
from toolbox_continu_inzicht import Config, DataAdapter
from toolbox_continu_inzicht.loads import LoadsClassify
= Config(config_path="config.yaml")
config
config.lees_config()= DataAdapter(config=config)
data_adapter = LoadsClassify(data_adapter=data_adapter)
classify
classify.run(input=["waterinfo_klassengrenzen", "waterstanden_waterinfo_maxima"],
="waterstanden_waterinfo_klassen",
output )
Toekennen van belastingen aan secties
De belastingen zijn nu beschikbaar op de meetlocaties van FEWS, Matroos, RWS Waterinfo of RWS WaterWebServices. De volgende stap is het vertalen van de belastingen in de meetpunten naar de secties (dijkvakken of kunstwerken) via SectionsLoads
. Voor het toekennen van belastingen aan secties zijn drie databronnen nodig: de dijkvakken, de belastingen en een koppeling tussen dijkvakken en belastinglocaties. De drie data-adapters worden vervolgens doorgegeven als een lijst. Hierbij is de eerder genoemde volgorde van belang: dijkvakken, belastingen en koppeling dijkvakken en belastinglocaties. Als een sectie tussen twee meetpunten ligt, wordt een interpolatiealgoritme (bijv. 25% waarde in meetpunt 1 + 75% waarde in meetpunt 2) toegepast. Omdat dit lokaal kan verschillen hoe deze interpolatie wordt gemaakt, is er geen automatische script voor. De interpolatie moet dus vooraf gedefinieerd worden door de gebruiker en wordt meegegeven bij de koppeling tussen dijkvakken en belastinglocaties. Hierbij wordt gebruik gemaakt van fractionup
en fractiondown
om het gewicht van de bovenstroomse en benedenstroomse belastinglocatie te bepalen.
GlobalVariables:
rootdir: "data_demo"
moments: [-24,0,24,48]
SectionsLoads:
MISSING_VALUE: -9999.0
DataAdapter:
default_options:
csv:
sep: ","
dijkvakken:
type: csv
path: "dijkvakken.csv"
waterstanden:
type: csv
path: "waterstanden_waterinfo.csv"
koppeling_dijkvak_belastinglocatie:
type: csv
path: "dijkvak_belastinglocatie.csv"
waterstanden_per_dijkvak:
type: csv
path: "waterstanden_per_dijkvak.csv"
from toolbox_continu_inzicht import Config, DataAdapter
from toolbox_continu_inzicht.sections import SectionsLoads
= Config(config_path="config.yaml")
config
config.lees_config()= DataAdapter(config=config)
data_adapter = SectionsLoads(data_adapter=data_adapter)
sections_loads
sections_loads.run(input=["dijkvakken", "waterstanden", "koppeling_dijkvak_belastinglocatie"],
="waterstanden_per_dijkvak",
output )