ingo@3661: \section{Geodatenimport}
ingo@3661: 
aheinecke@5007: Der Geodaten Importer ist ein in der Programmiersprache Python
aheinecke@5007: geschriebenes Kommandozeilen Werkzeug zum Import von Shapefiles in
aheinecke@5007: eine Datenbank.
aheinecke@5007: Zum Lesen der Shapefiles und zum schreiben der Geodaten
aheinecke@5007: in die Datenbank wird die GDAL Bibliothek verwendet.
aheinecke@5007: Um Daten in eine Oracle Datenbank zu importieren ist es n�tig, dass
aheinecke@5007: GDAL und GDAL Python Bindungs mit Oracle Unterst�tzung installiert
aheinecke@5007: sind. Bei der Verwendung von PostgreSQL entf�llt dieser Schritt.
aheinecke@5007: Weitere Details hierzu befinden sich im
ingo@3661: Kapitel \ref{Systemanforderungen} und \ref{Installationsanleitung}.
ingo@3661: 
ingo@3676: Der Importer kann mit einem Shellscript von der Kommandozeile gestartet werden
ingo@3661: (siehe Kapitel \ref{Starten des Geodaten Importers}). Nach dem Start wird anhand der
ingo@3661: Konfiguration festgestellt, welche Klassen von Shapefiles aus dem Dateisystem
ingo@3676: importiert werden sollen. F�r jede Klasse gibt es einen speziellen
ingo@3680: Parser, der die speziellen Attribute eines Shapefiles liest und in die entsprechende
ingo@3680: Relation der Datenbank schreibt. Die Parser sind speziell auf das
aheinecke@5007: Dateisystem der BfG ausgerichtet. So wird beispielsweise erwartet, dass die Shapefiles der
ingo@3661: Gew�sserachse im Ordner $Geodaesie/Flussachse+km$ liegen. Weitere Informationen zu
ingo@3661: den einzelnen Parsern sind dem n�chsten Kapitel \ref{Beschreibung der Parser} zu
ingo@3661: entnehmen. Der Erfolg oder Misserfolg eines Shape-Imports wird je nach
ingo@3661: Konfiguration im Logfile vermerkt. Folgende Eintr�ge k�nnen dem Logfile
ingo@3661: entnommen werden:
ingo@3661: 
aheinecke@4971: %TODO etwas zum srs schreiben.
aheinecke@4971: 
ingo@3661: \textbf{INFO: Inserted 4 features}
ingo@3661: \\Gibt die Anzahl der erfolgreich importierten Features an.\\
ingo@3661: 
ingo@3661: \textbf{INFO: Failed to create 2 features}
ingo@3661: \\Gibt die Anzahl der Features an, die nicht importiert werden konnten.\\
ingo@3661: 
aheinecke@5007: \textbf{INFO: Found 3 unsupported features of type: wbkMultiLineString}
ingo@3661: \\Gibt die Anzahl der Features an, die aufgrund ihres Datentyps nicht importiert
aheinecke@5007: werden konnten. Wenn etwa Punkte erwartet wurden aber sich im Shapefile
aheinecke@5007: Polygone befanden.\\
aheinecke@5007: 
aheinecke@5007: \textbf{INFO: Did not import values from fields: TYP ID GRUENDUNG BHW}
aheinecke@5007: \\Manche Importer versuchen neben der Geographischen Information weitere
aheinecke@5007: Felder in die Datenbank einzulesen. Um festzustellen ob ein Feld aufgrund
aheinecke@5007: von Tippfehlern oder unterschiedlicher Schreibweise nicht importiert wurde,
aheinecke@5007: gibt diese Information Auskunft dar�ber welche Felder aus der Shape Datei
aheinecke@5007: nicht verwendet wurden.\\
ingo@3661: 
ingo@3680: \textbf{ERROR: No source SRS given! No transformation possible!}
ingo@3680: \\Das Shapefile enth�lt keine Information, in welcher Projektion die Geometrien
ingo@3680: vorliegen. Es findet keine Transformation in die Zielprojektion statt. Bitte
ingo@3680: beachten Sie, dass FLYS diese Geometrien sp�ter ggf nicht korrekt darstellen
ingo@3680: kann.
ingo@3680: 
ingo@3661: \textbf{ERROR: Unable to insert feature: DETAIL}
ingo@3661: \\Beim Lesen der Attribute eines Features ist ein Fehler aufgetreten.
ingo@3661: Das Feature konnte nicht in die Datenbank geschrieben werden.\\
ingo@3661: 
ingo@3661: \textbf{ERROR: Exception while committing transaction}
ingo@3661: \\Beim Abschluss des Schreib-Vorgangs in die Datenbank ist ein unerwarteter
ingo@3661: Fehler aufgetreten. Die Features des Shapes sind nicht importiert worden.\\
ingo@3661: 
ingo@3671: \textbf{ERROR 1: ORA-01017: invalid username/password; logon denied}
ingo@3671: \\Es konnte keine Verbindung zur Oracle Datenbank hergestellt werden. Pr�fen Sie
ingo@3671: die Verbindungseinstellungen.
ingo@3671: 
ingo@3661: Damit die Geodaten eines Shapes sp�ter eindeutig in der Datenbank identifiziert
ingo@3661: werden k�nnen, wird f�r jede Geometrie der Pfad des Shapes im Dateisystem in
ingo@3661: einer Spalte der Datenbank gespeichert. Anwendungen, die auf der Datenbank
ingo@3661: aufbauen, k�nnen die Geodaten eines Shapefiles sp�ter anhand dieses Merkmals
ingo@3661: gruppieren und anzeigen.
ingo@3661: 
ingo@3661: 
ingo@3661: \subsection{Beschreibung der Parser}
ingo@3661: \label{Beschreibung der Parser}
ingo@3661: 
ingo@3661: Wie im letzten Kapitel beschrieben, sind die Parser speziell an das Dateisystem
ingo@3676: der BfG ausgerichtet. Im Folgenden werden zu jedem Parser folgende Informationen
ingo@3661: angegeben:
ingo@3661: 
ingo@3661: \textbf{Pfad}
ingo@3661: \\Der Pfad, in dem die Shapefiles im Dateisystem abgelegt sein m�ssen ausgehend
ingo@3661: vom Gew�sser Verzeichnis.
ingo@3661: 
ingo@3661: \textbf{Geometrie}
ingo@3661: \\Der Geometrie Typ, der f�r diese Klasse von Shapefiles erwartet wird.
ingo@3661: 
ingo@3661: \textbf{Attribute}
ingo@3661: \\Eine Liste der Attribute, die vom Parser aus dem Shape gelesen werden.
ingo@3661: 
ingo@3661: 
ingo@3661: \subsubsection{Achsen}
ingo@3661: \hspace{1cm}
ingo@3661: \begin{tabular}[t]{ll}
ingo@3661: Pfad        &   Geodaesie/Flussachse+km \\
ingo@3661: Geometrie   &   LINESTRING \\
ingo@3661: Attribute   &   name, kind \\
ingo@3661: \end{tabular}
ingo@3661: 
ingo@3661: 
ingo@3661: \subsubsection{Hydrologische Grenzen}
ingo@3661: \hspace{1cm}
ingo@3661: \begin{tabular}[t]{ll}
ingo@3661: Pfad        &   Hydrologie/Hydr.Grenzen/Linien \\
ingo@3661: Geometrie   &   LINESTRING, POLYGON \\
aheinecke@5007: Attribute   &   name, kind, sectie, sobek \\
ingo@3661: \end{tabular}
ingo@3661: 
ingo@3661: \subsubsection{Bauwerke}
ingo@3661: \hspace{1cm}
ingo@3661: \begin{tabular}[t]{ll}
ingo@3661: Pfad        &   Geodaesie/Bauwerke \\
ingo@3661: Geometrie   &   LINESTRING \\
ingo@3661: Attribute   &   name, Name, KWNAAM \\
ingo@3661: \end{tabular}
ingo@3661: 
ingo@3661: 
ingo@3661: \subsubsection{Einzugsgebiete}
ingo@3661: \hspace{1cm}
ingo@3661: \begin{tabular}[t]{ll}
ingo@3661: Pfad        &   Hydrologie/Einzugsgebiet \\
ingo@3661: Geometrie   &   POLYGON, MULTIPOLYGON \\
ingo@3661: Attribute   &   name, Name, AREA, area \\
ingo@3661: \end{tabular}
ingo@3661: 
ingo@3661: 
ingo@3661: \subsubsection{Querprofilspuren}
ingo@3661: \hspace{1cm}
ingo@3661: \begin{tabular}[t]{ll}
ingo@3661: Pfad        &   Geodaesie/Querprofile \\
ingo@3661: Geometrie   &   LINESTRING \\
ingo@3661: Attribute   &   KILOMETER, KM, STATION, ELEVATION \\
ingo@3661: \end{tabular}
ingo@3661: 
ingo@3661: 
ingo@3661: \subsubsection{Festpunkte}
ingo@3661: \hspace{1cm}
ingo@3661: \begin{tabular}[t]{ll}
ingo@3661: Pfad        &   Geodaesie/Festpunkte \\
ingo@3661: Geometrie   &   POINT \\
ingo@3661: Attribute   &   name, KM, ELBE\_KM, X, Y, HPGP \\
ingo@3661: \end{tabular}
ingo@3661: 
ingo@3661: 
ingo@3661: \subsubsection{Talaue}
ingo@3661: \hspace{1cm}
ingo@3661: \begin{tabular}[t]{ll}
ingo@3661: Pfad        &   Hydrologie/Hydr.Grenzen \\
ingo@3661: Geometrie   &   POLYGON, MULTIPOLYGON \\
ingo@3661: Attribute   &   name \\
ingo@3661: \end{tabular}
ingo@3661: 
ingo@3661: 
ingo@3661: \subsubsection{Pegelstationen}
ingo@3661: \hspace{1cm}
ingo@3661: \begin{tabular}[t]{ll}
ingo@3661: Pfad        &   Hydrologie/Streckendaten \\
ingo@3661: Geometrie   &   POINT \\
ingo@3661: Attribute   &   Name, name, MPNAAM \\
ingo@3661: \end{tabular}
ingo@3661: 
ingo@3661: 
ingo@3661: \subsubsection{Hochwasserschutzanlagen}
ingo@3661: \hspace{1cm}
ingo@3661: \begin{tabular}[t]{ll}
ingo@3661: Pfad        &   Hydrologie/HW-Schutzanlagen \\
aheinecke@5007: Geometrie   &   LINESTRING, POINT \\
aheinecke@5007: Attribute   &   name, source, description, status\_date, agency,
aheinecke@5007:                 dike\_km, range, z\_target, rated\_level, z \\
ingo@3661: \end{tabular}
ingo@3661: 
ingo@3661: 
ingo@3661: \subsubsection{Kilometrierung}
ingo@3661: \hspace{1cm}
ingo@3661: \begin{tabular}[t]{ll}
ingo@3661: Pfad        &   Geodaesie/Flussachse+km \\
ingo@3661: Geometrie   &   POINT \\
ingo@3661: Attribute   &   name, km, KM \\
ingo@3661: \end{tabular}
ingo@3661: 
ingo@3661: 
ingo@3661: \subsubsection{�berschwemmungsfl�che}
ingo@3661: \hspace{1cm}
ingo@3661: \begin{tabular}[t]{ll}
ingo@3661: Pfad        &   Hydrologie/UeSG/Berechnung \\
ingo@3661: Geometrie   &   POLYGON, MULTIPOLYGON \\
ingo@3661: Attribut    &   name, diff, count, area, perimeter \\
ingo@3661: \end{tabular}
ingo@3661: 
ingo@3661: \subsection{Konfiguration}
ingo@3661: \label{Konfiguration}
ingo@3681: Der Geodaten Importer kann �ber die Datei \textit{contrib/run\_geo.sh}
ingo@3661: konfiguriert werden. �ffnen Sie die Datei mit einem Texteditor Ihrer Wahl.
ingo@3661: In den Zeilen 4-9 werden Optionen definiert, die zwangsl�ufig angepasst
ingo@3661: werden m�ssen:
ingo@3661: 
ingo@3661: \textbf{RIVER\_PATH}
ingo@3661: \\Der Pfad zum Gew�sser im Dateisystem.
ingo@3661: 
aheinecke@4971: \textbf{RIVER\_NAME}
aheinecke@4971: \\Der Datenbank Name des zu importierenden Gew�ssers. Wird dieser Parameter
aheinecke@4971: nicht �bergeben werden die Ordnernamen im mit dem Parameter RIVER\_PATH
aheinecke@4971: angegebenen Verzeichnis als Flussnamen interpretiert und es wird versucht
aheinecke@4971: diese zu Importieren.
ingo@3661: 
ingo@3661: \textbf{HOST}
ingo@3661: \\Der Host der Datenbank.
ingo@3661: 
ingo@3661: \textbf{USER}
ingo@3661: \\Der Nutzer, der zum Verbinden zur Datenbank verwendet wird.
ingo@3661: 
ingo@3661: \textbf{PASS}
ingo@3661: \\Das Passwort f�r USER zum Verbinden zur Datenbank.
ingo@3661: 
ingo@3661: In den Zeilen 12-23 werden weitere Optionen definiert, die bei Bedarf angepasst
ingo@3661: werden k�nnen. Falls nicht anders angegeben, k�nnen die Optionen mit den Werten
ingo@3661: `0` und `1` belegt werden.
ingo@3661: 
ingo@3661: \textbf{VERBOSE}
ingo@3661: \\Dieser Wert gibt die Granularit�t der Log-Ausgaben w�hrend des
ingo@3661: Imports an. Je h�her der Wert, desto mehr Informationen werden
ingo@3661: in das Logfile geschrieben. Aktuell sind die Werte `0`, `1` und
ingo@3661: `2` definiert. Wird der Wert `0` gesetzt, werden nur Fehler und
ingo@3661: Warnungen in das Logfile geschrieben. Bei `1` werden neben
ingo@3661: Fehlern und Warnungen auch Infos in das Logfile geschrieben. Bei
ingo@3661: `2` werden s�mtliche Ausgaben des Programms geschrieben. Dieser
ingo@3661: Modus ist haupts�chlich f�r die Entwicklung gedacht.
ingo@3661: 
aheinecke@4871: \textbf{OGR\_CONNECTION}
aheinecke@4871: \\Hiermit kann direkt ein beliebiger Verbindungs string angegegeben
aheinecke@4871: werden, welcher die host, user und passwort werde �berschreibt.
aheinecke@4871: Dieser Option wird direkt an die OGR Bibliothek weitergegeben und erm�glicht
aheinecke@4871: verbesserte Tests und Entwicklung mit verschiedenen Daten Backends.
aheinecke@4871: 
ingo@3661: \textbf{SKIP\_AXIS}
ingo@3661: \\Bei gesetztem Wert `1` werden keine Flussachsen importiert.
ingo@3661: 
ingo@3661: \textbf{SKIP\_KMS}
ingo@3661: \\Bei gesetztem Wert `1` werden keine Kilometrierungen importiert.
ingo@3661: 
ingo@3661: \textbf{SKIP\_CROSSSECTIONS}
ingo@3661: \\Bei gesetztem Wert `1` werden keine Querprofilespuren importiert.
ingo@3661: 
ingo@3661: \textbf{SKIP\_FIXPOINTS}
ingo@3661: \\Bei gesetztem Wert `1` werden keine Festpunkte importiert.
ingo@3661: 
ingo@3661: \textbf{SKIP\_BUILDINGS}
ingo@3661: \\Bei gesetztem Wert `1` werden keine Bauwerke importiert.
ingo@3661: 
ingo@3661: \textbf{SKIP\_FLOODPLAINS}
ingo@3661: \\Bei gesetztem Wert `1` werden keine Talauen importiert.
ingo@3661: 
ingo@3661: \textbf{SKIP\_HYDR\_BOUNDARIES}
ingo@3661: \\Bei gesetztem Wert `1` werden keine hydrologischen Grenzen importiert.
ingo@3661: 
aheinecke@4880: \textbf{SKIP\_HWS\_LINES}
aheinecke@4880: \\Bei gesetztem Wert `1` werden kein Hochwasserschutz Liniendaten importiert.
aheinecke@4880: 
aheinecke@4880: \textbf{SKIP\_HWS\_POINTS}
aheinecke@4880: \\Bei gesetztem Wert `1` werden kein Hochwasserschutz Punktdaten importiert.
ingo@3661: 
ingo@3661: \textbf{SKIP\_CATCHMENTS}
ingo@3676: \\Bei gesetztem Wert `1` werden keine Einzugsgebiete importiert.
ingo@3661: 
ingo@3661: \textbf{SKIP\_UESG}
ingo@3661: \\Bei gesetztem Wert `1` werden keine �berschwemmungsfl�chen importiert.
ingo@3661: 
aheinecke@4971: \textbf{SKIP\_DGM}
aheinecke@4971: \\Bei gesetztem Wert `1` werden keine Informationen �ber Digitale Gel�ndemodelle importiert.
aheinecke@4971: 
aheinecke@5353: \textbf{SKIP\_JETTIES}
aheinecke@5353: \\Bei gesetztem Wert `1` werden keine Informationen �ber Buhnen importiert.
ingo@3661: 
aheinecke@5545: \textbf{SKIP\_FLOODMARKS}
aheinecke@5545: \\Bei gesetztem Wert `1` werden keine Informationen �ber HW-Marken importiert.
aheinecke@5545: 
ingo@3661: \subsection{Starten des Geodaten Importers}
ingo@3661: \label{Starten des Geodaten Importers}
ingo@3661: Der Geodaten Importer wird mittels eines Shellskripts von einer Konsole
ingo@3676: gestartet. Dazu f�hren Sie folgenden Befehl aus:\\
ingo@3661: 
ingo@3661: \begin{lstlisting}
ingo@3676:     sh contrib/run_geo.sh > geo-import.log
ingo@3661: \end{lstlisting}
ingo@3676: 
ingo@3661: Der Importer wird nun gestartet. S�mtliche Log-Ausgaben werden in die Datei
ingo@3676: $geo-import.log$ geschrieben.
ingo@3676: 
ingo@3676: \textbf{Hinweis}
ingo@3676: \\Bitte beachten Sie, dass der Geodaten Importer aufgrund der eingesetzten
ingo@3676: Technologien derzeit nicht in der Lage ist, lesend auf die Oracle Datenbank
ingo@3676: zuzugreifen. Entsprechend kann beim Import nicht festgestellt werden, ob sich
ingo@3676: Shapefiles bereits in der Datenbank befinden, oder nicht. Ein erneuter Import
ingo@3676: Vorgang der Geodaten w�rde also dazu f�hren, dass Geometrien doppelt in der
ingo@3676: Datenbank abgelegt werden.
ingo@3676: