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: