ingo@3661: \section{Geodatenimport} ingo@3661: ingo@3661: Der Geodaten Importer ist ein in Python geschriebenes Kommandozeilen Tool zum ingo@3661: Import von Shapefiles in eine Datenbank. Zum Lesen der Shapefiles und zum ingo@3661: Schreiben der Geodaten in die Datenbank wird GDAL verwendet. Zum Import in eine ingo@3661: Oracle Datenbank ist es erforderlich, dass GDAL und GDAL Python Bindungs mit ingo@3661: Oracle Unterstützung installiert sind. Weitere Details hierzu befinden sich im ingo@3661: Kapitel \ref{Systemanforderungen} und \ref{Installationsanleitung}. ingo@3661: ingo@3661: Der Importer kann mit einem Shellscript von der Kommandozeilen 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@3661: importiert werden sollen. Für jede Klasse gibt es hierzu einen speziellen ingo@3661: Parser, der die speziellen Attribute eines Shapefiles liest und in die ent- ingo@3661: sprechende Relation der Datenbank schreibt. Die Parser sind speziell auf das ingo@3661: Dateisystem der BfG ausgerichtet. So wird z.B. 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: 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: ingo@3661: \textbf{INFO: Found 3 unsupported features} ingo@3661: \\Gibt die Anzahl der Features an, die aufgrund ihres Datentyps nicht importiert ingo@3661: werden konnten. Z.B: es werden Linien erwartet, im Shapefile sind jedoch ingo@3661: Polygone enthalten.\\ ingo@3661: 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@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@3661: 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 \\ ingo@3661: Attribute & name, kind \\ 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 \\ ingo@3661: Geometrie & LINESTRING \\ ingo@3661: Attribute & TYP, Bauart, Name, name \\ 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{Linien} ingo@3661: \hspace{1cm} ingo@3661: \begin{tabular}[t]{ll} ingo@3661: Pfad & Geodaesie/Linien \\ ingo@3661: Geometrie & LINESTRING, MULTILINESTRING \\ ingo@3661: Attribute & name, TYP, Z \\ ingo@3661: ingo@3661: Anmerkung & Wenn kein Attribut 'TYP' definiert ist, wird standardmäßig der Wert \\ ingo@3661: & 'DAMM' angenommen. Fehlt ein Attribut 'Z' wird als '9999' als Höhe \\ ingo@3661: & angenommen. \\ 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: ingo@3661: \subsection{Systemanforderungen} ingo@3661: \label{Systemanforderungen} ingo@3661: \begin{itemize} ingo@3661: \item Oracle Datenbank inkl. Schema für FLYS ingo@3661: \item GDAL Binding für Python mit Oracle Support ingo@3661: \item ogr2ogr ingo@3661: \item Python $>=$ 2.6 ingo@3661: \end{itemize} ingo@3661: ingo@3661: ingo@3661: \subsection{Installationsanleitung} ingo@3661: \label{Installationsanleitung} ingo@3661: \begin{itemize} ingo@3661: \item \todo GDAL Binding installieren ingo@3661: \item \todo Python installieren ingo@3661: \item \todo ogr2ogr installieren ingo@3661: \end{itemize} ingo@3661: ingo@3661: ingo@3661: \subsection{Konfiguration} ingo@3661: \label{Konfiguration} ingo@3661: Der Geodaten Importer kann über die Datei `contrib/shpimporter/run.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: ingo@3661: \textbf{RIVER\_ID} ingo@3661: \\Die Datenbank ID des zu importierenden Gewässers. ingo@3661: ingo@3661: \textbf{TARGET\_SRS} ingo@3661: \\Das EPSG Referenzsystem in das die Geodaten beim Import projeziert werden ingo@3661: sollen. 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: 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\_LINES} ingo@3661: \\Bei gesetztem Wert `1` werden keine Linien 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: ingo@3661: \textbf{SKIP\_HWS} ingo@3661: \\Bei gesetztem Wert `1` werden kein Hochwasserschutzanlagen importiert. ingo@3661: ingo@3661: \textbf{SKIP\_GAUGE\_LOCATION} ingo@3661: \\Bei gesetztem Wert `1` werden keine Pegelort importiert. ingo@3661: ingo@3661: \textbf{SKIP\_CATCHMENTS} ingo@3661: \\Bei gesetztem Wert `1` werden keine Einzugsgebiet importiert. ingo@3661: ingo@3661: \textbf{SKIP\_UESG} ingo@3661: \\Bei gesetztem Wert `1` werden keine Überschwemmungsflächen importiert. ingo@3661: ingo@3661: 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@3661: gestartet. Dazu wechseln Sie auf der Konsole in das Verzeichnis \todo und ingo@3661: führen Sie folgenden Befehl aus:\\ ingo@3661: ingo@3661: \begin{lstlisting} ingo@3661: sh contrib/shpimporter/run.sh > import.log ingo@3661: \end{lstlisting} ingo@3661: Der Importer wird nun gestartet. Sämtliche Log-Ausgaben werden in die Datei ingo@3661: $import.log$ geschrieben.