changeset 9469:6acd22e86951

Improvements on Config-Files
author gernotbelger
date Tue, 04 Sep 2018 16:42:03 +0200
parents c01f1e65903b
children 2379b14355c4
files artifacts/doc/conf/modules/d50_sohlkorndurchmesser_Rhein.properties artifacts/doc/conf/modules/standard_sohlhoehen_Beispielfluss.properties artifacts/doc/conf/modules/standard_sohlhoehen_Elbe.properties artifacts/doc/conf/modules/standard_sohlhoehen_Rhein.properties artifacts/doc/conf/modules/wms_uedauern_Beispielfluss.properties artifacts/doc/conf/modules/wms_uedauern_Elbe.properties artifacts/doc/conf/sinfo_tkh_sohlhoehen_Beispielfluss.properties artifacts/doc/conf/uinfo_uedauern_aue_Beispielfluss.properties artifacts/doc/conf/uinfo_uedauern_aue_Elbe.properties artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/BedQualityD50TimeRangeConfig.java artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/DefaultBedHeightsConfig.java artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/UedauernPropertiesHelper.java artifacts/src/main/resources/messages.properties artifacts/src/main/resources/messages_de.properties
diffstat 14 files changed, 245 insertions(+), 40 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/doc/conf/modules/d50_sohlkorndurchmesser_Rhein.properties	Tue Sep 04 16:42:03 2018 +0200
@@ -0,0 +1,19 @@
+# Konfigurationsdatei f\u00fcr die in der Berechnungsart SINFO-Transportk\u00f6rperh\u00f6hen sowie SINFO-Flie\u00dftiefen zu ermittelnden D50-Sohlkorndurchmesser.
+# Je Gew\u00e4sser ist optional eine Datei mit Namen "sinfo_tkh_d50_sohlkorndurchmesser_<Gew\u00e4ssername>.properties" anzulegen. Gro\u00df-/Kleinschriebung beim Gew\u00e4ssernamen ist zu beachten!
+# Liegt f\u00fcr ein Gew\u00e4sser keine Konfiguration vor, findet keine Beschr\u00e4nkung der Abfragezeitr\u00e4ume f\u00fcr die D50-Daten statt und es werden alle verf\u00fcgbaren Daten verwendet.
+# Die Datei ist im Charset 'ISO-8859-1' zu kodieren.
+
+# Die Datei definiert f\u00fcr beliebig viele Peil-Zeitr\u00e4ume, in der die in  Flys zu w\u00e4hlenden Peilung sich befinden kann, jeweils einen Abfragezeitraum f\u00fcr die D50-Daten.
+# Pro Sohlh\u00f6he ist eine Zeile folgender Form anzulegen:
+#<Peilzeitraum-Start>;<Peilzeitraum-Ende>;<D50-Abfragezeitraum-Start>;<D50-Abfragezeitraum-Ende>
+
+# S\u00e4mtliche Werte werden im Format "JJJJ" angegeben. Es wird dabei immer in Intervallen auf Datumsbasis gerechnet.
+# Der Startzeitpunkt ist der 01.01. und der Endzeitpunkt der 31.12. des jeweils spezifizierten Jahres.
+# Die Intervalle k\u00f6nnen zu einer Seite offen sein. Statt einer Jahreseingabe erfolgt hierbei die Eingabe 
+# 'MIN' f\u00fcr ein negativ unendliches Startdatum sowie 
+# 'MAX' f\u00fcr ein positiv unendliches Enddatum.
+ 
+# \u00c4nderungen werden erst nach einem Neustart des Servers wirksam.
+   
+MIN;1999;MIN;1999
+2000;MAX;2000;MAX
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/doc/conf/modules/standard_sohlhoehen_Beispielfluss.properties	Tue Sep 04 16:42:03 2018 +0200
@@ -0,0 +1,15 @@
+# Konfigurationsdatei f\u00fcr die in der Berechnungsart SINFO-Transportk\u00f6rperh\u00f6hen zu verwendenden Sohlh\u00f6hen.
+# Je Gew\u00e4sser ist eine Datei mit Namen "standard_sohlhoehen_<Gew\u00e4ssername>.properties" anzulegen. Gro\u00df-/Kleinschriebung beim Gew\u00e4ssernamen ist zu beachten!
+# Die Datei ist im Charset 'ISO-8859-1' zu kodieren.
+
+# Die Datei definiert die Standardm\u00e4\u00dfig zu verwendenden Sohlh\u00f6hen und deren G\u00fcltigkeitsbereiche.
+# Pro Sohlh\u00f6he ist eine Zeile folgender Form anzulegen:
+# <Sohlh\u00f6he> = <von km>;<bis km>
+
+# 'Sohlh\u00f6he' entspricht dem Feld 'description' in der Tabelle 'bed_height' der D4E Datenbank.  
+# 'von km' entpsricht dem Start des G\u00fcltigkeitsbereichs in km
+# 'bis km' entpsricht dem Ende des G\u00fcltigkeitsbereichs in km
+
+# Der G\u00fcltigkeitsbereich schr\u00e4nkt den zu verwendenden Daten bereich der Sohlh\u00f6he f\u00fcr die TKH Berechnung ein, die Daten in der Datenbank k\u00f6nnen einen gr\u00f6\u00dferen G\u00fcltigkeitsbereich besitzen.
+# Leerzeichen im Namen der Sohlh\u00f6he m\u00fcssen mit u0020 kodiert werden.
+DGM-2004_Epoche-2-SOBEK = 0.0;182.4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/doc/conf/modules/standard_sohlhoehen_Elbe.properties	Tue Sep 04 16:42:03 2018 +0200
@@ -0,0 +1,15 @@
+# Konfigurationsdatei f\u00fcr die in der Berechnungsart SINFO-Transportk\u00f6rperh\u00f6hen zu verwendenden Sohlh\u00f6hen.
+# Je Gew\u00e4sser ist eine Datei mit Namen "standard_sohlhoehen_<Gew\u00e4ssername>.properties" anzulegen. Gro\u00df-/Kleinschriebung beim Gew\u00e4ssernamen ist zu beachten!
+# Die Datei ist im Charset 'ISO-8859-1' zu kodieren.
+
+# Die Datei definiert die Standardm\u00e4\u00dfig zu verwendenden Sohlh\u00f6hen und deren G\u00fcltigkeitsbereiche.
+# Pro Sohlh\u00f6he ist eine Zeile folgender Form anzulegen:
+# <Sohlh\u00f6he> = <von km>;<bis km>
+
+# 'Sohlh\u00f6he' entspriche dem Feld 'description' in der Tabelle 'bed_height' der D4E Datenbank.  
+# 'von km' entpsricht dem Start des G\u00fcltigkeitsbereichs in km
+# 'bis km' entpsricht dem Ende des G\u00fcltigkeitsbereichs in km
+
+# Der G\u00fcltigkeitsbereich schr\u00e4nkt den zu verwendenden Daten bereich der Sohlh\u00f6he f\u00fcr die TKH Berechnung ein, die Daten in der Datenbank k\u00f6nnen einen gr\u00f6\u00dferen G\u00fcltigkeitsbereich besitzen.
+# Leerzeichen im Namen der Sohlh\u00f6he m\u00fcssen mit u0020 kodiert werden.
+DGM-2004_Epoche-2-SOBEK = 0.0;584.0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/doc/conf/modules/standard_sohlhoehen_Rhein.properties	Tue Sep 04 16:42:03 2018 +0200
@@ -0,0 +1,15 @@
+# Konfigurationsdatei f\u00fcr die in der Berechnungsart SINFO-Transportk\u00f6rperh\u00f6hen zu verwendenden Sohlh\u00f6hen.
+# Je Gew\u00e4sser ist eine Datei mit Namen "standard_sohlhoehen_<Gew\u00e4ssername>.properties" anzulegen. Gro\u00df-/Kleinschriebung beim Gew\u00e4ssernamen ist zu beachten!
+# Die Datei ist im Charset 'ISO-8859-1' zu kodieren.
+
+# Die Datei definiert die Standardm\u00e4\u00dfig zu verwendenden Sohlh\u00f6hen und deren G\u00fcltigkeitsbereiche.
+# Pro Sohlh\u00f6he ist eine Zeile folgender Form anzulegen:
+# <Sohlh\u00f6he> = <von km>;<bis km>
+
+# 'Sohlh\u00f6he' entspriche dem Feld 'description' in der Tabelle 'bed_height' der D4E Datenbank.  
+# 'von km' entpsricht dem Start des G\u00fcltigkeitsbereichs in km
+# 'bis km' entpsricht dem Ende des G\u00fcltigkeitsbereichs in km
+
+# Der G\u00fcltigkeitsbereich schr\u00e4nkt den zu verwendenden Daten bereich der Sohlh\u00f6he f\u00fcr die TKH Berechnung ein, die Daten in der Datenbank k\u00f6nnen einen gr\u00f6\u00dferen G\u00fcltigkeitsbereich besitzen.
+# Leerzeichen im Namen der Sohlh\u00f6he m\u00fcssen mit u0020 kodiert werden.
+FP-QP-2006_Epoche_NHN = 335.0;620.0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/doc/conf/modules/wms_uedauern_Beispielfluss.properties	Tue Sep 04 16:42:03 2018 +0200
@@ -0,0 +1,12 @@
+# TODO: doku
+
+jahre=1995,1996,1997
+#url=htps://geoportal.bafg.de/wms/${jahr}
+url=http://osm.intevation.de/bfg/service?
+scenario_url=http://www.pegelonline.wsv.de/webservices/gis/wms/aktuell?
+
+#mittel_url=htps://geoportal.bafg.de/wms/${jahr}
+mittel_url=http://geo4.service24.rlp.de/wms/dop_basis.fcgi?
+mittel_scenario_url=http://sg.geodatenzentrum.de/wms_dop?
+mittel_start=1988
+mittel_ende=2000
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/doc/conf/modules/wms_uedauern_Elbe.properties	Tue Sep 04 16:42:03 2018 +0200
@@ -0,0 +1,8 @@
+jahre=1995,1996,1997
+url=htps://geoportal.bafg.de/wms/${jahr}
+scenario_url=htps://geoportal.bafg.de/wms/${jahr}_${scenario}
+
+mittel_url=htps://geoportal.bafg.de/wms/
+mittel_start=1998
+mittel_ende=2000
+mittel_scenario_url=htps://geoportal.bafg.de/wms/${scenario}
--- a/artifacts/doc/conf/sinfo_tkh_sohlhoehen_Beispielfluss.properties	Fri Aug 31 17:11:32 2018 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-# Konfigurationsdatei f\u00fcr die in der Berechnungsart SINFO-Transportk\u00f6rperh\u00f6hen zu verwendenden Sohlh\u00f6hen.
-# Je Gew\u00e4sser ist eine Datei mit Namen "sinfo_tkh_sohlhoehen_<Gew\u00e4ssername>.properties" anzulegen. Gro\u00df-/Kleinschriebung beim Gew\u00e4ssernamen ist zu beachten!
-# Die Datei ist im Charset 'ISO-8859-1' zu kodieren.
-
-# Die Datei definiert die Standardm\u00e4\u00dfig zu verwendenden Sohlh\u00f6hen und deren G\u00fcltigkeitsbereiche.
-# Pro Sohlh\u00f6he ist eine Zeile folgender Form anzulegen:
-# <Sohlh\u00f6he> = <von km>;<bis km>
-
-# 'Sohlh\u00f6he' entspricht dem Feld 'description' in der Tabelle 'bed_height' der D4E Datenbank.  
-# 'von km' entpsricht dem Start des G\u00fcltigkeitsbereichs in km
-# 'bis km' entpsricht dem Ende des G\u00fcltigkeitsbereichs in km
-
-# Der G\u00fcltigkeitsbereich schr\u00e4nkt den zu verwendenden Daten bereich der Sohlh\u00f6he f\u00fcr die TKH Berechnung ein, die Daten in der Datenbank k\u00f6nnen einen gr\u00f6\u00dferen G\u00fcltigkeitsbereich besitzen.
-# Leerzeichen im Namen der Sohlh\u00f6he m\u00fcssen mit u0020 kodiert werden.
-DGM-2004_Epoche-2-SOBEK = 0.0;182.4
--- a/artifacts/doc/conf/uinfo_uedauern_aue_Beispielfluss.properties	Fri Aug 31 17:11:32 2018 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-jahre=1995,1996,1997
-#url=htps://geoportal.bafg.de/wms/${jahr}
-url=http://osm.intevation.de/bfg/service?
-scenario_url=htps://geoportal.bafg.de/wms/${jahr}_${scenario}
-
-#mittel_url=htps://geoportal.bafg.de/wms/${jahr}
-mittel_url=http://osm.intevation.de/bfg/service?
-mittel_scenario_url=htps://geoportal.bafg.de/wms/${scenario}
-mittel_start=8888
-mittel_ende=2000
\ No newline at end of file
--- a/artifacts/doc/conf/uinfo_uedauern_aue_Elbe.properties	Fri Aug 31 17:11:32 2018 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-jahre=1995,1996,1997
-url=htps://geoportal.bafg.de/wms/${jahr}
-scenario_url=htps://geoportal.bafg.de/wms/${jahr}_${scenario}
-
-mittel_url=htps://geoportal.bafg.de/wms/
-mittel_start=1998
-mittel_ende=2000
-mittel_scenario_url=htps://geoportal.bafg.de/wms/${scenario}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/BedQualityD50TimeRangeConfig.java	Tue Sep 04 16:42:03 2018 +0200
@@ -0,0 +1,154 @@
+/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
+ * Software engineering by
+ *  Björnsen Beratende Ingenieure GmbH
+ *  Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
+ *
+ * This file is Free Software under the GNU AGPL (>=v3)
+ * and comes with ABSOLUTELY NO WARRANTY! Check out the
+ * documentation coming with Dive4Elements River for details.
+ */
+package org.dive4elements.river.artifacts.sinfo.tkhstate;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.dive4elements.artifacts.common.utils.Config;
+import org.dive4elements.river.artifacts.model.Calculation;
+import org.dive4elements.river.artifacts.model.DateRange;
+import org.dive4elements.river.model.River;
+
+/**
+ * Represents the contents of the 'bedheights.properties' files.
+ *
+ * @author Gernot Belger
+ */
+public final class BedQualityD50TimeRangeConfig {
+
+    private static final String CONFIG_FILE = "d50_sohlkorndurchmesser_%s.properties";
+
+    private final Map<String, DateRange> cache = new HashMap<>();
+
+    private static BedQualityD50TimeRangeConfig INSTANCE = new BedQualityD50TimeRangeConfig();
+
+    public static synchronized DateRange getDefaults(final River river, final int soundingYear, final Calculation problems) {
+        return INSTANCE.getBedHeightDefaultsForRiver(river, soundingYear, problems);
+    }
+
+    private synchronized DateRange getBedHeightDefaultsForRiver(final River river, final int soundingYear, final Calculation problems) {
+        final String rivername = river.getName();
+        final String cacheKey = new StringBuilder().append(rivername).append(";").append(soundingYear).toString();
+        if (!this.cache.containsKey(cacheKey)) {
+            final DateRange range = loadBedHeightDefaultsForRiver(river, soundingYear, problems);
+            this.cache.put(cacheKey, range);
+            return range;
+        }
+        return this.cache.get(cacheKey);
+    }
+
+    private static DateRange loadBedHeightDefaultsForRiver(final River river, final int soundingYear, final Calculation problems) {
+        final String rivername = river.getName();
+        final File configDir = Config.getModulesConfigDirectory();
+
+        final String filename = String.format(CONFIG_FILE, rivername);
+
+        final File file = new File(configDir, filename);
+
+        if (!file.canRead() && !file.isFile()) {
+            return null; // no config-file specified or spelling mistake etc. (not necessarily an error)
+        }
+
+        try (final BufferedReader reader = new BufferedReader(new FileReader(file))) {
+
+            String line;
+            while ((line = reader.readLine()) != null) {
+                if ((line = line.trim()).length() == 0 || line.startsWith("#")) {
+                    continue;
+                }
+
+                final String[] parts = line.split(";");
+
+                if (parts.length != 4) {
+                    throw new Exception("Invalid number of Tokens; should be 4!");
+                }
+
+                final CalRange range = new CalRange(parseInput(parts[0]), parseInput(parts[1]), parseInput(parts[2]), parseInput(parts[3]));
+                if (range.isSoundingYearInRange(soundingYear)) {
+                    return new DateRange(range.getStartTimeQuery(), range.getEndTimeQuery());
+                }
+            }
+            return null;
+        }
+        catch (final Exception e) {
+            e.printStackTrace();
+            problems.addProblem("sinfo.bedqualityd50config.configfile.loaderror", CONFIG_FILE, e.getMessage());
+            return null;
+        }
+    }
+
+    private static Integer parseInput(final String value) throws Exception {
+        if (value.toUpperCase().equals("MIN") || value.toUpperCase().equals("MAX"))
+            return null;
+        try {
+            return Integer.valueOf(value);
+        }
+        catch (final NumberFormatException e) {
+            throw new Exception("Invalid input; should be year ('yyyy') or 'MIN' or 'MAX'");
+        }
+    }
+
+    private static class CalRange {
+        private final long startTimeSounding;
+        private final long endTimeSounding;
+
+        private final long startTimeQuery;
+        private final long endTimeQuery;
+
+        private final static Calendar cal = Calendar.getInstance();
+
+        private Date getStartTimeQuery() {
+            return new Date(this.startTimeQuery);
+        }
+
+        private Date getEndTimeQuery() {
+            return new Date(this.endTimeQuery);
+        }
+
+        private CalRange(final Integer startYearSounding, final Integer endYearSounding, final Integer startYearQuery, final Integer endYearQuery) {
+
+            this.startTimeSounding = 1l;// (startYearSounding != null) ? getLongValForYear(startYearSounding, 0, 1) :
+                                        // BedQualityD50KmValueFinder.MIN_DATE.getTime();
+            this.startTimeQuery = 1l;// (startYearQuery != null) ? getLongValForYear(startYearQuery, 0, 1) : BedQualityD50KmValueFinder.MIN_DATE.getTime();
+            this.endTimeSounding = 1l;// (endYearSounding != null) ? getLongValForYear(endYearSounding, 11, 31) :
+                                      // BedQualityD50KmValueFinder.MAX_DATE.getTime();
+            this.endTimeQuery = 1l; // (endYearQuery != null) ? getLongValForYear(endYearQuery, 11, 31) : BedQualityD50KmValueFinder.MAX_DATE.getTime();
+
+        }
+
+        private long getLongValForYear(final int year, final int month0based, final int dayOfMonth) {
+            cal.clear();
+            cal.set(year, month0based, dayOfMonth);
+
+            return cal.getTimeInMillis();
+        }
+
+        private boolean isSoundingYearInRange(final int soundingYear) {
+            cal.clear();
+
+            cal.set(soundingYear, 5, 5); // random date in the middle of the year
+
+            final Long time = cal.getTimeInMillis();
+
+            if (time > this.startTimeSounding && time < this.endTimeSounding)
+                return true;
+
+            return false;
+        }
+
+    }
+
+}
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/DefaultBedHeightsConfig.java	Fri Aug 31 17:11:32 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/DefaultBedHeightsConfig.java	Tue Sep 04 16:42:03 2018 +0200
@@ -29,8 +29,7 @@
  */
 final class DefaultBedHeightsConfig {
 
-    private static final String CONFIG_FILE = "sinfo_tkh_sohlhoehen_%s.properties";
-
+    private static final String CONFIG_FILE = "standard_sohlhoehen_%s.properties";
 
     public static class DefaultBedHeight {
 
@@ -56,7 +55,6 @@
     private DefaultBedHeightsConfig() {
     }
 
-
     private synchronized Collection<DefaultBedHeight> getBedHeightDefaultsForRiver(final River river, final Calculation problems) {
 
         final String rivername = river.getName();
@@ -75,7 +73,7 @@
             final String rivername = river.getName();
             final String filename = String.format(CONFIG_FILE, rivername);
 
-            final Properties properties = Config.loadProperties(filename);
+            final Properties properties = Config.loadProperties(filename, Config.getModulesConfigDirectory());
 
             final Set<String> keys = properties.stringPropertyNames();
 
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/UedauernPropertiesHelper.java	Fri Aug 31 17:11:32 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/UedauernPropertiesHelper.java	Tue Sep 04 16:42:03 2018 +0200
@@ -52,7 +52,7 @@
     }
 
     private static final String makeFileName(final String river) {
-        return "uinfo_uedauern_aue_" + river + ".properties";
+        return "wms_uedauern_" + river + ".properties";
     }
 
     public LinkedHashMap<String, String> getExtraLayers(final CallMeta meta) {
@@ -71,7 +71,7 @@
     private Properties getProperties() {
         if (this.properties == null) {
             try {
-                this.properties = Config.loadProperties(this.CONFIG_FILE);
+                this.properties = Config.loadProperties(this.CONFIG_FILE, Config.getModulesConfigDirectory());
             }
             catch (final IOException e) {
                 e.printStackTrace();
@@ -119,7 +119,7 @@
 
     public static boolean fileExistsForRiver(final String river) {
         try {
-            Config.loadProperties(makeFileName(river));
+            Config.loadProperties(makeFileName(river), Config.getModulesConfigDirectory());
             return true;
         }
         catch (final IOException e) {
--- a/artifacts/src/main/resources/messages.properties	Fri Aug 31 17:11:32 2018 +0200
+++ b/artifacts/src/main/resources/messages.properties	Tue Sep 04 16:42:03 2018 +0200
@@ -802,6 +802,7 @@
 sinfo.bedheightsfinder.configfile.loaderror = Failed to load config file ''{0}'': {1}
 sinfo.bedheightsfinder.notfound = Failed to access sounding with id ''{0}''
 sinfo.bedheightsfinder.empty = The bed heights do not contain any values for the selected calculation range
+sinfo.bedqualityd50config.configfile.loaderror = Fehler beim Auslesen der Datei ''{0}'' zur Spezifikation der Zeitr\u00e4ume zur Berechnung der D50-Sohlkorndurchmesser: {1}
 
 sinfo_calc_flow_depth_development=Flie\u00dftiefenentwicklung
 sinfo_calc_flow_depth_minmax=Minimale und Maximale Flie\u00dftiefe
--- a/artifacts/src/main/resources/messages_de.properties	Fri Aug 31 17:11:32 2018 +0200
+++ b/artifacts/src/main/resources/messages_de.properties	Tue Sep 04 16:42:03 2018 +0200
@@ -802,6 +802,7 @@
 sinfo.bedheightsfinder.configfile.loaderror = Fehler beim Laden der Konfigurationsdatei ''{0}'': {1}
 sinfo.bedheightsfinder.notfound = Keine Sohlh\u00f6he mit id ''{0}'' vorhanden
 sinfo.bedheightsfinder.empty = Die Sohlh\u00f6hen enthalten keine Werte f\u00fcr die gew\u00e4hlte Berechnungsstrecke 
+sinfo.bedqualityd50config.configfile.loaderror = Fehler beim Auslesen der Datei ''{0}'' zur Spezifikation der Zeitr\u00e4ume zur Berechnung der D50-Sohlkorndurchmesser: {1}
 
 sinfo_calc_flow_depth_development=Flie\u00dftiefenentwicklung
 sinfo_calc_flow_depth_minmax=Minimale und Maximale Flie\u00dftiefe

http://dive4elements.wald.intevation.org