ingo@3661: \section{Fachdatenimport} ingo@3666: ingo@3666: Der Fachdatenimporter dient dazu, hydrologische und morphologische Gewässerdaten ingo@3666: aus dem Dateisystem in die FLYS3-Datenbank zu importieren. Das Werkzeug ingo@3666: orientiert sich hierbei an der Dateihierachie, so wie sie auch von Desktop-FLYS ingo@3666: ausgelesen wird. Der Import Vorgang ist in zwei Phasen unterteilt: ingo@3666: ingo@3666: \begin{itemize} ingo@3666: \item Lesen aller Daten eines Gewässers aus dem Dateisystem. ingo@3666: \item Schreiben der erfolgreich eingelesenen Daten in die Datenbank. ingo@3666: \end{itemize} ingo@3666: ingo@3666: Sollte beim Lese- oder Schreib-Vorgang eines Gewässers ein Fehler auftreten, so ingo@3666: werden sämtliche Daten des Gewässers verworfen. Beide Phasen zusammen bilden ingo@3666: somit eine Transaktion. ingo@3666: ingo@3666: \textbf{Hinweis} ingo@3667: \\Der Import geht wie auch Desktop-FLYS davon aus, dass die Dateien Latin-1 ingo@3667: encodiert vorliegen! Stellen Sie also sicher, dass das von Ihnen verwendete ingo@3667: Encoding korrekt ist. Andernfalls ist es möglich, dass es während des Imports zu ingo@3673: unerwarteten Problemen kommt. ingo@3667: ingo@3667: Der Importer ist ein in Java geschriebenes Werkzeug und kann von der Konsole aus ingo@3667: gestartet werden. Sämtlich Konfigurationen können über sogenannte ingo@3667: \textit{System-Properties} übergeben werden. Eine \textit{System-Property} wird ingo@3667: dabei mittels \textit{-Dkey=value} beim Start übergeben. Im folgenden Beispiel ingo@3667: würde der Importer mit einer Konfiguration \textit{flys.backend.importer.dry.run}, ingo@3667: welche den Wert \textit{true} gesetzt hat, gestartet. ingo@3667: ingo@3667: \begin{lstlisting} ingo@3667: java -Dflys.backend.importer.dry.run=true de.intevation.flys.importer.Importer ingo@3667: \end{lstlisting} ingo@3667: ingo@3680: Auf gleiche Weise können dem Importer sämtliche Optionen zur Konfiguration felix@5039: beim Start mitgegeben werden. Im Folgenden werden die möglichen System-Properties und ingo@3667: ihre Auswirkung auf den Import genauer beschrieben. In den Kapiteln ingo@3667: \ref{configuration} und \ref{start-hydr} wird zur Einfachheit jedoch ein ingo@3673: Shellskript verwendet, das eine Standardkonfiguration vorgibt und den Importer ingo@3673: mit allen erforderlichen Konfigurationen startet. ingo@3666: ingo@3666: ingo@3666: \subsection{Importierte Daten} ingo@3667: In diesem Kapitel werden die Datentypen aufgelistet und erläutert, wie sie vom ingo@3667: Importer eingelesen werden. ingo@3666: ingo@3666: \subsubsection{Streckenfavoriten (*.km-Dateien)} ingo@3673: Der Import der Streckenfavoriten kann mit \textbf{-Dflys.backend.importer.skip.annotations=true} ingo@3666: unterdrückt werden. ingo@3666: ingo@3667: Zur Klassifikation von Streckenfavoriten muss mittels\\ ingo@3666: \textbf{-Dflys.backend.importer.annotation.types=DATEI} der Pfad zu einer ingo@3667: XML-Datei angegeben werden. In dieser Datei werden die Typen und Regeln ingo@3673: festgelegt, anhand derer die Klassifikation während des Import-Vorgangs ingo@3667: vorgenommen wird. Details hierzu befinden sich im Kapitel \ref{annotation-types}. ingo@3666: felix@5044: \subsubsection{Bundeswasserstraßen-IDs} felix@5044: Der Import und die Zuweisung der Bundeswasserstraßen-IDs kann mit felix@5044: \textbf{-Dflys.backend.importer.skip.bwastr=true} unterbunden werden. felix@5044: Beim Import wird davon ausgegangen dass sich die Datei \textbf{BWASTR_ID.csv} felix@5044: neben der oder den zu importierenden gew-Dateien befindet. felix@5044: ingo@3666: \subsubsection{Pegel, Stammdaten (*.glt, *.sta-Dateien)} ingo@3673: Der Import von Pegel- und Stammdaten kann mit \textbf{'-Dflys.backend.importer.skip.gauges=true'} ingo@3666: unterdrückt werden. Die .glt-Datei, die neben der .wst-Datei liegt, wird zuerst ingo@3666: ausgelesen. Es werden nur *.sta-Datei von Pegeln geladen, die in der .glt-Datei ingo@3666: vermerkt sind. ingo@3666: teichmann@4135: \subsubsection{Historische Abflusstafeln (*.at-Dateien)} teichmann@4135: Der Import von historischen Abflusstafeln kann mit teichmann@4135: \textbf{'-Dflys.backend.importer.skip.historical.discharge.tables=true'} teichmann@4135: unterdrückt werden. Diese Flagge wird nur ausgewertet, wenn überhaupt teichmann@4135: Pegel-Daten (siehe oben) importiert werden. teichmann@4135: felix@5044: Mittels \textbf{-Dflys.backend.sta.parse.gauge.numbers=true} wird versucht, die ingo@3666: offiziellen Pegelnummern aus den Stammdaten zu extrahieren. ingo@3666: \textbf{Dies ist mit Vorsicht zu behandeln, denn die meisten STA-Dateien ingo@3666: enthalten invalide Pegelnummern.} ingo@3666: ingo@3666: Die System-Property \textbf{flys.backend.main.value.types} kann einen String ingo@3667: mit gültigen Typen von Stammdaten enthalten. Vorbelegt ist \textit{QWTD}. In der ingo@3667: Praxis ist \textit{QWD} eine sinnvolle Belegung. ingo@3666: ingo@3667: \subsubsection{Basis-Wasserstände (gewaesser.wst-Dateien)} ingo@3673: Der Import von Wasserständen kann mit \textbf{-Dflys.backend.importer.skip.wst=true} unterdrückt werden. ingo@3666: ingo@3667: \subsubsection{Zusätzliche Längsschnitte (*.zus, *.wst-Dateien)} ingo@3680: Der Import von zusätzlichen Längsschnitten kann mit \textbf{-Dflys.backend.importer.skip.extra.wsts=true} ingo@3666: unterdrückt werden. Es werden die *.zus- und *.wst-Dateien aus dem Verzeichnis ingo@3666: \textit{../Zus.Längsschnitte} relativ zur gewaesser.wst-Datei betrachtet. ingo@3666: ingo@3667: \subsubsection{Fixierungen (*.wst-Dateien)} ingo@3673: Der Import von Fixierungen kann mit \textbf{-Dflys.backend.importer.skip.fixations=true} ingo@3666: unterdrückt werden. Es werden die *.wst-Dateien aus dem Verzeichnis ingo@3666: \textit{../Fixierungen} relativ zur gewaesser.wst-Datei betrachtet. ingo@3666: ingo@3667: \subsubsection{Amtliche Linien (*.wst-Dateien)} ingo@3673: Der Import von amtlichen Linien kann mit \textbf{-Dflys.backend.importer.skip.official.lines=true} ingo@3666: unterdrückt werden. Es werden die \textit{Amtl\_Linien.wst}-Dateien aus dem ingo@3666: Verzeichnis \textit{../Basisdaten} und \textit{../Fixierungen} relativ zur ingo@3673: \textit{gewaesser.wst}-Datei betrachtet. ingo@3666: ingo@3667: \subsubsection{Profilspuren (*.prf-Dateien)} ingo@3673: Der Import von Profilspuren kann mit \textbf{-Dflys.backend.importer.skip.prfs=true} ingo@3666: unterdrückt werden. Es werden rekursiv alle *.prf-Dateien aus \textit{../../..} ingo@3680: relativ zur gewaesser.wst-Datei betrachtet. Vor dem Import werden mit Hilfe ingo@3666: eines Längen- und eines MD5-Summen-Vergleichs inhaltliche Duplikate ingo@3666: ausgeschlossen. ingo@3666: felix@5044: \subsubsection{Profilspuren (*.w80-Dateien)} felix@5044: Der Import von W80-Profilspuren kann mit \textbf{-Dflys.backend.importer.skip.w80=true} felix@5044: unterdrückt werden. Es werden rekursiv alle *.w80-Dateien aus \textit{../../..} felix@5044: relativ zur gewaesser.wst-Datei betrachtet. Vor dem Import werden mit Hilfe felix@5044: eines Längen- und eines MD5-Summen-Vergleichs inhaltliche Duplikate felix@5044: ausgeschlossen. felix@5044: ingo@3667: \subsubsection{Hydraulische Kennzahlen (*.hyk)} ingo@3673: Der Import von hydraulischen Kennzahlen kann mit \textbf{-Dflys.backend.importer.skip.hyks=true} unterdrückt ingo@3666: werden. Es werden rekursiv alle *.hyk-Dateien aus \textit{../../..} relativ zur ingo@3680: gewaesser.wst-Datei betrachtet. Vor dem Import werden mit Hilfe eines Längen- und ingo@3666: eines MD5-Summen-Vergleichs inhaltliche Duplikate ausgeschlossen. ingo@3666: ingo@3667: \subsubsection{Hochwassermarken (*.zus, *.wst)} ingo@3673: Der Import von Hochwassermarken kann mit \textbf{-Dflys.backend.importer.skip.flood.water=true} ingo@3666: unterdrückt werden. Es werden die *.zus- und *.wst-Dateien aus dem Verzeichnis ingo@3666: \textit{../HW-Marken} relativ zur gewaesser.wst-Datei betrachtet. ingo@3666: ingo@3667: \subsubsection{Hochwasserschutzanlagen (*.zus)} ingo@3673: Der Import von Hochwasserschutzanlagen kann mit \textbf{-Dflys.backend.importer.skip.flood.protection=true} ingo@3666: unterdrückt werden. Es werden die *.zus- und *.wst-Dateien aus dem Verzeichnis ingo@3673: \textit{../HW-Schutzanlagen} relativ zur \textit{gewaesser.wst}-Datei betrachtet. ingo@3666: ingo@3668: \subsubsection{Sohlhöhen (Peilungen)} ingo@3673: Der Import von Sohlhöhen-Peilungen kann mit \textbf{-Dflys.backend.importer.skip.bed.height.single=true} ingo@3668: unterdrückt werden. Es werden die Dateien aus dem Verzeichnis ingo@3668: \textit{Morphologie/Sohlhoehen/Einzeljahre} geladen. ingo@3666: ingo@3668: \subsubsection{Sohlhöhen (Epochen)} ingo@3673: Der Import Sohlhöhen-Epochen kann mit \textbf{-Dflys.backend.importer.skip.bed.height.epoch=true} ingo@3668: unterdrückt werden. Es werden die Dateien aus dem Verzeichnis ingo@3668: \textit{Morphologie/Sohlhoehen/Epochen} geladen. ingo@3668: ingo@3673: \subsubsection{Sedimentdichte} ingo@3673: Der Import der Sedimentdichte kann mit ingo@3673: \textbf{-Dflys.backend.importer.skip.sediment.density=true} ingo@3668: unterdrückt werden. Es werden alle Dateien aus dem Verzeichnis ingo@3668: \textit{Morphologie/Sedimentdichte} geladen. ingo@3668: ingo@3668: \subsubsection{Morphologische Breite} ingo@3673: Der Import der morphologischen Breite kann mit ingo@3673: \textbf{-Dflys.backend.importer.skip.morphological.width=true} ingo@3668: unterdrückt werden. Es werden alle Dateien aus dem Verzeichnis ingo@3668: \textit{Morphologie/morphologische\_Breite} geladen. ingo@3668: ingo@3668: \subsubsection{Fließgeschwindigkeit} ingo@3673: Der Import der Fließgeschwindigkeit kann mit ingo@3673: \textbf{-Dflys.backend.importer.skip.flow.velocity=true} ingo@3668: unterdrückt werden. Es werden alle Modellrechnungen aus dem Verzeichnis\\ ingo@3668: \textit{Morphologie/Geschwindigkeit\_Schubspannung/Modellrechnungen} und\\ ingo@3668: \textit{Morphologie/Geschwindigkeit\_Schubspannung/v-Messungen} geladen. ingo@3668: ingo@3668: \subsubsection{Sedimentfracht} ingo@3673: Der Import der Sedimentfracht kann mit ingo@3673: \textbf{-Dflys.backend.importer.skip.sediment.yield=true} ingo@3668: unterdrückt werden. Es werden alle Dateien aus dem Verzeichnis ingo@3668: \textit{Morphologie/Fracht} geladen. Dabei werden die Dateien aus dem ingo@3668: Unterverzeichnissen \textit{Einzeljahre} und \textit{Epochen} entsprechend als ingo@3668: \textit{Einzeljahre} und \textit{Epochen} vermerkt. ingo@3668: ingo@3668: \subsubsection{Wasserspiegellagen für MINFO} ingo@3675: Der Import der MINFO spezifischen Wasserspiegellagen kann mit\\ ingo@3673: \textbf{-Dflys.backend.importer.skip.waterlevels=true} ingo@3668: unterdrückt werden. Es werden alle Dateien aus dem Verzeichnis ingo@3668: \textit{Morphologie/Fixierungsanalyse/Wasserspiegellagen} geladen. ingo@3668: ingo@3668: \subsubsection{Wasserspiegeldifferenzen für MINFO} ingo@3675: Der Import der Wasserspiegellagendifferenzen kann mit\\ ingo@3673: \textbf{-Dflys.backend.importer.skip.waterlevel.differences=true} ingo@3668: unterdrückt werden. Es werden alle Dateien aus dem Verzeichnis ingo@3668: \textit{Morphologie/Fixierungsanalyse/Wasserspiegeldifferenzen} geladen. ingo@3668: ingo@3668: \subsubsection{Transport Abfluss Beziehung} ingo@3675: Der Import der Daten für die Transport Abfluss Beziehung kann mit\\ ingo@3673: \textbf{flys.backend.importer.skip.sq.relation=true} unterdrückt ingo@3668: werden. Es werden alle Dateien unter ingo@3668: \textit{Feststofftransport-Abfluss-Beziehung} geladen. ingo@3666: ingo@3666: ingo@3667: \subsection{Klassifikation von Streckenfavoriten} ingo@3667: \label{annotation-types} ingo@3667: Streckenfavoriten werden aus KM-Dateien importiert. Um die einzelnen Einträge ingo@3673: einer Kategorie (Brücke, Pegel, etc.) zuzuordnen, kann eine XML angegeben werden, ingo@3667: in der Regeln für diese Klassifikation definiert werden. Schematisch gliedert ingo@3667: sich diese Datei in die zwei Bereiche 'types' und 'patterns': ingo@3667: ingo@3667: \begin{lstlisting} ingo@3667: ingo@3667: ingo@3667: ... ingo@3667: ... ingo@3667: ... ingo@3667: ingo@3667: ingo@3667: ... ingo@3667: ... ingo@3667: ... ingo@3667: ingo@3667: ingo@3667: \end{lstlisting} ingo@3667: ingo@3673: In der Sektion \textit{types} werden die Kategorien vereinbart, in die klassifiziert ingo@3673: werden soll. Dies geschieht mit entsprechenden Zeilen in der XML Datei. Es folgt ingo@3673: ein Auszug aus einer solchen Datei: ingo@3667: ingo@3667: \begin{lstlisting} ingo@3667: ingo@3667: ingo@3667: ... ingo@3667: ingo@3667: \end{lstlisting} ingo@3667: ingo@3673: Das Attribut 'default' darf maximal einmal vergeben werden und besagt, dass diese ingo@3667: Kategorie gewählt werden soll, wenn keine andere Kategorie zugeordnet werden kann. ingo@3667: ingo@3673: In der Sektion 'patterns' werden dann die Regeln definiert, die einzelne Einträge ingo@3667: den zuvor definierten Kategorien zuordnet. Hierfür können zwei Arten von ingo@3667: Definitionen angegeben werden: ingo@3667: ingo@3667: \begin{lstlisting} ingo@3667: ingo@3667: \end{lstlisting} ingo@3667: ingo@3667: oder ingo@3667: ingo@3667: \begin{lstlisting} ingo@3667: ingo@3667: \end{lstlisting} ingo@3667: ingo@3667: Die erste Variante bestimmt die Kategorie, die pro KM-Datei gelten soll. ingo@3667: \textit{pattern} ist hierbei ein regulärer Ausdruck, der auf den Dateinamen ingo@3667: angewandt wird. Passt der Name der Datei auf den regulären Ausdruck, wird ingo@3673: \textit{type} als Vorgabe angenommen. Treffen mehrere \textit{file}-Regeln zu, ingo@3673: wird der erste Treffer angewandt. Findet keine der \textit{file}-Regeln Anwendung, wird ingo@3673: die Kategorie ausgewählt, die in der \textit{types}-Section das Attribut ingo@3667: \textit{default} gesetzt hat. ingo@3667: ingo@3673: Die zweite Regel-Variante \textit{line} wird auf jeden Eintrag innerhalb einer KM-Datei ingo@3667: auf den Bezeichner der Streckenfavoriten angewandt. Als Muster dient auch hier ingo@3667: ein regulärer Ausdruck, der über das Attribut \textit{pattern} definiert wird. ingo@3673: Die Kategorie wird im Trefferfall über das Attribut \textit{type} bestimmt. ingo@3667: Treffen mehrere Regeln zu, wird die Kategorie gewählt, die zum ersten Treffer ingo@3667: gehört. Trifft keine Regel zu wird der Eintrag der Kategorie zugeteilt, die für ingo@3667: die beinhaltende Datei als Vorgabe gilt. ingo@3667: ingo@3667: ingo@3666: \subsection{Konfiguration} ingo@3666: \label{configuration} ingo@3681: Zum Starten des Importers ist es notwendig, in der Datei ingo@3681: \textit{contrib/run\_hydr\_morph.sh} die Variablen am Anfang der Datei ingo@3681: anzupassen. Im folgenden werden notwendige und optionale Einstellungen ingo@3681: beschrieben, die beim Starten des Importers berücksichtigt werden. Folgende ingo@3681: Einstellungen sind zwangsläufig an die bestehende Umgebung anzupassen: ingo@3666: ingo@3666: \textbf{INFO\_GEW} ingo@3666: \\Diese Option muss auf eine valide *.gew Datei verweisen (bekannt aus ingo@3666: Desktop-FLYS). Wichtig für den Importer sind in dieser Datei die Zeilen, die mit ingo@3666: \textit{WSTDatei:} beginnen. In ihnen wird der Pfad zu der zentralen WST-Datei ingo@3666: des jeweiligen Gewässers angegeben. Alle anderen importierten Dateien werden in ingo@3666: ihrer Lage im Dateisystem relativ zur Lage dieser Datei betrachtet. ingo@3666: ingo@3666: \textbf{BACKEND\_USER} ingo@3666: \\Der Nutzername, der zum Verbinden zur Datenbank verwendet werden soll. ingo@3666: ingo@3666: \textbf{BACKEND\_PASS} ingo@3666: \\Das Passwort, welches in Kombination mit \textbf{BACKEND\_USER} zum Verbinden ingo@3666: zur Datenbank verwendet werden soll. ingo@3666: ingo@3666: \textbf{BACKEND\_HOST} ingo@3666: \\Der Datenbank-Host. In der Regel sollte hier \textit{localhost} eingetragen ingo@3666: werden, da es empfohlen wird, den Importer auf dem selben Host zu starten, auf ingo@3666: dem auch die Datenbank läuft. ingo@3666: ingo@3666: \textbf{BACKEND\_PORT} ingo@3666: \\Der Port auf dem die Datenbank zu erreichen ist. Bei einer Oracle XE Instanz ingo@3666: z.B.: \textit{1521}, sofern nicht anders konfiguriert. ingo@3666: ingo@3666: \textbf{BACKEND\_NAME} ingo@3666: \\Der Name der Datenbank Instanz. Beispielsweise \textit{XE} bei einer Oracle XE ingo@3666: Instanz. ingo@3666: ingo@3666: \textbf{BACKEND\_DB\_PREFIX} ingo@3666: \\Der Präfix zum Aufbau einer Datenbankverbindung. Für Oracle z.B.: \textit{jdbc:oracle:thin:@}. ingo@3666: ingo@3666: \textbf{BACKEND\_DB\_DRIVER} ingo@3666: \\Der Name des JDBC-Treibers, der es erlaubt das Protokoll der Datenbank zu ingo@3666: sprechen. Im Falle einer Oracle XE wäre dies z.B.: \textit{oracle.jdbc.OracleDriver}. ingo@3666: ingo@3666: \textbf{BACKEND\_DB\_DIALECT} ingo@3666: \\Der Hibernate-Dialekt, den die Datenbank versteht. Im Falle einer Oracle-XE ingo@3666: wäre dies z.B.: \textit{org.hibernate.dialect.OracleDialect}. ingo@3666: ingo@3666: ingo@3675: Weitere Details zum Verbinden zu einer Oracle Datenbank finden Sie unter\\ ingo@3673: \href{http://www.orafaq.com/wiki/JDBC}{http://www.orafaq.com/wiki/JDBC}. Alle weiteren Einstellungen sind ingo@3669: optional anpassbar: ingo@3669: ingo@3669: \textbf{LOG4J\_CONFIG} ingo@3673: \\Der Fachdatenimport verwendet die externe Bibliothek \textit{Apache Log4J} zum Loggen ingo@3669: von Informationen. Dazu ist es notwendig eine entsprechende Konfiguration beim ingo@3669: Start anzugeben. \textit{LOG4J\_CONFIG} verweist in diesem Fall auf eine externe ingo@3669: Datei zur Konfiguration von Log4J. Im Standardfall wird die Datei ingo@3673: \textit{conf/log4j.properties} verwendet, welche eine sinnvolle Standardkonfiguration ingo@3669: enthält. Sollten Sie diese Konfiguration verwenden, wird beim Import eine ingo@3669: Log-Datei namens \textit{import.log} erstellt, die maximal 100 MB groß werden ingo@3669: kann. Sollte die Log-Datei größer als 100 MB anwachsen, wird die aktuelle Datei ingo@3669: nach \textit{import.log.1} umbenannt und eine neue Datei \textit{import.log} ingo@3669: wird begonnen. Maximal werden 10 Log-Dateien gespeichert. Für weitere Details ingo@3669: zu Log4J siehe Online Dokumentation unter ingo@3669: \href{http://logging.apache.org/log4j/1.2/}{http://logging.apache.org/log4j/1.2/} ingo@3666: ingo@3666: ingo@3666: \textbf{IMPORTER\_MAINVALUE\_TYPES} ingo@3666: \\Diese Einstellung erlaubt die Angabe eines Textes, der aus den gültigen Typen ingo@3666: für Hauptwerte zusammengesetzt ist. \textit{QWTD} ist standardmäßig gesetzt. ingo@3666: ingo@3666: \textbf{IMPORTER\_ANNOTATION\_TYPES} ingo@3666: \\Diese Einstellung verweist auf eine Datei (relativ zum Ort der \textit{run.sh} ingo@3666: im Dateisystem), die die möglichen Typen von Streckenfavoriten und deren Regeln ingo@3666: definiert. Siehe hierzu auch Kapitel \ref{annotation-types}. ingo@3666: ingo@3666: ingo@3666: Die im folgenden beschriebenen Einstellungen können jeweils die Werte ingo@3666: \textit{true} oder \textit{false} annehmen und sind optional anzupassen. ingo@3666: ingo@3666: \textbf{IMPORTER\_DRY\_RUN} ingo@3666: \\Falls \textit{true} gesetzt wird, wird der Import nur simuliert. Es werden ingo@3666: keine Daten in die Datenbank geschrieben. Dies kann z.B.: zum Ermitteln ingo@3666: potentieller Dateninkonsistenzen sinnvoll sein. ingo@3666: ingo@3666: \textbf{IMPORTER\_SKIP\_GAUGES} ingo@3666: \\Wenn \textit{true} gesetzt ist werden keine Pegel- und Stammdaten bearbeitet. ingo@3666: ingo@3666: \textbf{IMPORTER\_SKIP\_ANNOTATIONS} ingo@3666: \\Wenn \textit{true} gesetzt ist werden keine Streckenfavoriten bearbeitet. ingo@3666: ingo@3666: \textbf{IMPORTER\_SKIP\_WST} ingo@3666: \\Wenn \textit{true} gesetzt ist werden keine WST Dateien bearbeitet. ingo@3666: ingo@3666: \textbf{IMPORTER\_SKIP\_PRFS} ingo@3666: \\Wenn \textit{true} gesetzt ist werden keine Querprofilspuren bearbeitet. ingo@3666: ingo@3666: \textbf{IMPORTER\_SKIP\_HYKS} ingo@3666: \\Wenn \textit{true} gesetzt ist werden keine HYK Dateien bearbeitet. ingo@3666: ingo@3666: \textbf{IMPORTER\_SKIP\_EXTRA\_WST} ingo@3666: \\Wenn \textit{true} gesetzt ist werden keine zusätzlichen Längsschnitte ingo@3666: bearbeitet. ingo@3666: ingo@3666: \textbf{IMPORTER\_SKIP\_FIXATIONS} ingo@3666: \\Wenn \textit{true} gesetzt ist werden keine Fixierungen bearbeitet. ingo@3666: ingo@3666: \textbf{IMPORTER\_SKIP\_OFFICIAL\_LINES} ingo@3666: \\Wenn \textit{true} gesetzt ist werden keine offiziellen Linien bearbeitet. ingo@3666: ingo@3666: \textbf{IMPORTER\_SKIP\_FLOOD\_WATER} ingo@3666: \\Wenn \textit{true} gesetzt ist werden keine Hochwassermarken bearbeitet. ingo@3666: ingo@3666: \textbf{IMPORTER\_SKIP\_FLOOD\_PROTECTION} ingo@3666: \\Wenn \textit{true} gesetzt ist werden keine Hochwasserschutzanlagen ingo@3666: bearbeitet. ingo@3666: ingo@3666: \textbf{IMPORTER\_SKIP\_BED\_HEIGHT\_SINGLE} ingo@3666: \\Wenn \textit{true} gesetzt ist werden keine mittleren Sohlhöhen (Peilungen) bearbeitet. ingo@3666: ingo@3666: \textbf{IMPORTER\_SKIP\_BED\_HEIGHT\_EPOCH} ingo@3666: \\Wenn \textit{true} gesetzt ist werden keine mittleren Sohlhöhen (Epochen) ingo@3666: bearbeitet. ingo@3666: ingo@3666: \textbf{IMPORTER\_SKIP\_SEDIMENT\_DENSITY} ingo@3666: \\Wenn \textit{true} gesetzt ist werden keine Dateien zur Sedimentdichte ingo@3666: bearbeitet. ingo@3666: ingo@3666: \textbf{IMPORTER\_SKIP\_MORPHOLOGICAL\_WIDTH} ingo@3666: \\Wenn \textit{true} gesetzt ist wird keine morphologische Breite bearbeitet. ingo@3666: ingo@3666: \textbf{IMPORTER\_SKIP\_FLOW\_VELOCITY} ingo@3666: \\Wenn \textit{true} gesetzt ist werden keine Fließgeschwindigkeiten bearbeitet. ingo@3666: ingo@3666: \textbf{IMPORTER\_SKIP\_SEDIMENT\_YIELD} ingo@3666: \\Wenn \textit{true} gesetzt ist werden keine Sedimentfrachten bearbeitet. ingo@3666: ingo@3666: \textbf{IMPORTER\_SKIP\_WATERLEVELS} ingo@3673: \\Wenn \textit{true} gesetzt ist werden keine Wasserspiegellagen für MINFO bearbeitet. ingo@3666: ingo@3666: \textbf{IMPORTER\_SKIP\_WATERLEVEL\_DIFFERENCES} ingo@3673: \\Wenn \textit{true} gesetzt ist werden keine Wasserspiegellagendifferenzen für ingo@3673: MINFO bearbeitet. ingo@3666: ingo@3666: \textbf{IMPORTER\_SKIP\_SQ\_RELATION} ingo@3666: \\Wenn \textit{true} gesetzt ist werden keine Daten für die Berechnungsart ingo@3666: SQ-Beziehung bearbeitet. ingo@3666: ingo@3666: ingo@3666: ingo@3666: \subsection{Fehler und Warnungen} ingo@3666: ingo@3666: \subsubsection{Fehler} ingo@3666: ingo@3666: \textbf{error while parsing gew} ingo@3666: \\Die GEW-Datei ist fehlerhaft oder konnte nicht geöffnet werden. ingo@3666: ingo@3666: \textbf{File 'XYZ' is broken!} ingo@3666: \\Die Datei XYZ ist inkonsistent und führt zu Fehlern. ingo@3666: ingo@3666: \textbf{Error while parsing file for morph. width.} ingo@3666: \\Beim Lesen der morphologischen Breite trat ein Fehler auf. ingo@3666: ingo@3666: \textbf{Error while storing flow velocity model.} ingo@3680: \\Beim Schreiben eines Fließgeschwindigkeitsmodells trat ein Fehler auf. ingo@3666: ingo@3666: \textbf{Error while storing flow velocity measurement.} ingo@3680: \\Beim Schreiben einer Fließgeschwindigkeitsmessung trat ein Fehler auf. ingo@3666: ingo@3666: \textbf{Error while storing sediment yield.} ingo@3666: \\Beim Schreiben einer Sedimentablagerung trat ein Fehler auf. ingo@3666: ingo@3666: \textbf{Error while storing waterlevel diff.} ingo@3673: \\Beim Schreiben einer Wasserspiegeldifferenz trat ein Fehler auf. ingo@3666: ingo@3666: \textbf{Error while storing sq relation.} ingo@3666: \\Beim Schreiben einer S(Q) Beziehung trat ein Fehler auf. ingo@3666: ingo@3666: \textbf{Error reading PRF file.} ingo@3666: \\Beim Lesen einer PRF-Datei trat ein Fehler auf. ingo@3666: ingo@3666: \textbf{Error closing PRF file.} ingo@3680: \\Beim Schließen einer PRF-Datei trat ein Fehler auf. ingo@3666: ingo@3666: \textbf{HYK 1: not enough elements in line \#} ingo@3666: \\Eine Zeile in einer HYK-Datei hat nicht genügend Elemente. ingo@3666: ingo@3666: \textbf{HYK 2: not enough elements in line \#} ingo@3666: \\Eine Zeile in einer HYK-Datei hat nicht genügend Elemente. ingo@3666: ingo@3666: \textbf{HYK 5: not enough elements in line \#} ingo@3666: \\Eine Zeile in einer HYK-Datei hat nicht genügend Elemente. ingo@3666: ingo@3666: \textbf{HYK 6: not enough elements in line \#} ingo@3666: \\Eine Zeile in einer HYK-Datei hat nicht genügend Elemente. ingo@3666: ingo@3666: \textbf{HYK: parsing num zones, bottom or top height failed in line \#} ingo@3666: \\Die Anzahl der Zonen oder Daten über die Zonen sind nicht korrekt. ingo@3666: ingo@3666: \textbf{HYK: HYK: number of flow zones mismatches in line \#} ingo@3666: \\Die Anzahl der Zonen oder Daten über die Zonen sind nicht korrekt. ingo@3666: ingo@3666: \textbf{HYK: cannot parse number in line \#} ingo@3666: \\Eine Zahl wurde erwartet. ingo@3666: ingo@3666: \textbf{HYK: Error reading file.} ingo@3666: \\Beim Lesen einer HYK-Datei trat ein Fehler auf. ingo@3666: ingo@3666: \textbf{HYK: Error closing file.} ingo@3680: \\Beim Schließen einer HYK-Datei trat ein Fehler auf. ingo@3666: ingo@3666: \subsubsection{Warnungen} ingo@3666: \textbf{annotation type file 'XYZ' is not readable.} ingo@3666: \\Die Datein XYZ kann nicht gelesen werden. ingo@3666: ingo@3666: \textbf{cannot parse annotation types file.} ingo@3666: \\Während der Verarbeitung der Annotationsdatei ist Fehler aufgetreten. ingo@3666: ingo@3666: \textbf{Cannot read directory.} ingo@3666: \\Verzeichnis konnte nicht gelesen werden. ingo@3666: ingo@3666: \textbf{no official lines wst file found} ingo@3666: \\Keine Datei mit amtlichen Linien gefunden. ingo@3666: ingo@3666: \textbf{cannot read fixations wst file directory} ingo@3666: \\Das Verzeichnis mit den Fixierungen kann nicht gelesen werden. ingo@3666: ingo@3666: \textbf{cannot read extra longitudinal wst file directory} ingo@3666: \\Das Verzeichnis mit den zusätzlichen Längsschnitten kann nicht gelesen werden. ingo@3666: ingo@3666: \textbf{cannot read gauges from 'XYZ'} ingo@3666: \\Die Pegelgültigkeiten können nicht gelesen werden. ingo@3666: ingo@3666: \textbf{HYK file 'XYZ' seems to be a duplicate.} ingo@3666: \\Die HYK-Datei wurde unter anderem Namen aber gleichen Inhalts bereits ingo@3666: gefunden. ingo@3666: ingo@3666: \textbf{PRF file 'XYZ' seems to be a duplicate.} ingo@3666: \\Die PRF-Datei wurde unter anderem Namen aber mit gleichem Inhalt bereits ingo@3666: gefunden. ingo@3666: ingo@3666: \textbf{Skip invalid SedimentYield: time interval or unit null!} ingo@3666: \\Eine Sedimentablagerung ist ungültig und wurde ausgelassen. ingo@3666: ingo@3666: \textbf{skip flow velocity model: No discharge zone specified.} ingo@3666: \\Da kein Abflussbereich angegeben wurde, wurde das Fließgeschwindigkeitsmodell ausgelassen. ingo@3666: ingo@3666: \textbf{skip invalid waterlevel - no unit set!} ingo@3666: \\Ein einheitenloser Wasserstand wurde ausgelassen. ingo@3666: ingo@3666: \textbf{Cannot parse time range.} ingo@3666: \\Das Zeitformat wurde nicht erkannt. ingo@3666: ingo@3666: \textbf{skip invalid data line \#} ingo@3666: \\Ungültige Datenzeile wurde ausgelassen. ingo@3666: ingo@3666: \textbf{Error while parsing sq relation row \#} ingo@3666: \\Eine Zeile in der S(Q)-Beziehung ist ungültig. ingo@3666: ingo@3666: \textbf{GLT: no gauge found in line \#} ingo@3666: \\In der GLT-Datei wurde ein Pegel erwartet, aber nicht gefunden. ingo@3666: ingo@3666: \textbf{GLT: line \# has not enough columns.} ingo@3673: \\Eine Zeile in der Pegelgültigkeitsdatei hat nicht genug Spalten. ingo@3666: ingo@3666: \textbf{Error while parsing flow velocity values.} ingo@3666: \\Invalide Datenzeile in einer Datei mit einer Fliessgeschwindigkeitsmessung. ingo@3666: ingo@3666: \textbf{skip invalid data line: \#} ingo@3666: \\Invalide Datenzeile in einer Datei mit einer Fliessgeschwindigkeitsmessung. ingo@3666: ingo@3666: \textbf{skip invalid waterlevel line: \#} ingo@3666: \\Invalide Datenzeile in einer Datei mit Wasserstandsdifferenzen. ingo@3666: ingo@3666: \textbf{Error while parsing value: \#} ingo@3666: \\Invalide Datenzeile in einer Datei mit Wasserstandsdifferenzen. ingo@3666: ingo@3666: \textbf{Error while parsing station: \#} ingo@3666: \\Invalide Datenzeile in einer Datei mit Wasserstandsdifferenzen. ingo@3666: ingo@3666: \textbf{skip invalid MainValue part: \#} ingo@3666: \\Invalide Datenzeile in einer Datei Fließgeschwindigkeitsmodellen. ingo@3666: ingo@3666: \textbf{skip invalid gauge part: \#} ingo@3666: \\Invalide Datenzeile in einer Datei Fließgeschwindigkeitsmodellen. ingo@3666: ingo@3669: \textbf{Error while parsing Q value: $$} ingo@3666: \\Invalide Datenzeile in einer Datei Fließgeschwindigkeitsmodellen. ingo@3666: ingo@3666: \textbf{skip invalid data line: \#} ingo@3666: \\Invalide Datenzeile in einer Datei Fließgeschwindigkeitsmodellen. ingo@3666: ingo@3666: \textbf{Error while parsing flow velocity values.} ingo@3666: \\Invalide Datenzeile in einer Datei Fließgeschwindigkeitsmodellen. ingo@3666: ingo@3666: \textbf{Error while parsing number from data row: \#} ingo@3673: \\In der eingelesenen Zeile konnte keine Zahl gefunden werden. ingo@3666: ingo@3666: \textbf{Unknown meta line: \#} ingo@3666: \\Invalide Datenzeile in einer Datei mit Sedimentdichten. ingo@3666: ingo@3666: \textbf{Error while parsing numbers in: \#} ingo@3666: \\Invalide Datenzeile in einer Datei mit Sedimentdichten. ingo@3666: ingo@3666: \textbf{skip invalid data line: \#} ingo@3666: \\Invalide Datenzeile in einer Datei mit Sedimentdichten. ingo@3666: ingo@3666: \textbf{Error while parsing numbers in \#} ingo@3666: \\Invalide Datenzeile in einer Datei mit Sedimentdichten. ingo@3666: ingo@3666: \textbf{STA file is empty} ingo@3666: \\Stammdatendatei ist leer oder hat zu wenige Zeilen. ingo@3666: ingo@3666: \textbf{STA file has not enough lines} ingo@3666: \\Stammdatendatei ist leer oder hat zu wenige Zeilen. ingo@3666: ingo@3666: \textbf{STA file is too short} ingo@3666: \\Stammdatendatei ist leer oder hat zu wenige Zeilen. ingo@3666: ingo@3666: \textbf{First line in STA file is too short.} ingo@3666: \\Die erste Zeile der Stammdaten ist zu kurz. ingo@3666: ingo@3666: \textbf{STA: second line is too short} ingo@3666: \\Die zweite Zeile ist zu kurz. ingo@3666: ingo@3666: \textbf{STA: parsing of the datum of the gauge failed} ingo@3666: \\Das Datum in der Stammdatendatei konnte nicht gelesen werden. ingo@3666: ingo@3666: \textbf{STA: 'XYZ' is not a valid long number.} ingo@3666: \\Die Pegelnummer ist invalide. ingo@3666: ingo@3666: \textbf{STA: Not enough columns for aeo and datum} ingo@3666: \\AEO und Pegelnullpunkt können nicht ermittelt werden. ingo@3666: ingo@3666: \textbf{STA: cannot parse aeo or datum.} ingo@3666: \\AEO oder Pegelnullpunkt sind invalide. ingo@3666: ingo@3666: \textbf{STA: value not parseable in line \#} ingo@3666: \\Wert ist nicht als Zahl zu interpretieren. ingo@3666: ingo@3669: \textbf{PRF: cannot open file $$} ingo@3666: \\Die PRF kann nicht geöffnet werden. ingo@3666: ingo@3669: \textbf{PRF: file is empty}\\ ingo@3669: \textbf{PRF: First line does not look like a PRF data pattern.}\\ ingo@3669: \textbf{PRF: premature EOF. Expected integer in line 2}\\ ingo@3669: \textbf{PRF: Expected $$ in line 2}\\ ingo@3669: \textbf{PRF: invalid integer in line 2}\\ ingo@3669: \textbf{PRF: premature EOF. Expected pattern for km extraction}\\ ingo@3669: \textbf{PRF: line 4 does not look like a PRF km extraction pattern.}\\ ingo@3669: \textbf{PRF: premature EOF. Expected skip row count.}\\ ingo@3669: \textbf{PRF: line 5 is not an positive integer.}\\ ingo@3666: \textbf{PRF: cannot extract km in line \#} ingo@3669: \\Das PRF-Format ist komplex. Bei oben genannten Fehlern sollten weitere ingo@3669: Information zur genaueren Analyse herangezogen werden. ingo@3666: ingo@3673: \textbf{cannot access WST file $FILE$} ingo@3666: \\Die WST-Datei konnte nicht gefunden werden. ingo@3666: ingo@3666: \textbf{Found an invalid row in the AT file.} ingo@3666: \\Eine Zeile in einer AT-Datei ist nicht korrekt. ingo@3666: ingo@3673: \textbf{AT: invalid number $XYZ$} ingo@3666: \\Eine Zahl wurde erwartet aber nicht gefunden. ingo@3666: ingo@3666: \textbf{Try to add Q range without waterlevel!} ingo@3666: \\Q-Bereich ohne Wasserstand gefunden. ingo@3666: ingo@3666: \textbf{Error while parsing Q range: \#} ingo@3666: \\Invalider Q-Bereich ingo@3666: ingo@3666: \textbf{skip invalid waterlevel line: \#} ingo@3666: \\Ungültige Wasserstandslinie ingo@3666: ingo@3666: \textbf{Error while parsing number values: \#} ingo@3666: \\Ungültige Zahlenwerte. ingo@3666: ingo@3666: \textbf{ANN: not enough columns in line \#} ingo@3666: \\Nicht genug Zeichenspalten in KM-Datei ingo@3666: ingo@3666: \textbf{ANN: invalid number in line \#} ingo@3666: \\Ungültige Zahl. ingo@3666: ingo@3666: \textbf{ANN: cannot parse 'Unterkante' in line \#} ingo@3666: \\Die Unterkante in einer KM-Datei konnte nicht gelesen werden. ingo@3666: ingo@3666: \textbf{ANN: cannot parse 'Unterkante' or 'Oberkante' in line \#} ingo@3666: \\Unter- oder Oberkannte liegen in einem falschen Format vor. ingo@3666: ingo@3666: \textbf{ANN: duplicated annotation 'XYZ' in line \#} ingo@3666: \\Ein Duplikat eines Streckenfavoriten wurde gefunden. ingo@3666: ingo@3666: \textbf{ANN: 'XYZ' is not a directory.} ingo@3666: \\Unterverzeichnis konnte nicht geöffnet werden. ingo@3666: ingo@3666: \textbf{ANN: cannot list directory 'XYZ'} ingo@3666: \\Unterverzeichnis konnte nicht durchsucht werden. ingo@3666: ingo@3666: \textbf{BHP: Meta line did not match any known type: \#} ingo@3666: \\Unbekannter Typ. ingo@3666: ingo@3666: \textbf{BHP: Error while parsing timeinterval!} ingo@3666: \\Ungültiges Zeitinterval. ingo@3666: ingo@3666: \textbf{BHP: Error while parsing year!} ingo@3666: \\Ungültige Jahresangabe. ingo@3666: ingo@3666: \textbf{BHP: Error while parsing sounding width!} ingo@3666: \\Unbekannte Peilungsbreite. ingo@3666: ingo@3666: \textbf{BHP: Error while parsing range!} ingo@3666: \\Bereichsangabe fehlerhaft. ingo@3666: ingo@3666: \textbf{MWP: Unknown meta line: \#} ingo@3666: \\Meta-Informationen ungültig. ingo@3666: ingo@3666: \textbf{MWP: skip invalid data line: \#} ingo@3666: \\Ungültige Datenzeile wurde übersprungen. ingo@3666: ingo@3666: \textbf{MWP: Error while parsing numbers in \#} ingo@3666: \\Falsche Zahlenformat. ingo@3666: ingo@3666: \textbf{ANNCLASS: rule has no name} ingo@3666: \\Klassifizierungsregel für Streckenfavoriten hat keinen Namen. ingo@3666: ingo@3666: \textbf{ANNCLASS: pattern has no 'pattern' attribute.} ingo@3666: \\Klassifizierungsmuster für Streckenfavoriten hat kein Muster. ingo@3666: ingo@3666: \textbf{ANNCLASS: pattern has unknown type 'XYZ'} ingo@3666: \\Klassifizierungsmuster für Streckenfavoriten konnte keinem Typ zugeordnet werden. ingo@3666: ingo@3666: \textbf{ANNCLASS: pattern 'XYZ' is invalid.} ingo@3666: \\Klassifizierungsmuster für Streckenfavoriten ist ungültig. ingo@3666: ingo@3666: \textbf{BSP: Error while parsing data row.} ingo@3666: \\Ungültige Datenzeile. ingo@3666: ingo@3666: \textbf{SYP: Unknown meta line: \#} ingo@3666: \\Ungültige Metadatenzeile. ingo@3666: ingo@3666: \textbf{SYP: skip invalid data line \#} ingo@3666: \\Ungültige Datenzeile wurde übersprungen. ingo@3666: ingo@3666: \textbf{SYP: Error while parsing numbers in \#} ingo@3666: \\Ungültige Zahlenformatierung. ingo@3666: ingo@3669: \textbf{SYP: Unknown time interval string 'XYZ'} ingo@3666: \\Falsches Datumformat. ingo@3666: ingo@3669: \textbf{SYP: Error while parsing years 'XYZ'} ingo@3666: \\Falsches Jahreszahlformat. ingo@3666: ingo@3669: \textbf{SYP: Error while parsing ranges of 'XYZ'} ingo@3666: \\Bereichsangaben fehlerhaft. ingo@3666: ingo@3669: \textbf{SYP: Unknown grain fraction 'XYZ'} ingo@3666: \\Unbekannte Kornfraktion. ingo@3666: ingo@3666: \textbf{WST: invalid number.} ingo@3666: \\Ungültige Zahl. ingo@3666: ingo@3680: \textbf{WST: km $km$ ($$) found more than once. $->$ ignored.} ingo@3666: \\Ein Kilometer ist doppelt in einer WST-Datei enthalten. ingo@3666: ingo@3666: \textbf{HYK: zone coordinates swapped in line \#} ingo@3666: \\Fließzonenkordinaten wurden in umgekehrter Reihenfolge angeben. ingo@3666: ingo@3666: \textbf{BHS: Skip invalid file 'XYZ'} ingo@3666: \\Die Inhalte der Datei sind ungültig. ingo@3666: ingo@3666: \textbf{ISQ: Unable to store sq relation value.} ingo@3666: \\S(Q) Beziehung konnte nicht gespeichert werden. ingo@3666: ingo@3666: \textbf{ISQ: Cannot determine sq relation without time interval.} ingo@3666: \\Einer S(Q)-Beziehung ist keine zeitliche Gültigkeit zugeordnet. ingo@3666: ingo@3666: \textbf{IWD: skip invalid waterlevel difference - no unit set!} ingo@3666: \\Wasserstandsdifferenz hat keine Einheit. ingo@3666: ingo@3666: \textbf{BHE: Skip file - invalid current elevation model.} ingo@3666: \\Höhenmodell ungültig. ingo@3666: ingo@3666: \textbf{BHE: Skip file - invalid time range.} ingo@3666: \\Zeitbereich ungültig. ingo@3666: ingo@3666: \textbf{BHE: Skip file - invalid km range.} ingo@3666: \\Kilometerbereich ungültig. ingo@3666: ingo@3666: ingo@3666: \subsection{Hinweise zum Betrieb} ingo@3666: Aufgrund des hohen Speicherverbrauchs des Importers wird empfohlen, der JVM ingo@3666: mindestens 8 GiB Hauptspeicher zuzuordnen. Dies kann beim Starten des Java ingo@3666: Prozesses mittels folgendem Parameter '-Xmx8192m' getan werden. Das ingo@3666: Shellskript zum Starten des Importers setzt diesen Wert standardmäßig. ingo@3666: Besonders speicherintensiv ist der Import der HYKs und der PRFs. ingo@3666: Hier ist es unter Umständen empfehlenswert, diese in zwei oder drei ingo@3666: Schritten zu importieren. Zuerst die sonstigen hydrologischen Daten importieren; ingo@3666: anschließend einen Import-Vorgang ausschließlich für HYKs starten; anschließend ingo@3666: einen Import-Vorgang für PRFs starten. Siehe Kapitel \ref{configuration} für ingo@3666: weitere Informationen zum Aktivieren/Deaktivieren einzelner Dateitypen beim ingo@3666: Import. ingo@3666: ingo@3666: ingo@3666: \subsection{Starten des Fachdaten Importers} ingo@3667: \label{start-hydr} ingo@3666: Der Fachdaten Importer wird mit Hilfe eines Shellskripts von einer Konsole ingo@3673: gestartet. Dazu führen folgenden Befehl aus:\\ ingo@3666: ingo@3666: \begin{lstlisting} ingo@3673: contrib/run_hydr_morph.sh ingo@3666: \end{lstlisting} ingo@3673: ingo@3673: Nachdem der Prompt der Konsole zurückkehrt, ist der Import abgeschlossen oder es ingo@3673: ist ein Fehler aufgetreten. Weitere Informationen entnehmen Sie der Log-Datei. ingo@3673: